Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/workflows/pr-main_l2.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ on:
- "crates/blockchain/dev/**"
- "crates/vm/levm/**"
- ".github/workflows/pr-main_l2.yaml"
- "cmd/ethrex/l2/**"

concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
Expand Down
7 changes: 2 additions & 5 deletions cmd/ethrex/l2/command.rs
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,6 @@ pub const DB_ETHREX_DEV_L2: &str = "dev_ethrex_l2";
const PAUSE_CONTRACT_SELECTOR: &str = "pause()";
const UNPAUSE_CONTRACT_SELECTOR: &str = "unpause()";
const REVERT_BATCH_SELECTOR: &str = "revertBatch(uint256)";

#[derive(Parser)]
#[clap(args_conflicts_with_subcommands = true)]
pub struct L2Command {
Expand Down Expand Up @@ -87,10 +86,8 @@ impl L2Command {
let contract_addresses =
l2::deployer::deploy_l1_contracts(l2::deployer::DeployerOptions::default()).await?;

l2_options = l2::options::Options {
node_opts: crate::cli::Options::default_l2(),
..Default::default()
};
l2_options.node_opts = crate::cli::Options::default_l2();
l2_options.populate_with_defaults();
l2_options
.sequencer_opts
.committer_opts
Expand Down
140 changes: 139 additions & 1 deletion cmd/ethrex/l2/options.rs
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ use std::{
};
use tracing::Level;

pub const DEFAULT_PROOF_COORDINATOR_QPL_TOOL_PATH: &str = "./tee/contracts/automata-dcap-qpl/automata-dcap-qpl-tool/target/release/automata-dcap-qpl-tool";

#[derive(Parser, Debug)]
#[group(id = "L2Options")]
pub struct Options {
Expand Down Expand Up @@ -245,6 +247,38 @@ impl TryFrom<SequencerOptions> for SequencerConfig {
}
}

impl Options {
pub fn populate_with_defaults(&mut self) {
let defaults = Options::default();
self.sponsorable_addresses_file_path = self
.sponsorable_addresses_file_path
.clone()
.or(defaults.sponsorable_addresses_file_path.clone());
self.sequencer_opts
.populate_with_defaults(&defaults.sequencer_opts);
}
}

impl SequencerOptions {
pub fn populate_with_defaults(&mut self, defaults: &SequencerOptions) {
self.eth_opts.populate_with_defaults(&defaults.eth_opts);
self.watcher_opts
.populate_with_defaults(&defaults.watcher_opts);
self.block_producer_opts
.populate_with_defaults(&defaults.block_producer_opts);
self.committer_opts
.populate_with_defaults(&defaults.committer_opts);
self.proof_coordinator_opts
.populate_with_defaults(&defaults.proof_coordinator_opts);
self.based_opts.populate_with_defaults(&defaults.based_opts);
self.aligned_opts
.populate_with_defaults(&defaults.aligned_opts);
self.monitor_opts
.populate_with_defaults(&defaults.monitor_opts);
// admin_opts contains only non-optional fields.
}
}

#[derive(Parser, Debug)]
pub struct EthOptions {
#[arg(
Expand Down Expand Up @@ -320,6 +354,14 @@ impl Default for EthOptions {
}
}

impl EthOptions {
fn populate_with_defaults(&mut self, defaults: &Self) {
if self.rpc_url.is_empty() {
self.rpc_url = defaults.rpc_url.clone();
}
}
}

#[derive(Parser, Debug)]
pub struct WatcherOptions {
#[arg(
Expand Down Expand Up @@ -369,6 +411,12 @@ impl Default for WatcherOptions {
}
}

impl WatcherOptions {
fn populate_with_defaults(&mut self, defaults: &Self) {
self.bridge_address = self.bridge_address.or(defaults.bridge_address);
}
}

#[derive(Parser, Debug)]
pub struct BlockProducerOptions {
#[arg(
Expand Down Expand Up @@ -430,6 +478,12 @@ impl Default for BlockProducerOptions {
}
}

impl BlockProducerOptions {
fn populate_with_defaults(&mut self, defaults: &Self) {
self.coinbase_address = self.coinbase_address.or(defaults.coinbase_address);
}
}

#[derive(Parser, Debug)]
pub struct CommitterOptions {
#[arg(
Expand Down Expand Up @@ -526,6 +580,30 @@ impl Default for CommitterOptions {
}
}

impl CommitterOptions {
fn populate_with_defaults(&mut self, defaults: &Self) {
if self.committer_remote_signer_url.is_none() {
self.committer_l1_private_key = self
.committer_l1_private_key
.or(defaults.committer_l1_private_key);
}
self.committer_remote_signer_url = self
.committer_remote_signer_url
.clone()
.or(defaults.committer_remote_signer_url.clone());
self.committer_remote_signer_public_key = self
.committer_remote_signer_public_key
.or(defaults.committer_remote_signer_public_key);
self.on_chain_proposer_address = self
.on_chain_proposer_address
.or(defaults.on_chain_proposer_address);
self.batch_gas_limit = self.batch_gas_limit.or(defaults.batch_gas_limit);
self.first_wake_up_time_ms = self
.first_wake_up_time_ms
.or(defaults.first_wake_up_time_ms);
}
}

#[derive(Parser, Debug)]
pub struct ProofCoordinatorOptions {
#[arg(
Expand Down Expand Up @@ -622,8 +700,34 @@ impl Default for ProofCoordinatorOptions {
listen_port: 3900,
proof_send_interval_ms: 5000,
proof_coordinator_tdx_private_key: None,
proof_coordinator_qpl_tool_path: None,
proof_coordinator_qpl_tool_path: Some(
DEFAULT_PROOF_COORDINATOR_QPL_TOOL_PATH.to_string(),
),
}
}
}

impl ProofCoordinatorOptions {
fn populate_with_defaults(&mut self, defaults: &Self) {
if self.remote_signer_url.is_none() {
self.proof_coordinator_l1_private_key = self
.proof_coordinator_l1_private_key
.or(defaults.proof_coordinator_l1_private_key);
}
self.proof_coordinator_tdx_private_key = self
.proof_coordinator_tdx_private_key
.or(defaults.proof_coordinator_tdx_private_key);
self.proof_coordinator_qpl_tool_path = self
.proof_coordinator_qpl_tool_path
.clone()
.or(defaults.proof_coordinator_qpl_tool_path.clone());
self.remote_signer_url = self
.remote_signer_url
.clone()
.or(defaults.remote_signer_url.clone());
self.remote_signer_public_key = self
.remote_signer_public_key
.or(defaults.remote_signer_public_key);
}
}
#[derive(Parser, Debug, Clone)]
Expand Down Expand Up @@ -699,6 +803,20 @@ impl Default for AlignedOptions {
}
}

