From aaa553c47a163990efdf0772ab61aebbb007f0e2 Mon Sep 17 00:00:00 2001 From: Luciano Freitas Date: Wed, 5 Mar 2025 18:33:35 +0100 Subject: [PATCH 1/4] Etherlink/Tezt: ensure RPC node is ready before running when spawning RPC MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Raphaƫl Cauderlier --- etherlink/tezt/lib/evm_node.ml | 19 ++++++++++++++++--- etherlink/tezt/lib/evm_node.mli | 4 +++- etherlink/tezt/lib/setup.ml | 6 +----- 3 files changed, 20 insertions(+), 9 deletions(-) diff --git a/etherlink/tezt/lib/evm_node.ml b/etherlink/tezt/lib/evm_node.ml index 081338a1a19d..d4006f863077 100644 --- a/etherlink/tezt/lib/evm_node.ml +++ b/etherlink/tezt/lib/evm_node.ml @@ -116,6 +116,7 @@ module Parameters = struct endpoint : string; runner : Runner.t option; restricted_rpcs : string option; + spawn_rpc : int option; } type session_state = {mutable ready : bool} @@ -776,7 +777,7 @@ let mode_with_new_private_rpc (mode : mode) = let create ?(path = Uses.path Constant.octez_evm_node) ?name ?runner ?(mode = Proxy) ?history ?data_dir ?rpc_addr ?rpc_port ?restricted_rpcs - endpoint = + ?spawn_rpc endpoint = let arguments, rpc_addr, rpc_port = connection_arguments ?rpc_addr ?rpc_port ?runner () in @@ -816,6 +817,7 @@ let create ?(path = Uses.path Constant.octez_evm_node) ?name ?runner endpoint; restricted_rpcs; runner; + spawn_rpc; } in on_event evm_node (handle_is_ready_event evm_node) ; @@ -931,7 +933,17 @@ let run ?(wait = true) ?(extra_arguments = []) evm_node = (run_args evm_node @ extra_arguments) ~on_terminate in - let* () = if wait then wait_for_ready evm_node else unit in + let* () = + if wait then + let* () = wait_for_ready evm_node + and* () = + match evm_node.persistent_state.spawn_rpc with + | None -> unit + | Some _ -> wait_for_spawn_rpc_ready evm_node + in + unit + else unit + in unit let spawn_command evm_node args = @@ -1334,7 +1346,7 @@ let patch_config_gc ?history_mode json = | Full retention -> `String (Format.sprintf "full:%d" retention)) let init ?patch_config ?name ?runner ?mode ?data_dir ?rpc_addr ?rpc_port - ?restricted_rpcs ?history_mode rollup_node = + ?restricted_rpcs ?history_mode ?spawn_rpc rollup_node = let evm_node = create ?name @@ -1345,6 +1357,7 @@ let init ?patch_config ?name ?runner ?mode ?data_dir ?rpc_addr ?rpc_port ?rpc_addr ?rpc_port ?restricted_rpcs + ?spawn_rpc rollup_node in let* () = Process.check @@ spawn_init_config evm_node in diff --git a/etherlink/tezt/lib/evm_node.mli b/etherlink/tezt/lib/evm_node.mli index 44b710238a57..629103950e58 100644 --- a/etherlink/tezt/lib/evm_node.mli +++ b/etherlink/tezt/lib/evm_node.mli @@ -141,7 +141,7 @@ val preimages_dir : t -> string val supports_threshold_encryption : t -> bool -(** [create ?name ?runner ?mode ?history ?data_dir ?rpc_addr ?rpc_port +(** [create ?name ?runner ?mode ?history ?data_dir ?rpc_addr ?rpc_port ?spawn_rpc rollup_node_endpoint] creates an EVM node server. The server listens to requests at address [rpc_addr] and the port @@ -163,6 +163,7 @@ val create : ?rpc_addr:string -> ?rpc_port:int -> ?restricted_rpcs:string -> + ?spawn_rpc:int -> string -> t @@ -342,6 +343,7 @@ val init : ?rpc_port:int -> ?restricted_rpcs:string -> ?history_mode:history_mode -> + ?spawn_rpc:int -> string -> t Lwt.t diff --git a/etherlink/tezt/lib/setup.ml b/etherlink/tezt/lib/setup.ml index 0c0c23a6ef0b..77d01c519fdf 100644 --- a/etherlink/tezt/lib/setup.ml +++ b/etherlink/tezt/lib/setup.ml @@ -360,13 +360,9 @@ let setup_sequencer ?max_delayed_inbox_blueprint_length ?next_wasm_runtime ~patch_config:seq_patch_config ~mode:sequencer_mode ?history_mode + ?spawn_rpc (Sc_rollup_node.endpoint sc_rollup_node) in - let* _ = - match spawn_rpc with - | Some _ -> Evm_node.wait_for_spawn_rpc_ready sequencer - | None -> unit - in let* observer = run_new_observer_node ~patch_config:obs_patch_config -- GitLab From 4d7a0424c5928cfae84bd8ff84c4d85898908686 Mon Sep 17 00:00:00 2001 From: Luciano Freitas Date: Wed, 5 Mar 2025 18:48:50 +0100 Subject: [PATCH 2/4] Etherlink/tezt: set spawn_rpc when multichain --- etherlink/tezt/tests/evm_sequencer.ml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/etherlink/tezt/tests/evm_sequencer.ml b/etherlink/tezt/tests/evm_sequencer.ml index 2c891607d5d7..3671feeb9091 100644 --- a/etherlink/tezt/tests/evm_sequencer.ml +++ b/etherlink/tezt/tests/evm_sequencer.ml @@ -283,6 +283,13 @@ let register_all ?max_delayed_inbox_blueprint_length ?sequencer_rpc_port (fun (enable_dal, dal_tags) -> List.iter (fun (enable_multichain, multichain_tags) -> + (* Since the set of RPCs the sequencer has access to is restricted in the multichain case, + we need the intermediate RPC node to handle the extra RPCs necessary in the tests. *) + let spawn_rpc = + match spawn_rpc with + | None when enable_multichain -> Some (Port.fresh ()) + | _ -> spawn_rpc + in register_test_for_kernels ~__FILE__ ?max_delayed_inbox_blueprint_length -- GitLab From deb22856e55ec81a9f269ba4cf8e9f6372efc14e Mon Sep 17 00:00:00 2001 From: Luciano Freitas Date: Thu, 6 Mar 2025 08:48:29 +0100 Subject: [PATCH 3/4] Etherlink/Tezt: add reader of spawn_rpc --- etherlink/tezt/lib/evm_node.ml | 2 ++ etherlink/tezt/lib/evm_node.mli | 3 +++ 2 files changed, 5 insertions(+) diff --git a/etherlink/tezt/lib/evm_node.ml b/etherlink/tezt/lib/evm_node.ml index d4006f863077..507d9320dc9f 100644 --- a/etherlink/tezt/lib/evm_node.ml +++ b/etherlink/tezt/lib/evm_node.ml @@ -830,6 +830,8 @@ let name evm_node = evm_node.name let rpc_port evm_node = evm_node.persistent_state.rpc_port +let spawn_rpc evm_node = evm_node.persistent_state.spawn_rpc + let data_dir evm_node = evm_node.persistent_state.data_dir let data_dir_arg evm_node = ["--data-dir"; evm_node.persistent_state.data_dir] diff --git a/etherlink/tezt/lib/evm_node.mli b/etherlink/tezt/lib/evm_node.mli index 629103950e58..885c7889dfca 100644 --- a/etherlink/tezt/lib/evm_node.mli +++ b/etherlink/tezt/lib/evm_node.mli @@ -350,6 +350,9 @@ val init : (** Get the RPC port given as [--rpc-port] to a node. *) val rpc_port : t -> int +(** Get the spawn_rpc value given on creation. *) +val spawn_rpc : t -> int option + (** [spawn_run ?extra_arguments evm_node] same as {!run} but spawns a process. *) val spawn_run : ?extra_arguments:string list -> t -> Process.t -- GitLab From c8608b486cc695a9b7a41f72fe092834e6783b1c Mon Sep 17 00:00:00 2001 From: Luciano Freitas Date: Thu, 6 Mar 2025 08:49:05 +0100 Subject: [PATCH 4/4] Etherlink/Tezt: fix reset test with spawn_rpc --- etherlink/tezt/tests/evm_sequencer.ml | 1 + 1 file changed, 1 insertion(+) diff --git a/etherlink/tezt/tests/evm_sequencer.ml b/etherlink/tezt/tests/evm_sequencer.ml index 3671feeb9091..7de66980904e 100644 --- a/etherlink/tezt/tests/evm_sequencer.ml +++ b/etherlink/tezt/tests/evm_sequencer.ml @@ -6569,6 +6569,7 @@ let test_reset = ~mode:(Evm_node.mode sequencer) ~data_dir:(Evm_node.data_dir sequencer) ~rpc_port:(Evm_node.rpc_port sequencer) + ?spawn_rpc:(Evm_node.spawn_rpc sequencer) (Sc_rollup_node.endpoint sc_rollup_node) in let* () = Evm_node.run sequencer in -- GitLab