Skip to content

Commit f1ad038

Browse files
authored
feat: extra blob providers (#203)
1 parent bb89b6a commit f1ad038

File tree

22 files changed

+387
-345
lines changed

22 files changed

+387
-345
lines changed

Cargo.lock

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

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,7 @@ scroll-migration = { path = "crates/database/migration" }
187187
arbitrary = { version = "1.4", default-features = false }
188188
async-trait = "0.1"
189189
auto_impl = "1.2"
190+
clap = { version = "4", features = ["derive", "env"] }
190191
derive_more = { version = "2.0", default-features = false }
191192
eyre = "0.6"
192193
futures = { version = "0.3", default-features = false }

crates/derivation-pipeline/src/lib.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -304,7 +304,7 @@ mod tests {
304304
use futures::StreamExt;
305305
use rollup_node_primitives::L1MessageEnvelope;
306306
use rollup_node_providers::{
307-
test_utils::NoBlobProvider, DatabaseL1MessageProvider, L1BlobProvider, L1MessageProvider,
307+
test_utils::NoBlobProvider, BlobProvider, DatabaseL1MessageProvider, L1MessageProvider,
308308
L1ProviderError,
309309
};
310310
use scroll_alloy_consensus::TxL1Message;
@@ -325,7 +325,7 @@ mod tests {
325325
}
326326

327327
#[async_trait::async_trait]
328-
impl L1BlobProvider for MockL1MessageProvider {
328+
impl BlobProvider for MockL1MessageProvider {
329329
async fn blob(
330330
&self,
331331
_block_timestamp: u64,

crates/manager/src/manager/mod.rs

Lines changed: 7 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ pub struct RollupNodeManager<
8686
/// The engine driver used to communicate with the engine.
8787
engine: EngineDriver<EC, CS, P>,
8888
/// The derivation pipeline, used to derive payload attributes from batches.
89-
derivation_pipeline: Option<DerivationPipeline<L1P>>,
89+
derivation_pipeline: DerivationPipeline<L1P>,
9090
/// A receiver for [`L1Notification`]s from the [`rollup_node_watcher::L1Watcher`].
9191
l1_notification_rx: Option<ReceiverStream<Arc<L1Notification>>>,
9292
/// An indexer used to index data for the rollup node.
@@ -153,7 +153,7 @@ where
153153
pub fn new(
154154
network: ScrollNetworkManager<N>,
155155
engine: EngineDriver<EC, CS, P>,
156-
l1_provider: Option<L1P>,
156+
l1_provider: L1P,
157157
database: Arc<Database>,
158158
l1_notification_rx: Option<Receiver<Arc<L1Notification>>>,
159159
consensus: Box<dyn Consensus>,
@@ -165,8 +165,7 @@ where
165165
) -> (Self, RollupManagerHandle) {
166166
let (handle_tx, handle_rx) = mpsc::channel(EVENT_CHANNEL_SIZE);
167167
let indexer = Indexer::new(database.clone(), chain_spec.clone());
168-
let derivation_pipeline =
169-
l1_provider.map(|provider| DerivationPipeline::new(provider, database));
168+
let derivation_pipeline = DerivationPipeline::new(l1_provider, database);
170169
let rnm = Self {
171170
handle_rx,
172171
chain_spec,
@@ -240,17 +239,13 @@ where
240239
IndexerEvent::BatchCommitIndexed { batch_info, safe_head, l1_block_number } => {
241240
// if we detected a batch revert event, we reset the pipeline and the engine driver.
242241
if let Some(new_safe_head) = safe_head {
243-
if let Some(pipeline) = self.derivation_pipeline.as_mut() {
244-
pipeline.flush()
245-
}
242+
self.derivation_pipeline.flush();
246243
self.engine.clear_l1_payload_attributes();
247244
self.engine.set_head_block_info(new_safe_head);
248245
self.engine.set_safe_block_info(new_safe_head);
249246
}
250247
// push the batch info into the derivation pipeline.
251-
if let Some(pipeline) = &mut self.derivation_pipeline {
252-
pipeline.handle_batch_commit(batch_info, l1_block_number);
253-
}
248+
self.derivation_pipeline.handle_batch_commit(batch_info, l1_block_number);
254249
}
255250
IndexerEvent::BatchFinalizationIndexed(_, Some(finalized_block)) => {
256251
// update the fcs on new finalized block.
@@ -285,9 +280,7 @@ where
285280
}
286281

287282
// Handle the reorg in the derivation pipeline.
288-
if let Some(pipeline) = self.derivation_pipeline.as_mut() {
289-
pipeline.handle_reorg(l1_block_number);
290-
}
283+
self.derivation_pipeline.handle_reorg(l1_block_number);
291284
}
292285
IndexerEvent::L1MessageIndexed(index) => {
293286
if let Some(event_sender) = self.event_sender.as_ref() {
@@ -520,9 +513,7 @@ where
520513
);
521514

522515
// Poll Derivation Pipeline and push attribute in queue if any.
523-
while let Some(Poll::Ready(Some(attributes))) =
524-
this.derivation_pipeline.as_mut().map(|f| f.poll_next_unpin(cx))
525-
{
516+
while let Poll::Ready(Some(attributes)) = this.derivation_pipeline.poll_next_unpin(cx) {
526517
this.engine.handle_l1_consolidation(attributes)
527518
}
528519

crates/node/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ scroll-wire.workspace = true
8383
scroll-network.workspace = true
8484

8585
auto_impl.workspace = true
86-
clap = { version = "4", features = ["derive", "env"] }
86+
clap = { workspace = true, features = ["derive", "env"] }
8787
eyre.workspace = true
8888
reqwest.workspace = true
8989
tokio.workspace = true

crates/node/src/args.rs

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
use crate::{
22
add_ons::IsDevChain,
3-
constants::{self, PROVIDER_BLOB_CACHE_SIZE},
3+
constants::{self},
44
};
5+
use std::{fs, path::PathBuf, sync::Arc, time::Duration};
6+
57
use alloy_primitives::{hex, Address};
68
use alloy_provider::{Provider, ProviderBuilder};
79
use alloy_rpc_client::RpcClient;
@@ -22,7 +24,7 @@ use rollup_node_manager::{
2224
};
2325
use rollup_node_primitives::{BlockInfo, NodeConfig};
2426
use rollup_node_providers::{
25-
beacon_provider, DatabaseL1MessageProvider, L1MessageProvider, L1Provider, OnlineL1Provider,
27+
BlobSource, DatabaseL1MessageProvider, FullL1Provider, L1MessageProvider, L1Provider,
2628
SystemContractProvider,
2729
};
2830
use rollup_node_sequencer::{L1MessageInclusionMode, Sequencer};
@@ -35,7 +37,6 @@ use scroll_engine::{genesis_hash_from_chain_spec, EngineDriver, ForkchoiceState}
3537
use scroll_migration::traits::ScrollMigrator;
3638
use scroll_network::ScrollNetworkManager;
3739
use scroll_wire::ScrollWireEvent;
38-
use std::{fs, path::PathBuf, sync::Arc, time::Duration};
3940
use tokio::sync::mpsc::{Sender, UnboundedReceiver};
4041

4142
/// A struct that represents the arguments for the rollup node.
@@ -228,18 +229,13 @@ impl ScrollRollupNodeConfig {
228229

229230
// Construct the l1 provider.
230231
let l1_messages_provider = DatabaseL1MessageProvider::new(db.clone(), 0);
231-
let l1_provider = if let Some(url) = self.beacon_provider_args.url {
232-
let beacon_provider = beacon_provider(url.to_string());
233-
let l1_provider = OnlineL1Provider::new(
234-
beacon_provider,
235-
PROVIDER_BLOB_CACHE_SIZE,
236-
l1_messages_provider.clone(),
237-
)
238-
.await;
239-
Some(l1_provider)
240-
} else {
241-
None
242-
};
232+
let blob_provider = self
233+
.beacon_provider_args
234+
.blob_source
235+
.provider(self.beacon_provider_args.url)
236+
.await
237+
.expect("failed to construct L1 blob provider");
238+
let l1_provider = FullL1Provider::new(blob_provider, l1_messages_provider.clone()).await;
243239

244240
// Construct the Sequencer.
245241
let (sequencer, block_time) = if self.sequencer_args.sequencer_enabled {
@@ -345,6 +341,13 @@ pub struct BeaconProviderArgs {
345341
/// The URL for the Beacon chain.
346342
#[arg(long = "beacon.url", id = "beacon_url", value_name = "BEACON_URL")]
347343
pub url: Option<reqwest::Url>,
344+
/// The blob source for the provider.
345+
#[arg(
346+
long = "beacon.blob-source",
347+
id = "beacon_blob_source",
348+
value_name = "BEACON_BLOB_SOURCE"
349+
)]
350+
pub blob_source: BlobSource,
348351
/// The compute units per second for the provider.
349352
#[arg(long = "beacon.cups", id = "beacon_compute_units_per_second", value_name = "BEACON_COMPUTE_UNITS_PER_SECOND", default_value_t = constants::PROVIDER_COMPUTE_UNITS_PER_SECOND)]
350353
pub compute_units_per_second: u64,

crates/node/src/constants.rs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
1-
/// The size of the blob cache for the provider.
2-
pub(crate) const PROVIDER_BLOB_CACHE_SIZE: usize = 100;
3-
41
/// The max retries for the L1 provider.
52
pub(crate) const PROVIDER_MAX_RETRIES: u32 = 10;
63

crates/node/src/test_utils.rs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ use reth_node_core::args::{DiscoveryArgs, NetworkArgs, RpcServerArgs};
1919
use reth_provider::providers::BlockchainProvider;
2020
use reth_rpc_server_types::RpcModuleSelection;
2121
use reth_tasks::TaskManager;
22+
use rollup_node_providers::BlobSource;
2223
use rollup_node_sequencer::L1MessageInclusionMode;
2324
use std::{path::PathBuf, sync::Arc};
2425
use tokio::sync::Mutex;
@@ -138,7 +139,10 @@ pub fn default_test_scroll_rollup_node_config() -> ScrollRollupNodeConfig {
138139
l1_provider_args: L1ProviderArgs::default(),
139140
engine_driver_args: EngineDriverArgs { en_sync_trigger: 100, sync_at_startup: true },
140141
sequencer_args: SequencerArgs { payload_building_duration: 1000, ..Default::default() },
141-
beacon_provider_args: BeaconProviderArgs::default(),
142+
beacon_provider_args: BeaconProviderArgs {
143+
blob_source: BlobSource::Mock,
144+
..Default::default()
145+
},
142146
signer_args: Default::default(),
143147
}
144148
}
@@ -162,7 +166,10 @@ pub fn default_sequencer_test_scroll_rollup_node_config() -> ScrollRollupNodeCon
162166
fee_recipient: Default::default(),
163167
l1_message_inclusion_mode: L1MessageInclusionMode::BlockDepth(0),
164168
},
165-
beacon_provider_args: BeaconProviderArgs::default(),
169+
beacon_provider_args: BeaconProviderArgs {
170+
blob_source: BlobSource::Mock,
171+
..Default::default()
172+
},
166173
signer_args: Default::default(),
167174
}
168175
}

crates/node/tests/e2e.rs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ use rollup_node::{
1414
};
1515
use rollup_node_manager::{RollupManagerEvent, RollupManagerHandle};
1616
use rollup_node_primitives::BatchCommitData;
17+
use rollup_node_providers::BlobSource;
1718
use rollup_node_sequencer::L1MessageInclusionMode;
1819
use rollup_node_watcher::L1Notification;
1920
use scroll_alloy_consensus::TxL1Message;
@@ -49,7 +50,10 @@ async fn can_bridge_l1_messages() -> eyre::Result<()> {
4950
l1_message_inclusion_mode: L1MessageInclusionMode::BlockDepth(0),
5051
..SequencerArgs::default()
5152
},
52-
beacon_provider_args: BeaconProviderArgs::default(),
53+
beacon_provider_args: BeaconProviderArgs {
54+
blob_source: BlobSource::Mock,
55+
..Default::default()
56+
},
5357
signer_args: Default::default(),
5458
};
5559
let (mut nodes, _tasks, _wallet) = setup_engine(node_args, 1, chain_spec, false).await?;
@@ -114,7 +118,10 @@ async fn can_sequence_and_gossip_blocks() {
114118
payload_building_duration: 1000,
115119
..SequencerArgs::default()
116120
},
117-
beacon_provider_args: BeaconProviderArgs::default(),
121+
beacon_provider_args: BeaconProviderArgs {
122+
blob_source: BlobSource::Mock,
123+
..Default::default()
124+
},
118125
signer_args: Default::default(),
119126
};
120127

crates/node/tests/sync.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ use rollup_node::{
1616
ScrollRollupNode, ScrollRollupNodeConfig, SequencerArgs,
1717
};
1818
use rollup_node_manager::{RollupManagerCommand, RollupManagerEvent};
19+
use rollup_node_providers::BlobSource;
1920
use tokio::sync::oneshot;
2021

2122
#[tokio::test]
@@ -47,6 +48,7 @@ async fn test_should_consolidate_to_block_15k() -> eyre::Result<()> {
4748
compute_units_per_second: 100,
4849
max_retries: 10,
4950
initial_backoff: 100,
51+
blob_source: BlobSource::Beacon,
5052
},
5153
signer_args: Default::default(),
5254
};

0 commit comments

Comments
 (0)