From f9ea341230e277a8de96bb83641ccb6506c64cad Mon Sep 17 00:00:00 2001 From: Pierre-Emmanuel Cornilleau Date: Wed, 9 Apr 2025 18:58:33 +0200 Subject: [PATCH 1/5] Tezlink/Node: move contract type to encoding lib --- etherlink/bin_node/lib_dev/tezlink/tezos_services.ml | 4 +--- etherlink/bin_node/lib_dev/tezlink/tezos_types.ml | 7 +++++++ etherlink/bin_node/lib_dev/tezlink/tezos_types.mli | 11 +++++++++++ 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/etherlink/bin_node/lib_dev/tezlink/tezos_services.ml b/etherlink/bin_node/lib_dev/tezlink/tezos_services.ml index 7f8ad776c998..1c81fb32f170 100644 --- a/etherlink/bin_node/lib_dev/tezlink/tezos_services.ml +++ b/etherlink/bin_node/lib_dev/tezlink/tezos_services.ml @@ -99,8 +99,6 @@ type tezlink_rpc_context = { chain : Tezos_shell_services.Chain_services.chain; } -type contract = Imported_protocol.Alpha_context.Contract.t - (** Builds a [tezlink_rpc_context] from paths parameters. *) let make_env (chain : Tezos_shell_services.Chain_services.chain) (block : Tezos_shell_services.Block_services.block) : @@ -203,7 +201,7 @@ module Imported_services = struct let balance : ( [`GET], tezlink_rpc_context, - tezlink_rpc_context * contract, + tezlink_rpc_context * Tezos_types.Contract.t, unit, unit, Protocol_types.Tez.t ) diff --git a/etherlink/bin_node/lib_dev/tezlink/tezos_types.ml b/etherlink/bin_node/lib_dev/tezlink/tezos_types.ml index 2834d2252a47..2963b29639db 100644 --- a/etherlink/bin_node/lib_dev/tezlink/tezos_types.ml +++ b/etherlink/bin_node/lib_dev/tezlink/tezos_types.ml @@ -2,6 +2,7 @@ (* *) (* SPDX-License-Identifier: MIT *) (* Copyright (c) 2025 Functori *) +(* Copyright (c) 2025 Nomadic Labs *) (* *) (*****************************************************************************) @@ -45,3 +46,9 @@ let convert_using_serialization ~name ~dst ~src value = tzfail @@ Serialization_for_conversion (name, Format.asprintf "%a" Data_encoding.Binary.pp_read_error e)) + +module Contract = struct + type t = Tezlink_imports.Alpha_context.Contract.t + + let encoding = Tezlink_imports.Alpha_context.Contract.encoding +end diff --git a/etherlink/bin_node/lib_dev/tezlink/tezos_types.mli b/etherlink/bin_node/lib_dev/tezlink/tezos_types.mli index 243009e432d1..425fabfaee9f 100644 --- a/etherlink/bin_node/lib_dev/tezlink/tezos_types.mli +++ b/etherlink/bin_node/lib_dev/tezlink/tezos_types.mli @@ -2,6 +2,7 @@ (* *) (* SPDX-License-Identifier: MIT *) (* Copyright (c) 2025 Functori *) +(* Copyright (c) 2025 Nomadic Labs *) (* *) (*****************************************************************************) @@ -28,3 +29,13 @@ val convert_using_serialization : src:'b Data_encoding.t -> 'b -> 'a tzresult + +(** Imports the type Contract.t from Alpha_context. Not everything is imported + from Alpha_context.Contract as most of it require a context, which we + can't provide. + *) +module Contract : sig + type t = Tezlink_imports.Alpha_context.Contract.t + + val encoding : t Data_encoding.t +end -- GitLab From d07367b6268b64e940a86001521e83a2e8ee3465 Mon Sep 17 00:00:00 2001 From: Pierre-Emmanuel Cornilleau Date: Wed, 9 Apr 2025 19:16:15 +0200 Subject: [PATCH 2/5] Tezlink/Node: import Tez module --- etherlink/bin_node/lib_dev/tezlink/tezos_types.ml | 2 ++ etherlink/bin_node/lib_dev/tezlink/tezos_types.mli | 2 ++ 2 files changed, 4 insertions(+) diff --git a/etherlink/bin_node/lib_dev/tezlink/tezos_types.ml b/etherlink/bin_node/lib_dev/tezlink/tezos_types.ml index 2963b29639db..9fa6eecde15c 100644 --- a/etherlink/bin_node/lib_dev/tezlink/tezos_types.ml +++ b/etherlink/bin_node/lib_dev/tezlink/tezos_types.ml @@ -52,3 +52,5 @@ module Contract = struct let encoding = Tezlink_imports.Alpha_context.Contract.encoding end + +module Tez = Tezlink_imports.Alpha_context.Tez diff --git a/etherlink/bin_node/lib_dev/tezlink/tezos_types.mli b/etherlink/bin_node/lib_dev/tezlink/tezos_types.mli index 425fabfaee9f..227364d0b808 100644 --- a/etherlink/bin_node/lib_dev/tezlink/tezos_types.mli +++ b/etherlink/bin_node/lib_dev/tezlink/tezos_types.mli @@ -39,3 +39,5 @@ module Contract : sig val encoding : t Data_encoding.t end + +module Tez = Tezlink_imports.Alpha_context.Tez -- GitLab From bdb31c8b0ad285f3a089b4aaed3951208516f69f Mon Sep 17 00:00:00 2001 From: Pierre-Emmanuel Cornilleau Date: Wed, 9 Apr 2025 14:36:04 +0200 Subject: [PATCH 3/5] Tezlink/Node: balance backend --- .../lib_dev/tezlink/tezlink_backend_sig.ml | 5 +++ .../bin_node/lib_dev/tezlink_services_impl.ml | 37 +++++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/etherlink/bin_node/lib_dev/tezlink/tezlink_backend_sig.ml b/etherlink/bin_node/lib_dev/tezlink/tezlink_backend_sig.ml index 3d25fd3bf5f2..e5c0190dc2d2 100644 --- a/etherlink/bin_node/lib_dev/tezlink/tezlink_backend_sig.ml +++ b/etherlink/bin_node/lib_dev/tezlink/tezlink_backend_sig.ml @@ -5,6 +5,8 @@ (* *) (*****************************************************************************) +open Tezos_types + module type S = sig val current_level : [> `Main] -> @@ -14,4 +16,7 @@ module type S = sig val constants : [> `Main] -> [> `Head of 'a] -> Tezlink_constants.t tzresult Lwt.t + + val balance : + [> `Main] -> [> `Head of 'a] -> Contract.t -> Tez.t tzresult Lwt.t end diff --git a/etherlink/bin_node/lib_dev/tezlink_services_impl.ml b/etherlink/bin_node/lib_dev/tezlink_services_impl.ml index bd205cb45077..77b9b98a6d00 100644 --- a/etherlink/bin_node/lib_dev/tezlink_services_impl.ml +++ b/etherlink/bin_node/lib_dev/tezlink_services_impl.ml @@ -5,6 +5,34 @@ (* *) (*****************************************************************************) +open Tezos_types + +module Path = struct + (** [to_path encoding value] uses [encoding] to encode [value] in + hexadecimal *) + let to_path encoding value = + let raw_key = Data_encoding.Binary.to_bytes_exn encoding value in + let (`Hex s) = Hex.of_bytes raw_key in + s + + let account contract = + "/tezlink/context/contracts/index/" ^ to_path Contract.encoding contract + + let balance contract = account contract ^ "/balance" +end + +let balance read chain block c = + (* TODO: #7831 !17664 + Support non-default chain and block parameters. *) + ignore chain ; + ignore block ; + + Durable_storage.inspect_durable_and_decode_default + ~default:Tezos_types.Tez.zero + read + (Path.balance c) + (Data_encoding.Binary.of_bytes_exn Tez.encoding) + module type Backend = sig include Durable_storage.READER @@ -108,4 +136,13 @@ module Make (Backend : Backend) : Tezlink_backend_sig.S = struct err in return Tezlink_constants.{fixed; parametric = Tezlink_constants.mainnet} + + let read p = + let open Lwt_result_syntax in + let* state = Backend.get_state () in + Backend.read state p + + (* TODO: #7831 !17664 + we type [chain], even though we don't use it, to satisfy the compiler. *) + let balance (chain : [> `Main]) = balance read chain end -- GitLab From 5088cd56d9fd53bcc801196050821f04b1550ca2 Mon Sep 17 00:00:00 2001 From: Pierre-Emmanuel Cornilleau Date: Thu, 10 Apr 2025 10:04:59 +0200 Subject: [PATCH 4/5] Tezlink/Node: use balance backend --- .../lib_dev/tezlink/tezos_services.ml | 23 ++++--------------- 1 file changed, 5 insertions(+), 18 deletions(-) diff --git a/etherlink/bin_node/lib_dev/tezlink/tezos_services.ml b/etherlink/bin_node/lib_dev/tezlink/tezos_services.ml index 1c81fb32f170..cea7c83ad0b5 100644 --- a/etherlink/bin_node/lib_dev/tezlink/tezos_services.ml +++ b/etherlink/bin_node/lib_dev/tezlink/tezos_services.ml @@ -65,15 +65,6 @@ module Protocol_types = struct ~dst:encoding ~src:conversion_encoding end - - module Tez = struct - include Alpha_context.Tez - - let convert q = - q |> Ethereum_types.Qty.to_z |> Z.to_int64 |> Alpha_context.Tez.of_mutez - |> Option.value ~default:Alpha_context.Tez.zero - |> Result_syntax.return - end end (** [wrap conversion service_implementation] changes the output type @@ -204,7 +195,7 @@ module Imported_services = struct tezlink_rpc_context * Tezos_types.Contract.t, unit, unit, - Protocol_types.Tez.t ) + Tezos_types.Tez.t ) Tezos_rpc.Service.t = Tezos_rpc.Service.subst1 (* TODO: #7876 should be imported *) @@ -215,7 +206,7 @@ module Imported_services = struct neither staked, nor in unstaked requests, nor in frozen bonds. \ Identical to the 'spendable' RPC." ~query:Tezos_rpc.Query.empty - ~output:Protocol_types.Tez.encoding + ~output:Tezos_types.Tez.encoding (contract_arg_path "balance") let constants : @@ -237,9 +228,6 @@ let block_directory_path = let protocols () = Lwt_result_syntax.return Tezlink_protocols.current -let balance _ _ _ = - Lwt_result_syntax.return @@ Ethereum_types.quantity_of_z Z.one - let version () = (* TODO: #7857 need proper implementation *) Lwt_result_syntax.return Tezlink_version.mock @@ -257,11 +245,10 @@ let build_block_dir (module Backend : Tezlink_backend_sig.S) = ~convert_output:Protocol_types.Level.convert |> register ~service:Imported_services.protocols ~impl:(fun _ _ () -> protocols ()) - |> register_with_conversion + |> register ~service:Imported_services.balance - ~impl:(fun ({block; chain}, contract) _ _ -> - balance chain block contract) - ~convert_output:Protocol_types.Tez.convert + ~impl:(fun ({chain; block}, contract) _ _ -> + Backend.balance chain block contract) |> register_with_conversion ~service:Imported_services.constants ~impl:(fun {block; chain} () () -> Backend.constants chain block) -- GitLab From 6d10149285fa2d3fb56d086d44f704b1d3623464 Mon Sep 17 00:00:00 2001 From: Pierre-Emmanuel Cornilleau Date: Thu, 10 Apr 2025 10:10:42 +0200 Subject: [PATCH 5/5] Tezlink/Node: balance default zero --- etherlink/tezt/tests/evm_sequencer.ml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/etherlink/tezt/tests/evm_sequencer.ml b/etherlink/tezt/tests/evm_sequencer.ml index 80725bb1b9d6..e028badfd7db 100644 --- a/etherlink/tezt/tests/evm_sequencer.ml +++ b/etherlink/tezt/tests/evm_sequencer.ml @@ -571,7 +571,7 @@ let test_tezlink_balance = let* res = Client.get_balance_for ~endpoint ~account:Constant.bootstrap1.alias client in - Check.((Tez.to_mutez res = 1) int ~error_msg:"Expected %R but got %L") ; + Check.((Tez.to_mutez res = 0) int ~error_msg:"Expected %R but got %L") ; unit let test_tezlink_version = -- GitLab