Skip to content

Commit c431b54

Browse files
author
colinlyguo
committed
Merge branch 'main' into e2e-test-integrate-l2geth
2 parents a9f1127 + 3feb460 commit c431b54

File tree

12 files changed

+565
-388
lines changed

12 files changed

+565
-388
lines changed

Cargo.lock

Lines changed: 399 additions & 328 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,6 @@ reth-primitives-traits = { git = "https://github.com/scroll-tech/reth.git", defa
155155
reth-provider = { git = "https://github.com/scroll-tech/reth.git", default-features = false }
156156
reth-rpc-builder = { git = "https://github.com/scroll-tech/reth.git", default-features = false }
157157
reth-rpc-server-types = { git = "https://github.com/scroll-tech/reth.git", default-features = false }
158-
reth-storage-api = { git = "https://github.com/scroll-tech/reth.git", default-features = false }
159158
reth-tasks = { git = "https://github.com/scroll-tech/reth.git", default-features = false }
160159
reth-tokio-util = { git = "https://github.com/scroll-tech/reth.git", default-features = false }
161160
reth-tracing = { git = "https://github.com/scroll-tech/reth.git", default-features = false }
@@ -207,5 +206,5 @@ tracing = "0.1.0"
207206
getrandom = { version = "0.2", features = ["js"] }
208207

209208
[patch.crates-io]
210-
revm = { git = "https://github.com/scroll-tech/revm", branch = "feat/reth-v78" }
211-
op-revm = { git = "https://github.com/scroll-tech/revm", branch = "feat/reth-v78" }
209+
revm = { git = "https://github.com/scroll-tech/revm" }
210+
op-revm = { git = "https://github.com/scroll-tech/revm" }

crates/network/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ reth-network-api.workspace = true
1717
reth-network-types = { git = "https://github.com/scroll-tech/reth.git", default-features = false }
1818
reth-network-peers.workspace = true
1919
reth-primitives-traits.workspace = true
20-
reth-storage-api = { workspace = true, default-features = false }
20+
reth-storage-api = { git = "https://github.com/scroll-tech/reth.git", default-features = false }
2121

2222
# scroll
2323
reth-scroll-chainspec.workspace = true

crates/network/src/manager.rs

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@ use super::{
44
BlockImportOutcome, BlockValidation, NetworkHandleMessage, NetworkManagerEvent,
55
NewBlockWithPeer, ScrollNetworkHandle,
66
};
7-
use alloy_primitives::FixedBytes;
7+
use alloy_primitives::{FixedBytes, U128};
88
use futures::{FutureExt, Stream, StreamExt};
9+
use reth_eth_wire_types::NewBlock as EthWireNewBlock;
910
use reth_network::{
1011
cache::LruCache, NetworkConfig as RethNetworkConfig, NetworkHandle as RethNetworkHandle,
1112
NetworkManager as RethNetworkManager,
@@ -77,7 +78,7 @@ impl ScrollNetworkManager<RethNetworkHandle<ScrollNetworkPrimitives>> {
7778
}
7879
}
7980

80-
impl<N: FullNetwork> ScrollNetworkManager<N> {
81+
impl<N: FullNetwork<Primitives = ScrollNetworkPrimitives>> ScrollNetworkManager<N> {
8182
/// Creates a new [`ScrollNetworkManager`] instance from the provided parts.
8283
///
8384
/// This is used when the scroll-wire [`ScrollWireProtocolHandler`] and the inner network
@@ -117,6 +118,14 @@ impl<N: FullNetwork> ScrollNetworkManager<N> {
117118
.filter_map(|(peer_id, blocks)| (!blocks.contains(&hash)).then_some(*peer_id))
118119
.collect();
119120

121+
let eth_wire_new_block = {
122+
let td = U128::from_limbs([0, block.block.header.number]);
123+
let mut eth_wire_block = block.block.clone();
124+
eth_wire_block.header.extra_data = block.signature.clone().into();
125+
EthWireNewBlock { block: eth_wire_block, td }
126+
};
127+
self.inner_network_handle().eth_wire_announce_block(eth_wire_new_block, hash);
128+
120129
// Announce block to the filtered set of peers
121130
for peer_id in peers {
122131
trace!(target: "scroll::network::manager", peer_id = %peer_id, block_hash = %hash, "Announcing new block to peer");
@@ -184,7 +193,7 @@ impl<N: FullNetwork> ScrollNetworkManager<N> {
184193
}
185194
}
186195

187-
impl<N: FullNetwork> Stream for ScrollNetworkManager<N> {
196+
impl<N: FullNetwork<Primitives = ScrollNetworkPrimitives>> Stream for ScrollNetworkManager<N> {
188197
type Item = NetworkManagerEvent;
189198

190199
fn poll_next(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Option<Self::Item>> {

crates/node/src/add_ons/mod.rs

Lines changed: 32 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
11
//! The [`ScrollRollupNodeAddOns`] implementation for the Scroll rollup node.
22
33
use super::args::ScrollRollupNodeConfig;
4+
use crate::constants;
5+
46
use reth_evm::{ConfigureEvm, EvmFactory, EvmFactoryFor};
57
use reth_network::NetworkProtocols;
68
use reth_network_api::FullNetwork;
79
use reth_node_api::{AddOnsContext, NodeAddOns};
810
use reth_node_builder::{
911
rpc::{
1012
BasicEngineApiBuilder, EngineValidatorAddOn, EngineValidatorBuilder, EthApiBuilder,
11-
RethRpcAddOns, RpcAddOns, RpcHandle,
13+
Identity, RethRpcAddOns, RethRpcMiddleware, RpcAddOns,
1214
},
1315
FullNodeComponents,
1416
};
@@ -22,7 +24,7 @@ use reth_scroll_node::{
2224
ScrollEngineValidator, ScrollEngineValidatorBuilder, ScrollNetworkPrimitives, ScrollStorage,
2325
};
2426
use reth_scroll_primitives::ScrollPrimitives;
25-
use reth_scroll_rpc::{eth::ScrollEthApiBuilder, ScrollEthApi, ScrollEthApiError};
27+
use reth_scroll_rpc::{eth::ScrollEthApiBuilder, ScrollEthApiError};
2628
use scroll_alloy_evm::ScrollTransactionIntoTxEnv;
2729
use scroll_wire::ScrollWireEvent;
2830

@@ -36,7 +38,7 @@ use tokio::sync::mpsc::UnboundedReceiver;
3638

3739
/// Add-ons for the Scroll follower node.
3840
#[derive(Debug)]
39-
pub struct ScrollRollupNodeAddOns<N>
41+
pub struct ScrollRollupNodeAddOns<N, RpcMiddleware = Identity>
4042
where
4143
N: FullNodeComponents,
4244
ScrollEthApiBuilder: EthApiBuilder<N>,
@@ -48,6 +50,7 @@ where
4850
ScrollEthApiBuilder,
4951
ScrollEngineValidatorBuilder,
5052
BasicEngineApiBuilder<ScrollEngineValidatorBuilder>,
53+
RpcMiddleware,
5154
>,
5255

5356
/// Rollup manager addon responsible for managing the components of the rollup node.
@@ -65,16 +68,33 @@ where
6568
) -> Self {
6669
let rpc_add_ons = RpcAddOns::new(
6770
ScrollEthApiBuilder::default()
71+
.with_min_suggested_priority_fee(
72+
config.gas_price_oracle_args.default_suggested_priority_fee,
73+
)
74+
.with_payload_size_limit(constants::DEFAULT_PAYLOAD_SIZE_LIMIT)
6875
.with_sequencer(config.network_args.sequencer_url.clone()),
6976
Default::default(),
7077
Default::default(),
71-
Default::default(),
78+
Identity::new(),
7279
);
7380
let rollup_manager_addon = RollupManagerAddOn::new(config, scroll_wire_event);
7481
Self { rpc_add_ons, rollup_manager_addon }
7582
}
7683
}
77-
impl<N> NodeAddOns<N> for ScrollRollupNodeAddOns<N>
84+
85+
impl<N, RpcMiddleware> ScrollRollupNodeAddOns<N, RpcMiddleware>
86+
where
87+
N: FullNodeComponents,
88+
ScrollEthApiBuilder: EthApiBuilder<N>,
89+
{
90+
/// Sets the provided middleware for the rollup node addons.
91+
pub fn with_middleware<T>(self, middleware: T) -> ScrollRollupNodeAddOns<N, T> {
92+
let rpc_add_ons = self.rpc_add_ons.with_rpc_middleware(middleware);
93+
ScrollRollupNodeAddOns { rpc_add_ons, rollup_manager_addon: self.rollup_manager_addon }
94+
}
95+
}
96+
97+
impl<N, RpcMiddleware> NodeAddOns<N> for ScrollRollupNodeAddOns<N, RpcMiddleware>
7898
where
7999
N: FullNodeComponents<
80100
Types: NodeTypes<
@@ -88,16 +108,13 @@ where
88108
>,
89109
ScrollEthApiError: FromEvmError<N::Evm>,
90110
EvmFactoryFor<N::Evm>: EvmFactory<Tx = ScrollTransactionIntoTxEnv<TxEnv>>,
111+
RpcMiddleware: RethRpcMiddleware,
91112
{
92-
type Handle = ScrollAddOnsHandle<N, ScrollEthApi<N>>;
113+
type Handle = ScrollAddOnsHandle<N, <ScrollEthApiBuilder as EthApiBuilder<N>>::EthApi>;
93114

94-
async fn launch_add_ons(
95-
self,
96-
ctx: reth_node_api::AddOnsContext<'_, N>,
97-
) -> eyre::Result<Self::Handle> {
115+
async fn launch_add_ons(self, ctx: AddOnsContext<'_, N>) -> eyre::Result<Self::Handle> {
98116
let Self { rpc_add_ons, rollup_manager_addon: rollup_node_manager_addon } = self;
99-
let rpc_handle: RpcHandle<N, ScrollEthApi<N>> =
100-
rpc_add_ons.launch_add_ons_with(ctx.clone(), |_| Ok(())).await?;
117+
let rpc_handle = rpc_add_ons.launch_add_ons_with(ctx.clone(), |_| Ok(())).await?;
101118
let (rollup_manager_handle, l1_watcher_tx) =
102119
rollup_node_manager_addon.launch(ctx.clone(), rpc_handle.clone()).await?;
103120
Ok(ScrollAddOnsHandle {
@@ -109,7 +126,7 @@ where
109126
}
110127
}
111128

112-
impl<N> RethRpcAddOns<N> for ScrollRollupNodeAddOns<N>
129+
impl<N, RpcMiddleware> RethRpcAddOns<N> for ScrollRollupNodeAddOns<N, RpcMiddleware>
113130
where
114131
N: FullNodeComponents<
115132
Types: NodeTypes<
@@ -123,8 +140,9 @@ where
123140
>,
124141
ScrollEthApiError: FromEvmError<N::Evm>,
125142
EvmFactoryFor<N::Evm>: EvmFactory<Tx = ScrollTransactionIntoTxEnv<TxEnv>>,
143+
RpcMiddleware: RethRpcMiddleware,
126144
{
127-
type EthApi = ScrollEthApi<N>;
145+
type EthApi = <ScrollEthApiBuilder as EthApiBuilder<N>>::EthApi;
128146

129147
fn hooks_mut(&mut self) -> &mut reth_node_builder::rpc::RpcHooks<N, Self::EthApi> {
130148
self.rpc_add_ons.hooks_mut()

crates/node/src/args.rs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,9 @@ pub struct ScrollRollupNodeConfig {
6666
/// The signer arguments
6767
#[command(flatten)]
6868
pub signer_args: SignerArgs,
69+
/// The gas price oracle args
70+
#[command(flatten)]
71+
pub gas_price_oracle_args: GasPriceOracleArgs,
6972
}
7073

7174
impl ScrollRollupNodeConfig {
@@ -483,6 +486,15 @@ impl SignerArgs {
483486
}
484487
}
485488

489+
/// The arguments for the sequencer.
490+
#[derive(Debug, Default, Clone, clap::Args)]
491+
pub struct GasPriceOracleArgs {
492+
/// Minimum suggested priority fee (tip) in wei, default `100`
493+
#[arg(long, default_value_t = 100)]
494+
#[arg(long = "gpo.default-suggest-priority-fee", id = "default_suggest_priority_fee", value_name = "DEFAULT_SUGGEST_PRIORITY_FEE", default_value_t = constants::DEFAULT_SUGGEST_PRIORITY_FEE)]
495+
pub default_suggested_priority_fee: u64,
496+
}
497+
486498
#[cfg(test)]
487499
mod tests {
488500
use super::*;
@@ -499,6 +511,7 @@ mod tests {
499511
l1_provider_args: L1ProviderArgs::default(),
500512
beacon_provider_args: BeaconProviderArgs::default(),
501513
network_args: NetworkArgs::default(),
514+
gas_price_oracle_args: GasPriceOracleArgs::default(),
502515
};
503516

504517
let result = config.validate();
@@ -522,6 +535,7 @@ mod tests {
522535
l1_provider_args: L1ProviderArgs::default(),
523536
beacon_provider_args: BeaconProviderArgs::default(),
524537
network_args: NetworkArgs::default(),
538+
gas_price_oracle_args: GasPriceOracleArgs::default(),
525539
};
526540

527541
let result = config.validate();
@@ -545,6 +559,7 @@ mod tests {
545559
l1_provider_args: L1ProviderArgs::default(),
546560
beacon_provider_args: BeaconProviderArgs::default(),
547561
network_args: NetworkArgs::default(),
562+
gas_price_oracle_args: GasPriceOracleArgs::default(),
548563
};
549564

550565
assert!(config.validate().is_ok());
@@ -561,6 +576,7 @@ mod tests {
561576
l1_provider_args: L1ProviderArgs::default(),
562577
beacon_provider_args: BeaconProviderArgs::default(),
563578
network_args: NetworkArgs::default(),
579+
gas_price_oracle_args: GasPriceOracleArgs::default(),
564580
};
565581

566582
assert!(config.validate().is_ok());
@@ -577,6 +593,7 @@ mod tests {
577593
l1_provider_args: L1ProviderArgs::default(),
578594
beacon_provider_args: BeaconProviderArgs::default(),
579595
network_args: NetworkArgs::default(),
596+
gas_price_oracle_args: GasPriceOracleArgs::default(),
580597
};
581598

582599
assert!(config.validate().is_ok());
@@ -593,6 +610,7 @@ mod tests {
593610
l1_provider_args: L1ProviderArgs::default(),
594611
beacon_provider_args: BeaconProviderArgs::default(),
595612
network_args: NetworkArgs::default(),
613+
gas_price_oracle_args: GasPriceOracleArgs::default(),
596614
};
597615

598616
assert!(config.validate().is_ok());

crates/node/src/constants.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,6 @@ pub(crate) const DEFAULT_MAX_L1_MESSAGES_PER_BLOCK: u64 = 4;
2121

2222
/// The gap in blocks between the P2P and EN which triggers sync.
2323
pub(crate) const BLOCK_GAP_TRIGGER: u64 = 500_000;
24+
25+
/// The default suggested priority fee for the gas price oracle.
26+
pub(crate) const DEFAULT_SUGGEST_PRIORITY_FEE: u64 = 100;

crates/node/src/main.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ fn main() {
1717
std::env::set_var("RUST_BACKTRACE", "1");
1818
}
1919

20-
if let Err(err) = Cli::<ScrollChainSpecParser, ScrollRollupNodeConfig>::parse()
21-
.run::<_, _, ScrollRollupNode>(|builder, args| async move {
20+
if let Err(err) = Cli::<ScrollChainSpecParser, ScrollRollupNodeConfig>::parse().run(
21+
|builder, args| async move {
2222
info!(target: "reth::cli", "Launching node");
2323
let handle = builder
2424
.node(ScrollRollupNode::new(args))
@@ -42,8 +42,8 @@ fn main() {
4242
})
4343
.await?;
4444
handle.node_exit_future.await
45-
})
46-
{
45+
},
46+
) {
4747
eprintln!("Error: {err:?}");
4848
std::process::exit(1);
4949
}

crates/node/src/test_utils.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
//! This crate contains utilities for running end-to-end tests for the scroll reth node.
22
3+
use crate::GasPriceOracleArgs;
4+
35
use super::{
46
BeaconProviderArgs, DatabaseArgs, EngineDriverArgs, L1ProviderArgs, ScrollRollupNode,
57
ScrollRollupNodeConfig, SequencerArgs,
@@ -149,6 +151,7 @@ pub fn default_test_scroll_rollup_node_config() -> ScrollRollupNodeConfig {
149151
..Default::default()
150152
},
151153
signer_args: Default::default(),
154+
gas_price_oracle_args: GasPriceOracleArgs::default(),
152155
}
153156
}
154157

@@ -173,5 +176,6 @@ pub fn default_sequencer_test_scroll_rollup_node_config() -> ScrollRollupNodeCon
173176
..Default::default()
174177
},
175178
signer_args: Default::default(),
179+
gas_price_oracle_args: GasPriceOracleArgs::default(),
176180
}
177181
}

0 commit comments

Comments
 (0)