From 329019fbf68f4cc526156bc813cc124c9cfb844b Mon Sep 17 00:00:00 2001 From: Pierrick Couderc Date: Thu, 22 Aug 2024 16:55:39 +0200 Subject: [PATCH 1/4] Etherlink/Tezt: move test setup function in their own module --- etherlink/tezt/lib/dune | 6 +- etherlink/tezt/lib/setup.ml | 417 ++++++++++++++++++++++++++ etherlink/tezt/tests/evm_sequencer.ml | 407 +------------------------ manifest/product_etherlink.ml | 1 + 4 files changed, 423 insertions(+), 408 deletions(-) create mode 100644 etherlink/tezt/lib/setup.ml diff --git a/etherlink/tezt/lib/dune b/etherlink/tezt/lib/dune index 117cde38f96e..3a0b5dd4fd01 100644 --- a/etherlink/tezt/lib/dune +++ b/etherlink/tezt/lib/dune @@ -9,7 +9,8 @@ tezt-tezos.tezt-performance-regression octez-libs.crypto tezt-tezos - tezt-tezos.tezt-cloud) + tezt-tezos.tezt-cloud + octez-libs.test-helpers) (flags (:standard) -open Tezt_wrapper @@ -17,4 +18,5 @@ -open Tezt_tezos_tezt_performance_regression -open Tezt_tezos -open Tezt_tezos.Runnable.Syntax - -open Tezt_tezos_tezt_cloud)) + -open Tezt_tezos_tezt_cloud + -open Tezos_test_helpers)) diff --git a/etherlink/tezt/lib/setup.ml b/etherlink/tezt/lib/setup.ml new file mode 100644 index 000000000000..a8153856694c --- /dev/null +++ b/etherlink/tezt/lib/setup.ml @@ -0,0 +1,417 @@ +(*****************************************************************************) +(* *) +(* SPDX-License-Identifier: MIT *) +(* Copyright (c) 2024 Nomadic Labs *) +(* Copyright (c) 2024 Trilitech *) +(* Copyright (c) 2024 Functori *) +(* *) +(*****************************************************************************) + +open Sc_rollup_helpers +open Contract_path + +type l1_contracts = { + delayed_transaction_bridge : string; + exchanger : string; + bridge : string; + admin : string; + sequencer_governance : string; + ticket_router_tester : string; +} + +type sequencer_setup = { + node : Node.t; + client : Client.t; + sc_rollup_address : string; + sc_rollup_node : Sc_rollup_node.t; + observer : Evm_node.t; + sequencer : Evm_node.t; + proxy : Evm_node.t; + l1_contracts : l1_contracts; + boot_sector : string; + kernel : Uses.t; + enable_dal : bool; +} + +let uses _protocol = + [ + Constant.octez_smart_rollup_node; + Constant.octez_evm_node; + Constant.smart_rollup_installer; + ] + +let setup_l1_contracts ?(dictator = Constant.bootstrap2) client = + (* Originates the delayed transaction bridge. *) + let* delayed_transaction_bridge = + Client.originate_contract + ~alias:"evm-seq-delayed-bridge" + ~amount:Tez.zero + ~src:Constant.bootstrap1.public_key_hash + ~prg:(delayed_path ()) + ~burn_cap:Tez.one + client + in + let* () = Client.bake_for_and_wait ~keys:[] client in + (* Originates the exchanger. *) + let* exchanger = + Client.originate_contract + ~alias:"exchanger" + ~amount:Tez.zero + ~src:Constant.bootstrap1.public_key_hash + ~init:"Unit" + ~prg:(exchanger_path ()) + ~burn_cap:Tez.one + client + in + (* Originates the bridge. *) + let* bridge = + Client.originate_contract + ~alias:"evm-bridge" + ~amount:Tez.zero + ~src:Constant.bootstrap2.public_key_hash + ~init:(sf "Pair %S None" exchanger) + ~prg:(bridge_path ()) + ~burn_cap:Tez.one + client + (* Originates the administrator contract. *) + and* admin = + Client.originate_contract + ~alias:"evm-admin" + ~amount:Tez.zero + ~src:Constant.bootstrap3.public_key_hash + ~init:(sf "%S" dictator.Account.public_key_hash) + ~prg:(admin_path ()) + ~burn_cap:Tez.one + client + (* Originates the administrator contract. *) + and* sequencer_governance = + Client.originate_contract + ~alias:"evm-sequencer-admin" + ~amount:Tez.zero + ~src:Constant.bootstrap4.public_key_hash + ~init:(sf "%S" dictator.Account.public_key_hash) + ~prg:(admin_path ()) + ~burn_cap:Tez.one + client + in + let* () = Client.bake_for_and_wait ~keys:[] client in + (* Originates the ticket router tester (FA bridge) contract. *) + let* ticket_router_tester = + Client.originate_contract + ~alias:"ticket-router-tester" + ~amount:Tez.zero + ~src:Constant.bootstrap4.public_key_hash + ~init: + "Pair (Pair 0x01000000000000000000000000000000000000000000 (Pair (Left \ + Unit) 0)) {}" + ~prg:(ticket_router_tester_path ()) + ~burn_cap:Tez.one + client + in + let* () = Client.bake_for_and_wait ~keys:[] client in + return + { + delayed_transaction_bridge; + exchanger; + bridge; + admin; + sequencer_governance; + ticket_router_tester; + } + +let run_new_rpc_endpoint evm_node = + let rpc_node = + Evm_node.create + ~data_dir:(Evm_node.data_dir evm_node) + ~mode:(Rpc Evm_node.(mode evm_node)) + (Evm_node.endpoint evm_node) + in + let* () = Evm_node.run rpc_node in + return rpc_node + +let run_new_observer_node ?(patch_config = Fun.id) ~sc_rollup_node evm_node = + let preimages_dir = Evm_node.preimages_dir evm_node in + let initial_kernel = Evm_node.initial_kernel evm_node in + let* observer_mode = + if Evm_node.supports_threshold_encryption evm_node then + let bundler = + Dsn_node.bundler ~endpoint:(Evm_node.endpoint evm_node) () + in + let* () = Dsn_node.start bundler in + return + (Evm_node.Threshold_encryption_observer + { + initial_kernel; + preimages_dir; + rollup_node_endpoint = Sc_rollup_node.endpoint sc_rollup_node; + bundler_node_endpoint = Dsn_node.endpoint bundler; + }) + else + return + (Evm_node.Observer + { + initial_kernel; + preimages_dir; + rollup_node_endpoint = Sc_rollup_node.endpoint sc_rollup_node; + }) + in + let* observer = + Evm_node.init ~patch_config ~mode:observer_mode (Evm_node.endpoint evm_node) + in + return observer + +let setup_sequencer ?sequencer_rpc_port ?sequencer_private_rpc_port + ~mainnet_compat ?genesis_timestamp ?time_between_blocks ?max_blueprints_lag + ?max_blueprints_ahead ?max_blueprints_catchup ?catchup_cooldown + ?delayed_inbox_timeout ?delayed_inbox_min_levels ?max_number_of_chunks + ?commitment_period ?challenge_window + ?(bootstrap_accounts = + List.map + (fun account -> account.Eth_account.address) + (Array.to_list Eth_account.bootstrap_accounts)) + ?(sequencer = Constant.bootstrap1) ?sequencer_pool_address + ?(kernel = Constant.WASM.evm_kernel) ?da_fee ?minimum_base_fee_per_gas + ?preimages_dir ?maximum_allowed_ticks ?maximum_gas_per_transaction + ?max_blueprint_lookahead_in_seconds ?enable_fa_bridge + ?(threshold_encryption = false) ?(drop_duplicate_when_injection = true) + ?node_transaction_validation ?history_mode ~enable_dal ?dal_slots protocol = + let* node, client = + setup_l1 + ?commitment_period + ?challenge_window + ?timestamp:genesis_timestamp + protocol + in + let* dal_node = + if enable_dal then + let dal_node = Dal_node.create ~node () in + let* () = Dal_node.init_config ?producer_profiles:dal_slots dal_node in + let* () = Dal_node.run ~wait_ready:true dal_node in + some dal_node + else none + in + let client = Client.with_dal_node client ?dal_node in + let* l1_contracts = setup_l1_contracts client in + let sc_rollup_node = + Sc_rollup_node.create + ~default_operator:Constant.bootstrap1.public_key_hash + Operator + node + ~base_dir:(Client.base_dir client) + ?dal_node + ?history_mode + in + let preimages_dir = + Option.value + ~default:(Sc_rollup_node.data_dir sc_rollup_node // "wasm_2_0_0") + preimages_dir + in + let output_config = Temp.file "config.yaml" in + let*! () = + Evm_node.make_kernel_installer_config + ~mainnet_compat + ~sequencer:sequencer.public_key + ~delayed_bridge:l1_contracts.delayed_transaction_bridge + ~ticketer:l1_contracts.exchanger + ~administrator:l1_contracts.admin + ~sequencer_governance:l1_contracts.sequencer_governance + ?minimum_base_fee_per_gas + ?da_fee_per_byte:da_fee + ?delayed_inbox_timeout + ?delayed_inbox_min_levels + ?sequencer_pool_address + ?maximum_allowed_ticks + ?maximum_gas_per_transaction + ~enable_dal + ?dal_slots + ?max_blueprint_lookahead_in_seconds + ~bootstrap_accounts + ~output:output_config + ?enable_fa_bridge + () + in + let* {output; _} = + prepare_installer_kernel ~preimages_dir ~config:(`Path output_config) kernel + in + let* sc_rollup_address = + originate_sc_rollup + ~keys:[] + ~kind:"wasm_2_0_0" + ~boot_sector:("file:" ^ output) + ~parameters_ty:Helpers.evm_type + client + in + let* () = + Sc_rollup_node.run sc_rollup_node sc_rollup_address [Log_kernel_debug] + in + let private_rpc_port = + match sequencer_private_rpc_port with + | Some p -> Some p + | None -> Some (Port.fresh ()) + in + let patch_config = + Evm_node.patch_config_with_experimental_feature + ~drop_duplicate_when_injection + ?node_transaction_validation + (* When adding new experimental feature please make sure it's a + good idea to activate it for all test or not. *) + () + in + let* sequencer_mode = + if threshold_encryption then + let sequencer_sidecar = Dsn_node.sequencer () in + let* () = Dsn_node.start sequencer_sidecar in + return + @@ Evm_node.Threshold_encryption_sequencer + { + initial_kernel = output; + preimage_dir = Some preimages_dir; + private_rpc_port; + time_between_blocks; + sequencer = sequencer.alias; + genesis_timestamp; + max_blueprints_lag; + max_blueprints_ahead; + max_blueprints_catchup; + catchup_cooldown; + max_number_of_chunks; + wallet_dir = Some (Client.base_dir client); + tx_pool_timeout_limit = None; + tx_pool_addr_limit = None; + tx_pool_tx_per_addr_limit = None; + sequencer_sidecar_endpoint = Dsn_node.endpoint sequencer_sidecar; + dal_slots; + } + else + return + @@ Evm_node.Sequencer + { + initial_kernel = output; + preimage_dir = Some preimages_dir; + private_rpc_port; + time_between_blocks; + sequencer = sequencer.alias; + genesis_timestamp; + max_blueprints_lag; + max_blueprints_ahead; + max_blueprints_catchup; + catchup_cooldown; + max_number_of_chunks; + wallet_dir = Some (Client.base_dir client); + tx_pool_timeout_limit = None; + tx_pool_addr_limit = None; + tx_pool_tx_per_addr_limit = None; + dal_slots; + } + in + let* sequencer = + Evm_node.init + ?rpc_port:sequencer_rpc_port + ~patch_config + ~mode:sequencer_mode + (Sc_rollup_node.endpoint sc_rollup_node) + in + let* observer = + run_new_observer_node ~patch_config ~sc_rollup_node sequencer + in + let* proxy = + Evm_node.init + ~patch_config + ~mode:(Proxy {finalized_view = false}) + (Sc_rollup_node.endpoint sc_rollup_node) + in + return + { + node; + client; + sequencer; + proxy; + observer; + l1_contracts; + sc_rollup_address; + sc_rollup_node; + boot_sector = output; + kernel; + enable_dal; + } + +(* Register a single variant of a test but for all protocols. *) +let register_test ?sequencer_rpc_port ?sequencer_private_rpc_port + ?genesis_timestamp ?time_between_blocks ?max_blueprints_lag + ?max_blueprints_ahead ?max_blueprints_catchup ?catchup_cooldown + ?delayed_inbox_timeout ?delayed_inbox_min_levels ?max_number_of_chunks + ?bootstrap_accounts ?sequencer ?sequencer_pool_address ~kernel ?da_fee + ?minimum_base_fee_per_gas ?preimages_dir ?maximum_allowed_ticks + ?maximum_gas_per_transaction ?max_blueprint_lookahead_in_seconds + ?enable_fa_bridge ?commitment_period ?challenge_window + ?(threshold_encryption = false) ?(uses = uses) ?(additional_uses = []) + ?history_mode ~enable_dal + ?(dal_slots = if enable_dal then Some [4] else None) body ~title ~tags + protocols = + let kernel_tag, kernel_use = Kernel.to_uses_and_tags kernel in + let tags = kernel_tag :: tags in + let additional_uses = + (if threshold_encryption then [Constant.octez_dsn_node] else []) + @ [kernel_use] + @ (if enable_dal then [Constant.octez_dal_node] else []) + @ additional_uses + in + let body protocol = + let* sequencer_setup = + setup_sequencer + ?sequencer_rpc_port + ?sequencer_private_rpc_port + ~mainnet_compat:false + ?commitment_period + ?challenge_window + ?genesis_timestamp + ?time_between_blocks + ?max_blueprints_lag + ?max_blueprints_ahead + ?max_blueprints_catchup + ?catchup_cooldown + ?delayed_inbox_timeout + ?delayed_inbox_min_levels + ?max_number_of_chunks + ?bootstrap_accounts + ?sequencer + ?sequencer_pool_address + ~kernel:kernel_use + ?da_fee + ?minimum_base_fee_per_gas + ?preimages_dir + ?maximum_allowed_ticks + ?maximum_gas_per_transaction + ?max_blueprint_lookahead_in_seconds + ?enable_fa_bridge + ~threshold_encryption + ?history_mode + ~enable_dal + ?dal_slots + protocol + in + body sequencer_setup protocol + in + let tags = + (if threshold_encryption then ["threshold_encryption"] else []) + @ (if enable_dal then ["dal"] else []) + @ tags + in + let title = + sf + "%s (%s, %s, %s)" + title + (if threshold_encryption then "te_sequencer" else "sequencer") + kernel_tag + (if enable_dal then "with dal" else "without dal") + in + (* Only register DAL tests for supporting kernels *) + if (not enable_dal) || Kernel.supports_dal kernel then + Protocol.register_test + ~additional_tags:(function Alpha -> [] | _ -> [Tag.slow]) + ~__FILE__ + ~uses:(fun protocol -> uses protocol @ additional_uses) + body + ~title + ~tags + protocols diff --git a/etherlink/tezt/tests/evm_sequencer.ml b/etherlink/tezt/tests/evm_sequencer.ml index 268aecf1f5f2..f672eaace7d7 100644 --- a/etherlink/tezt/tests/evm_sequencer.ml +++ b/etherlink/tezt/tests/evm_sequencer.ml @@ -42,14 +42,8 @@ module Sequencer_rpc = struct return (JSON.as_string res) end -let uses _protocol = - [ - Constant.octez_smart_rollup_node; - Constant.octez_evm_node; - Constant.smart_rollup_installer; - ] - open Helpers +open Setup module Delayed_inbox = struct let content sc_rollup_node = @@ -105,324 +99,6 @@ let arb_da_fee_for_delayed_inbox = Wei.of_eth_int 10_000 (* da fee doesn't apply to delayed inbox, set it arbitrarily high to prove this *) -type l1_contracts = { - delayed_transaction_bridge : string; - exchanger : string; - bridge : string; - admin : string; - sequencer_governance : string; - ticket_router_tester : string; -} - -type sequencer_setup = { - node : Node.t; - client : Client.t; - sc_rollup_address : string; - sc_rollup_node : Sc_rollup_node.t; - observer : Evm_node.t; - sequencer : Evm_node.t; - proxy : Evm_node.t; - l1_contracts : l1_contracts; - boot_sector : string; - kernel : Uses.t; - enable_dal : bool; -} - -let setup_l1_contracts ?(dictator = Constant.bootstrap2) client = - (* Originates the delayed transaction bridge. *) - let* delayed_transaction_bridge = - Client.originate_contract - ~alias:"evm-seq-delayed-bridge" - ~amount:Tez.zero - ~src:Constant.bootstrap1.public_key_hash - ~prg:(delayed_path ()) - ~burn_cap:Tez.one - client - in - let* () = Client.bake_for_and_wait ~keys:[] client in - (* Originates the exchanger. *) - let* exchanger = - Client.originate_contract - ~alias:"exchanger" - ~amount:Tez.zero - ~src:Constant.bootstrap1.public_key_hash - ~init:"Unit" - ~prg:(exchanger_path ()) - ~burn_cap:Tez.one - client - in - (* Originates the bridge. *) - let* bridge = - Client.originate_contract - ~alias:"evm-bridge" - ~amount:Tez.zero - ~src:Constant.bootstrap2.public_key_hash - ~init:(sf "Pair %S None" exchanger) - ~prg:(bridge_path ()) - ~burn_cap:Tez.one - client - (* Originates the administrator contract. *) - and* admin = - Client.originate_contract - ~alias:"evm-admin" - ~amount:Tez.zero - ~src:Constant.bootstrap3.public_key_hash - ~init:(sf "%S" dictator.Account.public_key_hash) - ~prg:(admin_path ()) - ~burn_cap:Tez.one - client - (* Originates the administrator contract. *) - and* sequencer_governance = - Client.originate_contract - ~alias:"evm-sequencer-admin" - ~amount:Tez.zero - ~src:Constant.bootstrap4.public_key_hash - ~init:(sf "%S" dictator.Account.public_key_hash) - ~prg:(admin_path ()) - ~burn_cap:Tez.one - client - in - let* () = Client.bake_for_and_wait ~keys:[] client in - (* Originates the ticket router tester (FA bridge) contract. *) - let* ticket_router_tester = - Client.originate_contract - ~alias:"ticket-router-tester" - ~amount:Tez.zero - ~src:Constant.bootstrap4.public_key_hash - ~init: - "Pair (Pair 0x01000000000000000000000000000000000000000000 (Pair (Left \ - Unit) 0)) {}" - ~prg:(ticket_router_tester_path ()) - ~burn_cap:Tez.one - client - in - let* () = Client.bake_for_and_wait ~keys:[] client in - return - { - delayed_transaction_bridge; - exchanger; - bridge; - admin; - sequencer_governance; - ticket_router_tester; - } - -let run_new_rpc_endpoint evm_node = - let rpc_node = - Evm_node.create - ~data_dir:(Evm_node.data_dir evm_node) - ~mode:(Rpc Evm_node.(mode evm_node)) - (Evm_node.endpoint evm_node) - in - let* () = Evm_node.run rpc_node in - return rpc_node - -let run_new_observer_node ?(patch_config = Fun.id) ~sc_rollup_node evm_node = - let preimages_dir = Evm_node.preimages_dir evm_node in - let initial_kernel = Evm_node.initial_kernel evm_node in - let* observer_mode = - if Evm_node.supports_threshold_encryption evm_node then - let bundler = - Dsn_node.bundler ~endpoint:(Evm_node.endpoint evm_node) () - in - let* () = Dsn_node.start bundler in - return - (Evm_node.Threshold_encryption_observer - { - initial_kernel; - preimages_dir; - rollup_node_endpoint = Sc_rollup_node.endpoint sc_rollup_node; - bundler_node_endpoint = Dsn_node.endpoint bundler; - }) - else - return - (Evm_node.Observer - { - initial_kernel; - preimages_dir; - rollup_node_endpoint = Sc_rollup_node.endpoint sc_rollup_node; - }) - in - let* observer = - Evm_node.init ~patch_config ~mode:observer_mode (Evm_node.endpoint evm_node) - in - return observer - -let setup_sequencer ?sequencer_rpc_port ?sequencer_private_rpc_port - ~mainnet_compat ?genesis_timestamp ?time_between_blocks ?max_blueprints_lag - ?max_blueprints_ahead ?max_blueprints_catchup ?catchup_cooldown - ?delayed_inbox_timeout ?delayed_inbox_min_levels ?max_number_of_chunks - ?commitment_period ?challenge_window - ?(bootstrap_accounts = - List.map - (fun account -> account.Eth_account.address) - (Array.to_list Eth_account.bootstrap_accounts)) - ?(sequencer = Constant.bootstrap1) ?sequencer_pool_address - ?(kernel = Constant.WASM.evm_kernel) ?da_fee ?minimum_base_fee_per_gas - ?preimages_dir ?maximum_allowed_ticks ?maximum_gas_per_transaction - ?max_blueprint_lookahead_in_seconds ?enable_fa_bridge - ?(threshold_encryption = false) ?(drop_duplicate_when_injection = true) - ?history_mode ~enable_dal ?dal_slots protocol = - let* node, client = - setup_l1 - ?commitment_period - ?challenge_window - ?timestamp:genesis_timestamp - protocol - in - let* dal_node = - if enable_dal then - let dal_node = Dal_node.create ~node () in - let* () = Dal_node.init_config ?producer_profiles:dal_slots dal_node in - let* () = Dal_node.run ~wait_ready:true dal_node in - some dal_node - else none - in - let client = Client.with_dal_node client ?dal_node in - let* l1_contracts = setup_l1_contracts client in - let sc_rollup_node = - Sc_rollup_node.create - ~default_operator:Constant.bootstrap1.public_key_hash - Operator - node - ~base_dir:(Client.base_dir client) - ?dal_node - ?history_mode - in - let preimages_dir = - Option.value - ~default:(Sc_rollup_node.data_dir sc_rollup_node // "wasm_2_0_0") - preimages_dir - in - let output_config = Temp.file "config.yaml" in - let*! () = - Evm_node.make_kernel_installer_config - ~mainnet_compat - ~sequencer:sequencer.public_key - ~delayed_bridge:l1_contracts.delayed_transaction_bridge - ~ticketer:l1_contracts.exchanger - ~administrator:l1_contracts.admin - ~sequencer_governance:l1_contracts.sequencer_governance - ?minimum_base_fee_per_gas - ?da_fee_per_byte:da_fee - ?delayed_inbox_timeout - ?delayed_inbox_min_levels - ?sequencer_pool_address - ?maximum_allowed_ticks - ?maximum_gas_per_transaction - ~enable_dal - ?dal_slots - ?max_blueprint_lookahead_in_seconds - ~bootstrap_accounts - ~output:output_config - ?enable_fa_bridge - () - in - let* {output; _} = - prepare_installer_kernel ~preimages_dir ~config:(`Path output_config) kernel - in - let* sc_rollup_address = - originate_sc_rollup - ~keys:[] - ~kind:"wasm_2_0_0" - ~boot_sector:("file:" ^ output) - ~parameters_ty:Helpers.evm_type - client - in - let* () = - Sc_rollup_node.run sc_rollup_node sc_rollup_address [Log_kernel_debug] - in - let private_rpc_port = - match sequencer_private_rpc_port with - | Some p -> Some p - | None -> Some (Port.fresh ()) - in - let patch_config = - Evm_node.patch_config_with_experimental_feature - ~drop_duplicate_when_injection - ~node_transaction_validation:true - (* When adding new experimental feature please make sure it's a - good idea to activate it for all test or not. *) - () - in - let* sequencer_mode = - if threshold_encryption then - let sequencer_sidecar = Dsn_node.sequencer () in - let* () = Dsn_node.start sequencer_sidecar in - return - @@ Evm_node.Threshold_encryption_sequencer - { - initial_kernel = output; - preimage_dir = Some preimages_dir; - private_rpc_port; - time_between_blocks; - sequencer = sequencer.alias; - genesis_timestamp; - max_blueprints_lag; - max_blueprints_ahead; - max_blueprints_catchup; - catchup_cooldown; - max_number_of_chunks; - wallet_dir = Some (Client.base_dir client); - tx_pool_timeout_limit = None; - tx_pool_addr_limit = None; - tx_pool_tx_per_addr_limit = None; - sequencer_sidecar_endpoint = Dsn_node.endpoint sequencer_sidecar; - dal_slots; - } - else - return - @@ Evm_node.Sequencer - { - initial_kernel = output; - preimage_dir = Some preimages_dir; - private_rpc_port; - time_between_blocks; - sequencer = sequencer.alias; - genesis_timestamp; - max_blueprints_lag; - max_blueprints_ahead; - max_blueprints_catchup; - catchup_cooldown; - max_number_of_chunks; - wallet_dir = Some (Client.base_dir client); - tx_pool_timeout_limit = None; - tx_pool_addr_limit = None; - tx_pool_tx_per_addr_limit = None; - dal_slots; - } - in - let* sequencer = - Evm_node.init - ?rpc_port:sequencer_rpc_port - ~patch_config - ~mode:sequencer_mode - (Sc_rollup_node.endpoint sc_rollup_node) - in - let* observer = - run_new_observer_node ~patch_config ~sc_rollup_node sequencer - in - let* proxy = - Evm_node.init - ~patch_config - ~mode:(Proxy {finalized_view = false}) - (Sc_rollup_node.endpoint sc_rollup_node) - in - return - { - node; - client; - sequencer; - proxy; - observer; - l1_contracts; - sc_rollup_address; - sc_rollup_node; - boot_sector = output; - kernel; - enable_dal; - } - let send_raw_transaction_to_delayed_inbox ?(wait_for_next_level = true) ?(amount = Tez.one) ?expect_failure ~sc_rollup_node ~client ~l1_contracts ~sc_rollup_address ?(sender = Constant.bootstrap2) raw_tx = @@ -489,87 +165,6 @@ let send_fa_deposit_to_delayed_inbox ~amount ~l1_contracts ~depositor ~receiver let* _ = next_rollup_node_level ~sc_rollup_node ~client in unit -(* Register a single variant of a test but for all protocols. *) -let register_test ?sequencer_rpc_port ?sequencer_private_rpc_port - ?genesis_timestamp ?time_between_blocks ?max_blueprints_lag - ?max_blueprints_ahead ?max_blueprints_catchup ?catchup_cooldown - ?delayed_inbox_timeout ?delayed_inbox_min_levels ?max_number_of_chunks - ?bootstrap_accounts ?sequencer ?sequencer_pool_address ~kernel ?da_fee - ?minimum_base_fee_per_gas ?preimages_dir ?maximum_allowed_ticks - ?maximum_gas_per_transaction ?max_blueprint_lookahead_in_seconds - ?enable_fa_bridge ?commitment_period ?challenge_window - ?(threshold_encryption = false) ?(uses = uses) ?(additional_uses = []) - ?history_mode ~enable_dal - ?(dal_slots = if enable_dal then Some [4] else None) body ~title ~tags - protocols = - let kernel_tag, kernel_use = Kernel.to_uses_and_tags kernel in - let tags = kernel_tag :: tags in - let additional_uses = - (if threshold_encryption then [Constant.octez_dsn_node] else []) - @ [kernel_use] - @ (if enable_dal then [Constant.octez_dal_node] else []) - @ additional_uses - in - let body protocol = - let* sequencer_setup = - setup_sequencer - ?sequencer_rpc_port - ?sequencer_private_rpc_port - ~mainnet_compat:false - ?commitment_period - ?challenge_window - ?genesis_timestamp - ?time_between_blocks - ?max_blueprints_lag - ?max_blueprints_ahead - ?max_blueprints_catchup - ?catchup_cooldown - ?delayed_inbox_timeout - ?delayed_inbox_min_levels - ?max_number_of_chunks - ?bootstrap_accounts - ?sequencer - ?sequencer_pool_address - ~kernel:kernel_use - ?da_fee - ?minimum_base_fee_per_gas - ?preimages_dir - ?maximum_allowed_ticks - ?maximum_gas_per_transaction - ?max_blueprint_lookahead_in_seconds - ?enable_fa_bridge - ~threshold_encryption - ?history_mode - ~enable_dal - ?dal_slots - protocol - in - body sequencer_setup protocol - in - let tags = - (if threshold_encryption then ["threshold_encryption"] else []) - @ (if enable_dal then ["dal"] else []) - @ tags - in - let title = - sf - "%s (%s, %s, %s)" - title - (if threshold_encryption then "te_sequencer" else "sequencer") - kernel_tag - (if enable_dal then "with dal" else "without dal") - in - (* Only register DAL tests for supporting kernels *) - if (not enable_dal) || Kernel.supports_dal kernel then - Protocol.register_test - ~additional_tags:(function Alpha -> [] | _ -> [Tag.slow]) - ~__FILE__ - ~uses:(fun protocol -> uses protocol @ additional_uses) - body - ~title - ~tags - protocols - (* For each feature (threshold encryption, DAL, FA Bridge), tests may registered with the feature enabled, with the feature disabled, or both. *) type feature_test_registration = diff --git a/manifest/product_etherlink.ml b/manifest/product_etherlink.ml index 30723bdc7257..e095bca73469 100644 --- a/manifest/product_etherlink.ml +++ b/manifest/product_etherlink.ml @@ -32,6 +32,7 @@ let tezt_etherlink = octez_crypto; tezt_tezos |> open_ |> open_ ~m:"Runnable.Syntax"; tezt_cloud |> open_; + octez_test_helpers |> open_; ] ~release_status:Unreleased -- GitLab From 77121bb3bdfbd029ac8e83a500bf7d54120e2107 Mon Sep 17 00:00:00 2001 From: Pierrick Couderc Date: Thu, 22 Aug 2024 17:01:01 +0200 Subject: [PATCH 2/4] Etherlink/Tezt: move helper to register test for multiple kernels in setup --- etherlink/tezt/lib/setup.ml | 47 +++++++++++++++++ etherlink/tezt/tests/evm_sequencer.ml | 73 +++++++++++++-------------- 2 files changed, 82 insertions(+), 38 deletions(-) diff --git a/etherlink/tezt/lib/setup.ml b/etherlink/tezt/lib/setup.ml index a8153856694c..3b88df0b3a90 100644 --- a/etherlink/tezt/lib/setup.ml +++ b/etherlink/tezt/lib/setup.ml @@ -415,3 +415,50 @@ let register_test ?sequencer_rpc_port ?sequencer_private_rpc_port ~title ~tags protocols + +let register_test_for_kernels ?sequencer_rpc_port ?sequencer_private_rpc_port + ?genesis_timestamp ?time_between_blocks ?max_blueprints_lag + ?max_blueprints_ahead ?max_blueprints_catchup ?catchup_cooldown + ?delayed_inbox_timeout ?delayed_inbox_min_levels ?max_number_of_chunks + ?bootstrap_accounts ?sequencer ?sequencer_pool_address + ?(kernels = Kernel.all) ?da_fee ?minimum_base_fee_per_gas ?preimages_dir + ?maximum_allowed_ticks ?maximum_gas_per_transaction + ?max_blueprint_lookahead_in_seconds ?enable_fa_bridge ?history_mode + ?commitment_period ?challenge_window ?additional_uses ~threshold_encryption + ~enable_dal ~title ~tags body protocols = + List.iter + (fun kernel -> + register_test + ?sequencer_rpc_port + ?sequencer_private_rpc_port + ?commitment_period + ?challenge_window + ?genesis_timestamp + ?time_between_blocks + ?max_blueprints_lag + ?max_blueprints_ahead + ?max_blueprints_catchup + ?catchup_cooldown + ?delayed_inbox_timeout + ?delayed_inbox_min_levels + ?max_number_of_chunks + ?bootstrap_accounts + ?sequencer + ?sequencer_pool_address + ~kernel + ?da_fee + ?minimum_base_fee_per_gas + ?preimages_dir + ?maximum_allowed_ticks + ?maximum_gas_per_transaction + ?max_blueprint_lookahead_in_seconds + ?enable_fa_bridge + ?additional_uses + ~threshold_encryption + ?history_mode + ~enable_dal + ~title + ~tags + body + protocols) + kernels diff --git a/etherlink/tezt/tests/evm_sequencer.ml b/etherlink/tezt/tests/evm_sequencer.ml index f672eaace7d7..e049552bc0ac 100644 --- a/etherlink/tezt/tests/evm_sequencer.ml +++ b/etherlink/tezt/tests/evm_sequencer.ml @@ -220,44 +220,41 @@ let register_all ?sequencer_rpc_port ?sequencer_private_rpc_port List.iter (fun (threshold_encryption, te_tags) -> List.iter - (fun kernel -> - List.iter - (fun (enable_dal, dal_tags) -> - register_test - ?sequencer_rpc_port - ?sequencer_private_rpc_port - ?commitment_period - ?challenge_window - ?genesis_timestamp - ?time_between_blocks - ?max_blueprints_lag - ?max_blueprints_ahead - ?max_blueprints_catchup - ?catchup_cooldown - ?delayed_inbox_timeout - ?delayed_inbox_min_levels - ?max_number_of_chunks - ?bootstrap_accounts - ?sequencer - ?sequencer_pool_address - ~kernel - ?da_fee - ?minimum_base_fee_per_gas - ?preimages_dir - ?maximum_allowed_ticks - ?maximum_gas_per_transaction - ?max_blueprint_lookahead_in_seconds - ?enable_fa_bridge - ?additional_uses - ~threshold_encryption - ?history_mode - ~enable_dal - ~title - ~tags:(te_tags @ dal_tags @ tags) - body - protocols) - dal_cases) - kernels) + (fun (enable_dal, dal_tags) -> + register_test_for_kernels + ?sequencer_rpc_port + ?sequencer_private_rpc_port + ?commitment_period + ?challenge_window + ?genesis_timestamp + ?time_between_blocks + ?max_blueprints_lag + ?max_blueprints_ahead + ?max_blueprints_catchup + ?catchup_cooldown + ?delayed_inbox_timeout + ?delayed_inbox_min_levels + ?max_number_of_chunks + ?bootstrap_accounts + ?sequencer + ?sequencer_pool_address + ~kernels + ?da_fee + ?minimum_base_fee_per_gas + ?preimages_dir + ?maximum_allowed_ticks + ?maximum_gas_per_transaction + ?max_blueprint_lookahead_in_seconds + ?enable_fa_bridge + ?additional_uses + ~threshold_encryption + ?history_mode + ~enable_dal + ~title + ~tags:(te_tags @ dal_tags @ tags) + body + protocols) + dal_cases) threshold_encryption_cases let register_upgrade_all ~title ~tags ~genesis_timestamp -- GitLab From 9cd543c3b4cadff399cdab34e480e1ce3047107b Mon Sep 17 00:00:00 2001 From: Pierrick Couderc Date: Thu, 22 Aug 2024 17:46:46 +0200 Subject: [PATCH 3/4] Etherlink/Tezt: add an interface for Setup --- etherlink/tezt/lib/setup.mli | 127 +++++++++++++++++++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 etherlink/tezt/lib/setup.mli diff --git a/etherlink/tezt/lib/setup.mli b/etherlink/tezt/lib/setup.mli new file mode 100644 index 000000000000..39f62831587e --- /dev/null +++ b/etherlink/tezt/lib/setup.mli @@ -0,0 +1,127 @@ +(*****************************************************************************) +(* *) +(* SPDX-License-Identifier: MIT *) +(* Copyright (c) 2024 Nomadic Labs *) +(* Copyright (c) 2024 Trilitech *) +(* Copyright (c) 2024 Functori *) +(* *) +(*****************************************************************************) + +type l1_contracts = { + delayed_transaction_bridge : string; + exchanger : string; + bridge : string; + admin : string; + sequencer_governance : string; + ticket_router_tester : string; +} + +type sequencer_setup = { + node : Node.t; + client : Client.t; + sc_rollup_address : string; + sc_rollup_node : Sc_rollup_node.t; + observer : Evm_node.t; + sequencer : Evm_node.t; + proxy : Evm_node.t; + l1_contracts : l1_contracts; + boot_sector : string; + kernel : Uses.t; + enable_dal : bool; +} + +(** [uses protocol] returns the list of dependencies for the tests. *) +val uses : Protocol.t -> Uses.t list + +(** [setup_l1_contracts ~dictator client] setups the necessary contracts for the + rollup. *) +val setup_l1_contracts : ?dictator:Account.key -> Client.t -> l1_contracts Lwt.t + +(** [run_new_rpc_endpoint node] starts a new rpc node following the setup. *) +val run_new_rpc_endpoint : Evm_node.t -> Evm_node.t Lwt.t + +(**[run_new_rpc_endpoint ~sc_rollup_node node] starts a new observer following + the setup. *) +val run_new_observer_node : + ?patch_config:(Tezt_wrapper.JSON.t -> Tezt_wrapper.JSON.t) -> + sc_rollup_node:Sc_rollup_node.t -> + Evm_node.t -> + Evm_node.t Lwt.t + +(** [register_test] setups the full sequencer environment for the + tests and starts the test. For each of the parameters, please refer to + [Evm_node]. *) +val register_test : + ?sequencer_rpc_port:int -> + ?sequencer_private_rpc_port:int -> + ?genesis_timestamp:Client.timestamp -> + ?time_between_blocks:Evm_node.time_between_blocks -> + ?max_blueprints_lag:int -> + ?max_blueprints_ahead:int -> + ?max_blueprints_catchup:int -> + ?catchup_cooldown:int -> + ?delayed_inbox_timeout:int -> + ?delayed_inbox_min_levels:int -> + ?max_number_of_chunks:int -> + ?bootstrap_accounts:string list -> + ?sequencer:Account.key -> + ?sequencer_pool_address:string -> + kernel:Kernel.t -> + ?da_fee:Wei.t -> + ?minimum_base_fee_per_gas:Wei.t -> + ?preimages_dir:string -> + ?maximum_allowed_ticks:int64 -> + ?maximum_gas_per_transaction:int64 -> + ?max_blueprint_lookahead_in_seconds:int64 -> + ?enable_fa_bridge:bool -> + ?commitment_period:int -> + ?challenge_window:int -> + ?threshold_encryption:bool -> + ?uses:(Protocol.t -> Uses.t list) -> + ?additional_uses:Uses.t list -> + ?history_mode:Sc_rollup_node.history_mode -> + enable_dal:bool -> + ?dal_slots:int list option -> + (sequencer_setup -> Protocol.t -> unit Lwt.t) -> + title:string -> + tags:string list -> + Protocol.t list -> + unit + +(** [register_test_for_kernels] setups the full sequencer environment for the + tests and starts the test. For each of the parameters, please refer to + [Evm_node]. The test is registered for each kernel. *) +val register_test_for_kernels : + ?sequencer_rpc_port:int -> + ?sequencer_private_rpc_port:int -> + ?genesis_timestamp:Client.timestamp -> + ?time_between_blocks:Evm_node.time_between_blocks -> + ?max_blueprints_lag:int -> + ?max_blueprints_ahead:int -> + ?max_blueprints_catchup:int -> + ?catchup_cooldown:int -> + ?delayed_inbox_timeout:int -> + ?delayed_inbox_min_levels:int -> + ?max_number_of_chunks:int -> + ?bootstrap_accounts:string list -> + ?sequencer:Account.key -> + ?sequencer_pool_address:string -> + ?kernels:Kernel.t list -> + ?da_fee:Wei.t -> + ?minimum_base_fee_per_gas:Wei.t -> + ?preimages_dir:string -> + ?maximum_allowed_ticks:int64 -> + ?maximum_gas_per_transaction:int64 -> + ?max_blueprint_lookahead_in_seconds:int64 -> + ?enable_fa_bridge:bool -> + ?history_mode:Sc_rollup_node.history_mode -> + ?commitment_period:int -> + ?challenge_window:int -> + ?additional_uses:Tezt_wrapper.Uses.t list -> + threshold_encryption:bool -> + enable_dal:bool -> + title:string -> + tags:string list -> + (sequencer_setup -> Protocol.t -> unit Lwt.t) -> + Protocol.t list -> + unit -- GitLab From 40f1605d50bd4fd494f0b3b4ab76f22e60adacfa Mon Sep 17 00:00:00 2001 From: Pierrick Couderc Date: Thu, 22 Aug 2024 17:01:59 +0200 Subject: [PATCH 4/4] Etherlink/Tezt: move DAL + Etherlink tests in their own file --- etherlink/tezt/tests/dal_sequencer.ml | 127 ++++++++++++++++++++++++++ etherlink/tezt/tests/dune | 2 +- etherlink/tezt/tests/evm_sequencer.ml | 97 -------------------- manifest/product_etherlink.ml | 2 +- 4 files changed, 129 insertions(+), 99 deletions(-) create mode 100644 etherlink/tezt/tests/dal_sequencer.ml diff --git a/etherlink/tezt/tests/dal_sequencer.ml b/etherlink/tezt/tests/dal_sequencer.ml new file mode 100644 index 000000000000..b01dddc11899 --- /dev/null +++ b/etherlink/tezt/tests/dal_sequencer.ml @@ -0,0 +1,127 @@ +(*****************************************************************************) +(* *) +(* SPDX-License-Identifier: MIT *) +(* Copyright (c) 2024 Nomadic Labs *) +(* Copyright (c) 2024 Functori *) +(* *) +(*****************************************************************************) + +(* Testing + ------- + Component: Smart Optimistic Rollups: Etherlink Sequencer + DAL + Requirement: make -f etherlink.mk build + npm install eth-cli + # Install cast or foundry (see: https://book.getfoundry.sh/getting-started/installation) + curl -L https://foundry.paradigm.xyz | bash + foundryup + make -f etherlink.mk octez-dsn-node + ./scripts/install_dal_trusted_setup.sh + Invocation: dune exec etherlink/tezt/tests/main.exe -- --file dal_sequencer.ml +*) + +open Helpers +open Setup +open Rpc.Syntax + +let register_test = + register_test_for_kernels ~enable_dal:true ~threshold_encryption:false + +(* This test is similar to {Evm_sequencer.test_publish_blueprints} but it also checks + that all 5 blueprints sent from the sequencer were published on the + DAL (and none on the inbox). *) +let test_publish_blueprints_on_dal = + register_test + ~time_between_blocks:Nothing + ~tags:["evm"; "sequencer"; "data"] + ~title:"Sequencer publishes the blueprints to the DAL" + (* We want this test in the CI so we put no extra tags when DAL + is active to avoid having the [ci_disabled] or [slow] tag. *) + @@ + fun {sequencer; proxy; client; sc_rollup_node; enable_dal; _} _protocol -> + let number_of_blueprints = 5 in + + let number_of_blueprints_sent_to_inbox = ref 0 in + let number_of_blueprints_sent_to_dal = ref 0 in + let number_of_signals = ref 0 in + + let count_event event counter = + Evm_node.wait_for sequencer event (fun _json -> + incr counter ; + (* We return None here to keep the loop running *) + None) + in + + let inbox_counter_p = + count_event + "blueprint_injection_on_inbox.v0" + number_of_blueprints_sent_to_inbox + in + + let dal_counter_p = + count_event "blueprint_injection_on_DAL.v0" number_of_blueprints_sent_to_dal + in + + let signal_counter_p = + count_event "signal_publisher_signal_signed.v0" number_of_signals + in + + let* _ = + repeat number_of_blueprints (fun () -> + let*@ _ = produce_block sequencer in + unit) + in + + (* Wait more to avoid flakiness, in particular with DAL *) + let timeout = if enable_dal then 50. else 5. in + let* () = + Evm_node.wait_for_blueprint_injected ~timeout sequencer number_of_blueprints + in + + (* At this point, the evm node should call the batcher endpoint to publish + all the blueprints. Stopping the node is then not a problem. *) + let* () = + bake_until_sync ~__LOC__ ~sc_rollup_node ~client ~sequencer ~proxy () + in + + let* () = + (* bake 2 block when DAL is enabled so evm_node sees it as + finalized in `rollup_node_follower` *) + if enable_dal then + repeat 2 (fun () -> + let* _lvl = next_rollup_node_level ~sc_rollup_node ~client in + unit) + else unit + in + + (* We have unfortunately noticed that the test can be flaky. Sometimes, + the following RPC is done before the proxy being initialised, even though + we wait for it. The source of flakiness is unknown but happens very rarely, + we put a small sleep to make the least flaky possible. *) + let* () = Lwt_unix.sleep 2. in + let* () = check_head_consistency ~left:sequencer ~right:proxy () in + let expected_nb_of_bp_on_dal, expected_nb_of_bp_on_inbox = + if enable_dal then (number_of_blueprints, 0) else (0, number_of_blueprints) + in + let expected_nb_of_signals = expected_nb_of_bp_on_dal in + Check.(expected_nb_of_bp_on_dal = !number_of_blueprints_sent_to_dal) + ~__LOC__ + Check.int + ~error_msg: + "Wrong number of blueprints published on the DAL; Expected %L, got %R." ; + Check.(expected_nb_of_signals = !number_of_signals) + ~__LOC__ + Check.int + ~error_msg:"Wrong number of signals signed; Expected %L, got %R." ; + Check.(expected_nb_of_bp_on_inbox = !number_of_blueprints_sent_to_inbox) + ~__LOC__ + Check.int + ~error_msg: + "Wrong number of blueprints published on the inbox; Expected %L, got %R." ; + Lwt.cancel dal_counter_p ; + Lwt.cancel inbox_counter_p ; + Lwt.cancel signal_counter_p ; + unit + +let protocols = Protocol.all + +let () = test_publish_blueprints_on_dal protocols diff --git a/etherlink/tezt/tests/dune b/etherlink/tezt/tests/dune index d8940fdf62d9..576213a56d73 100644 --- a/etherlink/tezt/tests/dune +++ b/etherlink/tezt/tests/dune @@ -24,7 +24,7 @@ -open Tezt_tezos -open Tezt_tezos.Runnable.Syntax -open Tezt_etherlink) - (modules evm_rollup evm_sequencer validate)) + (modules evm_rollup evm_sequencer validate dal_sequencer)) (executable (name main) diff --git a/etherlink/tezt/tests/evm_sequencer.ml b/etherlink/tezt/tests/evm_sequencer.ml index e049552bc0ac..b8b264ba5ff4 100644 --- a/etherlink/tezt/tests/evm_sequencer.ml +++ b/etherlink/tezt/tests/evm_sequencer.ml @@ -434,102 +434,6 @@ let test_publish_blueprints = let* () = Lwt_unix.sleep 2. in check_head_consistency ~left:sequencer ~right:proxy () -(* This test is similar to test_publish_blueprints but it also checks - that all 5 blueprints sent from the sequencer were published on the - DAL (and none on the inbox). *) -let test_publish_blueprints_on_dal = - register_all - ~time_between_blocks:Nothing - ~tags:["evm"; "sequencer"; "data"] - ~title:"Sequencer publishes the blueprints to the DAL" - (* We want this test in the CI so we put no extra tags when DAL - is active to avoid having the [ci_disabled] or [slow] tag. *) - ~use_dal:(Register_both {extra_tags_with = []; extra_tags_without = []}) - @@ fun {sequencer; proxy; client; sc_rollup_node; enable_dal; _} _protocol -> - let number_of_blueprints = 5 in - - let number_of_blueprints_sent_to_inbox = ref 0 in - let number_of_blueprints_sent_to_dal = ref 0 in - let number_of_signals = ref 0 in - - let count_event event counter = - Evm_node.wait_for sequencer event (fun _json -> - incr counter ; - (* We return None here to keep the loop running *) - None) - in - - let inbox_counter_p = - count_event - "blueprint_injection_on_inbox.v0" - number_of_blueprints_sent_to_inbox - in - - let dal_counter_p = - count_event "blueprint_injection_on_DAL.v0" number_of_blueprints_sent_to_dal - in - - let signal_counter_p = - count_event "signal_publisher_signal_signed.v0" number_of_signals - in - - let* _ = - repeat number_of_blueprints (fun () -> - let*@ _ = produce_block sequencer in - unit) - in - - (* Wait more to avoid flakiness, in particular with DAL *) - let timeout = if enable_dal then 50. else 5. in - let* () = - Evm_node.wait_for_blueprint_injected ~timeout sequencer number_of_blueprints - in - - (* At this point, the evm node should call the batcher endpoint to publish - all the blueprints. Stopping the node is then not a problem. *) - let* () = - bake_until_sync ~__LOC__ ~sc_rollup_node ~client ~sequencer ~proxy () - in - - let* () = - (* bake 2 block when DAL is enabled so evm_node sees it as - finalized in `rollup_node_follower` *) - if enable_dal then - repeat 2 (fun () -> - let* _lvl = next_rollup_node_level ~sc_rollup_node ~client in - unit) - else unit - in - - (* We have unfortunately noticed that the test can be flaky. Sometimes, - the following RPC is done before the proxy being initialised, even though - we wait for it. The source of flakiness is unknown but happens very rarely, - we put a small sleep to make the least flaky possible. *) - let* () = Lwt_unix.sleep 2. in - let* () = check_head_consistency ~left:sequencer ~right:proxy () in - let expected_nb_of_bp_on_dal, expected_nb_of_bp_on_inbox = - if enable_dal then (number_of_blueprints, 0) else (0, number_of_blueprints) - in - let expected_nb_of_signals = expected_nb_of_bp_on_dal in - Check.(expected_nb_of_bp_on_dal = !number_of_blueprints_sent_to_dal) - ~__LOC__ - Check.int - ~error_msg: - "Wrong number of blueprints published on the DAL; Expected %L, got %R." ; - Check.(expected_nb_of_signals = !number_of_signals) - ~__LOC__ - Check.int - ~error_msg:"Wrong number of signals signed; Expected %L, got %R." ; - Check.(expected_nb_of_bp_on_inbox = !number_of_blueprints_sent_to_inbox) - ~__LOC__ - Check.int - ~error_msg: - "Wrong number of blueprints published on the inbox; Expected %L, got %R." ; - Lwt.cancel dal_counter_p ; - Lwt.cancel inbox_counter_p ; - Lwt.cancel signal_counter_p ; - unit - let test_sequencer_too_ahead = let max_blueprints_ahead = 5 in register_all @@ -6252,7 +6156,6 @@ let () = test_persistent_state protocols ; test_patch_state [Protocol.Alpha] ; test_publish_blueprints protocols ; - test_publish_blueprints_on_dal protocols ; test_sequencer_too_ahead protocols ; test_resilient_to_rollup_node_disconnect protocols ; test_can_fetch_smart_rollup_address protocols ; diff --git a/manifest/product_etherlink.ml b/manifest/product_etherlink.ml index e095bca73469..8d389b2b4475 100644 --- a/manifest/product_etherlink.ml +++ b/manifest/product_etherlink.ml @@ -185,7 +185,7 @@ let _octez_evm_node_tests = let _tezt_etherlink = tezt - ["evm_rollup"; "evm_sequencer"; "validate"] + ["evm_rollup"; "evm_sequencer"; "validate"; "dal_sequencer"] ~path:"etherlink/tezt/tests" ~opam:"tezt-etherlink" ~synopsis:"Tezt integration tests for Etherlink" -- GitLab