From 1dc42268ed459dbd18f2869a369adeb09cc9293f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Cauderlier?= Date: Fri, 21 Jun 2024 16:09:37 +0200 Subject: [PATCH 1/2] Etherlink/Node: add DAL config to sequencer config --- etherlink/bin_node/config/configuration.ml | 39 +++++++++++---- etherlink/bin_node/config/configuration.mli | 8 +++ .../bin_node/lib_dev/blueprints_publisher.ml | 5 ++ etherlink/bin_node/main.ml | 50 ++++++++++++++----- 4 files changed, 81 insertions(+), 21 deletions(-) diff --git a/etherlink/bin_node/config/configuration.ml b/etherlink/bin_node/config/configuration.ml index 50e4f857281c..cdc4cf1f6dc4 100644 --- a/etherlink/bin_node/config/configuration.ml +++ b/etherlink/bin_node/config/configuration.ml @@ -19,6 +19,7 @@ type blueprints_publisher_config = { max_blueprints_ahead : int; max_blueprints_catchup : int; catchup_cooldown : int; + dal_slots : int list option; } type experimental_features = { @@ -148,6 +149,7 @@ let default_blueprints_publisher_config = max_blueprints_ahead = 100; max_blueprints_catchup = 50; catchup_cooldown = 1; + dal_slots = None; } let default_fee_history = {max_count = None; max_past = None} @@ -157,7 +159,7 @@ let make_restricted_rpcs raw = {raw; regex = Re.Perl.compile_pat raw} let sequencer_config_dft ~data_dir ?preimages ?preimages_endpoint ?time_between_blocks ?max_number_of_chunks ?private_rpc_port ~sequencer ?max_blueprints_lag ?max_blueprints_ahead ?max_blueprints_catchup - ?catchup_cooldown () = + ?catchup_cooldown ?dal_slots () = let blueprints_publisher_config = { max_blueprints_lag = @@ -176,6 +178,7 @@ let sequencer_config_dft ~data_dir ?preimages ?preimages_endpoint Option.value ~default:default_blueprints_publisher_config.catchup_cooldown catchup_cooldown; + dal_slots; } in { @@ -193,7 +196,8 @@ let sequencer_config_dft ~data_dir ?preimages ?preimages_endpoint let threshold_encryption_sequencer_config_dft ~data_dir ?preimages ?preimages_endpoint ?time_between_blocks ?max_number_of_chunks ?private_rpc_port ~sequencer ?sidecar_endpoint ?max_blueprints_lag - ?max_blueprints_ahead ?max_blueprints_catchup ?catchup_cooldown () = + ?max_blueprints_ahead ?max_blueprints_catchup ?catchup_cooldown ?dal_slots + () = let blueprints_publisher_config = { max_blueprints_lag = @@ -212,6 +216,7 @@ let threshold_encryption_sequencer_config_dft ~data_dir ?preimages Option.value ~default:default_blueprints_publisher_config.catchup_cooldown catchup_cooldown; + dal_slots; } in Threshold_encryption_sequencer @@ -271,22 +276,26 @@ let blueprints_publisher_config_encoding = max_blueprints_ahead; max_blueprints_catchup; catchup_cooldown; + dal_slots; } -> ( max_blueprints_lag, max_blueprints_ahead, max_blueprints_catchup, - catchup_cooldown )) + catchup_cooldown, + dal_slots )) (fun ( max_blueprints_lag, max_blueprints_ahead, max_blueprints_catchup, - catchup_cooldown ) -> + catchup_cooldown, + dal_slots ) -> { max_blueprints_lag; max_blueprints_ahead; max_blueprints_catchup; catchup_cooldown; + dal_slots; }) - (obj4 + (obj5 (dft "max_blueprints_lag" int31 @@ -302,7 +311,8 @@ let blueprints_publisher_config_encoding = (dft "catchup_cooldown" int31 - default_blueprints_publisher_config.catchup_cooldown)) + default_blueprints_publisher_config.catchup_cooldown) + (opt "dal_slots" (list int8))) let sequencer_encoding data_dir = let open Data_encoding in @@ -669,7 +679,7 @@ module Cli = struct ?log_filter_max_nb_blocks ?log_filter_max_nb_logs ?log_filter_chunk_size ?max_blueprints_lag ?max_blueprints_ahead ?max_blueprints_catchup ?catchup_cooldown ?sequencer_sidecar_endpoint ?restricted_rpcs - ?proxy_finalized_view () = + ?proxy_finalized_view ?dal_slots () = let sequencer = Option.map (fun sequencer -> @@ -685,6 +695,7 @@ module Cli = struct ?max_blueprints_catchup ?catchup_cooldown ~sequencer + ?dal_slots ()) sequencer_key in @@ -704,6 +715,7 @@ module Cli = struct ?catchup_cooldown ~sequencer ?sidecar_endpoint:sequencer_sidecar_endpoint + ?dal_slots ()) sequencer_key in @@ -767,7 +779,7 @@ module Cli = struct ?log_filter_max_nb_logs ?log_filter_chunk_size ?max_blueprints_lag ?max_blueprints_ahead ?max_blueprints_catchup ?catchup_cooldown ?sequencer_sidecar_endpoint ?restricted_rpcs ?proxy_finalized_view - configuration = + ~dal_slots configuration = let sequencer = let sequencer_config = configuration.sequencer in match sequencer_config with @@ -793,6 +805,8 @@ module Cli = struct Option.value ~default:blueprints_publisher_config.catchup_cooldown catchup_cooldown; + dal_slots = + Option.either dal_slots blueprints_publisher_config.dal_slots; } in Some @@ -832,6 +846,7 @@ module Cli = struct ?max_blueprints_catchup ?catchup_cooldown ~sequencer + ?dal_slots ()) sequencer_key in @@ -864,6 +879,8 @@ module Cli = struct Option.value ~default:blueprints_publisher_config.catchup_cooldown catchup_cooldown; + dal_slots = + Option.either dal_slots blueprints_publisher_config.dal_slots; } in Some @@ -919,6 +936,7 @@ module Cli = struct ?catchup_cooldown ~sequencer ?sidecar_endpoint:sequencer_sidecar_endpoint + ?dal_slots ()) sequencer_key in @@ -1024,7 +1042,8 @@ module Cli = struct ?threshold_encryption_bundler_endpoint ?max_blueprints_lag ?max_blueprints_ahead ?max_blueprints_catchup ?catchup_cooldown ?log_filter_max_nb_blocks ?log_filter_max_nb_logs ?log_filter_chunk_size - ?sequencer_sidecar_endpoint ?restricted_rpcs ?proxy_finalized_view () = + ?sequencer_sidecar_endpoint ?restricted_rpcs ?proxy_finalized_view + ?dal_slots () = let open Lwt_result_syntax in let open Filename.Infix in (* Check if the data directory of the evm node is not the one of Octez @@ -1076,6 +1095,7 @@ module Cli = struct ?sequencer_sidecar_endpoint ?restricted_rpcs ?proxy_finalized_view + ~dal_slots configuration in return configuration @@ -1116,6 +1136,7 @@ module Cli = struct ?sequencer_sidecar_endpoint ?restricted_rpcs ?proxy_finalized_view + ?dal_slots () in return config diff --git a/etherlink/bin_node/config/configuration.mli b/etherlink/bin_node/config/configuration.mli index ffec2dfc43b0..bed5a48e3689 100644 --- a/etherlink/bin_node/config/configuration.mli +++ b/etherlink/bin_node/config/configuration.mli @@ -37,6 +37,10 @@ type blueprints_publisher_config = { (** The maximum number of Layer 1 blocks the Sequencer waits after resending its blueprints before trying to catch-up again. *) + dal_slots : int list option; + (** When set to [Some l], l is the list of DAL slot indices to + use to publish blueprints, when set to [None] the sequencer + is not allowed to use the DAL. *) } (** Configuration settings for experimental features, with no backward @@ -159,6 +163,7 @@ val sequencer_config_dft : ?max_blueprints_ahead:int -> ?max_blueprints_catchup:int -> ?catchup_cooldown:int -> + ?dal_slots:int list -> unit -> sequencer @@ -177,6 +182,7 @@ val threshold_encryption_sequencer_config_dft : ?max_blueprints_ahead:int -> ?max_blueprints_catchup:int -> ?catchup_cooldown:int -> + ?dal_slots:int list -> unit -> threshold_encryption_sequencer @@ -223,6 +229,7 @@ module Cli : sig ?sequencer_sidecar_endpoint:Uri.t -> ?restricted_rpcs:string -> ?proxy_finalized_view:bool -> + ?dal_slots:int list -> unit -> t @@ -256,6 +263,7 @@ module Cli : sig ?sequencer_sidecar_endpoint:Uri.t -> ?restricted_rpcs:string -> ?proxy_finalized_view:bool -> + ?dal_slots:int list -> unit -> t tzresult Lwt.t end diff --git a/etherlink/bin_node/lib_dev/blueprints_publisher.ml b/etherlink/bin_node/lib_dev/blueprints_publisher.ml index 650f58c3c535..8e4e60927b16 100644 --- a/etherlink/bin_node/lib_dev/blueprints_publisher.ml +++ b/etherlink/bin_node/lib_dev/blueprints_publisher.ml @@ -26,6 +26,8 @@ type state = { to layer 1 *) mutable cooldown : int; (** Do not try to catch-up if [cooldown] is not equal to 0 *) + enable_dal : bool; + dal_slots : int list option; } module Types = struct @@ -199,6 +201,7 @@ module Handlers = struct max_blueprints_ahead; max_blueprints_catchup; catchup_cooldown; + dal_slots; }; latest_level_seen; keep_alive; @@ -219,6 +222,8 @@ module Handlers = struct max_blueprints_catchup = Z.of_int max_blueprints_catchup; catchup_cooldown; keep_alive; + enable_dal = Option.is_some dal_slots; + dal_slots; } let on_request : diff --git a/etherlink/bin_node/main.ml b/etherlink/bin_node/main.ml index 6c380816d70e..a1a1a133ea6a 100644 --- a/etherlink/bin_node/main.ml +++ b/etherlink/bin_node/main.ml @@ -487,6 +487,17 @@ let restricted_rpcs_arg = ~placeholder:"debug_trace*" Params.string +let dal_slots_arg = + Tezos_clic.arg + ~long:"dal-slots" + ~doc: + "The DAL slots indices on which the sequencer is allowed to send \ + blueprints." + ~placeholder:"slot indices" + (Tezos_clic.parameter (fun _ctxt s -> + s |> String.split ',' |> List.map int_of_string + |> Lwt_result_syntax.return)) + let common_config_args = Tezos_clic.args16 data_dir_arg @@ -650,7 +661,7 @@ let start_sequencer ?password_filename ~wallet_dir ~data_dir ?rpc_addr ?rpc_port ?private_rpc_port ?sequencer_str ?max_blueprints_lag ?max_blueprints_ahead ?max_blueprints_catchup ?catchup_cooldown ?log_filter_max_nb_blocks ?log_filter_max_nb_logs ?log_filter_chunk_size ?genesis_timestamp - ?restricted_rpcs ?kernel () = + ?restricted_rpcs ?kernel ?dal_slots () = let open Lwt_result_syntax in let wallet_ctxt = register_wallet ?password_filename ~wallet_dir () in let* sequencer_key = @@ -685,6 +696,7 @@ let start_sequencer ?password_filename ~wallet_dir ~data_dir ?rpc_addr ?rpc_port ?log_filter_max_nb_logs ?log_filter_chunk_size ?restricted_rpcs + ?dal_slots () in let*! () = @@ -726,7 +738,7 @@ let start_threshold_encryption_sequencer ?password_filename ~wallet_dir ?max_blueprints_lag ?max_blueprints_ahead ?max_blueprints_catchup ?catchup_cooldown ?log_filter_max_nb_blocks ?log_filter_max_nb_logs ?log_filter_chunk_size ?genesis_timestamp ?restricted_rpcs ?kernel - ?sequencer_sidecar_endpoint () = + ?sequencer_sidecar_endpoint ?dal_slots () = let open Lwt_result_syntax in let wallet_ctxt = register_wallet ?password_filename ~wallet_dir () in let* sequencer_key = @@ -762,6 +774,7 @@ let start_threshold_encryption_sequencer ?password_filename ~wallet_dir ?log_filter_chunk_size ?sequencer_sidecar_endpoint ?restricted_rpcs + ?dal_slots () in let*! () = @@ -803,7 +816,7 @@ let sequencer_command = sequencer` command." (merge_options common_config_args - (args13 + (args14 initial_kernel_arg private_rpc_port_arg preimages_arg @@ -816,7 +829,8 @@ let sequencer_command = catchup_cooldown_arg max_number_of_chunks_arg wallet_dir_arg - (Client_config.password_filename_arg ()))) + (Client_config.password_filename_arg ()) + dal_slots_arg)) (prefixes ["run"; "sequencer"; "with"; "endpoint"] @@ param ~name:"rollup-node-endpoint" @@ -854,7 +868,8 @@ let sequencer_command = catchup_cooldown, max_number_of_chunks, wallet_dir, - password_filename ) ) + password_filename, + dal_slots ) ) rollup_node_endpoint sequencer_str () -> @@ -896,6 +911,7 @@ let sequencer_command = ?genesis_timestamp ?restricted_rpcs ?kernel + ?dal_slots ()) let start_observer ~data_dir ~keep_alive ?rpc_addr ?rpc_port ?cors_origins @@ -926,6 +942,7 @@ let start_observer ~data_dir ~keep_alive ?rpc_addr ?rpc_port ?cors_origins ?log_filter_max_nb_logs ?log_filter_max_nb_blocks ?restricted_rpcs + ?dal_slots:None () in let*! () = @@ -1412,7 +1429,7 @@ If the is set then adds the configuration for the observer mode.|} (merge_options common_config_args - (args15 + (args16 (* sequencer and observer config*) preimages_arg preimages_endpoint_arg @@ -1433,7 +1450,8 @@ mode.|} ~long:"force" ~short:'f' ~doc:"Overwrites the configuration file when it exists." - ()))) + ()) + dal_slots_arg)) (prefixes ["init"; "config"] @@ stop) (fun ( ( data_dir, rpc_addr, @@ -1465,7 +1483,8 @@ mode.|} threshold_encryption_bundler_endpoint, sequencer_sidecar_endpoint, wallet_dir, - force ) ) + force, + dal_slots ) ) () -> let* sequencer_key = Option.map_es @@ -1504,6 +1523,7 @@ mode.|} ?catchup_cooldown ?restricted_rpcs ~verbose + ?dal_slots () in Configuration.save ~force ~data_dir config) @@ -1674,7 +1694,7 @@ let proxy_simple_command = ()) let sequencer_config_args = - Tezos_clic.args14 + Tezos_clic.args15 preimages_arg preimages_endpoint_arg time_between_blocks_arg @@ -1689,6 +1709,7 @@ let sequencer_config_args = initial_kernel_arg wallet_dir_arg (Client_config.password_filename_arg ()) + dal_slots_arg let sequencer_simple_command = let open Tezos_clic in @@ -1725,7 +1746,8 @@ let sequencer_simple_command = genesis_timestamp, kernel, wallet_dir, - password_filename ) ) + password_filename, + dal_slots ) ) () -> start_sequencer ?password_filename @@ -1757,10 +1779,11 @@ let sequencer_simple_command = ?genesis_timestamp ?restricted_rpcs ?kernel + ?dal_slots ()) let threshold_encryption_sequencer_config_args = - Tezos_clic.args15 + Tezos_clic.args16 preimages_arg preimages_endpoint_arg time_between_blocks_arg @@ -1776,6 +1799,7 @@ let threshold_encryption_sequencer_config_args = wallet_dir_arg sequencer_sidecar_endpoint_arg (Client_config.password_filename_arg ()) + dal_slots_arg let threshold_encryption_sequencer_command = let open Tezos_clic in @@ -1815,7 +1839,8 @@ let threshold_encryption_sequencer_command = kernel, wallet_dir, sequencer_sidecar_endpoint, - password_filename ) ) + password_filename, + dal_slots ) ) () -> start_threshold_encryption_sequencer ?password_filename @@ -1848,6 +1873,7 @@ let threshold_encryption_sequencer_command = ?sequencer_sidecar_endpoint ?restricted_rpcs ?kernel + ?dal_slots ()) let observer_run_args = -- GitLab From d22f552507ab301af8fe69ae03b894c7cba5cae5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Cauderlier?= Date: Mon, 1 Jul 2024 15:55:10 +0200 Subject: [PATCH 2/2] Etherlink/Tests: support DAL config in sequencer run This commit enables setting the `--dal-slots` option when Tezt (and Tezt cloud) configures the sequencer. --- etherlink/tezt/lib/evm_node.ml | 12 ++++++++++++ etherlink/tezt/lib/evm_node.mli | 2 ++ etherlink/tezt/tests/evm_rollup.ml | 3 +++ etherlink/tezt/tests/evm_sequencer.ml | 2 ++ tezt/tests/cloud/dal.ml | 28 +++++++++++++++++++++++---- 5 files changed, 43 insertions(+), 4 deletions(-) diff --git a/etherlink/tezt/lib/evm_node.ml b/etherlink/tezt/lib/evm_node.ml index 90ee8df5ecf6..409cf36dbc9e 100644 --- a/etherlink/tezt/lib/evm_node.ml +++ b/etherlink/tezt/lib/evm_node.ml @@ -58,6 +58,7 @@ type mode = tx_pool_timeout_limit : int option; tx_pool_addr_limit : int option; tx_pool_tx_per_addr_limit : int option; + dal_slots : int list option; } | Threshold_encryption_sequencer of { initial_kernel : string; @@ -76,6 +77,7 @@ type mode = tx_pool_addr_limit : int option; tx_pool_tx_per_addr_limit : int option; sequencer_sidecar_endpoint : string; + dal_slots : int list option; } | Proxy of {finalized_view : bool} @@ -644,6 +646,7 @@ let spawn_init_config ?(extra_arguments = []) evm_node = tx_pool_timeout_limit; tx_pool_addr_limit; tx_pool_tx_per_addr_limit; + dal_slots; } -> [ "--rollup-node-endpoint"; @@ -690,6 +693,10 @@ let spawn_init_config ?(extra_arguments = []) evm_node = "tx-pool-tx-per-addr-limit" string_of_int tx_pool_tx_per_addr_limit + @ Cli_arg.optional_arg + "dal-slots" + (fun l -> String.concat "," (List.map string_of_int l)) + dal_slots | Threshold_encryption_sequencer { initial_kernel = _; @@ -708,6 +715,7 @@ let spawn_init_config ?(extra_arguments = []) evm_node = tx_pool_addr_limit; tx_pool_tx_per_addr_limit; sequencer_sidecar_endpoint; + dal_slots; } -> [ "--rollup-node-endpoint"; @@ -756,6 +764,10 @@ let spawn_init_config ?(extra_arguments = []) evm_node = "tx-pool-tx-per-addr-limit" string_of_int tx_pool_tx_per_addr_limit + @ Cli_arg.optional_arg + "dal-slots" + (fun l -> String.concat "," (List.map string_of_int l)) + dal_slots | Observer { preimages_dir; diff --git a/etherlink/tezt/lib/evm_node.mli b/etherlink/tezt/lib/evm_node.mli index 5d85077491ea..005906a9c5fd 100644 --- a/etherlink/tezt/lib/evm_node.mli +++ b/etherlink/tezt/lib/evm_node.mli @@ -75,6 +75,7 @@ type mode = tx_pool_tx_per_addr_limit : int option; (** --tx-pool-tx-per-addr-limit: maximum transaction per address allowed simultaneously inside the pool. *) + dal_slots : int list option; } | Threshold_encryption_sequencer of { initial_kernel : string; @@ -104,6 +105,7 @@ type mode = sequencer_sidecar_endpoint : string; (** --sequencer-sidecar-endpoint: Uri of the sidecar endpoints to which proposals are forwarded, and from where preblocks are fetched. *) + dal_slots : int list option; } | Proxy of { finalized_view : bool; diff --git a/etherlink/tezt/tests/evm_rollup.ml b/etherlink/tezt/tests/evm_rollup.ml index c1b8be4820dd..e16470954c0c 100644 --- a/etherlink/tezt/tests/evm_rollup.ml +++ b/etherlink/tezt/tests/evm_rollup.ml @@ -446,6 +446,7 @@ let setup_evm_kernel ?additional_config ?(setup_kernel_root_hash = true) tx_pool_timeout_limit; tx_pool_addr_limit; tx_pool_tx_per_addr_limit; + dal_slots; }) in let* evm_node = @@ -4859,6 +4860,7 @@ let test_migrate_proxy_to_sequencer_future = tx_pool_timeout_limit = None; tx_pool_addr_limit = None; tx_pool_tx_per_addr_limit = None; + dal_slots = None; } in Evm_node.create ~mode (Sc_rollup_node.endpoint sc_rollup_node) @@ -5022,6 +5024,7 @@ let test_migrate_proxy_to_sequencer_past = tx_pool_timeout_limit = None; tx_pool_addr_limit = None; tx_pool_tx_per_addr_limit = None; + dal_slots = None; } in Evm_node.create ~mode (Sc_rollup_node.endpoint sc_rollup_node) diff --git a/etherlink/tezt/tests/evm_sequencer.ml b/etherlink/tezt/tests/evm_sequencer.ml index 45eb4a3fe19a..93cd7b940afc 100644 --- a/etherlink/tezt/tests/evm_sequencer.ml +++ b/etherlink/tezt/tests/evm_sequencer.ml @@ -282,6 +282,7 @@ let setup_sequencer ?sequencer_rpc_port ?sequencer_private_rpc_port tx_pool_addr_limit = None; tx_pool_tx_per_addr_limit = None; sequencer_sidecar_endpoint = Dsn_node.endpoint sequencer_sidecar; + dal_slots; } else return @@ -302,6 +303,7 @@ let setup_sequencer ?sequencer_rpc_port ?sequencer_private_rpc_port tx_pool_timeout_limit = None; tx_pool_addr_limit = None; tx_pool_tx_per_addr_limit = None; + dal_slots; } in let* sequencer = diff --git a/tezt/tests/cloud/dal.ml b/tezt/tests/cloud/dal.ml index 966d458b82da..13246103315c 100644 --- a/tezt/tests/cloud/dal.ml +++ b/tezt/tests/cloud/dal.ml @@ -243,6 +243,9 @@ module Cli = struct of levels." disconnect_typ () + + let etherlink_dal_slots = + Clap.list_int ~section ~long:"etherlink-dal-slots" () end type configuration = { @@ -260,6 +263,8 @@ type configuration = { disconnect : (int * int) option; network : Network.t; bootstrap : bool; + (* Empty list means DAL FF is set to false. *) + etherlink_dal_slots : int list; } type bootstrap = { @@ -1048,8 +1053,8 @@ let init_observer cloud ~bootstrap ~slot_index i agent = let* () = Dal_node.run ~event_level:`Notice dal_node in Lwt.return {node; dal_node; slot_index} -let init_etherlink_operator_setup cloud is_sequencer name ~bootstrap account - agent = +let init_etherlink_operator_setup cloud is_sequencer name ~bootstrap ~dal_slots + account agent = let open Sc_rollup_helpers in let open Tezt_etherlink in let* node = @@ -1142,6 +1147,7 @@ let init_etherlink_operator_setup cloud is_sequencer name ~bootstrap account tx_pool_timeout_limit = None; tx_pool_addr_limit = None; tx_pool_tx_per_addr_limit = None; + dal_slots; } in let endpoint = Sc_rollup_node.endpoint sc_rollup_node in @@ -1266,11 +1272,13 @@ let init_etherlink_producer_setup cloud operator name account ~bootstrap agent = in return operator -let init_etherlink cloud ~bootstrap etherlink_rollup_operator_key next_agent = +let init_etherlink cloud ~bootstrap etherlink_rollup_operator_key ~dal_slots + next_agent = let* operator_agent = next_agent ~name:"etherlink-operator-agent" in let* operator = init_etherlink_operator_setup cloud + ~dal_slots Cli.etherlink_sequencer "operator" ~bootstrap @@ -1362,8 +1370,18 @@ let init ~(configuration : configuration) cloud next_agent = let etherlink_rollup_operator_key = Option.get etherlink_rollup_operator_key in + let dal_slots = + match configuration.etherlink_dal_slots with + | [] -> None + | slots -> Some slots + in let* etherlink = - init_etherlink cloud ~bootstrap etherlink_rollup_operator_key next_agent + init_etherlink + cloud + ~bootstrap + etherlink_rollup_operator_key + next_agent + ~dal_slots in some etherlink else none @@ -1522,6 +1540,7 @@ let configuration = let disconnect = Cli.disconnect in let network = Cli.network in let bootstrap = Cli.bootstrap in + let etherlink_dal_slots = Cli.etherlink_dal_slots in { stake; stake_machine_type; @@ -1535,6 +1554,7 @@ let configuration = disconnect; network; bootstrap; + etherlink_dal_slots; } let benchmark () = -- GitLab