From 39a8e24024da3660f3ccad9104db07017958baa5 Mon Sep 17 00:00:00 2001 From: Pierre-Emmanuel Cornilleau Date: Mon, 24 Mar 2025 11:43:06 +0100 Subject: [PATCH 1/5] Tezlink/node: tweak tezlink register interface --- etherlink/bin_node/lib_dev/tezos_services.ml | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/etherlink/bin_node/lib_dev/tezos_services.ml b/etherlink/bin_node/lib_dev/tezos_services.ml index cbb57181fae9..de8ae0010943 100644 --- a/etherlink/bin_node/lib_dev/tezos_services.ml +++ b/etherlink/bin_node/lib_dev/tezos_services.ml @@ -126,7 +126,7 @@ let wrap conv impl p q i = types in the signature of the service [s]. *) let import_service s = Tezos_rpc.Service.subst0 s -let register_protocol_service ~dir ~service ~impl ~convert_output = +let register_with_conversion ~service ~impl ~convert_output dir = Tezos_rpc.Directory.register dir service (wrap convert_output impl) (* TODO *) @@ -212,11 +212,12 @@ let build_helper_dir impl = let dir : tezlink_rpc_context Tezos_rpc.Directory.t = Tezos_rpc.Directory.empty in - register_protocol_service - ~dir - ~service:Imported_services.current_level - ~impl:(fun {block; chain} query () -> impl.current_level chain block query) - ~convert_output:Protocol_types.Level.convert + dir + |> register_with_conversion + ~service:Imported_services.current_level + ~impl:(fun {block; chain} query () -> + impl.current_level chain block query) + ~convert_output:Protocol_types.Level.convert (** Builds the root director. *) let build_dir impl = -- GitLab From 9fd784615397ae6f04d95a2d21a139abb09b9c1b Mon Sep 17 00:00:00 2001 From: Pierre-Emmanuel Cornilleau Date: Mon, 24 Mar 2025 12:03:19 +0100 Subject: [PATCH 2/5] Tezlink/node: fix building tezlink directory doc --- etherlink/bin_node/lib_dev/tezos_services.ml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/etherlink/bin_node/lib_dev/tezos_services.ml b/etherlink/bin_node/lib_dev/tezos_services.ml index de8ae0010943..59b97c0ef42d 100644 --- a/etherlink/bin_node/lib_dev/tezos_services.ml +++ b/etherlink/bin_node/lib_dev/tezos_services.ml @@ -207,8 +207,8 @@ type tezos_services_implementation = { version : unit -> Tezlink_version.version tzresult Lwt.t; } -(** Builds the directory registering services under `.../helpers`. *) -let build_helper_dir impl = +(** Builds the directory registering services under `/chains/
/blocks//...`. *) +let build_block_dir impl = let dir : tezlink_rpc_context Tezos_rpc.Directory.t = Tezos_rpc.Directory.empty in @@ -221,7 +221,7 @@ let build_helper_dir impl = (** Builds the root director. *) let build_dir impl = - let helper_dir = build_helper_dir impl in + let helper_dir = build_block_dir impl in let root_directory = Tezos_rpc.Directory.prefix block_directory_path -- GitLab From 70006cbf519de94abd684089460e913416662a03 Mon Sep 17 00:00:00 2001 From: Pierre-Emmanuel Cornilleau Date: Mon, 24 Mar 2025 11:37:15 +0100 Subject: [PATCH 3/5] Tezlink/Node: import protocols service --- etherlink/bin_node/lib_dev/tezos_services.ml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/etherlink/bin_node/lib_dev/tezos_services.ml b/etherlink/bin_node/lib_dev/tezos_services.ml index 59b97c0ef42d..b6d1af706795 100644 --- a/etherlink/bin_node/lib_dev/tezos_services.ml +++ b/etherlink/bin_node/lib_dev/tezos_services.ml @@ -162,6 +162,12 @@ module Tezlink_version = struct } end +module Tezlink_protocols = struct + module Shell_impl = Tezos_shell_services.Block_services + + type protocols = Shell_impl.protocols +end + (* This is where we import service declarations from the protocol. *) module Imported_services = struct module Protocol_plugin_services = Imported_protocol_plugin.RPC.S @@ -187,6 +193,16 @@ module Imported_services = struct Tezlink_version.version ) Tezos_rpc.Service.t = Tezos_shell_services.Version_services.S.version + + let _protocols : + ( [`GET], + tezlink_rpc_context, + tezlink_rpc_context, + unit, + unit, + Tezlink_protocols.protocols ) + Tezos_rpc.Service.t = + import_service Tezos_shell_services.Shell_services.Blocks.S.protocols end type block = Tezos_shell_services.Block_services.block -- GitLab From 845356e9b5b81cf8c3b53fae460dc4acfd24352d Mon Sep 17 00:00:00 2001 From: Pierre-Emmanuel Cornilleau Date: Mon, 24 Mar 2025 11:51:26 +0100 Subject: [PATCH 4/5] Tezlink/Node: register tezlink protocols rpc --- etherlink/bin_node/lib_dev/tezlink_services_impl.ml | 1 + etherlink/bin_node/lib_dev/tezos_services.ml | 11 ++++++++++- etherlink/bin_node/lib_dev/tezos_services.mli | 7 +++++++ 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/etherlink/bin_node/lib_dev/tezlink_services_impl.ml b/etherlink/bin_node/lib_dev/tezlink_services_impl.ml index f604933d0550..1c27b9190f75 100644 --- a/etherlink/bin_node/lib_dev/tezlink_services_impl.ml +++ b/etherlink/bin_node/lib_dev/tezlink_services_impl.ml @@ -57,4 +57,5 @@ let michelson_services_methods backend constants = (fun () -> (* TODO: #7857 need proper implementation *) Lwt_result_syntax.return Tezlink_version.mock); + protocols = (fun () -> Lwt_result_syntax.return Tezlink_protocols.current); } diff --git a/etherlink/bin_node/lib_dev/tezos_services.ml b/etherlink/bin_node/lib_dev/tezos_services.ml index b6d1af706795..680f66c93a45 100644 --- a/etherlink/bin_node/lib_dev/tezos_services.ml +++ b/etherlink/bin_node/lib_dev/tezos_services.ml @@ -129,6 +129,8 @@ let import_service s = Tezos_rpc.Service.subst0 s let register_with_conversion ~service ~impl ~convert_output dir = Tezos_rpc.Directory.register dir service (wrap convert_output impl) +let register ~service ~impl dir = Tezos_rpc.Directory.register dir service impl + (* TODO *) type tezlink_rpc_context = { block : Tezos_shell_services.Block_services.block; @@ -166,6 +168,10 @@ module Tezlink_protocols = struct module Shell_impl = Tezos_shell_services.Block_services type protocols = Shell_impl.protocols + + let quebec = Tezos_protocol_021_PsQuebec.Protocol.hash + + let current = Shell_impl.{current_protocol = quebec; next_protocol = quebec} end (* This is where we import service declarations from the protocol. *) @@ -194,7 +200,7 @@ module Imported_services = struct Tezos_rpc.Service.t = Tezos_shell_services.Version_services.S.version - let _protocols : + let protocols : ( [`GET], tezlink_rpc_context, tezlink_rpc_context, @@ -221,6 +227,7 @@ type tezos_services_implementation = { current_level : chain -> block -> Imported_services.level_query -> level tzresult Lwt.t; version : unit -> Tezlink_version.version tzresult Lwt.t; + protocols : unit -> Tezlink_protocols.protocols tzresult Lwt.t; } (** Builds the directory registering services under `/chains/
/blocks//...`. *) @@ -234,6 +241,8 @@ let build_block_dir impl = ~impl:(fun {block; chain} query () -> impl.current_level chain block query) ~convert_output:Protocol_types.Level.convert + |> register ~service:Imported_services.protocols ~impl:(fun _ _ () -> + impl.protocols ()) (** Builds the root director. *) let build_dir impl = diff --git a/etherlink/bin_node/lib_dev/tezos_services.mli b/etherlink/bin_node/lib_dev/tezos_services.mli index 8942a6cf66ba..86fcbb12a078 100644 --- a/etherlink/bin_node/lib_dev/tezos_services.mli +++ b/etherlink/bin_node/lib_dev/tezos_services.mli @@ -8,6 +8,12 @@ module Imported_protocol = Tezos_protocol_021_PsQuebec module Imported_protocol_parameters = Tezos_protocol_021_PsQuebec_parameters +module Tezlink_protocols : sig + type protocols + + val current : protocols +end + module Tezlink_version : sig type version @@ -40,6 +46,7 @@ type chain = Tezos_shell_services.Chain_services.chain type tezos_services_implementation = { current_level : chain -> block -> level_query -> level tzresult Lwt.t; version : unit -> Tezlink_version.version tzresult Lwt.t; + protocols : unit -> Tezlink_protocols.protocols tzresult Lwt.t; } (* THIS IS THE ENTRYPOINT *) -- GitLab From 24e769aca8bcbf54fdbae931fdcbe962256e9e7e Mon Sep 17 00:00:00 2001 From: Pierre-Emmanuel Cornilleau Date: Mon, 24 Mar 2025 12:03:58 +0100 Subject: [PATCH 5/5] Tezlink/tezt: test protocols rpc --- etherlink/tezt/tests/evm_sequencer.ml | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/etherlink/tezt/tests/evm_sequencer.ml b/etherlink/tezt/tests/evm_sequencer.ml index 70a200bb1dc9..25d9c7955cfc 100644 --- a/etherlink/tezt/tests/evm_sequencer.ml +++ b/etherlink/tezt/tests/evm_sequencer.ml @@ -530,6 +530,30 @@ let test_tezlink_current_level = unit +let test_tezlink_protocols = + register_tezlink_test + ~title:"Test of the protocols rpc" + ~tags:["evm"; "rpc"; "protocols"] + @@ fun {sequencer; _} _protocol -> + (* call the protocols rpc and parse the result *) + let rpc_protocols () = + let path = "/tezlink/chains/main/blocks/head/protocols" in + let* res = + Curl.get_raw ~args:["-v"] (Evm_node.endpoint sequencer ^ path) + |> Runnable.run + in + return @@ JSON.parse ~origin:"curl_protocols" res + in + + let* res = rpc_protocols () in + Check.( + JSON.( + res |-> "protocol" |> as_string + = "PsQuebecnLByd3JwTiGadoG4nGWi3HYiLXUjkibeFV8dCFeVMUg") + string + ~error_msg:"Expected %R but got %L") ; + unit + let test_tezlink_version = register_tezlink_test ~title:"Test of the version rpc" @@ -12584,4 +12608,5 @@ let () = test_fa_deposit_and_withdrawals_events [Alpha] ; test_block_producer_validation [Alpha] ; test_tezlink_current_level [Alpha] ; + test_tezlink_protocols [Alpha] ; test_tezlink_version [Alpha] -- GitLab