From a28c22db39426b7c88bce84f2c0d2ea5862bde08 Mon Sep 17 00:00:00 2001 From: Arsenii Kulikov Date: Thu, 11 Sep 2025 02:48:07 +0400 Subject: [PATCH] refactor: more type-safety in cli --- crates/cli/commands/src/common.rs | 35 +++++++++++++--------------- crates/ethereum/cli/src/interface.rs | 2 +- crates/optimism/cli/src/app.rs | 2 +- 3 files changed, 18 insertions(+), 21 deletions(-) diff --git a/crates/cli/commands/src/common.rs b/crates/cli/commands/src/common.rs index bc5de96ff5f..46a6c479e67 100644 --- a/crates/cli/commands/src/common.rs +++ b/crates/cli/commands/src/common.rs @@ -5,7 +5,7 @@ use clap::Parser; use reth_chainspec::EthChainSpec; use reth_cli::chainspec::ChainSpecParser; use reth_config::{config::EtlConfig, Config}; -use reth_consensus::{noop::NoopConsensus, ConsensusError, FullConsensus}; +use reth_consensus::noop::NoopConsensus; use reth_db::{init_db, open_db_read_only, DatabaseEnv}; use reth_db_common::init::init_genesis; use reth_downloaders::{bodies::noop::NoopBodiesDownloader, headers::noop::NoopHeaderDownloader}; @@ -229,7 +229,7 @@ impl CliHeader for alloy_consensus::Header { /// Helper trait with a common set of requirements for the /// [`NodeTypes`] in CLI. -pub trait CliNodeTypes: NodeTypesForProvider { +pub trait CliNodeTypes: Node> + NodeTypesForProvider { type Evm: ConfigureEvm; type NetworkPrimitives: NetPrimitivesFor; } @@ -242,32 +242,29 @@ where type NetworkPrimitives = <<>>::Components as NodeComponents>>::Network as NetworkEventListenerProvider>::Primitives; } +type EvmFor = <<>>::ComponentsBuilder as NodeComponentsBuilder< + FullTypesAdapter, +>>::Components as NodeComponents>>::Evm; + +type ConsensusFor = + <<>>::ComponentsBuilder as NodeComponentsBuilder< + FullTypesAdapter, + >>::Components as NodeComponents>>::Consensus; + /// Helper trait aggregating components required for the CLI. pub trait CliNodeComponents: Send + Sync + 'static { - /// Evm to use. - type Evm: ConfigureEvm + 'static; - /// Consensus implementation. - type Consensus: FullConsensus + Clone + 'static; - /// Returns the configured EVM. - fn evm_config(&self) -> &Self::Evm; + fn evm_config(&self) -> &EvmFor; /// Returns the consensus implementation. - fn consensus(&self) -> &Self::Consensus; + fn consensus(&self) -> &ConsensusFor; } -impl CliNodeComponents for (E, C) -where - E: ConfigureEvm + 'static, - C: FullConsensus + Clone + 'static, -{ - type Evm = E; - type Consensus = C; - - fn evm_config(&self) -> &Self::Evm { +impl CliNodeComponents for (EvmFor, ConsensusFor) { + fn evm_config(&self) -> &EvmFor { &self.0 } - fn consensus(&self) -> &Self::Consensus { + fn consensus(&self) -> &ConsensusFor { &self.1 } } diff --git a/crates/ethereum/cli/src/interface.rs b/crates/ethereum/cli/src/interface.rs index f98bc736c41..4b054b5e467 100644 --- a/crates/ethereum/cli/src/interface.rs +++ b/crates/ethereum/cli/src/interface.rs @@ -161,7 +161,7 @@ impl C: ChainSpecParser, { let components = |spec: Arc| { - (EthEvmConfig::ethereum(spec.clone()), EthBeaconConsensus::new(spec)) + (EthEvmConfig::ethereum(spec.clone()), Arc::new(EthBeaconConsensus::new(spec))) }; self.with_runner_and_components::( diff --git a/crates/optimism/cli/src/app.rs b/crates/optimism/cli/src/app.rs index 84c111ecbfa..0d3d691968b 100644 --- a/crates/optimism/cli/src/app.rs +++ b/crates/optimism/cli/src/app.rs @@ -68,7 +68,7 @@ where let _ = install_prometheus_recorder(); let components = |spec: Arc| { - (OpExecutorProvider::optimism(spec.clone()), OpBeaconConsensus::new(spec)) + (OpExecutorProvider::optimism(spec.clone()), Arc::new(OpBeaconConsensus::new(spec))) }; match self.cli.command {