Skip to content
Open
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
54 changes: 54 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,7 @@ reth-e2e-test-utils = { git = "https://github.com/paradigmxyz/reth", tag = "v1.9
reth-transaction-pool = { git = "https://github.com/paradigmxyz/reth", tag = "v1.9.3" }
reth-primitives-traits = { git = "https://github.com/paradigmxyz/reth", tag = "v1.9.3" }
reth-optimism-chainspec = { git = "https://github.com/paradigmxyz/reth", tag = "v1.9.3" }
reth-optimism-payload-builder = { git = "https://github.com/paradigmxyz/reth", tag = "v1.9.3" }
reth-optimism-primitives = { git = "https://github.com/paradigmxyz/reth", tag = "v1.9.3" }
reth-db = { git = "https://github.com/paradigmxyz/reth", tag = "v1.9.3", features = [
"op",
Expand Down Expand Up @@ -119,6 +120,7 @@ op-alloy-rpc-types = "0.22.0"
op-alloy-consensus = "0.22.0"
op-alloy-rpc-jsonrpsee = "0.22.0"
op-alloy-rpc-types-engine = "0.22.0"
op-alloy-flz = "0.13.1"

# tokio
tokio = "1.48.0"
Expand Down Expand Up @@ -158,3 +160,6 @@ derive_more = "2.1.0"
serde_json = "1.0.145"
metrics-derive = "0.1.0"
tracing-subscriber = "0.3.22"
parking_lot = "0.12.3"
indexmap = "2.7.0"
rdkafka = { version = "0.37.0", default-features = false, features = ["tokio", "ssl-vendored", "libz-static"] }
1 change: 1 addition & 0 deletions bin/node/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ base-reth-runner.workspace = true
reth-optimism-node.workspace = true
reth-optimism-cli.workspace = true
reth-cli-util.workspace = true
reth-optimism-payload-builder.workspace = true

# misc
clap.workspace = true
Expand Down
79 changes: 77 additions & 2 deletions bin/node/src/cli.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,16 @@

use std::sync::Arc;

use base_reth_runner::{BaseNodeConfig, FlashblocksCell, FlashblocksConfig, TracingConfig};
use base_reth_runner::{
BaseNodeConfig, FlashblocksCell, FlashblocksConfig, KafkaConfig, MeteringConfig,
ResourceLimitsConfig, TracingConfig,
};
use once_cell::sync::OnceCell;
use reth_optimism_node::args::RollupArgs;
use reth_optimism_payload_builder::config::OpDAConfig;

/// CLI Arguments
#[derive(Debug, Clone, PartialEq, Eq, clap::Args)]
#[derive(Debug, Clone, PartialEq, clap::Args)]
#[command(next_help_heading = "Rollup")]
pub struct Args {
/// Rollup arguments
Expand Down Expand Up @@ -40,6 +44,50 @@ pub struct Args {
/// Enable metering RPC for transaction bundle simulation
#[arg(long = "enable-metering", value_name = "ENABLE_METERING")]
pub enable_metering: bool,

// --- Priority fee estimation args ---
/// Path to Kafka properties file (required for priority fee estimation).
/// The properties file should contain rdkafka settings like bootstrap.servers,
/// group.id, session.timeout.ms, etc.
#[arg(long = "metering-kafka-properties-file")]
pub metering_kafka_properties_file: Option<String>,

/// Kafka topic for accepted bundle events
#[arg(long = "metering-kafka-topic", default_value = "tips-ingress")]
pub metering_kafka_topic: String,

/// Kafka consumer group ID (overrides group.id in properties file if set)
#[arg(long = "metering-kafka-group-id")]
pub metering_kafka_group_id: Option<String>,

/// Gas limit per flashblock for priority fee estimation
#[arg(long = "metering-gas-limit", default_value = "30000000")]
pub metering_gas_limit: u64,

/// Execution time budget in microseconds per flashblock
#[arg(long = "metering-execution-time-us", default_value = "50000")]
pub metering_execution_time_us: u64,

/// State root time budget in microseconds (optional, disabled by default)
#[arg(long = "metering-state-root-time-us")]
pub metering_state_root_time_us: Option<u64>,

/// Data availability bytes limit per flashblock (default).
/// This value is used when `miner_setMaxDASize` has not been called.
#[arg(long = "metering-da-bytes", default_value = "120000")]
pub metering_da_bytes: u64,

/// Percentile for recommended priority fee (0.0-1.0)
#[arg(long = "metering-priority-fee-percentile", default_value = "0.5")]
pub metering_priority_fee_percentile: f64,

/// Default priority fee when resource is not congested (in wei)
#[arg(long = "metering-uncongested-priority-fee", default_value = "1")]
pub metering_uncongested_priority_fee: u128,

/// Number of recent blocks to retain in metering cache
#[arg(long = "metering-cache-size", default_value = "12")]
pub metering_cache_size: usize,
}

impl Args {
Expand All @@ -58,6 +106,31 @@ impl From<Args> for BaseNodeConfig {
max_pending_blocks_depth: args.max_pending_blocks_depth,
});

// Build Kafka config if properties file is provided
let kafka = args.metering_kafka_properties_file.map(|properties_file| KafkaConfig {
properties_file,
topic: args.metering_kafka_topic,
group_id_override: args.metering_kafka_group_id,
});

let metering = MeteringConfig {
enabled: args.enable_metering,
kafka,
resource_limits: ResourceLimitsConfig {
gas_limit: args.metering_gas_limit,
execution_time_us: args.metering_execution_time_us,
state_root_time_us: args.metering_state_root_time_us,
da_bytes: args.metering_da_bytes,
},
priority_fee_percentile: args.metering_priority_fee_percentile,
uncongested_priority_fee: args.metering_uncongested_priority_fee,
cache_size: args.metering_cache_size,
};

// Create shared DA config. This is shared between the payload builder and the
// priority fee estimator, allowing miner_setMaxDASize to affect both.
let da_config = OpDAConfig::default();

Self {
rollup_args: args.rollup_args,
flashblocks,
Expand All @@ -66,7 +139,9 @@ impl From<Args> for BaseNodeConfig {
logs_enabled: args.enable_transaction_tracing_logs,
},
metering_enabled: args.enable_metering,
metering,
flashblocks_cell,
da_config,
}
}
}
14 changes: 14 additions & 0 deletions crates/rpc/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -51,8 +51,22 @@ jsonrpsee-types.workspace = true
tracing.workspace = true
eyre.workspace = true
serde.workspace = true
serde_json.workspace = true
metrics.workspace = true
metrics-derive.workspace = true
parking_lot.workspace = true
indexmap.workspace = true

# priority fee estimation
reth-optimism-payload-builder.workspace = true

# Kafka consumer
rdkafka.workspace = true
chrono.workspace = true

# DA calculation
op-alloy-flz.workspace = true
op-alloy-consensus.workspace = true

[dev-dependencies]
base-flashtypes.workspace = true
Expand Down
Loading