diff --git a/Cargo.lock b/Cargo.lock index 8286332f..0dd3051c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -7658,6 +7658,17 @@ dependencies = [ "vergen-git2", ] +[[package]] +name = "op-rbuilder-bin" +version = "0.2.1" +dependencies = [ + "eyre", + "op-rbuilder", + "reth-cli-util", + "reth-optimism-cli", + "tracing", +] + [[package]] name = "op-revm" version = "12.0.2" diff --git a/bin/op-rbuilder/Cargo.toml b/bin/op-rbuilder/Cargo.toml new file mode 100644 index 00000000..2ade010b --- /dev/null +++ b/bin/op-rbuilder/Cargo.toml @@ -0,0 +1,30 @@ +[package] +name = "op-rbuilder-bin" +description = "OP-Rbuilder Binary" + +version.workspace = true +edition.workspace = true +rust-version.workspace = true +license.workspace = true +homepage.workspace = true +repository.workspace = true + +[lints] +workspace = true + +[dependencies] +# internal +op-rbuilder = { path = "../../crates/builder/op-rbuilder" } + +# reth +reth-cli-util.workspace = true +reth-optimism-cli = { workspace = true, optional = true } + +# misc +eyre.workspace = true +tracing.workspace = true + +[features] +default = [ "jemalloc" ] +jemalloc = [ "op-rbuilder/jemalloc", "reth-cli-util/jemalloc" ] +telemetry = [ "op-rbuilder/telemetry", "reth-optimism-cli" ] diff --git a/bin/op-rbuilder/src/main.rs b/bin/op-rbuilder/src/main.rs new file mode 100644 index 00000000..ee94136c --- /dev/null +++ b/bin/op-rbuilder/src/main.rs @@ -0,0 +1,58 @@ +#![doc = "OP-Rbuilder Binary"] +#![doc(issue_tracker_base_url = "https://github.com/base/node-reth/issues/")] +#![cfg_attr(docsrs, feature(doc_cfg, doc_auto_cfg))] +#![cfg_attr(not(test), warn(unused_crate_dependencies))] + +use eyre::Result; +use op_rbuilder::{ + args::CliExt, + builders::{BuilderMode, FlashblocksBuilder, StandardBuilder}, + launcher::BuilderLauncher, +}; + +#[global_allocator] +static ALLOC: reth_cli_util::allocator::Allocator = reth_cli_util::allocator::new_allocator(); + +fn main() -> Result<()> { + // Parse CLI arguments with builder-specific configuration + let cli = op_rbuilder::args::Cli::parsed(); + let mode = cli.builder_mode(); + + // Extract telemetry args before configuring CLI (if telemetry feature enabled) + #[cfg(feature = "telemetry")] + let telemetry_args = match &cli.command { + reth_optimism_cli::commands::Commands::Node(node_command) => { + node_command.ext.telemetry.clone() + } + _ => Default::default(), + }; + + // Configure CLI application + #[cfg(not(feature = "telemetry"))] + let cli_app = cli.configure(); + + #[cfg(feature = "telemetry")] + let mut cli_app = cli.configure(); + #[cfg(feature = "telemetry")] + { + use op_rbuilder::primitives::telemetry::setup_telemetry_layer; + let telemetry_layer = setup_telemetry_layer(&telemetry_args)?; + cli_app.access_tracing_layers()?.add_layer(telemetry_layer); + } + + // Launch the builder with the appropriate mode + match mode { + BuilderMode::Standard => { + tracing::info!("Starting OP builder in standard mode"); + let launcher = BuilderLauncher::::new(); + cli_app.run(launcher)?; + } + BuilderMode::Flashblocks => { + tracing::info!("Starting OP builder in flashblocks mode"); + let launcher = BuilderLauncher::::new(); + cli_app.run(launcher)?; + } + } + + Ok(()) +} diff --git a/crates/builder/op-rbuilder/Cargo.toml b/crates/builder/op-rbuilder/Cargo.toml index 065bd19d..2351d63c 100644 --- a/crates/builder/op-rbuilder/Cargo.toml +++ b/crates/builder/op-rbuilder/Cargo.toml @@ -6,7 +6,6 @@ rust-version.workspace = true license.workspace = true homepage.workspace = true repository.workspace = true -default-run = "op-rbuilder" [lints.rust] unreachable_pub = "deny" @@ -212,10 +211,6 @@ telemetry = [ "opentelemetry", "reth-tracing-otlp" ] custom-engine-api = [] -[[bin]] -name = "op-rbuilder" -path = "src/bin/op-rbuilder/main.rs" - [[bin]] name = "tester" required-features = ["testing"] diff --git a/crates/builder/op-rbuilder/src/bin/op-rbuilder/main.rs b/crates/builder/op-rbuilder/src/bin/op-rbuilder/main.rs deleted file mode 100644 index 985b93c4..00000000 --- a/crates/builder/op-rbuilder/src/bin/op-rbuilder/main.rs +++ /dev/null @@ -1,10 +0,0 @@ -use op_rbuilder::launcher::launch; - -// Prefer jemalloc for performance reasons. -#[cfg(all(feature = "jemalloc", unix))] -#[global_allocator] -static GLOBAL: tikv_jemallocator::Jemalloc = tikv_jemallocator::Jemalloc; - -fn main() -> eyre::Result<()> { - launch() -} diff --git a/crates/builder/op-rbuilder/src/launcher.rs b/crates/builder/op-rbuilder/src/launcher.rs index 45add569..34a1c601 100644 --- a/crates/builder/op-rbuilder/src/launcher.rs +++ b/crates/builder/op-rbuilder/src/launcher.rs @@ -2,8 +2,8 @@ use eyre::Result; use reth_optimism_rpc::OpEthApiBuilder; use crate::{ - args::*, - builders::{BuilderConfig, BuilderMode, FlashblocksBuilder, PayloadBuilder, StandardBuilder}, + args::OpRbuilderArgs, + builders::{BuilderConfig, PayloadBuilder}, metrics::{VERSION, record_flag_gauge_metrics}, monitor_tx_pool::monitor_tx_pool, primitives::reth::engine_api_builder::OpEngineApiBuilder, @@ -25,45 +25,7 @@ use reth_optimism_node::{ use reth_transaction_pool::TransactionPool; use std::{marker::PhantomData, sync::Arc}; -pub fn launch() -> Result<()> { - let cli = Cli::parsed(); - let mode = cli.builder_mode(); - - #[cfg(feature = "telemetry")] - let telemetry_args = match &cli.command { - reth_optimism_cli::commands::Commands::Node(node_command) => { - node_command.ext.telemetry.clone() - } - _ => Default::default(), - }; - - #[cfg(not(feature = "telemetry"))] - let cli_app = cli.configure(); - - #[cfg(feature = "telemetry")] - let mut cli_app = cli.configure(); - #[cfg(feature = "telemetry")] - { - use crate::primitives::telemetry::setup_telemetry_layer; - let telemetry_layer = setup_telemetry_layer(&telemetry_args)?; - cli_app.access_tracing_layers()?.add_layer(telemetry_layer); - } - - match mode { - BuilderMode::Standard => { - tracing::info!("Starting OP builder in standard mode"); - let launcher = BuilderLauncher::::new(); - cli_app.run(launcher)?; - } - BuilderMode::Flashblocks => { - tracing::info!("Starting OP builder in flashblocks mode"); - let launcher = BuilderLauncher::::new(); - cli_app.run(launcher)?; - } - } - Ok(()) -} - +/// Launcher for the OP builder node. pub struct BuilderLauncher { _builder: PhantomData, }