Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
52 commits
Select commit Hold shift + click to select a range
8a7d8e9
fix: eth88 serve signature
yiweichi Aug 20, 2025
8c6ef2e
fix: eth88 serve signature
yiweichi Aug 20, 2025
ac9b1ac
fix: eth66 serve signature
yiweichi Aug 20, 2025
5bc944a
update dependency
yiweichi Aug 20, 2025
17a8760
update dependency
yiweichi Aug 21, 2025
e10ce20
update on_block_headers_response
yiweichi Aug 21, 2025
f7b761f
build database on build_network
yiweichi Aug 21, 2025
7e42262
build database on build_network
yiweichi Aug 21, 2025
14ffc83
fix ScrollHeaderTransform
yiweichi Aug 21, 2025
28acc6c
add ScrollRequestHeaderTransform
yiweichi Aug 21, 2025
e967858
fix: save signature for devnet
yiweichi Aug 24, 2025
b829908
fix: tokio block
yiweichi Aug 24, 2025
0ad4810
add more logs
yiweichi Aug 24, 2025
452e6a8
add more logs
yiweichi Aug 24, 2025
1e648c8
update dependency
yiweichi Aug 26, 2025
db2b477
make signature persistence async
yiweichi Aug 27, 2025
2d3c4f6
perfect signature validation
yiweichi Aug 27, 2025
8e1b34d
address comments
yiweichi Aug 27, 2025
b21516b
cargo update
yiweichi Aug 28, 2025
feec469
enable signer to be set
frisitano Aug 29, 2025
5c0338e
update dep
yiweichi Aug 31, 2025
10dc6dd
remove scroll_rollup_node_signer::Signature
yiweichi Aug 31, 2025
8ba1740
fix lints
frisitano Sep 1, 2025
9e81306
support set signer via flag
yiweichi Sep 1, 2025
3049d43
fix: ci
yiweichi Sep 1, 2025
b7b969f
fix: ci
yiweichi Sep 1, 2025
fd79d88
fmt
yiweichi Sep 1, 2025
b03d22a
fix test
yiweichi Sep 1, 2025
c4c4029
fix ci deny
yiweichi Sep 1, 2025
b284507
fix ci deny
yiweichi Sep 1, 2025
cc18d35
update dep
yiweichi Sep 1, 2025
da9cd05
fix: skip sig check if authorized_signer is none
yiweichi Sep 2, 2025
8b91cdf
fix: update SignatureAsBytes
yiweichi Sep 2, 2025
9cdda6c
fix: ci
yiweichi Sep 3, 2025
5d32770
disable deny duplicates check
yiweichi Sep 3, 2025
1ad02cc
disable deny duplicates check
yiweichi Sep 3, 2025
241e1c2
disable deny duplicates check
yiweichi Sep 3, 2025
cda6811
disable deny duplicates check
yiweichi Sep 3, 2025
319e62d
fix ci
yiweichi Sep 3, 2025
0e311f2
add comment
yiweichi Sep 3, 2025
213b3aa
add comment
yiweichi Sep 3, 2025
ab51cef
add comment
yiweichi Sep 3, 2025
9883f3d
address comments
yiweichi Sep 3, 2025
760b4cb
deny add MPL-2.0
yiweichi Sep 4, 2025
3a08d5e
refactor scroll network build
yiweichi Sep 4, 2025
d684f2b
export SignatureProvider
yiweichi Sep 4, 2025
cc04336
remove unused code
yiweichi Sep 4, 2025
59567c0
remove unused code
yiweichi Sep 4, 2025
b83c040
remove unused code
yiweichi Sep 4, 2025
33b90c2
refactor move ScrollHeaderTransform to rollup node
yiweichi Sep 4, 2025
0bdc3d7
remove unused code
yiweichi Sep 4, 2025
9ba27cb
merge branch scroll
yiweichi Sep 5, 2025
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
1,073 changes: 569 additions & 504 deletions Cargo.lock

Large diffs are not rendered by default.

