Skip to content

Commit 868d085

Browse files
authored
feat: l1 and l2 providers with cache layer (#439)
* feat: l1 and l2 providers with cache layer * fix: clippy ok
1 parent bdf367c commit 868d085

File tree

3 files changed

+23
-5
lines changed

3 files changed

+23
-5
lines changed

crates/node/src/args.rs

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ use std::{fs, path::PathBuf, sync::Arc};
88

99
use alloy_chains::NamedChain;
1010
use alloy_primitives::{hex, Address, U128};
11-
use alloy_provider::{Provider, ProviderBuilder};
11+
use alloy_provider::{layers::CacheLayer, Provider, ProviderBuilder};
1212
use alloy_rpc_client::RpcClient;
1313
use alloy_signer::Signer;
1414
use alloy_signer_aws::AwsSigner;
@@ -191,16 +191,22 @@ impl ScrollRollupNodeConfig {
191191

192192
// Get a provider
193193
let l1_provider = self.l1_provider_args.url.clone().map(|url| {
194-
let L1ProviderArgs { max_retries, initial_backoff, compute_units_per_second, .. } =
195-
self.l1_provider_args;
194+
let L1ProviderArgs {
195+
max_retries,
196+
initial_backoff,
197+
compute_units_per_second,
198+
cache_max_items,
199+
..
200+
} = self.l1_provider_args;
196201
let client = RpcClient::builder()
197202
.layer(RetryBackoffLayer::new(
198203
max_retries,
199204
initial_backoff,
200205
compute_units_per_second,
201206
))
202207
.http(url);
203-
ProviderBuilder::new().connect_client(client)
208+
let cache_layer = CacheLayer::new(cache_max_items);
209+
ProviderBuilder::new().layer(cache_layer).connect_client(client)
204210
});
205211

206212
// Init a retry provider to the execution layer.
@@ -217,7 +223,9 @@ impl ScrollRollupNodeConfig {
217223
.parse()
218224
.expect("invalid l2 rpc url"),
219225
);
220-
let l2_provider = ProviderBuilder::<_, _, Scroll>::default().connect_client(client);
226+
let l2_provider = ProviderBuilder::<_, _, Scroll>::default()
227+
.layer(CacheLayer::new(constants::L2_PROVIDER_CACHE_MAX_ITEMS))
228+
.connect_client(client);
221229
let l2_provider = Arc::new(l2_provider);
222230

223231
// Fetch the database from the hydrated config.
@@ -634,6 +642,9 @@ pub struct L1ProviderArgs {
634642
/// The logs query block range.
635643
#[arg(long = "l1.query-range", id = "l1_query_range", value_name = "L1_QUERY_RANGE", default_value_t = constants::LOGS_QUERY_BLOCK_RANGE)]
636644
pub logs_query_block_range: u64,
645+
/// The maximum number of items to be stored in the cache layer.
646+
#[arg(long = "l1.cache-max-items", id = "l1_cache_max_items", value_name = "L1_CACHE_MAX_ITEMS", default_value_t = constants::L1_PROVIDER_CACHE_MAX_ITEMS)]
647+
pub cache_max_items: u32,
637648
}
638649

639650
/// The arguments for the Beacon provider.

crates/node/src/constants.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@ pub(crate) const L1_PROVIDER_MAX_RETRIES: u32 = 10;
88
/// The initial backoff for the L1 provider.
99
pub(crate) const L1_PROVIDER_INITIAL_BACKOFF: u64 = 100;
1010

11+
/// The maximum number of items to store in L1 provider's cache layer.
12+
pub(crate) const L1_PROVIDER_CACHE_MAX_ITEMS: u32 = 100;
13+
1114
/// The block range used to fetch L1 logs.
1215
pub(crate) const LOGS_QUERY_BLOCK_RANGE: u64 = 500;
1316

@@ -17,6 +20,9 @@ pub(crate) const L2_PROVIDER_MAX_RETRIES: u32 = u32::MAX;
1720
/// The initial backoff for the L2 provider.
1821
pub(crate) const L2_PROVIDER_INITIAL_BACKOFF: u64 = 50;
1922

23+
/// The maximum number of items to store in L2 provider's cache layer.
24+
pub(crate) const L2_PROVIDER_CACHE_MAX_ITEMS: u32 = 100;
25+
2026
/// The default provider compute units per second.
2127
pub(crate) const PROVIDER_COMPUTE_UNITS_PER_SECOND: u64 = 10000;
2228

crates/node/tests/sync.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ async fn test_should_consolidate_to_block_15k() -> eyre::Result<()> {
5454
max_retries: 10,
5555
initial_backoff: 100,
5656
logs_query_block_range: 500,
57+
cache_max_items: 100,
5758
},
5859
engine_driver_args: EngineDriverArgs { sync_at_startup: false },
5960
sequencer_args: SequencerArgs {

0 commit comments

Comments
 (0)