diff --git a/etherlink/kernel_evm/kernel/tests/resources/mainnet_evm_kernel.wasm b/etherlink/kernel_evm/kernel/tests/resources/mainnet_evm_kernel.wasm new file mode 100644 index 0000000000000000000000000000000000000000..84de9e0ae609ae60b581a0b05eaa6613e71199f0 Binary files /dev/null and b/etherlink/kernel_evm/kernel/tests/resources/mainnet_evm_kernel.wasm differ diff --git a/etherlink/tezt/lib/kernel.ml b/etherlink/tezt/lib/kernel.ml index aae2d8999a21d17ab1c3311214f17c031ff9465c..419daf00b64c1ca04e68599b7979c96920f7939d 100644 --- a/etherlink/tezt/lib/kernel.ml +++ b/etherlink/tezt/lib/kernel.ml @@ -5,20 +5,27 @@ (* *) (*****************************************************************************) -(** This type is used to register test based on which kernel version the test - should run on. *) -type t = - | All (** The tests will run on all available kernels. *) - | Mainnet (** The tests will run on mainnet kernel only. *) - | Latest (** The tests will run latest kernel only. *) +type t = Mainnet | Ghostnet | Latest -(** Mainnet version is actually the ghostnet kernel. We can use the same - declaration as long a both run the same code. *) -let mainnet = ("mainnet", Constant.WASM.ghostnet_evm_kernel) - -let latest = ("latest", Constant.WASM.evm_kernel) +let all = [Mainnet; Ghostnet; Latest] let to_uses_and_tags = function - | All -> [mainnet; latest] - | Mainnet -> [mainnet] - | Latest -> [latest] + | Mainnet -> ("mainnet", Constant.WASM.mainnet_evm_kernel) + | Ghostnet -> ("ghostnet", Constant.WASM.ghostnet_evm_kernel) + | Latest -> ("latest", Constant.WASM.evm_kernel) + +let commit_of = function + | Mainnet -> Some Constant.WASM.mainnet_evm_commit + | Ghostnet -> Some Constant.WASM.ghostnet_evm_commit + | Latest -> None + +let upgrade_to = function + | Mainnet -> Latest + | Ghostnet -> Latest + | Latest -> Latest + +let of_use u = + if Uses.(tag u = tag Constant.WASM.mainnet_evm_kernel) then Mainnet + else if Uses.(tag u = tag Constant.WASM.ghostnet_evm_kernel) then Ghostnet + else if Uses.(tag u = tag Constant.WASM.evm_kernel) then Latest + else raise (Invalid_argument "Kernel.of_use") diff --git a/etherlink/tezt/tests/evm_rollup.ml b/etherlink/tezt/tests/evm_rollup.ml index 29490601561050d5d8cd7215ce59084b766f24bf..39bb16fbb0e878914dd223c8df1118de62ae77bb 100644 --- a/etherlink/tezt/tests/evm_rollup.ml +++ b/etherlink/tezt/tests/evm_rollup.ml @@ -442,7 +442,7 @@ let setup_evm_kernel ?devmode ?additional_config kernel_root_hash = root_hash; } -let register_test ~title ~tags ?(kernel = Kernel.All) ?additional_config ?admin +let register_test ~title ~tags ?(kernels = Kernel.all) ?additional_config ?admin ?(additional_uses = []) ?commitment_period ?challenge_window ?bootstrap_accounts ?whitelist ?da_fee_per_byte ?minimum_base_fee_per_gas ?rollup_operator_key ?maximum_allowed_ticks ~setup_mode f protocols = @@ -490,15 +490,15 @@ let register_test ~title ~tags ?(kernel = Kernel.All) ?additional_config ?admin in f ~protocol ~evm_setup) protocols) - (Kernel.to_uses_and_tags kernel) + (List.map Kernel.to_uses_and_tags kernels) -let register_proxy ~title ~tags ?kernel ?additional_uses ?admin +let register_proxy ~title ~tags ?kernels ?additional_uses ?admin ?commitment_period ?challenge_window ?bootstrap_accounts ?minimum_base_fee_per_gas ?maximum_allowed_ticks f protocols = register_test ~title ~tags - ?kernel + ?kernels ?additional_uses ?admin ?commitment_period @@ -510,7 +510,7 @@ let register_proxy ~title ~tags ?kernel ?additional_uses ?admin protocols ~setup_mode:(Setup_proxy {devmode = true}) -let register_sequencer ~title ~tags ?kernel ?additional_uses ?additional_config +let register_sequencer ~title ~tags ?kernels ?additional_uses ?additional_config ?admin ?commitment_period ?challenge_window ?bootstrap_accounts ?da_fee_per_byte ?minimum_base_fee_per_gas ?time_between_blocks ?whitelist ?rollup_operator_key ?maximum_allowed_ticks f protocols = @@ -518,7 +518,7 @@ let register_sequencer ~title ~tags ?kernel ?additional_uses ?additional_config register_test ~title ~tags - ?kernel + ?kernels ?additional_uses ?additional_config ?admin @@ -538,7 +538,7 @@ let register_sequencer ~title ~tags ?kernel ?additional_uses ?additional_config (Setup_sequencer {time_between_blocks; sequencer = Constant.bootstrap1; devmode = true}) -let register_both ~title ~tags ?kernel ?additional_uses ?additional_config +let register_both ~title ~tags ?kernels ?additional_uses ?additional_config ?admin ?commitment_period ?challenge_window ?bootstrap_accounts ?da_fee_per_byte ?minimum_base_fee_per_gas ?time_between_blocks ?whitelist ?rollup_operator_key ?maximum_allowed_ticks f protocols = @@ -546,7 +546,7 @@ let register_both ~title ~tags ?kernel ?additional_uses ?additional_config register_test ~title ~tags - ?kernel + ?kernels ?additional_uses ?additional_config ?admin @@ -818,7 +818,7 @@ let test_rpc_getBlockBy_return_base_fee_per_gas_and_mix_hash = register_both (* TODO: https://gitlab.com/tezos/tezos/-/issues/7285 Replace by [Any] after the next upgrade *) - ~kernel:Latest + ~kernels:[Latest] ~tags:["evm"; "rpc"; "get_block_by_hash"] ~title:"getBlockBy returns base fee per gas and mix hash" ~minimum_base_fee_per_gas:(Wei.to_wei_z @@ Z.of_int 100) @@ -1521,7 +1521,7 @@ let test_chunked_transaction = let test_rpc_txpool_content = register_sequencer - ~kernel:Latest + ~kernels:[Latest] ~tags:["evm"; "rpc"; "txpool_content"] ~title:"Check RPC txpool_content is available" ~minimum_base_fee_per_gas:base_fee_for_hardcoded_tx @@ -2362,7 +2362,7 @@ let test_withdraw_amount = register_proxy (* TODO: https://gitlab.com/tezos/tezos/-/issues/7285 Replace by [Any] after the next upgrade *) - ~kernel:Latest + ~kernels:[Latest] ~tags:["evm"; "withdraw"; "wei"; "mutez"] ~title:"Minimum amout to withdraw" ~admin @@ -5714,9 +5714,11 @@ let test_unsupported_rpc = let test_validation_with_legacy_encoding = register_both + (* TODO: https://gitlab.com/tezos/tezos/-/issues/7285 + Remove [Ghostnet] after the next upgrade *) + ~kernels:[Mainnet; Ghostnet] ~title:"Transaction pool can read the legacy encodings of the validation" ~tags:["evm"; "txpool"; "validation"; "legacy"] - ~kernel:Kernel.Mainnet @@ fun ~protocol:_ ~evm_setup -> let* tx_hash = send @@ -5737,7 +5739,7 @@ let test_rpc_feeHistory = register_both (* TODO: https://gitlab.com/tezos/tezos/-/issues/7285 Replace by [Any] after the next upgrade *) - ~kernel:Latest + ~kernels:[Latest] ~tags:["evm"; "rpc"; "fee_history"] ~title:"RPC methods eth_feeHistory" @@ fun ~protocol:_ ~evm_setup -> @@ -5787,7 +5789,7 @@ let test_rpc_feeHistory_past = register_both (* TODO: https://gitlab.com/tezos/tezos/-/issues/7285 Replace by [Any] after the next upgrade *) - ~kernel:Latest + ~kernels:[Latest] ~tags:["evm"; "rpc"; "fee_history"; "past"] ~title:"RPC methods eth_feeHistory in the past" @@ fun ~protocol:_ ~evm_setup -> @@ -5819,7 +5821,7 @@ let test_rpc_feeHistory_future = register_both (* TODO: https://gitlab.com/tezos/tezos/-/issues/7285 Replace by [Any] after the next upgrade *) - ~kernel:Latest + ~kernels:[Latest] ~tags:["evm"; "rpc"; "fee_history"; "future"] ~title:"RPC methods eth_feeHistory in the future" @@ fun ~protocol:_ ~evm_setup -> @@ -5840,7 +5842,7 @@ let test_rpc_feeHistory_long = register_both (* TODO: https://gitlab.com/tezos/tezos/-/issues/7285 Replace by [Any] after the next upgrade *) - ~kernel:Latest + ~kernels:[Latest] ~tags:["evm"; "rpc"; "fee_history"; "block_count"] ~title:"RPC methods eth_feeHistory with high blockCount" @@ fun ~protocol:_ ~evm_setup -> diff --git a/etherlink/tezt/tests/evm_sequencer.ml b/etherlink/tezt/tests/evm_sequencer.ml index 2c0e4176a7db761b5741ef3ab33ce764fb7e19c1..6a85444535184ddbae5082ce5ebb42d06ffe3908 100644 --- a/etherlink/tezt/tests/evm_sequencer.ml +++ b/etherlink/tezt/tests/evm_sequencer.ml @@ -423,7 +423,7 @@ let register_both ?devmode ?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.All) ?da_fee ?minimum_base_fee_per_gas ?preimages_dir + ?(kernels = Kernel.all) ?da_fee ?minimum_base_fee_per_gas ?preimages_dir ?maximum_allowed_ticks ?maximum_gas_per_transaction ?history_mode ?additional_uses ~title ~tags body protocols = let register ~kernel ~threshold_encryption = @@ -461,7 +461,7 @@ let register_both ?devmode ?genesis_timestamp ?time_between_blocks ~threshold_encryption:false ~title:(sf "%s (sequencer, %s)" title kernel_tag) ~tags) - (Kernel.to_uses_and_tags kernel) ; + (List.map Kernel.to_uses_and_tags kernels) ; List.iter (fun (kernel_tag, kernel) -> let tags = kernel_tag :: tags in @@ -470,7 +470,27 @@ let register_both ?devmode ?genesis_timestamp ?time_between_blocks ~threshold_encryption:true ~title:(sf "%s (te_sequencer, %s)" title kernel_tag) ~tags:(Tag.ci_disabled :: "threshold_encryption" :: tags)) - (Kernel.to_uses_and_tags Latest) + [Kernel.(to_uses_and_tags Latest)] + +let register_upgrade_both ~title ~tags ~genesis_timestamp + ?(time_between_blocks = Evm_node.Nothing) ?(kernels = Kernel.all) + ?(upgrade_to = Kernel.upgrade_to) ?(additional_uses = []) scenario protocols + = + List.iter + (fun from -> + let from_tag, _ = Kernel.to_uses_and_tags from in + let to_ = upgrade_to from in + let to_tag, to_use = Kernel.to_uses_and_tags to_ in + register_both + ~kernels:[from] + ~genesis_timestamp + ~time_between_blocks + ~tags:(tags @ ["upgrade_scenario"; to_tag]) + ~title:Format.(sprintf "%s (%s -> %s)" title from_tag to_tag) + ~additional_uses:(to_use :: additional_uses) + (scenario from to_) + protocols) + kernels module Protocol = struct include Protocol @@ -1236,7 +1256,7 @@ let test_init_from_rollup_node_data_dir = register_both (* TODO: https://gitlab.com/tezos/tezos/-/issues/7285 Replace by [Any] after the next upgrade *) - ~kernel:Latest + ~kernels:[Latest] ~time_between_blocks:Nothing ~tags:["evm"; "rollup_node"; "init"; "reconstruct"] ~title:"Init evm node sequencer data dir from a rollup node data dir" @@ -1876,6 +1896,7 @@ let test_self_upgrade_kernel = in let activation_timestamp = "2020-01-01T00:00:10Z" in register_both + ~kernels:[Latest] ~genesis_timestamp ~time_between_blocks:Nothing ~tags:["evm"; "sequencer"; "upgrade"; "self"] @@ -1956,24 +1977,36 @@ let test_upgrade_kernel_auto_sync = Client.(At (Time.of_notation_exn "2020-01-01T00:00:00Z")) in let activation_timestamp = "2020-01-01T00:00:10Z" in - register_both - ~kernel:Kernel.Mainnet + register_upgrade_both + ~kernels:[Mainnet; Ghostnet] ~genesis_timestamp ~time_between_blocks:Nothing ~tags:["evm"; "sequencer"; "upgrade"; "auto"; "sync"] ~title:"Rollup-node kernel upgrade is applied to the sequencer state." - ~additional_uses:[Constant.WASM.evm_kernel] - @@ fun { - sc_rollup_node; - l1_contracts; - sc_rollup_address; - client; - sequencer; - proxy; - _; - } + @@ fun from + to_ + { + sc_rollup_node; + l1_contracts; + sc_rollup_address; + client; + sequencer; + proxy; + _; + } _protocol -> + let* () = + match Kernel.commit_of from with + | Some from_commit -> + let* _ = + check_kernel_version ~evm_node:sequencer ~equal:true from_commit + in + unit + | None -> unit + in + (* Sends the upgrade to L1, but not to the sequencer. *) + let _, to_use = Kernel.to_uses_and_tags to_ in let* () = upgrade ~sc_rollup_node @@ -1981,7 +2014,7 @@ let test_upgrade_kernel_auto_sync = ~admin:Constant.bootstrap2.public_key_hash ~admin_contract:l1_contracts.admin ~client - ~upgrade_to:Constant.WASM.evm_kernel + ~upgrade_to:to_use ~activation_timestamp in @@ -2024,6 +2057,16 @@ let test_upgrade_kernel_auto_sync = () in + let* () = + match Kernel.commit_of to_ with + | Some to_commit -> + let* _ = + check_kernel_version ~evm_node:sequencer ~equal:true to_commit + in + unit + | None -> unit + in + unit let test_delayed_transfer_timeout = @@ -2161,27 +2204,27 @@ let test_delayed_transfer_timeout_fails_l1_levels = (** This tests the situation where force kernel upgrade happens too soon. *) let test_force_kernel_upgrade_too_early = - (* Add a delay between first block and activation timestamp. *) let genesis_timestamp = Client.(At (Time.of_notation_exn "2020-01-10T00:00:00Z")) in - register_both + register_upgrade_both + ~kernels:[Latest] + ~upgrade_to:(fun _ -> Ghostnet) ~genesis_timestamp ~time_between_blocks:Nothing ~tags:["evm"; "sequencer"; "upgrade"; "force"] ~title:"Force kernel upgrade fail too early" - ~additional_uses: - [Constant.WASM.ghostnet_evm_kernel; Constant.WASM.evm_kernel] - @@ fun { - sc_rollup_node; - l1_contracts; - sc_rollup_address; - client; - sequencer; - proxy; - kernel; - _; - } + @@ fun _from + to_ + { + sc_rollup_node; + l1_contracts; + sc_rollup_address; + client; + sequencer; + proxy; + _; + } _protocol -> (* Wait for the sequencer to publish its genesis block. *) let* () = bake_until_sync ~sc_rollup_node ~client ~sequencer ~proxy () in @@ -2201,6 +2244,7 @@ let test_force_kernel_upgrade_too_early = be forced now. *) let activation_timestamp = "2020-01-11T00:00:00Z" in (* Sends the upgrade to L1 and sequencer. *) + let _, to_use = Kernel.to_uses_and_tags to_ in let* () = upgrade ~sc_rollup_node @@ -2208,10 +2252,7 @@ let test_force_kernel_upgrade_too_early = ~admin:Constant.bootstrap2.public_key_hash ~admin_contract:l1_contracts.admin ~client - ~upgrade_to: - (if kernel = Constant.WASM.ghostnet_evm_kernel then - Constant.WASM.evm_kernel - else Constant.WASM.ghostnet_evm_kernel) + ~upgrade_to:to_use ~activation_timestamp in @@ -2228,27 +2269,26 @@ let test_force_kernel_upgrade_too_early = (** This tests the situation where the kernel does not produce blocks but still can be forced to upgrade via an external message. *) let test_force_kernel_upgrade = - (* Add a delay between first block and activation timestamp. *) let genesis_timestamp = Client.(At (Time.of_notation_exn "2020-01-10T00:00:00Z")) in - register_both - ~genesis_timestamp - ~time_between_blocks:Nothing + register_upgrade_both + ~kernels:[Latest] + ~upgrade_to:(fun _ -> Ghostnet) ~tags:["evm"; "sequencer"; "upgrade"; "force"] + ~genesis_timestamp ~title:"Force kernel upgrade" - ~additional_uses: - [Constant.WASM.ghostnet_evm_kernel; Constant.WASM.evm_kernel] - @@ fun { - sc_rollup_node; - l1_contracts; - sc_rollup_address; - client; - sequencer; - proxy; - kernel; - _; - } + @@ fun _from + to_ + { + sc_rollup_node; + l1_contracts; + sc_rollup_address; + client; + sequencer; + proxy; + _; + } _protocol -> (* Wait for the sequencer to publish its genesis block. *) let* () = bake_until_sync ~sc_rollup_node ~client ~sequencer ~proxy () in @@ -2268,6 +2308,7 @@ let test_force_kernel_upgrade = be forced immediatly. *) let activation_timestamp = "2020-01-09T00:00:00Z" in (* Sends the upgrade to L1 and sequencer. *) + let _, to_use = Kernel.to_uses_and_tags to_ in let* () = upgrade ~sc_rollup_node @@ -2275,10 +2316,7 @@ let test_force_kernel_upgrade = ~admin:Constant.bootstrap2.public_key_hash ~admin_contract:l1_contracts.admin ~client - ~upgrade_to: - (if kernel = Constant.WASM.ghostnet_evm_kernel then - Constant.WASM.evm_kernel - else Constant.WASM.ghostnet_evm_kernel) + ~upgrade_to:to_use ~activation_timestamp in @@ -3247,7 +3285,7 @@ let test_preimages_endpoint = ~time_between_blocks:Nothing ~tags:["evm"; "sequencer"; "preimages_endpoint"] ~title:"Sequencer use remote server to get preimages" - ~kernel:Kernel.Latest + ~kernels:[Latest] ~additional_uses:[Constant.WASM.ghostnet_evm_kernel] @@ fun { sc_rollup_node; @@ -3415,7 +3453,7 @@ let test_txpool_content_empty_with_legacy_encoding = ~time_between_blocks:Nothing ~minimum_base_fee_per_gas:base_fee_for_hardcoded_tx ~additional_uses:[Constant.WASM.evm_kernel] - ~kernel:Kernel.Mainnet + ~kernels:[Mainnet] ~genesis_timestamp @@ fun { sc_rollup_node; @@ -3528,7 +3566,7 @@ let test_trace_transaction = register_both (* TODO: https://gitlab.com/tezos/tezos/-/issues/7285 Replace by [Any] after the next upgrade *) - ~kernel:Latest + ~kernels:[Latest] ~tags:["evm"; "rpc"; "trace"] ~title:"Sequencer can run debug_traceTransaction" @@ fun {sc_rollup_node; sequencer; client; proxy; _} _protocol -> @@ -3594,7 +3632,7 @@ let test_trace_transaction_on_invalid_transaction = register_both (* TODO: https://gitlab.com/tezos/tezos/-/issues/7285 Replace by [Any] after the next upgrade *) - ~kernel:Latest + ~kernels:[Latest] ~tags:["evm"; "rpc"; "trace"; "fail"] ~title:"debug_traceTransaction fails on invalid transactions" @@ fun {sc_rollup_node; sequencer; client; proxy; _} _protocol -> @@ -3682,7 +3720,7 @@ let test_trace_transaction_call = register_both (* TODO: https://gitlab.com/tezos/tezos/-/issues/7285 Replace by [Any] after the next upgrade *) - ~kernel:Latest + ~kernels:[Latest] ~tags:["evm"; "rpc"; "trace"; "call"] ~title:"Sequencer can run debug_traceTransaction and return a valid log" ~da_fee:Wei.zero @@ -3795,7 +3833,7 @@ let test_miner = register_both (* TODO: https://gitlab.com/tezos/tezos/-/issues/7285 Replace by [Any] after the next upgrade *) - ~kernel:Latest + ~kernels:[Latest] ~tags:["evm"; "miner"] ~title:"Sequencer pool address is the block's miner" ~sequencer_pool_address diff --git a/tezt/lib_tezos/constant.ml b/tezt/lib_tezos/constant.ml index 00a3ff292e7408efb9bb49de95995fc504a246b2..507e94e2efa8ff4bb5f873ab538fc8e0a536b022 100644 --- a/tezt/lib_tezos/constant.ml +++ b/tezt/lib_tezos/constant.ml @@ -99,6 +99,14 @@ module WASM = struct ~tag:"failed_migration" ~path:"etherlink/kernel_evm/kernel/tests/resources/failed_migration.wasm" + let mainnet_evm_kernel = + Uses.make + ~tag:"mainnet_evm_kernel" + ~path: + "etherlink/kernel_evm/kernel/tests/resources/mainnet_evm_kernel.wasm" + + let mainnet_evm_commit = "b9f6c9138719220db83086f0548e49c5c4c8421f" + let ghostnet_evm_kernel = Uses.make ~tag:"ghostnet_evm_kernel" diff --git a/tezt/lib_wrapper/expected/tezt_wrapper.ml/runtime-dependency-tags.out b/tezt/lib_wrapper/expected/tezt_wrapper.ml/runtime-dependency-tags.out index 265f6903493d69e6068aaedeb66dea2afe4c4ee1..bf9b495ebc33c7a1cca26bc164f8acde91dee452 100644 --- a/tezt/lib_wrapper/expected/tezt_wrapper.ml/runtime-dependency-tags.out +++ b/tezt/lib_wrapper/expected/tezt_wrapper.ml/runtime-dependency-tags.out @@ -3,6 +3,7 @@ dal_echo_kernel: dal_echo_kernel.wasm debug_kernel: etherlink/kernel_evm/kernel/tests/resources/debug_kernel.wasm failed_migration: etherlink/kernel_evm/kernel/tests/resources/failed_migration.wasm ghostnet_evm_kernel: etherlink/kernel_evm/kernel/tests/resources/ghostnet_evm_kernel.wasm +mainnet_evm_kernel: etherlink/kernel_evm/kernel/tests/resources/mainnet_evm_kernel.wasm evm_kernel: evm_kernel.wasm accuser_proxford: octez-accuser-Proxford accuser_ptparisb: octez-accuser-PtParisB