From c71cd0d82296b7a63979a9e144de48abd48267ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Cauderlier?= Date: Thu, 6 Jun 2024 10:57:03 +0200 Subject: [PATCH 1/7] Etherlink/kernel config: set dal feature flag in durable storage --- etherlink/bin_node/lib_dev/kernel_config.ml | 3 ++- etherlink/bin_node/lib_dev/kernel_config.mli | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/etherlink/bin_node/lib_dev/kernel_config.ml b/etherlink/bin_node/lib_dev/kernel_config.ml index 32f95192a4f4..0b606e483c90 100644 --- a/etherlink/bin_node/lib_dev/kernel_config.ml +++ b/etherlink/bin_node/lib_dev/kernel_config.ml @@ -23,7 +23,7 @@ let make ~mainnet_compat ~boostrap_balance ?bootstrap_accounts ?kernel_root_hash ?kernel_governance ?kernel_security_governance ?minimum_base_fee_per_gas ?da_fee_per_byte ?delayed_inbox_timeout ?delayed_inbox_min_levels ?sequencer_pool_address ?maximum_allowed_ticks ?maximum_gas_per_transaction - ?remove_whitelist ~enable_fa_bridge ~output () = + ?remove_whitelist ~enable_fa_bridge ?enable_dal ~output () = let bootstrap_accounts = match bootstrap_accounts with | None -> [] @@ -79,5 +79,6 @@ let make ~mainnet_compat ~boostrap_balance ?bootstrap_accounts ?kernel_root_hash @ bootstrap_accounts @ make_instr remove_whitelist @ make_instr enable_fa_bridge + @ make_instr ~path_prefix:"/evm/feature_flags/" enable_dal in Installer_config.to_file instrs ~output diff --git a/etherlink/bin_node/lib_dev/kernel_config.mli b/etherlink/bin_node/lib_dev/kernel_config.mli index d23bdddbadbf..79d5245153dd 100644 --- a/etherlink/bin_node/lib_dev/kernel_config.mli +++ b/etherlink/bin_node/lib_dev/kernel_config.mli @@ -30,6 +30,7 @@ val make : ?maximum_gas_per_transaction:string * string -> ?remove_whitelist:string * string -> enable_fa_bridge:bool -> + ?enable_dal:string * string -> output:string -> unit -> unit tzresult Lwt.t -- GitLab From dfa6756c4f578a9c202f19aa8e7476ca99338454 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Cauderlier?= Date: Thu, 6 Jun 2024 10:59:40 +0200 Subject: [PATCH 2/7] Etherlink/EVM node: add --enable-dal to make kernel config command --- etherlink/bin_node/main.ml | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/etherlink/bin_node/main.ml b/etherlink/bin_node/main.ml index 19e48948cc35..0ed2a471cede 100644 --- a/etherlink/bin_node/main.ml +++ b/etherlink/bin_node/main.ml @@ -1457,7 +1457,7 @@ let make_kernel_config_command = let open Lwt_result_syntax in command ~desc:"Transforms the JSON list of instructions to a RLP list" - (args21 + (args22 mainnet_compat_arg (config_key_arg ~name:"kernel_root_hash" ~placeholder:"root hash") (config_key_arg ~name:"chain_id" ~placeholder:"chain id") @@ -1488,7 +1488,8 @@ let make_kernel_config_command = (switch ~doc:"Enable the FA bridge in the kernel" ~long:"enable-fa-bridge" - ())) + ()) + (config_key_flag ~name:"enable_dal")) (prefixes ["make"; "kernel"; "installer"; "config"] @@ param ~name:"kernel config file" @@ -1515,7 +1516,8 @@ let make_kernel_config_command = remove_whitelist, boostrap_balance, bootstrap_accounts, - enable_fa_bridge ) + enable_fa_bridge, + enable_dal ) output () -> Evm_node_lib_dev.Kernel_config.make @@ -1540,6 +1542,7 @@ let make_kernel_config_command = ~boostrap_balance ?bootstrap_accounts ~enable_fa_bridge + ?enable_dal ~output ()) -- GitLab From 317cc4075133cae78598042d7d39feaa449d9198 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Cauderlier?= Date: Thu, 6 Jun 2024 11:04:40 +0200 Subject: [PATCH 3/7] Etherlink/Tezt lib: add --enable-dal --- etherlink/tezt/lib/evm_node.ml | 3 ++- etherlink/tezt/lib/evm_node.mli | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/etherlink/tezt/lib/evm_node.ml b/etherlink/tezt/lib/evm_node.ml index 6ff60245eab1..cb083093cbd3 100644 --- a/etherlink/tezt/lib/evm_node.ml +++ b/etherlink/tezt/lib/evm_node.ml @@ -986,7 +986,7 @@ let make_kernel_installer_config ?(mainnet_compat = false) ?minimum_base_fee_per_gas ?(da_fee_per_byte = Wei.zero) ?delayed_inbox_timeout ?delayed_inbox_min_levels ?sequencer_pool_address ?maximum_allowed_ticks ?maximum_gas_per_transaction - ?(enable_fa_bridge = false) ~output () = + ?(enable_fa_bridge = false) ?(enable_dal = false) ~output () = let cmd = ["make"; "kernel"; "installer"; "config"; output] @ Cli_arg.optional_switch "mainnet-compat" mainnet_compat @@ -1029,6 +1029,7 @@ let make_kernel_installer_config ?(mainnet_compat = false) Int64.to_string maximum_gas_per_transaction @ Cli_arg.optional_switch "enable-fa-bridge" enable_fa_bridge + @ Cli_arg.optional_switch "enable-dal" enable_dal @ Cli_arg.optional_arg "bootstrap-balance" Wei.to_string bootstrap_balance @ match bootstrap_accounts with diff --git a/etherlink/tezt/lib/evm_node.mli b/etherlink/tezt/lib/evm_node.mli index 1be2294ac4eb..b6e5648db9c1 100644 --- a/etherlink/tezt/lib/evm_node.mli +++ b/etherlink/tezt/lib/evm_node.mli @@ -376,6 +376,7 @@ val make_kernel_installer_config : ?maximum_allowed_ticks:int64 -> ?maximum_gas_per_transaction:int64 -> ?enable_fa_bridge:bool -> + ?enable_dal:bool -> output:string -> unit -> (Process.t, unit) Runnable.t -- GitLab From 40342cfa43629a87736a40306bbb684fdec678ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Cauderlier?= Date: Fri, 14 Jun 2024 14:53:34 +0200 Subject: [PATCH 4/7] Etherlink/Tests: add missing optional args in register_proxy --- etherlink/tezt/tests/evm_rollup.ml | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/etherlink/tezt/tests/evm_rollup.ml b/etherlink/tezt/tests/evm_rollup.ml index e097dfba7c43..d63db94588fc 100644 --- a/etherlink/tezt/tests/evm_rollup.ml +++ b/etherlink/tezt/tests/evm_rollup.ml @@ -488,19 +488,24 @@ let register_test ~title ~tags ?(kernels = Kernel.all) ?additional_config ?admin protocols) kernels -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 = +let register_proxy ~title ~tags ?kernels ?additional_uses ?additional_config + ?admin ?commitment_period ?challenge_window ?bootstrap_accounts + ?da_fee_per_byte ?minimum_base_fee_per_gas ?whitelist ?rollup_operator_key + ?maximum_allowed_ticks f protocols = register_test ~title ~tags ?kernels ?additional_uses + ?additional_config ?admin ?commitment_period ?challenge_window ?bootstrap_accounts + ?da_fee_per_byte ?minimum_base_fee_per_gas + ?whitelist + ?rollup_operator_key ?maximum_allowed_ticks f protocols -- GitLab From 8a1d9315e3686e5eec28467958d4a9cf0a7d8dd3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Cauderlier?= Date: Thu, 6 Jun 2024 11:05:01 +0200 Subject: [PATCH 5/7] Etherlink/Tezt test: refactor registration Reuse register_{proxy,sequencer} in register_both. --- etherlink/tezt/tests/evm_rollup.ml | 60 ++++++++++++++++++------------ 1 file changed, 36 insertions(+), 24 deletions(-) diff --git a/etherlink/tezt/tests/evm_rollup.ml b/etherlink/tezt/tests/evm_rollup.ml index d63db94588fc..5a1b5d6d4b5f 100644 --- a/etherlink/tezt/tests/evm_rollup.ml +++ b/etherlink/tezt/tests/evm_rollup.ml @@ -541,30 +541,42 @@ let register_sequencer ~title ~tags ?kernels ?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 = - let register = - register_test - ~title - ~tags - ?kernels - ?additional_uses - ?additional_config - ?admin - ?commitment_period - ?challenge_window - ?bootstrap_accounts - ?da_fee_per_byte - ?minimum_base_fee_per_gas - ?whitelist - ?rollup_operator_key - ?maximum_allowed_ticks - f - protocols - in - register ~setup_mode:Setup_proxy ; - register - ~setup_mode: - (Setup_sequencer {time_between_blocks; sequencer = Constant.bootstrap1}) + ?rollup_operator_key ?maximum_allowed_ticks f protocols : unit = + register_proxy + ~title + ~tags + ?kernels + ?additional_uses + ?additional_config + ?admin + ?commitment_period + ?challenge_window + ?bootstrap_accounts + ?da_fee_per_byte + ?minimum_base_fee_per_gas + ?whitelist + ?rollup_operator_key + ?maximum_allowed_ticks + f + protocols ; + 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 let deploy ~contract ~sender full_evm_setup = let {client; sc_rollup_node; evm_node; _} = full_evm_setup in -- GitLab From fdebf73bf21d9c9542c0a034c4b8f57d167d638f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Cauderlier?= Date: Thu, 6 Jun 2024 11:05:01 +0200 Subject: [PATCH 6/7] Etherlink/Tezt test: register tests with and without DAL --- etherlink/tezt/tests/evm_rollup.ml | 71 +++++++++++++++++---------- etherlink/tezt/tests/evm_sequencer.ml | 44 +++++++++++++++-- 2 files changed, 86 insertions(+), 29 deletions(-) diff --git a/etherlink/tezt/tests/evm_rollup.ml b/etherlink/tezt/tests/evm_rollup.ml index 5a1b5d6d4b5f..9bf373fef065 100644 --- a/etherlink/tezt/tests/evm_rollup.ml +++ b/etherlink/tezt/tests/evm_rollup.ml @@ -290,7 +290,8 @@ let setup_evm_kernel ?additional_config ?(setup_kernel_root_hash = true) ~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) - ?(force_install_kernel = true) ?whitelist ?maximum_allowed_ticks protocol = + ?(force_install_kernel = true) ?whitelist ?maximum_allowed_ticks ?enable_dal + protocol = let _, kernel_installee = Kernel.to_uses_and_tags kernel in let* node, client = setup_l1 ?commitment_period ?challenge_window ?timestamp protocol @@ -352,6 +353,7 @@ let setup_evm_kernel ?additional_config ?(setup_kernel_root_hash = true) sequencer_governance)) ?maximum_allowed_ticks ~output:output_config + ?enable_dal () in match additional_config with @@ -443,7 +445,8 @@ let setup_evm_kernel ?additional_config ?(setup_kernel_root_hash = true) 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 = + ?rollup_operator_key ?maximum_allowed_ticks ~setup_mode ~enable_dal f + protocols = let extra_tag = match setup_mode with | Setup_proxy -> "proxy" @@ -463,9 +466,17 @@ let register_test ~title ~tags ?(kernels = Kernel.all) ?additional_config ?admin in Protocol.register_test ~__FILE__ - ~tags:(kernel_tag :: extra_tag :: tags) + ~tags: + ((if enable_dal then ["dal"; Tag.ci_disabled] else []) + @ (kernel_tag :: extra_tag :: tags)) ~uses - ~title:(sf "%s (%s, %s)" title extra_tag kernel_tag) + ~title: + (sf + "%s (%s, %s, %s)" + title + extra_tag + kernel_tag + (if enable_dal then "with dal" else "without dal")) ~additional_tags:(function Alpha -> [] | _ -> [Tag.slow]) (fun protocol -> let* evm_setup = @@ -482,6 +493,7 @@ let register_test ~title ~tags ?(kernels = Kernel.all) ?additional_config ?admin ?maximum_allowed_ticks ~admin ~setup_mode + ~enable_dal protocol in f ~protocol ~evm_setup) @@ -492,30 +504,35 @@ let register_proxy ~title ~tags ?kernels ?additional_uses ?additional_config ?admin ?commitment_period ?challenge_window ?bootstrap_accounts ?da_fee_per_byte ?minimum_base_fee_per_gas ?whitelist ?rollup_operator_key ?maximum_allowed_ticks f protocols = - register_test - ~title - ~tags - ?kernels - ?additional_uses - ?additional_config - ?admin - ?commitment_period - ?challenge_window - ?bootstrap_accounts - ?da_fee_per_byte - ?minimum_base_fee_per_gas - ?whitelist - ?rollup_operator_key - ?maximum_allowed_ticks - f - protocols - ~setup_mode:Setup_proxy + let register ~enable_dal : unit = + register_test + ~title + ~tags + ?kernels + ?additional_uses + ?additional_config + ?admin + ?commitment_period + ?challenge_window + ?bootstrap_accounts + ?da_fee_per_byte + ?minimum_base_fee_per_gas + ?whitelist + ?rollup_operator_key + ?maximum_allowed_ticks + f + protocols + ~enable_dal + ~setup_mode:Setup_proxy + in + register ~enable_dal:false ; + register ~enable_dal:true 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 = - let register = + let register ~enable_dal : unit = register_test ~title ~tags @@ -533,10 +550,12 @@ let register_sequencer ~title ~tags ?kernels ?additional_uses ?additional_config ?maximum_allowed_ticks f protocols + ~enable_dal + ~setup_mode: + (Setup_sequencer {time_between_blocks; sequencer = Constant.bootstrap1}) in - register - ~setup_mode: - (Setup_sequencer {time_between_blocks; sequencer = Constant.bootstrap1}) + register ~enable_dal:false ; + register ~enable_dal:true let register_both ~title ~tags ?kernels ?additional_uses ?additional_config ?admin ?commitment_period ?challenge_window ?bootstrap_accounts diff --git a/etherlink/tezt/tests/evm_sequencer.ml b/etherlink/tezt/tests/evm_sequencer.ml index 7d4dc5b0ab3e..c4f1ac5ab035 100644 --- a/etherlink/tezt/tests/evm_sequencer.ml +++ b/etherlink/tezt/tests/evm_sequencer.ml @@ -155,7 +155,7 @@ let setup_sequencer ~mainnet_compat ?genesis_timestamp ?time_between_blocks ?preimages_dir ?maximum_allowed_ticks ?maximum_gas_per_transaction ?enable_fa_bridge ?(threshold_encryption = false) ?(wal_sqlite_journal_mode = true) ?(drop_duplicate_when_injection = true) - ?history_mode protocol = + ?history_mode ~enable_dal protocol = let* node, client = setup_l1 ?timestamp:genesis_timestamp protocol in let* l1_contracts = setup_l1_contracts client in let sc_rollup_node = @@ -187,6 +187,7 @@ let setup_sequencer ~mainnet_compat ?genesis_timestamp ?time_between_blocks ?sequencer_pool_address ?maximum_allowed_ticks ?maximum_gas_per_transaction + ~enable_dal ~bootstrap_accounts ~output:output_config ?enable_fa_bridge @@ -375,7 +376,7 @@ let register_test ~mainnet_compat ?genesis_timestamp ?time_between_blocks ~kernel ?da_fee ?minimum_base_fee_per_gas ?preimages_dir ?maximum_allowed_ticks ?maximum_gas_per_transaction ?enable_fa_bridge ?(threshold_encryption = false) ?(uses = uses) ?(additional_uses = []) - ?history_mode body = + ?history_mode ~enable_dal body ~title ~tags protocols = let additional_uses = if threshold_encryption then Constant.octez_dsn_node :: kernel :: additional_uses @@ -406,6 +407,7 @@ let register_test ~mainnet_compat ?genesis_timestamp ?time_between_blocks ?enable_fa_bridge ~threshold_encryption ?history_mode + ~enable_dal protocol in body sequencer_setup protocol @@ -415,6 +417,10 @@ let register_test ~mainnet_compat ?genesis_timestamp ?time_between_blocks ~__FILE__ ~uses:(fun protocol -> uses protocol @ additional_uses) body + ~title: + (sf "%s (%s)" title (if enable_dal then "with dal" else "without dal")) + ~tags:((if enable_dal then ["dal"; Tag.ci_disabled] else []) @ tags) + protocols let register_both ?genesis_timestamp ?time_between_blocks ?max_blueprints_lag ?max_blueprints_ahead ?max_blueprints_catchup ?catchup_cooldown @@ -423,7 +429,7 @@ let register_both ?genesis_timestamp ?time_between_blocks ?max_blueprints_lag ?(kernels = Kernel.all) ?da_fee ?minimum_base_fee_per_gas ?preimages_dir ?maximum_allowed_ticks ?maximum_gas_per_transaction ?enable_fa_bridge ?history_mode ?additional_uses ~title ~tags body protocols = - let register ~kernel ~threshold_encryption = + let register ~kernel ~threshold_encryption ~title ~tags = let _, kernel_use = Kernel.to_uses_and_tags kernel in register_test ~mainnet_compat:Kernel.(mainnet_compat_kernel_config kernel) @@ -449,6 +455,38 @@ let register_both ?genesis_timestamp ?time_between_blocks ?max_blueprints_lag ?additional_uses ~threshold_encryption ?history_mode + ~enable_dal:false + ~title + ~tags + body + protocols ; + register_test + ~mainnet_compat:Kernel.(mainnet_compat_kernel_config kernel) + ?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 + ?enable_fa_bridge + ?additional_uses + ~threshold_encryption + ?history_mode + ~enable_dal:true + ~title + ~tags body protocols in -- GitLab From 4521b9ac320ac658785d36276fbef011b17afad0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Cauderlier?= Date: Thu, 6 Jun 2024 11:16:05 +0200 Subject: [PATCH 7/7] Etherlink/Kernel: add dal feature flag to config --- .../kernel/src/blueprint_storage.rs | 14 ++- .../kernel_evm/kernel/src/configuration.rs | 10 +- etherlink/kernel_evm/kernel/src/stage_one.rs | 114 +++++++++++++++--- etherlink/kernel_evm/kernel/src/storage.rs | 12 ++ 4 files changed, 126 insertions(+), 24 deletions(-) diff --git a/etherlink/kernel_evm/kernel/src/blueprint_storage.rs b/etherlink/kernel_evm/kernel/src/blueprint_storage.rs index 6a774cc6c69e..db03a6887a3b 100644 --- a/etherlink/kernel_evm/kernel/src/blueprint_storage.rs +++ b/etherlink/kernel_evm/kernel/src/blueprint_storage.rs @@ -437,8 +437,7 @@ mod tests { use tezos_smart_rollup_encoding::public_key::PublicKey; use tezos_smart_rollup_mock::MockHost; - #[test] - fn test_invalid_sequencer_blueprint_is_removed() { + fn test_invalid_sequencer_blueprint_is_removed(enable_dal: bool) { let mut host = MockHost::default(); let delayed_inbox = DelayedInbox::new(&mut host).expect("Delayed inbox should be created"); @@ -455,6 +454,7 @@ mod tests { delayed_bridge, delayed_inbox: Box::new(delayed_inbox), sequencer, + enable_dal, }, limits: Limits::default(), enable_fa_bridge: false, @@ -583,4 +583,14 @@ mod tests { let exists = host.store_has(&blueprint_path).unwrap().is_some(); assert!(!exists) } + + #[test] + fn test_invalid_sequencer_blueprint_is_removed_without_dal() { + test_invalid_sequencer_blueprint_is_removed(false) + } + + #[test] + fn test_invalid_sequencer_blueprint_is_removed_with_dal() { + test_invalid_sequencer_blueprint_is_removed(true) + } } diff --git a/etherlink/kernel_evm/kernel/src/configuration.rs b/etherlink/kernel_evm/kernel/src/configuration.rs index 3b779a4ea463..02b73c35448c 100644 --- a/etherlink/kernel_evm/kernel/src/configuration.rs +++ b/etherlink/kernel_evm/kernel/src/configuration.rs @@ -1,7 +1,7 @@ use crate::{ delayed_inbox::DelayedInbox, storage::{ - is_enable_fa_bridge, read_admin, read_delayed_transaction_bridge, + enable_dal, is_enable_fa_bridge, read_admin, read_delayed_transaction_bridge, read_kernel_governance, read_kernel_security_governance, read_maximum_allowed_ticks, read_maximum_gas_per_transaction, read_sequencer_governance, sequencer, @@ -20,6 +20,7 @@ pub enum ConfigurationMode { delayed_bridge: ContractKt1Hash, delayed_inbox: Box, sequencer: PublicKey, + enable_dal: bool, }, } @@ -31,10 +32,11 @@ impl std::fmt::Display for ConfigurationMode { delayed_bridge, delayed_inbox: _, // Ignoring delayed_inbox sequencer, + enable_dal, } => write!( f, - "Sequencer {{ delayed_bridge: {:?}, sequencer: {:?} }}", - delayed_bridge, sequencer + "Sequencer {{ delayed_bridge: {:?}, sequencer: {:?}, enable_dal: {:?} }}", + delayed_bridge, sequencer, enable_dal ), } } @@ -174,6 +176,7 @@ pub fn fetch_configuration(host: &mut Host) -> Configuration { let limits = fetch_limits(host); let sequencer = sequencer(host).unwrap_or_default(); let enable_fa_bridge = is_enable_fa_bridge(host).unwrap_or_default(); + let enable_dal = enable_dal(host).unwrap_or(false); match sequencer { Some(sequencer) => { let delayed_bridge = read_delayed_transaction_bridge(host) @@ -192,6 +195,7 @@ pub fn fetch_configuration(host: &mut Host) -> Configuration { delayed_bridge, delayed_inbox: Box::new(delayed_inbox), sequencer, + enable_dal, }, limits, enable_fa_bridge, diff --git a/etherlink/kernel_evm/kernel/src/stage_one.rs b/etherlink/kernel_evm/kernel/src/stage_one.rs index f1044ab6031f..1fab09489e2c 100644 --- a/etherlink/kernel_evm/kernel/src/stage_one.rs +++ b/etherlink/kernel_evm/kernel/src/stage_one.rs @@ -76,6 +76,7 @@ fn fetch_sequencer_blueprints( delayed_bridge: ContractKt1Hash, delayed_inbox: &mut DelayedInbox, sequencer: PublicKey, + _enable_dal: bool, ) -> Result { match read_sequencer_inbox( host, @@ -113,6 +114,7 @@ pub fn fetch_blueprints( delayed_bridge, delayed_inbox, sequencer, + enable_dal, } => fetch_sequencer_blueprints( host, smart_rollup_address, @@ -120,6 +122,7 @@ pub fn fetch_blueprints( delayed_bridge.clone(), delayed_inbox, sequencer.clone(), + *enable_dal, ), ConfigurationMode::Proxy => { fetch_proxy_blueprints(host, smart_rollup_address, &config.tezos_contracts) @@ -150,7 +153,7 @@ mod tests { use super::*; - fn dummy_sequencer_config() -> Configuration { + fn dummy_sequencer_config(enable_dal: bool) -> Configuration { let mut host = MockHost::default(); let delayed_inbox = DelayedInbox::new(&mut host).expect("Delayed inbox should be created"); @@ -173,6 +176,7 @@ mod tests { delayed_bridge, delayed_inbox: Box::new(delayed_inbox), sequencer, + enable_dal, }, limits: Limits::default(), enable_fa_bridge: false, @@ -284,11 +288,10 @@ mod tests { } } - #[test] - fn test_sequencer_reject_proxy_transactions() { + fn test_sequencer_reject_proxy_transactions(enable_dal: bool) { let mut host = MockHost::default(); host.add_external(Bytes::from(hex::decode(DUMMY_TRANSACTION).unwrap())); - let mut conf = dummy_sequencer_config(); + let mut conf = dummy_sequencer_config(enable_dal); fetch_blueprints(&mut host, DEFAULT_SR_ADDRESS, &mut conf).expect("fetch failed"); if read_next_blueprint(&mut host, &mut conf) @@ -301,12 +304,21 @@ mod tests { } #[test] - fn test_sequencer_reject_proxy_chunked_transactions() { + fn test_sequencer_reject_proxy_transactions_without_dal() { + test_sequencer_reject_proxy_transactions(false) + } + + #[test] + fn test_sequencer_reject_proxy_transactions_with_dal() { + test_sequencer_reject_proxy_transactions(true) + } + + fn test_sequencer_reject_proxy_chunked_transactions(enable_dal: bool) { let mut host = MockHost::default(); host.add_external(Bytes::from(hex::decode(DUMMY_NEW_CHUNKED_TX).unwrap())); host.add_external(Bytes::from(hex::decode(DUMMY_CHUNK1).unwrap())); host.add_external(Bytes::from(hex::decode(DUMMY_CHUNK2).unwrap())); - let mut conf = dummy_sequencer_config(); + let mut conf = dummy_sequencer_config(enable_dal); fetch_blueprints(&mut host, DEFAULT_SR_ADDRESS, &mut conf).expect("fetch failed"); if read_next_blueprint(&mut host, &mut conf) @@ -319,12 +331,21 @@ mod tests { } #[test] - fn test_parsing_valid_sequencer_chunk() { + fn test_sequencer_reject_proxy_chunked_transactions_without_dal() { + test_sequencer_reject_proxy_chunked_transactions(false) + } + + #[test] + fn test_sequencer_reject_proxy_chunked_transactions_with_dal() { + test_sequencer_reject_proxy_chunked_transactions(true) + } + + fn test_parsing_valid_sequencer_chunk(enable_dal: bool) { let mut host = MockHost::default(); host.add_external(Bytes::from( hex::decode(DUMMY_BLUEPRINT_CHUNK_NUMBER_10).unwrap(), )); - let mut conf = dummy_sequencer_config(); + let mut conf = dummy_sequencer_config(enable_dal); fetch_blueprints(&mut host, DEFAULT_SR_ADDRESS, &mut conf).expect("fetch failed"); // The dummy chunk in the inbox is registered at block 10 @@ -339,12 +360,21 @@ mod tests { } #[test] - fn test_parsing_invalid_sequencer_chunk() { + fn test_parsing_valid_sequencer_chunk_without_dal() { + test_parsing_valid_sequencer_chunk(false) + } + + #[test] + fn test_parsing_valid_sequencer_chunk_with_dal() { + test_parsing_valid_sequencer_chunk(true) + } + + fn test_parsing_invalid_sequencer_chunk(enable_dal: bool) { let mut host = MockHost::default(); host.add_external(Bytes::from( hex::decode(DUMMY_BLUEPRINT_CHUNK_UNPARSABLE).unwrap(), )); - let mut conf = dummy_sequencer_config(); + let mut conf = dummy_sequencer_config(enable_dal); fetch_blueprints(&mut host, DEFAULT_SR_ADDRESS, &mut conf).expect("fetch failed"); if read_next_blueprint(&mut host, &mut conf) @@ -357,12 +387,21 @@ mod tests { } #[test] - fn test_proxy_rejects_sequencer_chunk() { + fn test_parsing_invalid_sequencer_chunk_without_dal() { + test_parsing_invalid_sequencer_chunk(false) + } + + #[test] + fn test_parsing_invalid_sequencer_chunk_with_dal() { + test_parsing_invalid_sequencer_chunk(true) + } + + fn test_proxy_rejects_sequencer_chunk(enable_dal: bool) { let mut host = MockHost::default(); host.add_external(Bytes::from( hex::decode(DUMMY_BLUEPRINT_CHUNK_NUMBER_10).unwrap(), )); - let mut conf = dummy_sequencer_config(); + let mut conf = dummy_sequencer_config(enable_dal); match read_proxy_inbox(&mut host, DEFAULT_SR_ADDRESS, &conf.tezos_contracts) .unwrap() @@ -387,9 +426,18 @@ mod tests { } #[test] - fn test_parsing_delayed_inbox() { + fn test_proxy_rejects_sequencer_chunk_without_dal() { + test_proxy_rejects_sequencer_chunk(false) + } + + #[test] + fn test_proxy_rejects_sequencer_chunk_with_dal() { + test_proxy_rejects_sequencer_chunk(true) + } + + fn test_parsing_delayed_inbox(enable_dal: bool) { let mut host = MockHost::default(); - let mut conf = dummy_sequencer_config(); + let mut conf = dummy_sequencer_config(enable_dal); let metadata = TransferMetadata::new( delayed_bridge(&conf), PublicKeyHash::from_b58check("tz1NiaviJwtMbpEcNqSP6neeoBYj8Brb3QPv").unwrap(), @@ -411,9 +459,18 @@ mod tests { } #[test] - fn test_parsing_l1_contract_inbox() { + fn test_parsing_delayed_inbox_without_dal() { + test_parsing_delayed_inbox(false) + } + + #[test] + fn test_parsing_delayed_inbox_with_dal() { + test_parsing_delayed_inbox(true) + } + + fn test_parsing_l1_contract_inbox(enable_dal: bool) { let mut host = MockHost::default(); - let mut conf = dummy_sequencer_config(); + let mut conf = dummy_sequencer_config(enable_dal); let metadata = TransferMetadata::new( ContractKt1Hash::from_b58check(DUMMY_INVALID_TICKETER).unwrap(), PublicKeyHash::from_b58check("tz1NiaviJwtMbpEcNqSP6neeoBYj8Brb3QPv").unwrap(), @@ -434,6 +491,16 @@ mod tests { } } + #[test] + fn test_parsing_l1_contract_inbox_without_dal() { + test_parsing_l1_contract_inbox(false) + } + + #[test] + fn test_parsing_l1_contract_inbox_with_dal() { + test_parsing_l1_contract_inbox(true) + } + #[test] fn test_parsing_delayed_inbox_rejected_in_proxy() { let mut host = MockHost::default(); @@ -511,10 +578,9 @@ mod tests { } } - #[test] - fn test_deposit_in_sequencer_mode() { + fn test_deposit_in_sequencer_mode(enable_dal: bool) { let mut host = MockHost::default(); - let mut conf = dummy_sequencer_config(); + let mut conf = dummy_sequencer_config(enable_dal); let metadata = TransferMetadata::new( conf.tezos_contracts.ticketer.clone().unwrap(), PublicKeyHash::from_b58check("tz1NiaviJwtMbpEcNqSP6neeoBYj8Brb3QPv").unwrap(), @@ -537,4 +603,14 @@ mod tests { panic!("The delayed inbox shouldn't be empty") } } + + #[test] + fn test_deposit_in_sequencer_mode_without_dal() { + test_deposit_in_sequencer_mode(false) + } + + #[test] + fn test_deposit_in_sequencer_mode_with_dal() { + test_deposit_in_sequencer_mode(true) + } } diff --git a/etherlink/kernel_evm/kernel/src/storage.rs b/etherlink/kernel_evm/kernel/src/storage.rs index 4cc461e44712..836c21c949b8 100644 --- a/etherlink/kernel_evm/kernel/src/storage.rs +++ b/etherlink/kernel_evm/kernel/src/storage.rs @@ -138,6 +138,10 @@ pub const WORD_SIZE: usize = 32usize; // at this path, the kernel is in proxy mode. pub const SEQUENCER: RefPath = RefPath::assert_from(b"/evm/sequencer"); +// Path to the DAL feature flag. If there is nothing at this path, DAL +// is not used. +pub const ENABLE_DAL: RefPath = RefPath::assert_from(b"/evm/feature_flags/enable_dal"); + // Path where the input for the tracer is stored by the sequencer. const TRACER_INPUT: RefPath = RefPath::assert_from(b"/evm/trace/input"); @@ -992,6 +996,14 @@ pub fn sequencer(host: &Host) -> anyhow::Result } } +pub fn enable_dal(host: &Host) -> anyhow::Result { + if let Some(ValueType::Value) = host.store_has(&ENABLE_DAL)? { + Ok(true) + } else { + Ok(false) + } +} + pub fn remove_sequencer(host: &mut Host) -> anyhow::Result<()> { host.store_delete(&SEQUENCER).map_err(Into::into) } -- GitLab