diff --git a/crates/cli/commands/src/init_state/mod.rs b/crates/cli/commands/src/init_state/mod.rs index 76e7791e1d4..7a80997b976 100644 --- a/crates/cli/commands/src/init_state/mod.rs +++ b/crates/cli/commands/src/init_state/mod.rs @@ -1,14 +1,14 @@ //! Command that initializes the node from a genesis file. use crate::common::{AccessRights, CliNodeTypes, Environment, EnvironmentArgs}; -use alloy_consensus::Header; +use alloy_consensus::{BlockHeader as AlloyBlockHeader, Header}; use alloy_primitives::{B256, U256}; use clap::Parser; use reth_chainspec::{EthChainSpec, EthereumHardforks}; use reth_cli::chainspec::ChainSpecParser; use reth_db_common::init::init_from_state_dump; use reth_node_api::NodePrimitives; -use reth_primitives_traits::SealedHeader; +use reth_primitives_traits::{BlockHeader, SealedHeader}; use reth_provider::{ BlockNumReader, DatabaseProviderFactory, StaticFileProviderFactory, StaticFileWriter, }; @@ -72,7 +72,7 @@ impl> InitStateC where N: CliNodeTypes< ChainSpec = C::ChainSpec, - Primitives: NodePrimitives, + Primitives: NodePrimitives>, >, { info!(target: "reth::cli", "Reth init-state starting"); @@ -85,7 +85,9 @@ impl> InitStateC if self.without_evm { // ensure header, total difficulty and header hash are provided let header = self.header.ok_or_else(|| eyre::eyre!("Header file must be provided"))?; - let header = without_evm::read_header_from_file(header)?; + let header = without_evm::read_header_from_file::< + ::BlockHeader, + >(header)?; let header_hash = self.header_hash.ok_or_else(|| eyre::eyre!("Header hash must be provided"))?; @@ -103,7 +105,10 @@ impl> InitStateC &provider_rw, SealedHeader::new(header, header_hash), total_difficulty, - |number| Header { number, ..Default::default() }, + |number| { + let header = Header { number, ..Default::default() }; + <::BlockHeader>::from(header) + }, )?; // SAFETY: it's safe to commit static files, since in the event of a crash, they @@ -112,7 +117,7 @@ impl> InitStateC // Necessary to commit, so the header is accessible to provider_rw and // init_state_dump static_file_provider.commit()?; - } else if last_block_number > 0 && last_block_number < header.number { + } else if last_block_number > 0 && last_block_number < header.number() { return Err(eyre::eyre!( "Data directory should be empty when calling init-state with --without-evm-history." )); diff --git a/crates/cli/commands/src/init_state/without_evm.rs b/crates/cli/commands/src/init_state/without_evm.rs index c839aaf268e..3a85b175eb4 100644 --- a/crates/cli/commands/src/init_state/without_evm.rs +++ b/crates/cli/commands/src/init_state/without_evm.rs @@ -1,4 +1,4 @@ -use alloy_consensus::{BlockHeader, Header}; +use alloy_consensus::BlockHeader; use alloy_primitives::{BlockNumber, B256, U256}; use alloy_rlp::Decodable; use reth_codecs::Compact; @@ -12,14 +12,16 @@ use reth_stages::{StageCheckpoint, StageId}; use reth_static_file_types::StaticFileSegment; use std::{fs::File, io::Read, path::PathBuf}; use tracing::info; - /// Reads the header RLP from a file and returns the Header. -pub(crate) fn read_header_from_file(path: PathBuf) -> Result { +pub(crate) fn read_header_from_file(path: PathBuf) -> Result +where + H: Decodable, +{ let mut file = File::open(path)?; let mut buf = Vec::new(); file.read_to_end(&mut buf)?; - let header = Header::decode(&mut &buf[..])?; + let header = H::decode(&mut &buf[..])?; Ok(header) } diff --git a/crates/ethereum/cli/src/interface.rs b/crates/ethereum/cli/src/interface.rs index f1bace672bd..e62dad13d09 100644 --- a/crates/ethereum/cli/src/interface.rs +++ b/crates/ethereum/cli/src/interface.rs @@ -1,6 +1,7 @@ //! CLI definition and entrypoint to executable use crate::chainspec::EthereumChainSpecParser; +use alloy_consensus::Header; use clap::{Parser, Subcommand}; use reth_chainspec::{ChainSpec, EthChainSpec, Hardforks}; use reth_cli::chainspec::ChainSpecParser; @@ -13,7 +14,7 @@ use reth_cli_commands::{ }; use reth_cli_runner::CliRunner; use reth_db::DatabaseEnv; -use reth_node_api::NodePrimitives; +use reth_node_api::{NodePrimitives, NodeTypes}; use reth_node_builder::{NodeBuilder, WithLaunchContext}; use reth_node_core::{ args::LogArgs, @@ -181,11 +182,9 @@ impl Cli { ) -> eyre::Result<()>, ) -> eyre::Result<()> where - N: CliNodeTypes< - Primitives: NodePrimitives, - ChainSpec: Hardforks, - >, + N: CliNodeTypes, C: ChainSpecParser, + <::Primitives as NodePrimitives>::BlockHeader: From
, { // Add network name if available to the logs dir if let Some(chain_spec) = self.command.chain_spec() {