From e32d9bff659c3277e9a0e5c118f60101c6e3f1fb Mon Sep 17 00:00:00 2001 From: Sylvain Ribstein Date: Mon, 24 Jun 2024 14:28:06 +0200 Subject: [PATCH 1/7] evm/node: uses next rollup node lvl instead of bake_for --- etherlink/tezt/lib/helpers.ml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/etherlink/tezt/lib/helpers.ml b/etherlink/tezt/lib/helpers.ml index e0c10448a196..3bbc2b9e5887 100644 --- a/etherlink/tezt/lib/helpers.ml +++ b/etherlink/tezt/lib/helpers.ml @@ -116,7 +116,7 @@ let upgrade ~sc_rollup_node ~sc_rollup_address ~admin ~admin_contract ~client ~burn_cap:Tez.one client in - let* () = Client.bake_for_and_wait ~keys:[] client in + let* _ = next_rollup_node_level ~sc_rollup_node ~client in unit let check_block_consistency ~left ~right ?error_msg ~block () = -- GitLab From 396716565b1037f5db2ccf208834646848c0ea83 Mon Sep 17 00:00:00 2001 From: Sylvain Ribstein Date: Tue, 25 Jun 2024 09:10:25 +0200 Subject: [PATCH 2/7] evm/tezt: register test with TBB = Nothing when test uses produceBlock --- etherlink/tezt/tests/evm_sequencer.ml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/etherlink/tezt/tests/evm_sequencer.ml b/etherlink/tezt/tests/evm_sequencer.ml index e68eebe6c490..f0fa2f963782 100644 --- a/etherlink/tezt/tests/evm_sequencer.ml +++ b/etherlink/tezt/tests/evm_sequencer.ml @@ -669,6 +669,7 @@ let test_persistent_state = register_both ~tags:["evm"; "sequencer"] ~title:"Sequencer state is persistent across runs" + ~time_between_blocks:Nothing @@ fun {sequencer; _} _protocol -> (* Force the sequencer to produce a block. *) let*@ _ = Rpc.produce_block sequencer in @@ -1106,6 +1107,7 @@ let test_delayed_transfer_is_included = ~da_fee:arb_da_fee_for_delayed_inbox ~tags:["evm"; "sequencer"; "delayed_inbox"; "inclusion"] ~title:"Delayed transaction is included" + ~time_between_blocks:Nothing @@ fun { client; l1_contracts; @@ -1214,6 +1216,7 @@ let test_largest_delayed_transfer_is_included = let test_delayed_deposit_is_included = register_both + ~time_between_blocks:Nothing ~da_fee:arb_da_fee_for_delayed_inbox ~tags:["evm"; "sequencer"; "delayed_inbox"; "inclusion"; "deposit"] ~title:"Delayed deposit is included" -- GitLab From a46b84440154b307dfa46b98f8c6e9095c404c43 Mon Sep 17 00:00:00 2001 From: Sylvain Ribstein Date: Mon, 24 Jun 2024 12:45:47 +0200 Subject: [PATCH 3/7] evm/tezt: bake multiple cooldown period for resilient test --- etherlink/tezt/tests/evm_sequencer.ml | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/etherlink/tezt/tests/evm_sequencer.ml b/etherlink/tezt/tests/evm_sequencer.ml index f0fa2f963782..e5b4905cc7f1 100644 --- a/etherlink/tezt/tests/evm_sequencer.ml +++ b/etherlink/tezt/tests/evm_sequencer.ml @@ -887,7 +887,15 @@ let test_resilient_to_rollup_node_disconnect = (* Go through several cooldown periods to let the sequencer sends the rest of the blueprints. *) - let* () = bake_until_sync ~sc_rollup_node ~client ~sequencer ~proxy () in + let* () = + bake_until_sync + ~timeout_in_blocks:(catchup_cooldown * 3) + ~sc_rollup_node + ~client + ~sequencer + ~proxy + () + in (* Check the consistency again *) check_head_consistency -- GitLab From 32fe24da11ed5651a6f4bc13c0510b798998f692 Mon Sep 17 00:00:00 2001 From: Sylvain Ribstein Date: Tue, 25 Jun 2024 10:12:30 +0200 Subject: [PATCH 4/7] evm/tezt: dsn port is already fresh by default --- etherlink/tezt/tests/evm_sequencer.ml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/etherlink/tezt/tests/evm_sequencer.ml b/etherlink/tezt/tests/evm_sequencer.ml index e5b4905cc7f1..1889cca458b3 100644 --- a/etherlink/tezt/tests/evm_sequencer.ml +++ b/etherlink/tezt/tests/evm_sequencer.ml @@ -240,10 +240,7 @@ let setup_sequencer ~mainnet_compat ?genesis_timestamp ?time_between_blocks in let* sequencer_mode = if threshold_encryption then - let sequencer_sidecar_port = Some (Port.fresh ()) in - let sequencer_sidecar = - Dsn_node.sequencer ?rpc_port:sequencer_sidecar_port () - in + let sequencer_sidecar = Dsn_node.sequencer () in let* () = Dsn_node.start sequencer_sidecar in return @@ Evm_node.Threshold_encryption_sequencer -- GitLab From 22e2f2d4311747a77e71f8ccb8bfed9cd66ccad3 Mon Sep 17 00:00:00 2001 From: Sylvain Ribstein Date: Tue, 25 Jun 2024 10:12:47 +0200 Subject: [PATCH 5/7] evm/tezt: terminate observer to not obfuscate test log --- etherlink/tezt/tests/evm_sequencer.ml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/etherlink/tezt/tests/evm_sequencer.ml b/etherlink/tezt/tests/evm_sequencer.ml index 1889cca458b3..8fe8f5f94896 100644 --- a/etherlink/tezt/tests/evm_sequencer.ml +++ b/etherlink/tezt/tests/evm_sequencer.ml @@ -1542,7 +1542,8 @@ let test_init_from_rollup_node_data_dir = ~tags:["evm"; "rollup_node"; "init"; "reconstruct"] ~title:"Init evm node sequencer data dir from a rollup node data dir" ~history_mode:Archive - @@ fun {sc_rollup_node; sequencer; proxy; client; boot_sector; _} _protocol -> + @@ fun {sc_rollup_node; sequencer; observer; proxy; client; boot_sector; _} + _protocol -> (* a sequencer is needed to produce an initial block *) let* () = repeat 5 (fun () -> @@ -1550,7 +1551,8 @@ let test_init_from_rollup_node_data_dir = unit) in let* () = bake_until_sync ~sc_rollup_node ~client ~sequencer ~proxy () in - let* () = Evm_node.terminate sequencer in + let* () = Evm_node.terminate sequencer + and* () = Evm_node.terminate observer in let evm_node' = Evm_node.create ~mode:(Evm_node.mode sequencer) -- GitLab From fb68d69a6edcbb9a8b52b8611511904e54411340 Mon Sep 17 00:00:00 2001 From: Sylvain Ribstein Date: Tue, 25 Jun 2024 10:35:27 +0200 Subject: [PATCH 6/7] evm/tezt: fixe test that restart observer in te mode --- etherlink/tezt/tests/evm_sequencer.ml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/etherlink/tezt/tests/evm_sequencer.ml b/etherlink/tezt/tests/evm_sequencer.ml index 8fe8f5f94896..7d112eb33d6f 100644 --- a/etherlink/tezt/tests/evm_sequencer.ml +++ b/etherlink/tezt/tests/evm_sequencer.ml @@ -2077,6 +2077,9 @@ let test_observer_timeout_when_necessary = | Observer conf -> Evm_node.Observer {conf with time_between_blocks = Some (Time_between_blocks 3.)} + | Threshold_encryption_observer conf -> + Evm_node.Threshold_encryption_observer + {conf with time_between_blocks = Some (Time_between_blocks 3.)} | _ -> Test.fail "Should be an observer" in -- GitLab From f15b98aa8af697531881bfcef04d05e983dd52e5 Mon Sep 17 00:00:00 2001 From: Sylvain Ribstein Date: Fri, 28 Jun 2024 10:47:07 +0200 Subject: [PATCH 7/7] evm/tezt: recreate evm_node in test to reset tezt state --- etherlink/tezt/lib/evm_node.ml | 16 +++++++++++----- etherlink/tezt/lib/evm_node.mli | 3 +++ etherlink/tezt/tests/evm_sequencer.ml | 20 +++++++++++++++++++- 3 files changed, 33 insertions(+), 6 deletions(-) diff --git a/etherlink/tezt/lib/evm_node.ml b/etherlink/tezt/lib/evm_node.ml index 3f9a50a74d9b..d5afadf01787 100644 --- a/etherlink/tezt/lib/evm_node.ml +++ b/etherlink/tezt/lib/evm_node.ml @@ -470,12 +470,16 @@ let name evm_node = evm_node.name let rpc_port evm_node = evm_node.persistent_state.rpc_port -let data_dir evm_node = ["--data-dir"; evm_node.persistent_state.data_dir] +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] (* assume a valid config for the given command and uses new latest run command format. *) let run_args evm_node = - let shared_args = data_dir evm_node @ evm_node.persistent_state.arguments in + let shared_args = + data_dir_arg evm_node @ evm_node.persistent_state.arguments + in let mode_args = match evm_node.persistent_state.mode with | Proxy -> ["run"; "proxy"] @@ -596,7 +600,9 @@ module Config_file = struct end let spawn_init_config ?(extra_arguments = []) evm_node = - let shared_args = data_dir evm_node @ evm_node.persistent_state.arguments in + let shared_args = + data_dir_arg evm_node @ evm_node.persistent_state.arguments + in let time_between_blocks_fmt = function | Nothing -> "none" | Time_between_blocks f -> Format.sprintf "%.3f" f @@ -849,7 +855,7 @@ let init_from_rollup_node_data_dir ?reconstruct evm_node rollup_node = spawn_command evm_node (["init"; "from"; "rollup"; "node"; rollup_node_data_dir] - @ data_dir evm_node + @ data_dir_arg evm_node @ Cli_arg.optional_arg "reconstruct" Fun.id reconstruct) in Process.check process @@ -923,7 +929,7 @@ let transform_dump ~dump_json ~dump_rlp = let reset evm_node ~l2_level = let args = - ["reset"; "at"; string_of_int l2_level; "--force"] @ data_dir evm_node + ["reset"; "at"; string_of_int l2_level; "--force"] @ data_dir_arg evm_node in let process = Process.spawn evm_node.path @@ args in Process.check process diff --git a/etherlink/tezt/lib/evm_node.mli b/etherlink/tezt/lib/evm_node.mli index 968968a50710..b43d0ac8f444 100644 --- a/etherlink/tezt/lib/evm_node.mli +++ b/etherlink/tezt/lib/evm_node.mli @@ -113,6 +113,9 @@ val mode : t -> mode (** Returns the name of the EVM node. *) val name : t -> string +(** Returns the data_dir of the EVM node. *) +val data_dir : t -> string + (** [create ?name ?runner ?mode ?data_dir ?rpc_addr ?rpc_port rollup_node_endpoint] creates an EVM node server. diff --git a/etherlink/tezt/tests/evm_sequencer.ml b/etherlink/tezt/tests/evm_sequencer.ml index 7d112eb33d6f..ab7085002fa2 100644 --- a/etherlink/tezt/tests/evm_sequencer.ml +++ b/etherlink/tezt/tests/evm_sequencer.ml @@ -3610,7 +3610,25 @@ let test_reset = let* () = Sc_rollup_node.run sc_rollup_node sc_rollup_address [Log_kernel_debug] in + + (* Recreate the evm node simply to reset the state of the tezt + instance. *) + let sequencer = + Evm_node.create + ~mode:(Evm_node.mode sequencer) + ~data_dir:(Evm_node.data_dir sequencer) + ~rpc_port:(Evm_node.rpc_port sequencer) + (Sc_rollup_node.endpoint sc_rollup_node) + in let* () = Evm_node.run sequencer in + let observer = + Evm_node.create + ~mode:(Evm_node.mode observer) + ~data_dir:(Evm_node.data_dir observer) + ~rpc_port:(Evm_node.rpc_port observer) + (Evm_node.endpoint sequencer) + in + let* () = Evm_node.run observer in Log.info "Check sequencer and observer is at %d level" reset_level ; @@ -3622,7 +3640,7 @@ let test_reset = reset." ; Check.((sequencer_level = observer_level) int32) ~error_msg: - "The sequencer (currently at level %L) and observer ( currently at level \ + "The sequencer (currently at level %L) and observer (currently at level \ %R) should be at the same level after both being reset." ; let* () = repeat after_reset_level (fun () -> -- GitLab