mirror of
https://github.com/hl-archive-node/nanoreth.git
synced 2025-12-06 10:59:55 +00:00
refactor: extract op-reth binary to separate crate (#10641)
Co-authored-by: Loocapro <lucaprovini1989@gmail.com> Co-authored-by: joshieDo <93316087+joshieDo@users.noreply.github.com>
This commit is contained in:
@ -72,7 +72,7 @@ clap = { workspace = true, features = ["derive", "env"] }
|
||||
csv = "1.3.0"
|
||||
|
||||
[target.'cfg(unix)'.dependencies]
|
||||
tikv-jemallocator = { version = "0.5.0", optional = true }
|
||||
tikv-jemallocator = { workspace = true, optional = true }
|
||||
libc = "0.2"
|
||||
|
||||
[dev-dependencies]
|
||||
|
||||
@ -53,27 +53,18 @@ reth-payload-primitives.workspace = true
|
||||
reth-payload-validator.workspace = true
|
||||
reth-basic-payload-builder.workspace = true
|
||||
reth-static-file.workspace = true
|
||||
reth-static-file-types = { workspace = true, features = ["clap"] }
|
||||
reth-trie = { workspace = true, features = ["metrics"] }
|
||||
reth-trie-db = { workspace = true, features = ["metrics"] }
|
||||
reth-node-api.workspace = true
|
||||
reth-node-optimism = { workspace = true, optional = true, features = [
|
||||
"optimism",
|
||||
] }
|
||||
reth-node-core.workspace = true
|
||||
reth-ethereum-payload-builder.workspace = true
|
||||
reth-db-common.workspace = true
|
||||
reth-node-ethereum.workspace = true
|
||||
reth-node-builder.workspace = true
|
||||
reth-node-events.workspace = true
|
||||
reth-node-metrics.workspace = true
|
||||
reth-consensus.workspace = true
|
||||
reth-optimism-primitives.workspace = true
|
||||
reth-engine-util.workspace = true
|
||||
reth-prune.workspace = true
|
||||
reth-stages-api.workspace = true
|
||||
reth-optimism-cli = { workspace = true, optional = true }
|
||||
reth-optimism-rpc.workspace = true
|
||||
|
||||
# crypto
|
||||
alloy-rlp.workspace = true
|
||||
@ -82,13 +73,7 @@ alloy-rlp.workspace = true
|
||||
tracing.workspace = true
|
||||
|
||||
# io
|
||||
fdlimit.workspace = true
|
||||
serde.workspace = true
|
||||
serde_json.workspace = true
|
||||
toml = { workspace = true, features = ["display"] }
|
||||
|
||||
# metrics
|
||||
metrics-process.workspace = true
|
||||
|
||||
# async
|
||||
tokio = { workspace = true, features = [
|
||||
@ -103,20 +88,15 @@ futures.workspace = true
|
||||
aquamarine.workspace = true
|
||||
eyre.workspace = true
|
||||
clap = { workspace = true, features = ["derive", "env"] }
|
||||
tempfile.workspace = true
|
||||
backon.workspace = true
|
||||
similar-asserts.workspace = true
|
||||
itertools.workspace = true
|
||||
|
||||
# p2p
|
||||
discv5.workspace = true
|
||||
|
||||
[target.'cfg(unix)'.dependencies]
|
||||
tikv-jemallocator = { version = "0.5.0", optional = true }
|
||||
libc = "0.2"
|
||||
tikv-jemallocator = { workspace = true, optional = true }
|
||||
|
||||
[dev-dependencies]
|
||||
reth-discv4.workspace = true
|
||||
tempfile.workspace = true
|
||||
|
||||
[features]
|
||||
default = ["jemalloc"]
|
||||
@ -134,26 +114,6 @@ min-info-logs = ["tracing/release_max_level_info"]
|
||||
min-debug-logs = ["tracing/release_max_level_debug"]
|
||||
min-trace-logs = ["tracing/release_max_level_trace"]
|
||||
|
||||
optimism = [
|
||||
"dep:reth-node-optimism",
|
||||
"dep:reth-optimism-cli",
|
||||
"reth-beacon-consensus/optimism",
|
||||
"reth-blockchain-tree/optimism",
|
||||
"reth-node-core/optimism",
|
||||
"reth-optimism-cli?/optimism",
|
||||
"reth-primitives/optimism",
|
||||
"reth-provider/optimism",
|
||||
"reth-rpc/optimism",
|
||||
]
|
||||
|
||||
# no-op feature flag for switching between the `optimism` and default functionality in CI matrices
|
||||
ethereum = []
|
||||
|
||||
[[bin]]
|
||||
name = "reth"
|
||||
path = "src/main.rs"
|
||||
|
||||
[[bin]]
|
||||
name = "op-reth"
|
||||
path = "src/optimism.rs"
|
||||
required-features = ["optimism"]
|
||||
|
||||
@ -3,7 +3,6 @@
|
||||
use crate::{
|
||||
args::{utils::chain_help, LogArgs},
|
||||
commands::debug_cmd,
|
||||
macros::block_executor,
|
||||
version::{LONG_VERSION, SHORT_VERSION},
|
||||
};
|
||||
use clap::{value_parser, Parser, Subcommand};
|
||||
@ -18,6 +17,7 @@ use reth_cli_runner::CliRunner;
|
||||
use reth_db::DatabaseEnv;
|
||||
use reth_node_builder::{NodeBuilder, WithLaunchContext};
|
||||
use reth_node_core::args::utils::DefaultChainSpecParser;
|
||||
use reth_node_ethereum::EthExecutorProvider;
|
||||
use reth_tracing::FileWorkerGuard;
|
||||
use std::{ffi::OsString, fmt, future::Future, sync::Arc};
|
||||
use tracing::info;
|
||||
@ -150,20 +150,13 @@ impl<C: ChainSpecParser<ChainSpec = ChainSpec>, Ext: clap::Args + fmt::Debug> Cl
|
||||
}
|
||||
Commands::Init(command) => runner.run_blocking_until_ctrl_c(command.execute()),
|
||||
Commands::InitState(command) => runner.run_blocking_until_ctrl_c(command.execute()),
|
||||
Commands::Import(command) => runner.run_blocking_until_ctrl_c(
|
||||
command.execute(|chain_spec| block_executor!(chain_spec)),
|
||||
),
|
||||
#[cfg(feature = "optimism")]
|
||||
Commands::ImportOp(command) => runner.run_blocking_until_ctrl_c(command.execute()),
|
||||
#[cfg(feature = "optimism")]
|
||||
Commands::ImportReceiptsOp(command) => {
|
||||
runner.run_blocking_until_ctrl_c(command.execute())
|
||||
Commands::Import(command) => {
|
||||
runner.run_blocking_until_ctrl_c(command.execute(EthExecutorProvider::ethereum))
|
||||
}
|
||||
Commands::DumpGenesis(command) => runner.run_blocking_until_ctrl_c(command.execute()),
|
||||
Commands::Db(command) => runner.run_blocking_until_ctrl_c(command.execute()),
|
||||
Commands::Stage(command) => runner.run_command_until_exit(|ctx| {
|
||||
command.execute(ctx, |chain_spec| block_executor!(chain_spec))
|
||||
}),
|
||||
Commands::Stage(command) => runner
|
||||
.run_command_until_exit(|ctx| command.execute(ctx, EthExecutorProvider::ethereum)),
|
||||
Commands::P2P(command) => runner.run_until_ctrl_c(command.execute()),
|
||||
#[cfg(feature = "dev")]
|
||||
Commands::TestVectors(command) => runner.run_until_ctrl_c(command.execute()),
|
||||
@ -199,14 +192,6 @@ pub enum Commands<C: ChainSpecParser, Ext: clap::Args + fmt::Debug> {
|
||||
/// This syncs RLP encoded blocks from a file.
|
||||
#[command(name = "import")]
|
||||
Import(import::ImportCommand<C>),
|
||||
/// This syncs RLP encoded OP blocks below Bedrock from a file, without executing.
|
||||
#[cfg(feature = "optimism")]
|
||||
#[command(name = "import-op")]
|
||||
ImportOp(reth_optimism_cli::ImportOpCommand<C>),
|
||||
/// This imports RLP encoded receipts from a file.
|
||||
#[cfg(feature = "optimism")]
|
||||
#[command(name = "import-receipts-op")]
|
||||
ImportReceiptsOp(reth_optimism_cli::ImportReceiptsOpCommand<C>),
|
||||
/// Dumps genesis block JSON configuration to stdout.
|
||||
DumpGenesis(dump_genesis::DumpGenesisCommand<C>),
|
||||
/// Database debugging utilities
|
||||
|
||||
@ -1,5 +1,4 @@
|
||||
//! Command for debugging block building.
|
||||
use crate::macros::block_executor;
|
||||
use alloy_rlp::Decodable;
|
||||
use clap::Parser;
|
||||
use eyre::Context;
|
||||
@ -21,6 +20,7 @@ use reth_evm::execute::{BlockExecutorProvider, Executor};
|
||||
use reth_execution_types::ExecutionOutcome;
|
||||
use reth_fs_util as fs;
|
||||
use reth_node_api::PayloadBuilderAttributes;
|
||||
use reth_node_ethereum::EthExecutorProvider;
|
||||
use reth_payload_builder::database::CachedReads;
|
||||
use reth_primitives::{
|
||||
constants::eip4844::LoadKzgSettingsError, revm_primitives::KzgSettings, Address,
|
||||
@ -122,7 +122,7 @@ impl<C: ChainSpecParser<ChainSpec = ChainSpec>> Command<C> {
|
||||
let consensus: Arc<dyn Consensus> =
|
||||
Arc::new(EthBeaconConsensus::new(provider_factory.chain_spec()));
|
||||
|
||||
let executor = block_executor!(provider_factory.chain_spec());
|
||||
let executor = EthExecutorProvider::ethereum(provider_factory.chain_spec());
|
||||
|
||||
// configure blockchain tree
|
||||
let tree_externals =
|
||||
@ -223,17 +223,6 @@ impl<C: ChainSpecParser<ChainSpec = ChainSpec>> Command<C> {
|
||||
let payload_config = PayloadConfig::new(
|
||||
Arc::clone(&best_block),
|
||||
Bytes::default(),
|
||||
#[cfg(feature = "optimism")]
|
||||
reth_node_optimism::OptimismPayloadBuilderAttributes::try_new(
|
||||
best_block.hash(),
|
||||
reth_rpc_types::optimism::OptimismPayloadAttributes {
|
||||
payload_attributes: payload_attrs,
|
||||
transactions: None,
|
||||
no_tx_pool: None,
|
||||
gas_limit: None,
|
||||
},
|
||||
)?,
|
||||
#[cfg(not(feature = "optimism"))]
|
||||
reth_payload_builder::EthPayloadBuilderAttributes::try_new(
|
||||
best_block.hash(),
|
||||
payload_attrs,
|
||||
@ -250,13 +239,6 @@ impl<C: ChainSpecParser<ChainSpec = ChainSpec>> Command<C> {
|
||||
None,
|
||||
);
|
||||
|
||||
#[cfg(feature = "optimism")]
|
||||
let payload_builder = reth_node_optimism::OptimismPayloadBuilder::new(
|
||||
reth_node_optimism::OptimismEvmConfig::default(),
|
||||
)
|
||||
.compute_pending_block();
|
||||
|
||||
#[cfg(not(feature = "optimism"))]
|
||||
let payload_builder = reth_ethereum_payload_builder::EthereumPayloadBuilder::default();
|
||||
|
||||
match payload_builder.try_build(args)? {
|
||||
@ -273,7 +255,8 @@ impl<C: ChainSpecParser<ChainSpec = ChainSpec>> Command<C> {
|
||||
SealedBlockWithSenders::new(block.clone(), senders).unwrap();
|
||||
|
||||
let db = StateProviderDatabase::new(blockchain_db.latest()?);
|
||||
let executor = block_executor!(provider_factory.chain_spec()).executor(db);
|
||||
let executor =
|
||||
EthExecutorProvider::ethereum(provider_factory.chain_spec()).executor(db);
|
||||
|
||||
let block_execution_output =
|
||||
executor.execute((&block_with_senders.clone().unseal(), U256::MAX).into())?;
|
||||
|
||||
@ -1,7 +1,6 @@
|
||||
//! Command for debugging execution.
|
||||
|
||||
use std::{path::PathBuf, sync::Arc};
|
||||
|
||||
use crate::{args::NetworkArgs, utils::get_single_header};
|
||||
use clap::Parser;
|
||||
use futures::{stream::select as stream_select, StreamExt};
|
||||
use reth_beacon_consensus::EthBeaconConsensus;
|
||||
@ -22,6 +21,7 @@ use reth_exex::ExExManagerHandle;
|
||||
use reth_network::{BlockDownloaderProvider, NetworkEventListenerProvider, NetworkHandle};
|
||||
use reth_network_api::NetworkInfo;
|
||||
use reth_network_p2p::{headers::client::HeadersClient, BlockClient};
|
||||
use reth_node_ethereum::EthExecutorProvider;
|
||||
use reth_primitives::{BlockHashOrNumber, BlockNumber, B256};
|
||||
use reth_provider::{
|
||||
BlockExecutionWriter, ChainSpecProvider, ProviderFactory, StageCheckpointReader,
|
||||
@ -33,11 +33,10 @@ use reth_stages::{
|
||||
};
|
||||
use reth_static_file::StaticFileProducer;
|
||||
use reth_tasks::TaskExecutor;
|
||||
use std::{path::PathBuf, sync::Arc};
|
||||
use tokio::sync::watch;
|
||||
use tracing::*;
|
||||
|
||||
use crate::{args::NetworkArgs, macros::block_executor, utils::get_single_header};
|
||||
|
||||
/// `reth debug execution` command
|
||||
#[derive(Debug, Parser)]
|
||||
pub struct Command<C: ChainSpecParser> {
|
||||
@ -84,7 +83,7 @@ impl<C: ChainSpecParser<ChainSpec = ChainSpec>> Command<C> {
|
||||
let prune_modes = config.prune.clone().map(|prune| prune.segments).unwrap_or_default();
|
||||
|
||||
let (tip_tx, tip_rx) = watch::channel(B256::ZERO);
|
||||
let executor = block_executor!(provider_factory.chain_spec());
|
||||
let executor = EthExecutorProvider::ethereum(provider_factory.chain_spec());
|
||||
|
||||
let pipeline = Pipeline::builder()
|
||||
.with_tip_sender(tip_tx)
|
||||
|
||||
@ -1,7 +1,9 @@
|
||||
//! Command for debugging in-memory merkle trie calculation.
|
||||
|
||||
use std::{path::PathBuf, sync::Arc};
|
||||
|
||||
use crate::{
|
||||
args::NetworkArgs,
|
||||
utils::{get_single_body, get_single_header},
|
||||
};
|
||||
use backon::{ConstantBuilder, Retryable};
|
||||
use clap::Parser;
|
||||
use reth_chainspec::ChainSpec;
|
||||
@ -16,6 +18,7 @@ use reth_evm::execute::{BlockExecutorProvider, Executor};
|
||||
use reth_execution_types::ExecutionOutcome;
|
||||
use reth_network::{BlockDownloaderProvider, NetworkHandle};
|
||||
use reth_network_api::NetworkInfo;
|
||||
use reth_node_ethereum::EthExecutorProvider;
|
||||
use reth_primitives::BlockHashOrNumber;
|
||||
use reth_provider::{
|
||||
writer::UnifiedStorageWriter, AccountExtReader, ChainSpecProvider, HashingWriter,
|
||||
@ -27,14 +30,9 @@ use reth_stages::StageId;
|
||||
use reth_tasks::TaskExecutor;
|
||||
use reth_trie::StateRoot;
|
||||
use reth_trie_db::DatabaseStateRoot;
|
||||
use std::{path::PathBuf, sync::Arc};
|
||||
use tracing::*;
|
||||
|
||||
use crate::{
|
||||
args::NetworkArgs,
|
||||
macros::block_executor,
|
||||
utils::{get_single_body, get_single_header},
|
||||
};
|
||||
|
||||
/// `reth debug in-memory-merkle` command
|
||||
/// This debug routine requires that the node is positioned at the block before the target.
|
||||
/// The script will then download the block from p2p network and attempt to calculate and verify
|
||||
@ -134,7 +132,7 @@ impl<C: ChainSpecParser<ChainSpec = ChainSpec>> Command<C> {
|
||||
provider_factory.static_file_provider(),
|
||||
));
|
||||
|
||||
let executor = block_executor!(provider_factory.chain_spec()).executor(db);
|
||||
let executor = EthExecutorProvider::ethereum(provider_factory.chain_spec()).executor(db);
|
||||
|
||||
let merkle_block_td =
|
||||
provider.header_td_by_number(merkle_block_number)?.unwrap_or_default();
|
||||
|
||||
@ -1,7 +1,5 @@
|
||||
//! Command for debugging merkle trie calculation.
|
||||
|
||||
use std::{path::PathBuf, sync::Arc};
|
||||
|
||||
use crate::{args::NetworkArgs, utils::get_single_header};
|
||||
use backon::{ConstantBuilder, Retryable};
|
||||
use clap::Parser;
|
||||
use reth_beacon_consensus::EthBeaconConsensus;
|
||||
@ -18,6 +16,7 @@ use reth_evm::execute::{BatchExecutor, BlockExecutorProvider};
|
||||
use reth_network::{BlockDownloaderProvider, NetworkHandle};
|
||||
use reth_network_api::NetworkInfo;
|
||||
use reth_network_p2p::full_block::FullBlockClient;
|
||||
use reth_node_ethereum::EthExecutorProvider;
|
||||
use reth_primitives::BlockHashOrNumber;
|
||||
use reth_provider::{
|
||||
writer::UnifiedStorageWriter, BlockNumReader, BlockWriter, ChainSpecProvider, HeaderProvider,
|
||||
@ -29,10 +28,9 @@ use reth_stages::{
|
||||
ExecInput, Stage, StageCheckpoint,
|
||||
};
|
||||
use reth_tasks::TaskExecutor;
|
||||
use std::{path::PathBuf, sync::Arc};
|
||||
use tracing::*;
|
||||
|
||||
use crate::{args::NetworkArgs, macros::block_executor, utils::get_single_header};
|
||||
|
||||
/// `reth debug merkle` command
|
||||
#[derive(Debug, Parser)]
|
||||
pub struct Command<C: ChainSpecParser> {
|
||||
@ -96,7 +94,7 @@ impl<C: ChainSpecParser<ChainSpec = ChainSpec>> Command<C> {
|
||||
)
|
||||
.await?;
|
||||
|
||||
let executor_provider = block_executor!(provider_factory.chain_spec());
|
||||
let executor_provider = EthExecutorProvider::ethereum(provider_factory.chain_spec());
|
||||
|
||||
// Initialize the fetch client
|
||||
info!(target: "reth::cli", target_block_number=self.to, "Downloading tip of block range");
|
||||
|
||||
@ -1,5 +1,4 @@
|
||||
use std::{path::PathBuf, sync::Arc, time::Duration};
|
||||
|
||||
use crate::args::NetworkArgs;
|
||||
use clap::Parser;
|
||||
use eyre::Context;
|
||||
use reth_basic_payload_builder::{BasicPayloadJobGenerator, BasicPayloadJobGeneratorConfig};
|
||||
@ -19,6 +18,7 @@ use reth_engine_util::engine_store::{EngineMessageStore, StoredEngineApiMessage}
|
||||
use reth_fs_util as fs;
|
||||
use reth_network::{BlockDownloaderProvider, NetworkHandle};
|
||||
use reth_network_api::NetworkInfo;
|
||||
use reth_node_ethereum::EthExecutorProvider;
|
||||
use reth_payload_builder::{PayloadBuilderHandle, PayloadBuilderService};
|
||||
use reth_provider::{
|
||||
providers::BlockchainProvider, CanonStateSubscriptions, ChainSpecProvider, ProviderFactory,
|
||||
@ -28,11 +28,10 @@ use reth_stages::Pipeline;
|
||||
use reth_static_file::StaticFileProducer;
|
||||
use reth_tasks::TaskExecutor;
|
||||
use reth_transaction_pool::noop::NoopTransactionPool;
|
||||
use std::{path::PathBuf, sync::Arc, time::Duration};
|
||||
use tokio::sync::oneshot;
|
||||
use tracing::*;
|
||||
|
||||
use crate::{args::NetworkArgs, macros::block_executor};
|
||||
|
||||
/// `reth debug replay-engine` command
|
||||
/// This script will read stored engine API messages and replay them by the timestamp.
|
||||
/// It does not require
|
||||
@ -82,7 +81,7 @@ impl<C: ChainSpecParser<ChainSpec = ChainSpec>> Command<C> {
|
||||
let consensus: Arc<dyn Consensus> =
|
||||
Arc::new(EthBeaconConsensus::new(provider_factory.chain_spec()));
|
||||
|
||||
let executor = block_executor!(provider_factory.chain_spec());
|
||||
let executor = EthExecutorProvider::ethereum(provider_factory.chain_spec());
|
||||
|
||||
// Configure blockchain tree
|
||||
let tree_externals =
|
||||
@ -111,15 +110,8 @@ impl<C: ChainSpecParser<ChainSpec = ChainSpec>> Command<C> {
|
||||
.await?;
|
||||
|
||||
// Set up payload builder
|
||||
#[cfg(not(feature = "optimism"))]
|
||||
let payload_builder = reth_ethereum_payload_builder::EthereumPayloadBuilder::default();
|
||||
|
||||
// Optimism's payload builder is implemented on the OptimismPayloadBuilder type.
|
||||
#[cfg(feature = "optimism")]
|
||||
let payload_builder = reth_node_optimism::OptimismPayloadBuilder::new(
|
||||
reth_node_optimism::OptimismEvmConfig::default(),
|
||||
);
|
||||
|
||||
let payload_generator = BasicPayloadJobGenerator::with_builder(
|
||||
blockchain_db.clone(),
|
||||
NoopTransactionPool::default(),
|
||||
@ -129,13 +121,6 @@ impl<C: ChainSpecParser<ChainSpec = ChainSpec>> Command<C> {
|
||||
payload_builder,
|
||||
);
|
||||
|
||||
#[cfg(feature = "optimism")]
|
||||
let (payload_service, payload_builder): (
|
||||
_,
|
||||
PayloadBuilderHandle<reth_node_optimism::OptimismEngineTypes>,
|
||||
) = PayloadBuilderService::new(payload_generator, blockchain_db.canonical_state_stream());
|
||||
|
||||
#[cfg(not(feature = "optimism"))]
|
||||
let (payload_service, payload_builder): (
|
||||
_,
|
||||
PayloadBuilderHandle<reth_node_ethereum::EthEngineTypes>,
|
||||
|
||||
@ -27,11 +27,11 @@
|
||||
html_favicon_url = "https://avatars0.githubusercontent.com/u/97369466?s=256",
|
||||
issue_tracker_base_url = "https://github.com/paradigmxyz/reth/issues/"
|
||||
)]
|
||||
#![cfg_attr(not(test), warn(unused_crate_dependencies))]
|
||||
#![cfg_attr(docsrs, feature(doc_cfg, doc_auto_cfg))]
|
||||
|
||||
pub mod cli;
|
||||
pub mod commands;
|
||||
mod macros;
|
||||
|
||||
/// Re-exported utils.
|
||||
pub mod utils {
|
||||
|
||||
@ -1,20 +0,0 @@
|
||||
//! Helper macros
|
||||
|
||||
/// Creates the block executor type based on the configured feature.
|
||||
///
|
||||
/// Note(mattsse): This is incredibly horrible and will be replaced
|
||||
#[cfg(not(feature = "optimism"))]
|
||||
macro_rules! block_executor {
|
||||
($chain_spec:expr) => {
|
||||
reth_node_ethereum::EthExecutorProvider::ethereum($chain_spec)
|
||||
};
|
||||
}
|
||||
|
||||
#[cfg(feature = "optimism")]
|
||||
macro_rules! block_executor {
|
||||
($chain_spec:expr) => {
|
||||
reth_node_optimism::OpExecutorProvider::optimism($chain_spec)
|
||||
};
|
||||
}
|
||||
|
||||
pub(crate) use block_executor;
|
||||
@ -5,9 +5,6 @@
|
||||
#[global_allocator]
|
||||
static ALLOC: tikv_jemallocator::Jemalloc = tikv_jemallocator::Jemalloc;
|
||||
|
||||
#[cfg(all(feature = "optimism", not(test)))]
|
||||
compile_error!("Cannot build the `reth` binary with the `optimism` feature flag enabled. Did you mean to build `op-reth`?");
|
||||
|
||||
/// clap [Args] for Engine related arguments.
|
||||
use clap::Args;
|
||||
|
||||
@ -20,7 +17,6 @@ pub struct EngineArgs {
|
||||
pub experimental: bool,
|
||||
}
|
||||
|
||||
#[cfg(not(feature = "optimism"))]
|
||||
fn main() {
|
||||
use clap::Parser;
|
||||
use reth::{args::utils::DefaultChainSpecParser, cli::Cli};
|
||||
|
||||
@ -1,84 +0,0 @@
|
||||
#![allow(missing_docs, rustdoc::missing_crate_level_docs)]
|
||||
|
||||
use clap::Parser;
|
||||
use reth::cli::Cli;
|
||||
use reth_node_builder::EngineNodeLauncher;
|
||||
use reth_node_optimism::{args::RollupArgs, node::OptimismAddOns, OptimismNode};
|
||||
use reth_optimism_rpc::eth::rpc::SequencerClient;
|
||||
use reth_provider::providers::BlockchainProvider2;
|
||||
|
||||
// We use jemalloc for performance reasons
|
||||
#[cfg(all(feature = "jemalloc", unix))]
|
||||
#[global_allocator]
|
||||
static ALLOC: tikv_jemallocator::Jemalloc = tikv_jemallocator::Jemalloc;
|
||||
|
||||
#[cfg(not(feature = "optimism"))]
|
||||
compile_error!("Cannot build the `op-reth` binary with the `optimism` feature flag disabled. Did you mean to build `reth`?");
|
||||
|
||||
#[cfg(feature = "optimism")]
|
||||
fn main() {
|
||||
use reth::args::utils::DefaultChainSpecParser;
|
||||
|
||||
reth_cli_util::sigsegv_handler::install();
|
||||
|
||||
// Enable backtraces unless a RUST_BACKTRACE value has already been explicitly provided.
|
||||
if std::env::var_os("RUST_BACKTRACE").is_none() {
|
||||
std::env::set_var("RUST_BACKTRACE", "1");
|
||||
}
|
||||
|
||||
if let Err(err) =
|
||||
Cli::<DefaultChainSpecParser, RollupArgs>::parse().run(|builder, rollup_args| async move {
|
||||
let enable_engine2 = rollup_args.experimental;
|
||||
let sequencer_http_arg = rollup_args.sequencer_http.clone();
|
||||
match enable_engine2 {
|
||||
true => {
|
||||
let handle = builder
|
||||
.with_types_and_provider::<OptimismNode, BlockchainProvider2<_>>()
|
||||
.with_components(OptimismNode::components(rollup_args))
|
||||
.with_add_ons::<OptimismAddOns>()
|
||||
.extend_rpc_modules(move |ctx| {
|
||||
// register sequencer tx forwarder
|
||||
if let Some(sequencer_http) = sequencer_http_arg {
|
||||
ctx.registry
|
||||
.eth_api()
|
||||
.set_sequencer_client(SequencerClient::new(sequencer_http));
|
||||
}
|
||||
|
||||
Ok(())
|
||||
})
|
||||
.launch_with_fn(|builder| {
|
||||
let launcher = EngineNodeLauncher::new(
|
||||
builder.task_executor().clone(),
|
||||
builder.config().datadir(),
|
||||
);
|
||||
builder.launch_with(launcher)
|
||||
})
|
||||
.await?;
|
||||
|
||||
handle.node_exit_future.await
|
||||
}
|
||||
false => {
|
||||
let handle = builder
|
||||
.node(OptimismNode::new(rollup_args.clone()))
|
||||
.extend_rpc_modules(move |ctx| {
|
||||
// register sequencer tx forwarder
|
||||
if let Some(sequencer_http) = sequencer_http_arg {
|
||||
ctx.registry
|
||||
.eth_api()
|
||||
.set_sequencer_client(SequencerClient::new(sequencer_http));
|
||||
}
|
||||
|
||||
Ok(())
|
||||
})
|
||||
.launch()
|
||||
.await?;
|
||||
|
||||
handle.node_exit_future.await
|
||||
}
|
||||
}
|
||||
})
|
||||
{
|
||||
eprintln!("Error: {err:?}");
|
||||
std::process::exit(1);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user