Skip to content

Commit 6789ff4

Browse files
authored
chore: add OpEthApiBuilder and OpEthApiInner (#13009)
1 parent 332cce1 commit 6789ff4

File tree

11 files changed

+145
-69
lines changed

11 files changed

+145
-69
lines changed

Cargo.lock

-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/optimism/bin/src/main.rs

+4-5
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@
33
#![cfg(feature = "optimism")]
44

55
use clap::Parser;
6-
use reth_node_builder::{engine_tree_config::TreeConfig, EngineNodeLauncher};
6+
use reth_node_builder::{engine_tree_config::TreeConfig, EngineNodeLauncher, Node};
77
use reth_optimism_cli::{chainspec::OpChainSpecParser, Cli};
8-
use reth_optimism_node::{args::RollupArgs, node::OpAddOns, OpNode};
8+
use reth_optimism_node::{args::RollupArgs, OpNode};
99
use reth_provider::providers::BlockchainProvider2;
1010

1111
use tracing as _;
@@ -27,16 +27,15 @@ fn main() {
2727
tracing::warn!(target: "reth::cli", "Experimental engine is default now, and the --engine.experimental flag is deprecated. To enable the legacy functionality, use --engine.legacy.");
2828
}
2929
let use_legacy_engine = rollup_args.legacy;
30-
let sequencer_http_arg = rollup_args.sequencer_http.clone();
3130
match use_legacy_engine {
3231
false => {
3332
let engine_tree_config = TreeConfig::default()
3433
.with_persistence_threshold(rollup_args.persistence_threshold)
3534
.with_memory_block_buffer_target(rollup_args.memory_block_buffer_target);
3635
let handle = builder
3736
.with_types_and_provider::<OpNode, BlockchainProvider2<_>>()
38-
.with_components(OpNode::components(rollup_args))
39-
.with_add_ons(OpAddOns::new(sequencer_http_arg))
37+
.with_components(OpNode::components(rollup_args.clone()))
38+
.with_add_ons(OpNode::new(rollup_args).add_ons())
4039
.launch_with_fn(|builder| {
4140
let launcher = EngineNodeLauncher::new(
4241
builder.task_executor().clone(),

crates/optimism/node/src/node.rs

+39-8
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ use reth_optimism_payload_builder::builder::OpPayloadTransactions;
3131
use reth_optimism_primitives::OpPrimitives;
3232
use reth_optimism_rpc::{
3333
witness::{DebugExecutionWitnessApiServer, OpDebugWitnessApi},
34-
OpEthApi,
34+
OpEthApi, SequencerClient,
3535
};
3636
use reth_payload_builder::{PayloadBuilderHandle, PayloadBuilderService};
3737
use reth_primitives::BlockBody;
@@ -178,12 +178,11 @@ where
178178
OpAddOns<NodeAdapter<N, <Self::ComponentsBuilder as NodeComponentsBuilder<N>>::Components>>;
179179

180180
fn components_builder(&self) -> Self::ComponentsBuilder {
181-
let Self { args } = self;
182-
Self::components(args.clone())
181+
Self::components(self.args.clone())
183182
}
184183

185184
fn add_ons(&self) -> Self::AddOns {
186-
OpAddOns::new(self.args.sequencer_http.clone())
185+
Self::AddOns::builder().with_sequencer(self.args.sequencer_http.clone()).build()
187186
}
188187
}
189188

@@ -204,14 +203,14 @@ pub struct OpAddOns<N: FullNodeComponents>(pub RpcAddOns<N, OpEthApi<N>, OpEngin
204203

205204
impl<N: FullNodeComponents<Types: NodeTypes<Primitives = OpPrimitives>>> Default for OpAddOns<N> {
206205
fn default() -> Self {
207-
Self::new(None)
206+
Self::builder().build()
208207
}
209208
}
210209

211210
impl<N: FullNodeComponents<Types: NodeTypes<Primitives = OpPrimitives>>> OpAddOns<N> {
212-
/// Create a new instance with the given `sequencer_http` URL.
213-
pub fn new(sequencer_http: Option<String>) -> Self {
214-
Self(RpcAddOns::new(move |ctx| OpEthApi::new(ctx, sequencer_http), Default::default()))
211+
/// Build a [`OpAddOns`] using [`OpAddOnsBuilder`].
212+
pub fn builder() -> OpAddOnsBuilder {
213+
OpAddOnsBuilder::default()
215214
}
216215
}
217216

@@ -270,6 +269,38 @@ where
270269
}
271270
}
272271

272+
/// A regular optimism evm and executor builder.
273+
#[derive(Debug, Default, Clone)]
274+
#[non_exhaustive]
275+
pub struct OpAddOnsBuilder {
276+
/// Sequencer client, configured to forward submitted transactions to sequencer of given OP
277+
/// network.
278+
sequencer_client: Option<SequencerClient>,
279+
}
280+
281+
impl OpAddOnsBuilder {
282+
/// With a [`SequencerClient`].
283+
pub fn with_sequencer(mut self, sequencer_client: Option<String>) -> Self {
284+
self.sequencer_client = sequencer_client.map(SequencerClient::new);
285+
self
286+
}
287+
}
288+
289+
impl OpAddOnsBuilder {
290+
/// Builds an instance of [`OpAddOns`].
291+
pub fn build<N>(self) -> OpAddOns<N>
292+
where
293+
N: FullNodeComponents<Types: NodeTypes<Primitives = OpPrimitives>>,
294+
{
295+
let Self { sequencer_client, .. } = self;
296+
297+
OpAddOns(RpcAddOns::new(
298+
move |ctx| OpEthApi::<N>::builder().with_sequencer(sequencer_client).build(ctx),
299+
Default::default(),
300+
))
301+
}
302+
}
303+
273304
/// A regular optimism evm and executor builder.
274305
#[derive(Debug, Default, Clone, Copy)]
275306
#[non_exhaustive]

crates/optimism/node/tests/it/builder.rs

+5-4
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,21 @@
22
33
use reth_db::test_utils::create_test_rw_db;
44
use reth_node_api::FullNodeComponents;
5-
use reth_node_builder::{NodeBuilder, NodeConfig};
5+
use reth_node_builder::{Node, NodeBuilder, NodeConfig};
66
use reth_optimism_chainspec::BASE_MAINNET;
7-
use reth_optimism_node::{node::OpAddOns, OpNode};
7+
use reth_optimism_node::{args::RollupArgs, OpNode};
88

99
#[test]
1010
fn test_basic_setup() {
1111
// parse CLI -> config
1212
let config = NodeConfig::new(BASE_MAINNET.clone());
1313
let db = create_test_rw_db();
14+
let args = RollupArgs::default();
1415
let _builder = NodeBuilder::new(config)
1516
.with_database(db)
1617
.with_types::<OpNode>()
17-
.with_components(OpNode::components(Default::default()))
18-
.with_add_ons(OpAddOns::new(None))
18+
.with_components(OpNode::components(args.clone()))
19+
.with_add_ons(OpNode::new(args).add_ons())
1920
.on_component_initialized(move |ctx| {
2021
let _provider = ctx.provider();
2122
Ok(())

crates/optimism/rpc/Cargo.toml

-1
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,6 @@ serde_json.workspace = true
6161
# misc
6262
thiserror.workspace = true
6363
tracing.workspace = true
64-
derive_more = { workspace = true, features = ["constructor", "deref"] }
6564

6665
[dev-dependencies]
6766
reth-optimism-chainspec.workspace = true

crates/optimism/rpc/src/eth/block.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ where
5757
};
5858

5959
Ok(OpReceiptBuilder::new(
60-
&self.inner.provider().chain_spec(),
60+
&self.inner.eth_api.provider().chain_spec(),
6161
tx,
6262
meta,
6363
receipt,

crates/optimism/rpc/src/eth/call.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,12 @@ where
3333
{
3434
#[inline]
3535
fn call_gas_limit(&self) -> u64 {
36-
self.inner.gas_cap()
36+
self.inner.eth_api.gas_cap()
3737
}
3838

3939
#[inline]
4040
fn max_simulate_blocks(&self) -> u64 {
41-
self.inner.max_simulate_blocks()
41+
self.inner.eth_api.max_simulate_blocks()
4242
}
4343

4444
fn create_txn_env(

0 commit comments

Comments
 (0)