From 445d3d4f67cbf02e39620fe294062dc44e7a35b1 Mon Sep 17 00:00:00 2001 From: Sylvain Ribstein Date: Tue, 16 Apr 2024 08:32:11 +0200 Subject: [PATCH 1/2] evm/kernel: submit whitelist update when flag is set --- etherlink/kernel_evm/kernel/src/lib.rs | 29 ++++++++++++++++++++-- etherlink/kernel_evm/kernel/src/storage.rs | 3 +++ 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/etherlink/kernel_evm/kernel/src/lib.rs b/etherlink/kernel_evm/kernel/src/lib.rs index 6e2e6e959ec3..9226f0299b17 100644 --- a/etherlink/kernel_evm/kernel/src/lib.rs +++ b/etherlink/kernel_evm/kernel/src/lib.rs @@ -10,7 +10,7 @@ use crate::error::Error; use crate::error::UpgradeProcessError::Fallback; use crate::migration::storage_migration; use crate::stage_one::fetch; -use crate::storage::read_sequencer_pool_address; +use crate::storage::{read_sequencer_pool_address, PRIVATE_FLAG_PATH}; use anyhow::Context; use delayed_inbox::DelayedInbox; use evm_execution::Config; @@ -29,10 +29,14 @@ use storage::{ use tezos_crypto_rs::hash::ContractKt1Hash; use tezos_ethereum::block::BlockFees; use tezos_evm_logging::{log, Level::*}; +use tezos_smart_rollup::michelson::MichelsonUnit; +use tezos_smart_rollup::outbox::{ + OutboxMessage, OutboxMessageWhitelistUpdate, OUTBOX_QUEUE, +}; use tezos_smart_rollup_encoding::public_key::PublicKey; use tezos_smart_rollup_encoding::timestamp::Timestamp; use tezos_smart_rollup_entrypoint::kernel_entry; -use tezos_smart_rollup_host::runtime::Runtime; +use tezos_smart_rollup_host::runtime::{Runtime, ValueType}; mod apply; mod block; @@ -73,9 +77,30 @@ pub const CONFIG: Config = Config::shanghai(); const KERNEL_VERSION: &str = env!("GIT_HASH"); +fn switch_to_public_rollup(host: &mut Host) -> Result<(), Error> { + if let Some(ValueType::Value) = host.store_has(&PRIVATE_FLAG_PATH)? { + log!( + host, + Info, + "Submitting outbox message to make the rollup public." + ); + let whitelist_update: OutboxMessage<_> = + OutboxMessage::::WhitelistUpdate( + OutboxMessageWhitelistUpdate { whitelist: None }, + ); + OUTBOX_QUEUE.queue_message(host, whitelist_update)?; + OUTBOX_QUEUE.flush_queue(host); + host.store_delete_value(&PRIVATE_FLAG_PATH) + .map_err(Error::from) + } else { + Ok(()) + } +} + pub fn stage_zero(host: &mut Host) -> Result { log!(host, Debug, "Entering stage zero."); init_storage_versioning(host)?; + switch_to_public_rollup(host)?; storage_migration(host) } diff --git a/etherlink/kernel_evm/kernel/src/storage.rs b/etherlink/kernel_evm/kernel/src/storage.rs index 28e1fd274fe3..83b2c1ee20b1 100644 --- a/etherlink/kernel_evm/kernel/src/storage.rs +++ b/etherlink/kernel_evm/kernel/src/storage.rs @@ -32,6 +32,9 @@ use tezos_ethereum::wei::Wei; use primitive_types::{H160, H256, U256}; pub const STORAGE_VERSION: u64 = 11; + +pub const PRIVATE_FLAG_PATH: RefPath = RefPath::assert_from(b"/evm/remove_whitelist"); + pub const STORAGE_VERSION_PATH: RefPath = RefPath::assert_from(b"/evm/storage_version"); const KERNEL_VERSION_PATH: RefPath = RefPath::assert_from(b"/evm/kernel_version"); -- GitLab From dde48fab09879624cedfd32fe025a81f86c5411a Mon Sep 17 00:00:00 2001 From: Sylvain Ribstein Date: Tue, 16 Apr 2024 09:16:28 +0200 Subject: [PATCH 2/2] evm/tezt: kernel submits outbox msg to make rollup public --- etherlink/tezt/tests/evm_rollup.ml | 60 +++++++++++++++++++++++++++--- tezt/lib_tezos/RPC.ml | 2 +- 2 files changed, 56 insertions(+), 6 deletions(-) diff --git a/etherlink/tezt/tests/evm_rollup.ml b/etherlink/tezt/tests/evm_rollup.ml index 9ce1c8e54515..52d0e2d9c38b 100644 --- a/etherlink/tezt/tests/evm_rollup.ml +++ b/etherlink/tezt/tests/evm_rollup.ml @@ -286,7 +286,7 @@ let setup_evm_kernel ?(setup_kernel_root_hash = true) ?config ~admin ?sequencer_admin ?commitment_period ?challenge_window ?timestamp ?tx_pool_timeout_limit ?tx_pool_addr_limit ?tx_pool_tx_per_addr_limit ?max_number_of_chunks ?(setup_mode = Setup_proxy {devmode = true}) - ?(force_install_kernel = true) protocol = + ?(force_install_kernel = true) ?whitelist protocol = let* node, client = setup_l1 ?commitment_period ?challenge_window ?timestamp protocol in @@ -368,6 +368,7 @@ let setup_evm_kernel ?(setup_kernel_root_hash = true) ?config in let* sc_rollup_address = originate_sc_rollup + ?whitelist ~keys:[] ~kind:pvm_kind ~boot_sector:("file:" ^ output) @@ -436,8 +437,8 @@ let setup_evm_kernel ?(setup_kernel_root_hash = true) ?config } let register_test ?config ~title ~tags ?(admin = None) ?uses ?commitment_period - ?challenge_window ?bootstrap_accounts ?da_fee_per_byte - ?minimum_base_fee_per_gas ~setup_mode f = + ?challenge_window ?bootstrap_accounts ?whitelist ?da_fee_per_byte + ?minimum_base_fee_per_gas ?rollup_operator_key ~setup_mode f = let extra_tag = match setup_mode with | Setup_proxy _ -> "proxy" @@ -462,12 +463,14 @@ let register_test ?config ~title ~tags ?(admin = None) ?uses ?commitment_period (fun protocol -> let* evm_setup = setup_evm_kernel + ?whitelist ?config ?commitment_period ?challenge_window ?bootstrap_accounts ?da_fee_per_byte ?minimum_base_fee_per_gas + ?rollup_operator_key ~admin ~setup_mode protocol @@ -493,7 +496,7 @@ let register_proxy ?config ~title ~tags ?uses ?admin ?commitment_period let register_both ~title ~tags ?uses ?admin ?commitment_period ?challenge_window ?bootstrap_accounts ?da_fee_per_byte ?minimum_base_fee_per_gas ?config - ?time_between_blocks f protocols = + ?time_between_blocks ?whitelist ?rollup_operator_key f protocols = let register = register_test ?config @@ -506,6 +509,8 @@ let register_both ~title ~tags ?uses ?admin ?commitment_period ?challenge_window ?bootstrap_accounts ?da_fee_per_byte ?minimum_base_fee_per_gas + ?whitelist + ?rollup_operator_key f protocols in @@ -5474,6 +5479,50 @@ let test_tx_pool_transaction_size_exceeded = ~error_msg:"This transaction should be rejected with error msg %R not %L" ; unit +let test_whitelist_is_executed = + let rollup_operator_key = Constant.bootstrap1.public_key_hash in + let whitelist = [rollup_operator_key] in + let config = + `Config + [Installer_kernel_config.Set {value = ""; to_ = "/evm/remove_whitelist"}] + in + let commitment_period = 5 and challenge_window = 5 in + register_both + ~challenge_window + ~commitment_period + ~whitelist + ~rollup_operator_key + ~config + ~tags:["evm"; "whitelist"; "update"] + ~title: + "Check that the kernel submit a whitelist update message when flag is \ + set." + @@ fun ~protocol:_ + ~evm_setup:{sc_rollup_node; client; node; sc_rollup_address; _} -> + let get_whitelist () = + Node.RPC.call node + @@ RPC.get_chain_block_context_smart_rollups_smart_rollup_whitelist + sc_rollup_address + in + let* found_whitelist = get_whitelist () in + Check.( + (Some whitelist = found_whitelist) + (option (list string)) + ~error_msg:"found %R expected %L") ; + let* () = + repeat + ((commitment_period * challenge_window) + 3) + (fun () -> + let* _lvl = next_rollup_node_level ~sc_rollup_node ~client in + unit) + in + let* found_whitelist = get_whitelist () in + Check.( + (None = found_whitelist) + (option (list string)) + ~error_msg:"found %R expected %L") ; + unit + let register_evm_node ~protocols = test_originate_evm_kernel protocols ; test_kernel_root_hash_originate_absent protocols ; @@ -5571,7 +5620,8 @@ let register_evm_node ~protocols = test_outbox_size_limit_resilience ~slow:false protocols ; test_tx_pool_timeout protocols ; test_tx_pool_address_boundaries protocols ; - test_tx_pool_transaction_size_exceeded protocols + test_tx_pool_transaction_size_exceeded protocols ; + test_whitelist_is_executed protocols let protocols = Protocol.all diff --git a/tezt/lib_tezos/RPC.ml b/tezt/lib_tezos/RPC.ml index 4762c7ebcb45..b90477ac60cc 100644 --- a/tezt/lib_tezos/RPC.ml +++ b/tezt/lib_tezos/RPC.ml @@ -1184,7 +1184,7 @@ let get_chain_block_context_smart_rollups_smart_rollup_whitelist "whitelist"; ] (fun whitelist -> - match JSON.(as_list_opt whitelist) with + match JSON.(whitelist |> as_opt |> Option.map as_list) with | Some l -> Some (List.map JSON.as_string l) | None -> None) -- GitLab