diff --git a/etherlink/tezt/lib/kernel.ml b/etherlink/tezt/lib/kernel.ml index cdeceb6d1892d98e3ce6b80f4d6e061a873cbb79..4d816b3938ffc095906c17ce007aed904970e718 100644 --- a/etherlink/tezt/lib/kernel.ml +++ b/etherlink/tezt/lib/kernel.ml @@ -2,6 +2,7 @@ (* *) (* SPDX-License-Identifier: MIT *) (* Copyright (c) 2024 Nomadic Labs *) +(* Copyright (c) 2025 Functori *) (* *) (*****************************************************************************) @@ -26,6 +27,8 @@ let of_tag_use u = let supports_dal = function Mainnet -> false | Latest -> true +let supports_revm = function Mainnet -> false | Latest -> true + (* Select the appropriate EVM version for the specified kernel. NOTE: This function must be updated when Mainnet kernels start diff --git a/etherlink/tezt/lib/setup.ml b/etherlink/tezt/lib/setup.ml index 9a54768f406f00b7018d931cc3b9a58afd1fc8d1..b2c32a6ecb8d9437158c1bd83f8279428f52cafb 100644 --- a/etherlink/tezt/lib/setup.ml +++ b/etherlink/tezt/lib/setup.ml @@ -247,7 +247,7 @@ let setup_kernel_singlechain ~l1_contracts ?max_delayed_inbox_blueprint_length ?(eth_bootstrap_accounts = Evm_node.eth_default_bootstrap_accounts) ?sequencer_pool_address ?da_fee_per_byte ?minimum_base_fee_per_gas ?maximum_allowed_ticks ?maximum_gas_per_transaction - ?max_blueprint_lookahead_in_seconds ?enable_fa_bridge ?enable_revm + ?max_blueprint_lookahead_in_seconds ?enable_fa_bridge ~enable_revm ?enable_fast_withdrawal ?enable_fast_fa_withdrawal ~enable_dal ?dal_slots ?evm_version ~sequencer ~preimages_dir ~kernel () = let output_config = Temp.file "config.yaml" in @@ -277,7 +277,7 @@ let setup_kernel_singlechain ~l1_contracts ?max_delayed_inbox_blueprint_length ~output:output_config ?evm_version ?enable_fa_bridge - ?enable_revm + ~enable_revm () in let* {output; _} = @@ -338,7 +338,7 @@ let generate_l2_kernel_config (l2_setup : Evm_node.l2_setup) client = let setup_kernel_multichain ~(l2_setups : Evm_node.l2_setup list) ~l1_contracts ?max_delayed_inbox_blueprint_length ~mainnet_compat ?delayed_inbox_timeout ?delayed_inbox_min_levels ?maximum_allowed_ticks - ?max_blueprint_lookahead_in_seconds ?enable_fa_bridge ?enable_revm + ?max_blueprint_lookahead_in_seconds ?enable_fa_bridge ~enable_revm ?enable_fast_withdrawal ?enable_fast_fa_withdrawal ~enable_dal ?dal_slots ~sequencer ~preimages_dir ?evm_version ~kernel ~client () = let l2_chain_ids = List.map (fun l2 -> l2.Evm_node.l2_chain_id) l2_setups in @@ -414,7 +414,7 @@ let setup_kernel_multichain ~(l2_setups : Evm_node.l2_setup list) ~l1_contracts ?eth_bootstrap_accounts ~output:rollup_config ?enable_fa_bridge - ?enable_revm + ~enable_revm ?evm_version () in @@ -430,7 +430,7 @@ let setup_kernel ~enable_multichain ~l2_chains ~l1_contracts ?max_delayed_inbox_blueprint_length ~mainnet_compat ~sequencer ?delayed_inbox_timeout ?delayed_inbox_min_levels ?maximum_allowed_ticks ~enable_dal ?enable_fast_withdrawal ?enable_fast_fa_withdrawal ?dal_slots - ?max_blueprint_lookahead_in_seconds ?enable_fa_bridge ?enable_revm + ?max_blueprint_lookahead_in_seconds ?enable_fa_bridge ~enable_revm ~preimages_dir ~kernel ?evm_version ~client () = if not enable_multichain then ( assert (List.length l2_chains = 1) ; @@ -454,7 +454,7 @@ let setup_kernel ~enable_multichain ~l2_chains ~l1_contracts ?max_blueprint_lookahead_in_seconds ?eth_bootstrap_accounts:chain_config.Evm_node.eth_bootstrap_accounts ?enable_fa_bridge - ?enable_revm + ~enable_revm ?evm_version ~preimages_dir ~kernel @@ -471,7 +471,7 @@ let setup_kernel ~enable_multichain ~l2_chains ~l1_contracts ?maximum_allowed_ticks ~enable_dal ?enable_fa_bridge - ?enable_revm + ~enable_revm ?enable_fast_withdrawal ?enable_fast_fa_withdrawal ?dal_slots @@ -490,7 +490,7 @@ let setup_sequencer_internal ?max_delayed_inbox_blueprint_length ?commitment_period ?challenge_window ?(sequencer = Constant.bootstrap1) ?(kernel = Constant.WASM.evm_kernel) ?evm_version ?preimages_dir ?maximum_allowed_ticks ?max_blueprint_lookahead_in_seconds ?enable_fa_bridge - ?enable_revm ?enable_fast_withdrawal ?enable_fast_fa_withdrawal + ~enable_revm ?enable_fast_withdrawal ?enable_fast_fa_withdrawal ?(threshold_encryption = false) ?(drop_duplicate_when_injection = true) ?(blueprints_publisher_order_enabled = true) ?rollup_history_mode ~enable_dal ?dal_slots ~enable_multichain ~l2_chains ?rpc_server ?websockets @@ -547,7 +547,7 @@ let setup_sequencer_internal ?max_delayed_inbox_blueprint_length ?evm_version ?max_blueprint_lookahead_in_seconds ?enable_fa_bridge - ?enable_revm + ~enable_revm ~preimages_dir ~kernel ~client @@ -718,7 +718,7 @@ let setup_sequencer ?max_delayed_inbox_blueprint_length ?next_wasm_runtime ?(tez_bootstrap_accounts = Evm_node.tez_default_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 ?enable_revm + ?max_blueprint_lookahead_in_seconds ?enable_fa_bridge ~enable_revm ?enable_fast_withdrawal ?enable_fast_fa_withdrawal ?threshold_encryption ?drop_duplicate_when_injection ?blueprints_publisher_order_enabled ?rollup_history_mode ~enable_dal ?dal_slots ~enable_multichain ?rpc_server @@ -765,7 +765,7 @@ let setup_sequencer ?max_delayed_inbox_blueprint_length ?next_wasm_runtime ?maximum_allowed_ticks ?max_blueprint_lookahead_in_seconds ?enable_fa_bridge - ?enable_revm + ~enable_revm ?enable_fast_withdrawal ?enable_fast_fa_withdrawal ?blueprints_publisher_order_enabled @@ -796,7 +796,7 @@ let register_multichain_test ~__FILE__ ?max_delayed_inbox_blueprint_length ?tez_bootstrap_contracts ?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 ?enable_revm ?enable_fast_withdrawal + ?enable_fa_bridge ~enable_revm ?enable_fast_withdrawal ?enable_fast_fa_withdrawal ?commitment_period ?challenge_window ?(threshold_encryption = false) ?(uses = uses) ?(additional_uses = []) ?rollup_history_mode ~enable_dal @@ -859,7 +859,7 @@ let register_multichain_test ~__FILE__ ?max_delayed_inbox_blueprint_length ?maximum_allowed_ticks ?max_blueprint_lookahead_in_seconds ?enable_fa_bridge - ?enable_revm + ~enable_revm ?enable_fast_withdrawal ?enable_fast_fa_withdrawal ~threshold_encryption @@ -882,19 +882,25 @@ let register_multichain_test ~__FILE__ ?max_delayed_inbox_blueprint_length (if threshold_encryption then ["threshold_encryption"] else []) @ (if enable_dal then ["dal"] else []) @ (if enable_multichain then ["multichain_enabled"] else []) + @ (if enable_revm then ["revm"] else []) @ tags in let title = sf - "%s (%s, %s, %s, %s)" + "%s (%s, %s, %s, %s, %s)" title (if threshold_encryption then "te_sequencer" else "sequencer") kernel_tag (if enable_dal then "with dal" else "without dal") (if enable_multichain then "multichain" else "single chain") + (if enable_revm then "with revm" else "without revm") in - (* Only register DAL tests for supporting kernels *) - if (not enable_dal) || Kernel.supports_dal kernel then + if + (* Only register DAL tests for supporting kernels *) + ((not enable_dal) || Kernel.supports_dal kernel) + && (* Only register REVM tests for supporting kernels *) + ((not enable_revm) || Kernel.supports_revm kernel) + then Protocol.register_test ~additional_tags:(function | Alpha -> [] @@ -918,7 +924,7 @@ let register_test ~__FILE__ ?max_delayed_inbox_blueprint_length ?(tez_bootstrap_accounts = Evm_node.tez_default_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 ?enable_revm + ?max_blueprint_lookahead_in_seconds ?enable_fa_bridge ~enable_revm ?enable_fast_withdrawal ?enable_fast_fa_withdrawal ?commitment_period ?challenge_window ?threshold_encryption ?uses ?additional_uses ?rollup_history_mode ~enable_dal ?dal_slots ~enable_multichain ?rpc_server @@ -953,7 +959,7 @@ let register_test ~__FILE__ ?max_delayed_inbox_blueprint_length ?maximum_gas_per_transaction ?max_blueprint_lookahead_in_seconds ?enable_fa_bridge - ?enable_revm + ~enable_revm ?enable_fast_withdrawal ?enable_fast_fa_withdrawal ?commitment_period @@ -987,7 +993,7 @@ let register_test_for_kernels ~__FILE__ ?max_delayed_inbox_blueprint_length ?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 ?enable_revm ?rollup_history_mode ?commitment_period + ?enable_fa_bridge ~enable_revm ?rollup_history_mode ?commitment_period ?challenge_window ?additional_uses ~threshold_encryption ~enable_dal ?dal_slots ~enable_multichain ?rpc_server ?websockets ?enable_fast_withdrawal ?enable_fast_fa_withdrawal ?history_mode @@ -1023,7 +1029,7 @@ let register_test_for_kernels ~__FILE__ ?max_delayed_inbox_blueprint_length ?maximum_gas_per_transaction ?max_blueprint_lookahead_in_seconds ?enable_fa_bridge - ?enable_revm + ~enable_revm ?enable_fast_withdrawal ?enable_fast_fa_withdrawal ?additional_uses diff --git a/etherlink/tezt/lib/setup.mli b/etherlink/tezt/lib/setup.mli index c8d0fbb9aed493a02aa5f827bf79c7b5ab121e00..0181580d8810b3ba370055e1ffc666b1b7b432cc 100644 --- a/etherlink/tezt/lib/setup.mli +++ b/etherlink/tezt/lib/setup.mli @@ -3,7 +3,7 @@ (* SPDX-License-Identifier: MIT *) (* Copyright (c) 2024 Nomadic Labs *) (* Copyright (c) 2024 Trilitech *) -(* Copyright (c) 2024 Functori *) +(* Copyright (c) 2024-2025 Functori *) (* *) (*****************************************************************************) @@ -104,7 +104,7 @@ val register_test : ?maximum_gas_per_transaction:int64 -> ?max_blueprint_lookahead_in_seconds:int64 -> ?enable_fa_bridge:bool -> - ?enable_revm:bool -> + enable_revm:bool -> ?enable_fast_withdrawal:bool -> ?enable_fast_fa_withdrawal:bool -> ?commitment_period:int -> @@ -156,7 +156,7 @@ val register_multichain_test : ?maximum_gas_per_transaction:int64 -> ?max_blueprint_lookahead_in_seconds:int64 -> ?enable_fa_bridge:bool -> - ?enable_revm:bool -> + enable_revm:bool -> ?enable_fast_withdrawal:bool -> ?enable_fast_fa_withdrawal:bool -> ?commitment_period:int -> @@ -210,7 +210,7 @@ val register_test_for_kernels : ?maximum_gas_per_transaction:int64 -> ?max_blueprint_lookahead_in_seconds:int64 -> ?enable_fa_bridge:bool -> - ?enable_revm:bool -> + enable_revm:bool -> ?rollup_history_mode:Sc_rollup_node.history_mode -> ?commitment_period:int -> ?challenge_window:int -> @@ -263,7 +263,7 @@ val setup_sequencer : ?maximum_gas_per_transaction:int64 -> ?max_blueprint_lookahead_in_seconds:int64 -> ?enable_fa_bridge:bool -> - ?enable_revm:bool -> + enable_revm:bool -> ?enable_fast_withdrawal:bool -> ?enable_fast_fa_withdrawal:bool -> ?threshold_encryption:bool -> diff --git a/etherlink/tezt/tests/dal_sequencer.ml b/etherlink/tezt/tests/dal_sequencer.ml index 0193ba8a796f29f19122428ff07da4e2b62c40a6..f4021aab86cb83becb5464389afa3da5ef6431ea 100644 --- a/etherlink/tezt/tests/dal_sequencer.ml +++ b/etherlink/tezt/tests/dal_sequencer.ml @@ -29,6 +29,7 @@ let register_test = ~enable_dal:true ~enable_multichain:false ~threshold_encryption:false + ~enable_revm:false let count_event ?(get_count_from_event = fun _event -> 1) sequencer event counter = diff --git a/etherlink/tezt/tests/eth_call.ml b/etherlink/tezt/tests/eth_call.ml index d0bc1e9783e0839a3af32fac4945b4beaaf86fd5..3bf9eb0629da5720607908fc0eb9991aad37b2e4 100644 --- a/etherlink/tezt/tests/eth_call.ml +++ b/etherlink/tezt/tests/eth_call.ml @@ -38,6 +38,7 @@ let register ?genesis_timestamp ?eth_bootstrap_accounts ?tez_bootstrap_accounts ?rollup_history_mode ~enable_dal:false ~enable_multichain:false + ~enable_revm:false ~threshold_encryption:false ~title ~tags diff --git a/etherlink/tezt/tests/evm_sequencer.ml b/etherlink/tezt/tests/evm_sequencer.ml index fa8a4b17affe3bb3385c6bd62b4b968749883b38..a481635f72682dba5b8873c1929e9a7de6d6d762 100644 --- a/etherlink/tezt/tests/evm_sequencer.ml +++ b/etherlink/tezt/tests/evm_sequencer.ml @@ -216,6 +216,13 @@ let default_multichain_registration = Register_both {additional_tags_with = [Tag.extra]; additional_tags_without = []} +(* By default REVM is completely disabled. *) +let default_revm_registration = Register_without_feature + +(* Use this value to register a specific test in the CI. *) +let activate_revm_registration = + Register_both {additional_tags_with = []; additional_tags_without = []} + let register_sandbox ?tx_pool_tx_per_addr_limit ~title ?set_account_code ?da_fee_per_byte ?minimum_base_fee_per_gas ~tags ?patch_config ?websockets body = @@ -254,34 +261,24 @@ let register_all ?max_delayed_inbox_blueprint_length ?sequencer_rpc_port ?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 ?enable_revm ?rollup_history_mode ?commitment_period - ?challenge_window ?additional_uses ?rpc_server ?websockets - ?enable_fast_withdrawal ?enable_fast_fa_withdrawal ?history_mode + ?enable_fa_bridge ?rollup_history_mode ?commitment_period ?challenge_window + ?additional_uses ?rpc_server ?websockets ?enable_fast_withdrawal + ?enable_fast_fa_withdrawal ?history_mode ?(use_threshold_encryption = default_threshold_encryption_registration) ?(use_dal = default_dal_registration) - ?(use_multichain = default_multichain_registration) ?enable_tx_queue - ?spawn_rpc ?periodic_snapshot_path ?l2_setups ~title ~tags body protocols = - let dal_cases = - match use_dal with - | Register_both {additional_tags_with; additional_tags_without} -> - [(false, additional_tags_without); (true, additional_tags_with)] - | Register_with_feature -> [(true, [])] - | Register_without_feature -> [(false, [])] - in - let threshold_encryption_cases = - match use_threshold_encryption with - | Register_both {additional_tags_with; additional_tags_without} -> - [(false, additional_tags_without); (true, additional_tags_with)] - | Register_with_feature -> [(true, [])] - | Register_without_feature -> [(false, [])] - in - let multichain_cases = - match use_multichain with + ?(use_multichain = default_multichain_registration) + ?(use_revm = default_revm_registration) ?enable_tx_queue ?spawn_rpc + ?periodic_snapshot_path ?l2_setups ~title ~tags body protocols = + let register_cases = function | Register_both {additional_tags_with; additional_tags_without} -> [(false, additional_tags_without); (true, additional_tags_with)] | Register_with_feature -> [(true, [])] | Register_without_feature -> [(false, [])] in + let dal_cases = register_cases use_dal in + let threshold_encryption_cases = register_cases use_threshold_encryption in + let multichain_cases = register_cases use_multichain in + let revm_cases = register_cases use_revm in (* TODO: https://gitlab.com/tezos/tezos/-/issues/7367 Also register the tests with and without FA bridge feature flag. *) List.iter @@ -290,60 +287,64 @@ 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 - ?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 - ?eth_bootstrap_accounts - ?tez_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 - ?enable_revm - ?enable_fast_withdrawal - ?enable_fast_fa_withdrawal - ?additional_uses - ?rpc_server - ?websockets - ?history_mode - ~threshold_encryption - ?rollup_history_mode - ~enable_dal - ~enable_multichain - ?enable_tx_queue - ?spawn_rpc - ?periodic_snapshot_path - ?l2_setups - ~title - ~tags:(te_tags @ dal_tags @ multichain_tags @ tags) - body - protocols) + List.iter + (fun (enable_revm, revm_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 + ?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 + ?eth_bootstrap_accounts + ?tez_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 + ~enable_revm + ?enable_fast_withdrawal + ?enable_fast_fa_withdrawal + ?additional_uses + ?rpc_server + ?websockets + ?history_mode + ~threshold_encryption + ?rollup_history_mode + ~enable_dal + ~enable_multichain + ?enable_tx_queue + ?spawn_rpc + ?periodic_snapshot_path + ?l2_setups + ~title + ~tags: + (te_tags @ dal_tags @ multichain_tags @ revm_tags @ tags) + body + protocols) + revm_cases) multichain_cases) dal_cases) threshold_encryption_cases @@ -746,6 +747,7 @@ let test_tezlink_constants = ~mainnet_compat:false ~enable_dal:false ~enable_multichain:true + ~enable_revm:false ~l2_chains ~rpc_server:Evm_node.Resto ~spawn_rpc:(Port.fresh ()) @@ -1539,6 +1541,7 @@ let test_patch_state = ~kernel:Kernel.Latest ~enable_dal:false ~enable_multichain:false + ~enable_revm:false ~tags:["evm"; "patch"; "state"] ~title:"Patch state via command" ~time_between_blocks:Nothing @@ -10867,6 +10870,7 @@ let test_describe_endpoint = ~mainnet_compat:false ~enable_dal:false ~enable_multichain:true + ~enable_revm:false ~l2_chains ~rpc_server:Evm_node.Resto ~spawn_rpc:(Port.fresh ()) @@ -11163,6 +11167,7 @@ let test_configuration_service = ~mainnet_compat:false ~enable_dal:false ~enable_multichain:false + ~enable_revm:false protocol in let* proxy_config = Rpc.configuration proxy in @@ -11873,6 +11878,7 @@ let test_node_correctly_uses_batcher_heap = ~kernel:Kernel.Latest ~enable_dal:false ~enable_multichain:false + ~enable_revm:false ~max_blueprints_lag ~max_blueprints_catchup ~catchup_cooldown @@ -12220,6 +12226,7 @@ let test_rpc_getLogs_with_earliest_fail = ~tags:["evm"; "rpc"; "get_logs"; "earliest"] ~title:"RPC method getLogs with earliest block" ~minimum_base_fee_per_gas:base_fee_for_hardcoded_tx + ~use_revm:activate_revm_registration @@ fun {sequencer; evm_version; _} _protocol -> let endpoint = Evm_node.endpoint sequencer in let sender = Eth_account.bootstrap_accounts.(0) in @@ -13169,6 +13176,9 @@ let test_deposit_event = ~time_between_blocks:Nothing ~mainnet_compat:false ~enable_dal:false + (* TODO: temporary, needs migration to set custom precompile's + bytecode. *) + ~enable_revm:false ~enable_multichain:false protocol in @@ -13233,6 +13243,9 @@ let test_withdrawal_events = ~mainnet_compat:false ~enable_dal:false ~enable_multichain:false + (* TODO: temporary, needs migration to set custom precompile's + bytecode. *) + ~enable_revm:false ~enable_fast_withdrawal:true protocol in @@ -13320,6 +13333,9 @@ let test_fa_deposit_and_withdrawals_events = ~mainnet_compat:false ~enable_dal:false ~enable_multichain:false + (* TODO: temporary, needs migration to set custom precompile's + bytecode. *) + ~enable_revm:false ~enable_fa_bridge:true ~enable_fast_fa_withdrawal:true protocol