2 changes: 2 additions & 0 deletions crates/chainspec/src/spec.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2530,13 +2530,15 @@ Post-merge hard forks (timestamp based):
update_fraction: 3338477,
min_blob_fee: BLOB_TX_MIN_BLOB_GASPRICE,
max_blobs_per_tx: 6,
blob_base_cost: 0,
},
prague: BlobParams {
target_blob_count: 3,
max_blob_count: 6,
update_fraction: 3338477,
min_blob_fee: BLOB_TX_MIN_BLOB_GASPRICE,
max_blobs_per_tx: 6,
blob_base_cost: 0,
},
..Default::default()
};
Expand Down
2 changes: 1 addition & 1 deletion crates/ethereum/node/src/node.rs
Original file line number Diff line number Diff line change
Expand Up @@ -510,7 +510,7 @@ where
pool: Pool,
) -> eyre::Result<Self::Network> {
let network = ctx.network_builder().await?;
let handle = ctx.start_network(network, pool);
let handle = ctx.start_network(network, pool, None);
info!(target: "reth::cli", enode=%handle.local_node_record(), "P2P networking initialized");
Ok(handle)
}
Expand Down
4 changes: 3 additions & 1 deletion crates/net/network/src/builder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ use crate::{
policy::NetworkPolicies,
TransactionPropagationPolicy, TransactionsManager, TransactionsManagerConfig,
},
transform::header::HeaderTransform,
NetworkHandle, NetworkManager,
};
use reth_eth_wire::{EthNetworkPrimitives, NetworkPrimitives};
Expand Down Expand Up @@ -63,12 +64,13 @@ impl<Tx, Eth, N: NetworkPrimitives> NetworkBuilder<Tx, Eth, N> {
pub fn request_handler<Client>(
self,
client: Client,
request_header_transform: Option<Box<dyn HeaderTransform<N::BlockHeader>>>,
) -> NetworkBuilder<Tx, EthRequestHandler<Client, N>, N> {
let Self { mut network, transactions, .. } = self;
let (tx, rx) = mpsc::channel(ETH_REQUEST_CHANNEL_CAPACITY);
network.set_eth_request_handler(tx);
let peers = network.handle().peers_handle().clone();
let request_handler = EthRequestHandler::new(client, peers, rx);
let request_handler = EthRequestHandler::new(client, peers, rx, request_header_transform);
NetworkBuilder { network, request_handler, transactions }
}

Expand Down
2 changes: 1 addition & 1 deletion crates/net/network/src/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -169,7 +169,7 @@ where
let client = self.client.clone();
let (handle, network, _txpool, eth) = NetworkManager::builder::<C>(self)
.await?
.request_handler::<C>(client)
.request_handler::<C>(client, None)
.split_with_handle();

tokio::task::spawn(network);
Expand Down
19 changes: 16 additions & 3 deletions crates/net/network/src/eth_requests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

use crate::{
budget::DEFAULT_BUDGET_TRY_DRAIN_DOWNLOADERS, metered_poll_nested_stream_with_budget,
metrics::EthRequestHandlerMetrics,
metrics::EthRequestHandlerMetrics, transform::header::HeaderTransform,
};
use alloy_consensus::{BlockHeader, ReceiptWithBloom};
use alloy_eips::BlockHashOrNumber;
Expand Down Expand Up @@ -61,18 +61,26 @@ pub struct EthRequestHandler<C, N: NetworkPrimitives = EthNetworkPrimitives> {
peers: PeersHandle,
/// Incoming request from the [`NetworkManager`](crate::NetworkManager).
incoming_requests: ReceiverStream<IncomingEthRequest<N>>,
/// The header transform to apply to the headers before sending to peers.
header_transform: Option<Box<dyn HeaderTransform<N::BlockHeader>>>,
/// Metrics for the eth request handler.
metrics: EthRequestHandlerMetrics,
}

// === impl EthRequestHandler ===
impl<C, N: NetworkPrimitives> EthRequestHandler<C, N> {
/// Create a new instance
pub fn new(client: C, peers: PeersHandle, incoming: Receiver<IncomingEthRequest<N>>) -> Self {
pub fn new(
client: C,
peers: PeersHandle,
incoming: Receiver<IncomingEthRequest<N>>,
header_transform: Option<Box<dyn HeaderTransform<N::BlockHeader>>>,
) -> Self {
Self {
client,
peers,
incoming_requests: ReceiverStream::new(incoming),
header_transform,
metrics: Default::default(),
}
}
Expand All @@ -81,7 +89,7 @@ impl<C, N: NetworkPrimitives> EthRequestHandler<C, N> {
impl<C, N> EthRequestHandler<C, N>
where
N: NetworkPrimitives,
C: BlockReader,
C: BlockReader<Header = N::BlockHeader>,
{
/// Returns the list of requested headers
fn get_headers_response(&self, request: GetBlockHeaders) -> Vec<C::Header> {
Expand Down Expand Up @@ -144,6 +152,11 @@ where
}
}

// TODO: remove this once we deprecated l2geth
if let Some(ref header_transform) = self.header_transform {
headers = headers.into_iter().map(|h| header_transform.map(h)).collect()
}

headers
}

Expand Down
2 changes: 1 addition & 1 deletion crates/net/network/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@
//! .await
//! .unwrap()
//! .transactions(pool, transactions_manager_config)
//! .request_handler(client)
//! .request_handler(client, None)
//! .split_with_handle();
//! }
//! ```
Expand Down
2 changes: 1 addition & 1 deletion crates/net/network/src/manager.rs
Original file line number Diff line number Diff line change
Expand Up @@ -380,7 +380,7 @@ impl<N: NetworkPrimitives> NetworkManager<N> {
/// .await
/// .unwrap()
/// .transactions(pool, transactions_manager_config)
/// .request_handler(client)
/// .request_handler(client, None)
/// .split_with_handle();
/// }
/// ```
Expand Down
2 changes: 1 addition & 1 deletion crates/net/network/src/test_utils/testnet.rs
Original file line number Diff line number Diff line change
Expand Up @@ -469,7 +469,7 @@ where
let (tx, rx) = channel(ETH_REQUEST_CHANNEL_CAPACITY);
self.network.set_eth_request_handler(tx);
let peers = self.network.peers_handle();
let request_handler = EthRequestHandler::new(self.client.clone(), peers, rx);
let request_handler = EthRequestHandler::new(self.client.clone(), peers, rx, None);
self.request_handler = Some(request_handler);
}

Expand Down
4 changes: 2 additions & 2 deletions crates/net/network/tests/it/connect.rs
Original file line number Diff line number Diff line change
Expand Up @@ -234,7 +234,7 @@ async fn test_connect_with_builder() {
.await
.unwrap()
.into_builder()
.request_handler(client)
.request_handler(client, None)
.split_with_handle();

let mut events = handle.event_listener();
Expand Down Expand Up @@ -271,7 +271,7 @@ async fn test_connect_to_trusted_peer() {
.await
.unwrap()
.into_builder()
.request_handler(client)
.request_handler(client, None)
.transactions(testing_pool(), transactions_manager_config)
.split_with_handle();

Expand Down
6 changes: 5 additions & 1 deletion crates/node/builder/src/builder/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ use reth_db_api::{database::Database, database_metrics::DatabaseMetrics};
use reth_exex::ExExContext;
use reth_network::{
transactions::{TransactionPropagationPolicy, TransactionsManagerConfig},
transform::header::HeaderTransform,
NetworkBuilder, NetworkConfig, NetworkConfigBuilder, NetworkHandle, NetworkManager,
NetworkPrimitives,
};
Expand Down Expand Up @@ -789,6 +790,7 @@ impl<Node: FullNodeTypes> BuilderContext<Node> {
&self,
builder: NetworkBuilder<(), (), N>,
pool: Pool,
request_transform: Option<Box<dyn HeaderTransform<N::BlockHeader>>>,
) -> NetworkHandle<N>
where
N: NetworkPrimitives,
Expand All @@ -806,6 +808,7 @@ impl<Node: FullNodeTypes> BuilderContext<Node> {
pool,
self.config().network.transactions_manager_config(),
self.config().network.tx_propagation_policy,
request_transform,
)
}

Expand All @@ -821,6 +824,7 @@ impl<Node: FullNodeTypes> BuilderContext<Node> {
pool: Pool,
tx_config: TransactionsManagerConfig,
propagation_policy: Policy,
request_transform: Option<Box<dyn HeaderTransform<N::BlockHeader>>>,
) -> NetworkHandle<N>
where
N: NetworkPrimitives,
Expand All @@ -836,7 +840,7 @@ impl<Node: FullNodeTypes> BuilderContext<Node> {
{
let (handle, network, txpool, eth) = builder
.transactions_with_policy(pool, tx_config, propagation_policy)
.request_handler(self.provider().clone())
.request_handler(self.provider().clone(), request_transform)
.split_with_handle();

self.executor.spawn_critical("p2p txpool", Box::pin(txpool));
Expand Down
2 changes: 1 addition & 1 deletion crates/optimism/node/src/node.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1136,7 +1136,7 @@ where
) -> eyre::Result<Self::Network> {
let network_config = self.network_config(ctx)?;
let network = NetworkManager::builder(network_config).await?;
let handle = ctx.start_network(network, pool);
let handle = ctx.start_network(network, pool, None);
info!(target: "reth::cli", enode=%handle.local_node_record(), "P2P networking initialized");

Ok(handle)
Expand Down
42 changes: 1 addition & 41 deletions crates/scroll/node/src/builder/network.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,20 +2,16 @@ use reth_eth_wire_types::BasicNetworkPrimitives;
use reth_network::{
config::NetworkMode,
protocol::{RlpxSubProtocol, RlpxSubProtocols},
transform::header::HeaderTransform,
NetworkConfig, NetworkHandle, NetworkManager, PeersInfo,
};
use reth_node_api::TxTy;
use reth_node_builder::{components::NetworkBuilder, BuilderContext, FullNodeTypes};
use reth_node_types::NodeTypes;
use reth_primitives_traits::BlockHeader;
use reth_scroll_chainspec::ScrollChainSpec;
use reth_scroll_primitives::ScrollPrimitives;
use reth_tracing::tracing::info;
use reth_transaction_pool::{PoolTransaction, TransactionPool};
use scroll_alloy_hardforks::ScrollHardforks;
use std::fmt::Debug;

/// The network builder for Scroll.
#[derive(Debug, Default)]
pub struct ScrollNetworkBuilder {
Expand Down Expand Up @@ -55,21 +51,16 @@ where
ctx: &BuilderContext<Node>,
pool: Pool,
) -> eyre::Result<Self::Network> {
// get the header transform.
let chain_spec = ctx.chain_spec();
let transform = ScrollHeaderTransform { chain_spec };

// set the network mode to work.
let config = ctx.network_config()?;
let config = NetworkConfig {
network_mode: NetworkMode::Work,
header_transform: Box::new(transform),
extra_protocols: self.scroll_sub_protocols,
..config
};

let network = NetworkManager::builder(config).await?;
let handle = ctx.start_network(network, pool);
let handle = ctx.start_network(network, pool, None);
info!(target: "reth::cli", enode=%handle.local_node_record(), "P2P networking initialized");
Ok(handle)
}
Expand All @@ -78,34 +69,3 @@ where
/// Network primitive types used by Scroll networks.
pub type ScrollNetworkPrimitives =
BasicNetworkPrimitives<ScrollPrimitives, scroll_alloy_consensus::ScrollPooledTransaction>;

/// An implementation of a [`HeaderTransform`] for Scroll.
#[derive(Debug, Clone)]
#[non_exhaustive]
pub struct ScrollHeaderTransform<ChainSpec> {
chain_spec: ChainSpec,
}

impl<ChainSpec: ScrollHardforks + Debug + Send + Sync + 'static> ScrollHeaderTransform<ChainSpec> {
/// Returns a new instance of the [`ScrollHeaderTransform`] from the provider chain spec.
pub const fn new(chain_spec: ChainSpec) -> Self {
Self { chain_spec }
}

/// Returns a new [`ScrollHeaderTransform`] as a [`HeaderTransform`] trait object.
pub fn boxed<H: BlockHeader>(chain_spec: ChainSpec) -> Box<dyn HeaderTransform<H>> {
Box::new(Self { chain_spec })
}
}

impl<H: BlockHeader, ChainSpec: ScrollHardforks + Debug + Send + Sync> HeaderTransform<H>
for ScrollHeaderTransform<ChainSpec>
{
fn map(&self, mut header: H) -> H {
if self.chain_spec.is_euclid_v2_active_at_timestamp(header.timestamp()) {
// clear the extra data field.
*header.extra_data_mut() = Default::default()
}
header
}
}
2 changes: 1 addition & 1 deletion crates/scroll/node/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ pub use builder::{
consensus::ScrollConsensusBuilder,
engine::{ScrollEngineValidator, ScrollEngineValidatorBuilder},
execution::ScrollExecutorBuilder,
network::{ScrollHeaderTransform, ScrollNetworkBuilder, ScrollNetworkPrimitives},
network::{ScrollNetworkBuilder, ScrollNetworkPrimitives},
payload::ScrollPayloadBuilderBuilder,
pool::ScrollPoolBuilder,
};
Expand Down
Loading