From d8a6c7bf54c2011c448f074556e153b603b810d9 Mon Sep 17 00:00:00 2001 From: arnaud Date: Tue, 3 Jun 2025 16:44:12 +0200 Subject: [PATCH 1/4] Tezlink/Node: Import manager info service --- etherlink/bin_node/lib_dev/tezlink/tezos_services.ml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/etherlink/bin_node/lib_dev/tezlink/tezos_services.ml b/etherlink/bin_node/lib_dev/tezlink/tezos_services.ml index ae1455631dbe..53875740db75 100644 --- a/etherlink/bin_node/lib_dev/tezlink/tezos_services.ml +++ b/etherlink/bin_node/lib_dev/tezlink/tezos_services.ml @@ -438,6 +438,16 @@ module Imported_services = struct Tezos_rpc.Service.t = import_service Tezos_shell_services.Shell_services.Blocks.S.protocols + let _contract_info : + ( [`GET], + tezlink_rpc_context, + tezlink_rpc_context * Tezos_types.Contract.t, + Imported_protocol_plugin.Contract_services.S.normalize_types_query, + unit, + Imported_protocol_plugin.Contract_services.info ) + Tezos_rpc.Service.t = + Tezos_rpc.Service.subst1 Imported_protocol_plugin.Contract_services.S.info + let balance : ( [`GET], tezlink_rpc_context, -- GitLab From 2b8f2737f84aecaed56d34210c7b6f8632ebc003 Mon Sep 17 00:00:00 2001 From: arnaud Date: Tue, 3 Jun 2025 17:04:32 +0200 Subject: [PATCH 2/4] Tezlink/Node: Introduce a function to create a manager information from balance and counter --- .../bin_node/lib_dev/tezlink/tezos_services.ml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/etherlink/bin_node/lib_dev/tezlink/tezos_services.ml b/etherlink/bin_node/lib_dev/tezlink/tezos_services.ml index 53875740db75..59dc1606af00 100644 --- a/etherlink/bin_node/lib_dev/tezlink/tezos_services.ml +++ b/etherlink/bin_node/lib_dev/tezlink/tezos_services.ml @@ -221,6 +221,20 @@ module Protocol_types = struct ~dst:encoding ~src:Data_encoding.z end + + module Contract = struct + let make_info (contract_balance, counter_z) = + let open Result_syntax in + let open Imported_protocol_plugin.Contract_services in + let* counter = Counter.of_z counter_z in + return + { + balance = contract_balance; + delegate = None; + counter = Some counter; + script = None; + } + end end (** [wrap conversion service_implementation] changes the output type -- GitLab From 140e69e92b882e8b892718996c9c3c7b81310224 Mon Sep 17 00:00:00 2001 From: arnaud Date: Tue, 3 Jun 2025 17:05:27 +0200 Subject: [PATCH 3/4] Tezlink/Node: Register the manager info rpc --- etherlink/bin_node/lib_dev/tezlink/tezos_services.ml | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/etherlink/bin_node/lib_dev/tezlink/tezos_services.ml b/etherlink/bin_node/lib_dev/tezlink/tezos_services.ml index 59dc1606af00..e5acaf25565c 100644 --- a/etherlink/bin_node/lib_dev/tezlink/tezos_services.ml +++ b/etherlink/bin_node/lib_dev/tezlink/tezos_services.ml @@ -452,7 +452,8 @@ module Imported_services = struct Tezos_rpc.Service.t = import_service Tezos_shell_services.Shell_services.Blocks.S.protocols - let _contract_info : + (* Queries will be ignored for now. *) + let contract_info : ( [`GET], tezlink_rpc_context, tezlink_rpc_context * Tezos_types.Contract.t, @@ -655,6 +656,15 @@ let register_block_services ~l2_chain_id let*? `Main = check_chain chain in let*? _block = check_block block in protocols ()) + |> register_with_conversion + ~service:Imported_services.contract_info + ~impl:(fun ({block; chain}, contract) _query () -> + let*? chain = check_chain chain in + let*? block = check_block block in + let* balance = Backend.balance chain block contract in + let* counter = Backend.counter chain block contract in + return (balance, counter)) + ~convert_output:Protocol_types.Contract.make_info |> register ~service:Imported_services.balance ~impl:(fun ({chain; block}, contract) _ _ -> -- GitLab From 27d0e0127edcd0512fd10aa9a180f72ab47093be Mon Sep 17 00:00:00 2001 From: arnaud Date: Tue, 3 Jun 2025 17:33:04 +0200 Subject: [PATCH 4/4] Tezlink/Tezt: Test the contract info rpc --- etherlink/tezt/tests/evm_sequencer.ml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/etherlink/tezt/tests/evm_sequencer.ml b/etherlink/tezt/tests/evm_sequencer.ml index eb9c0c811986..6145a40d3bb6 100644 --- a/etherlink/tezt/tests/evm_sequencer.ml +++ b/etherlink/tezt/tests/evm_sequencer.ml @@ -664,6 +664,21 @@ let account_rpc sequencer account key = in return @@ JSON.parse ~origin:"curl_protocols" res +let test_tezlink_contract_info = + register_tezlink_test + ~title:"Test of the contract info rpc" + ~tags:["rpc"; "contract"; "info"] + ~tez_bootstrap_accounts:[Constant.bootstrap1] + @@ fun {sequencer; _} _protocol -> + (* call the balance rpc and check the result *) + let* valid_info = account_rpc sequencer Constant.bootstrap1 "" in + let balance = JSON.(valid_info |-> "balance" |> as_int) in + let counter = JSON.(valid_info |-> "counter" |> as_int) in + + Check.((balance = 3800000000000) int ~error_msg:"Expected %R but got %L") ; + Check.((counter = 0) int ~error_msg:"Expected %R but got %L") ; + unit + let test_tezlink_manager_key = register_tezlink_test ~title:"Test of the manager_key rpc" @@ -13835,6 +13850,7 @@ let () = test_block_producer_validation [Alpha] ; test_durable_storage_consistency [Alpha] ; test_tezlink_current_level [Alpha] ; + test_tezlink_contract_info [Alpha] ; test_tezlink_balance [Alpha] ; test_tezlink_manager_key [Alpha] ; test_tezlink_counter [Alpha] ; -- GitLab