impl AlignedOptions {
fn populate_with_defaults(&mut self, defaults: &Self) {
self.beacon_url = self.beacon_url.clone().or(defaults.beacon_url.clone());
self.aligned_network = self
.aligned_network
.clone()
.or(defaults.aligned_network.clone());
self.aligned_sp1_elf_path = self
.aligned_sp1_elf_path
.clone()
.or(defaults.aligned_sp1_elf_path.clone());
}
}

#[derive(Parser, Default, Debug)]
pub struct BasedOptions {
#[clap(flatten)]
Expand All @@ -707,6 +825,14 @@ pub struct BasedOptions {
pub block_fetcher: BlockFetcherOptions,
}

impl BasedOptions {
fn populate_with_defaults(&mut self, defaults: &Self) {
self.state_updater_opts
.populate_with_defaults(&defaults.state_updater_opts);
// block fetcher contains only non-optional fields.
}
}

#[derive(Parser, Debug)]
pub struct StateUpdaterOptions {
#[arg(
Expand Down Expand Up @@ -736,6 +862,12 @@ impl Default for StateUpdaterOptions {
}
}

impl StateUpdaterOptions {
fn populate_with_defaults(&mut self, defaults: &Self) {
self.sequencer_registry = self.sequencer_registry.or(defaults.sequencer_registry);
}
}

#[derive(Parser, Debug)]
pub struct BlockFetcherOptions {
#[arg(
Expand Down Expand Up @@ -783,6 +915,12 @@ impl Default for MonitorOptions {
}
}

impl MonitorOptions {
fn populate_with_defaults(&mut self, defaults: &Self) {
self.batch_widget_height = self.batch_widget_height.or(defaults.batch_widget_height);
}
}

#[derive(Parser, Debug)]
pub struct AdminOptions {
#[arg(
Expand Down
2 changes: 1 addition & 1 deletion docs/CLI.md
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ Block producer options:
--block-producer.extra-data <EXTRA_DATA>
Block extra data message.

[default: "ethrex 0.1.0"]
[default: "ethrex 3.0.0"]
```

<!-- END_CLI_HELP -->
Expand Down