11use alloy_provider:: ProviderBuilder ;
2+ use alloy_rpc_client:: RpcClient ;
3+ use alloy_transport:: layers:: RetryBackoffLayer ;
24use migration:: MigratorTrait ;
35use reth_network:: { config:: NetworkMode , NetworkManager , PeersInfo } ;
46use reth_node_api:: TxTy ;
@@ -8,18 +10,21 @@ use reth_rpc_builder::config::RethRpcServerConfig;
810use reth_scroll_chainspec:: ScrollChainSpec ;
911use reth_scroll_primitives:: ScrollPrimitives ;
1012use reth_transaction_pool:: { PoolTransaction , TransactionPool } ;
11- use rollup_node_indexer:: Indexer ;
1213use rollup_node_manager:: { PoAConsensus , RollupNodeManager } ;
14+ use rollup_node_providers:: { beacon_provider, DatabaseL1MessageProvider , OnlineL1Provider } ;
1315use rollup_node_watcher:: L1Watcher ;
1416use scroll_alloy_provider:: ScrollAuthEngineApiProvider ;
1517use scroll_db:: { Database , DatabaseConnectionProvider } ;
1618use scroll_engine:: { test_utils:: NoopExecutionPayloadProvider , EngineDriver , ForkchoiceState } ;
1719use scroll_network:: NetworkManager as ScrollNetworkManager ;
1820use scroll_wire:: { ProtocolHandler , ScrollWireConfig } ;
19- use std:: { path :: PathBuf , sync:: Arc } ;
21+ use std:: sync:: Arc ;
2022use tracing:: info;
2123
22- use crate :: ScrollRollupNodeArgs ;
24+ use crate :: {
25+ constants:: PROVIDER_BLOB_CACHE_SIZE , L1ProviderArgs , ScrollRollupNodeArgs ,
26+ WATCHER_START_BLOCK_NUMBER ,
27+ } ;
2328
2429/// The network builder for the eth-wire to scroll-wire bridge.
2530#[ derive( Debug ) ]
@@ -99,34 +104,53 @@ where
99104
100105 // Instantiate the database
101106 let database_path = if let Some ( db_path) = self . config . database_path {
102- db_path
107+ db_path. to_string_lossy ( ) . to_string ( )
103108 } else {
104- PathBuf :: from ( "sqlite://" ) . join ( ctx. config ( ) . datadir ( ) . db ( ) . join ( "scroll.db" ) )
109+ // append the path using strings as using `join(...)` overwrites "sqlite://"
110+ // if the path is absolute.
111+ let path = ctx. config ( ) . datadir ( ) . db ( ) . join ( "scroll.db" ) ;
112+ "sqlite://" . to_string ( ) + & * path. to_string_lossy ( )
105113 } ;
106- let db = Database :: new ( database_path. to_str ( ) . unwrap ( ) ) . await ?;
114+ let db = Database :: new ( & database_path) . await ?;
107115
108116 // Run the database migrations
109117 migration:: Migrator :: up ( db. get_connection ( ) , None ) . await ?;
110118
111119 // Wrap the database in an Arc
112120 let db = Arc :: new ( db) ;
113121
114- // Spawn the indexer
115- let indexer = Indexer :: new ( db. clone ( ) ) ;
116-
117122 // Spawn the L1Watcher
118- let l1_notification_rx = if let Some ( l1_rpc_url) = self . config . l1_rpc_url {
119- Some ( L1Watcher :: spawn ( ProviderBuilder :: new ( ) . on_http ( l1_rpc_url) , 20035952 ) . await )
123+ let l1_provider_args = self . config . l1_provider_args ;
124+ let l1_notification_rx = if let Some ( l1_rpc_url) = l1_provider_args. l1_rpc_url {
125+ let L1ProviderArgs { max_retries, initial_backoff, compute_units_per_second, .. } =
126+ l1_provider_args;
127+ let client = RpcClient :: builder ( )
128+ . layer ( RetryBackoffLayer :: new (
129+ max_retries,
130+ initial_backoff,
131+ compute_units_per_second,
132+ ) )
133+ . http ( l1_rpc_url) ;
134+ let provider = ProviderBuilder :: new ( ) . on_client ( client) ;
135+ Some ( L1Watcher :: spawn ( provider, WATCHER_START_BLOCK_NUMBER ) . await )
120136 } else {
121137 None
122138 } ;
123139
140+ // Construct the l1 provider.
141+ let beacon_provider = beacon_provider ( l1_provider_args. beacon_rpc_url . to_string ( ) ) ;
142+ let l1_messages_provider = DatabaseL1MessageProvider :: new ( db. clone ( ) ) ;
143+ let l1_provider =
144+ OnlineL1Provider :: new ( beacon_provider, PROVIDER_BLOB_CACHE_SIZE , l1_messages_provider)
145+ . await ;
146+
124147 // Spawn the rollup node manager
125148 let rollup_node_manager = RollupNodeManager :: new (
126149 scroll_network_manager,
127150 engine,
151+ l1_provider,
152+ db,
128153 l1_notification_rx,
129- indexer,
130154 ForkchoiceState :: genesis (
131155 ctx. config ( ) . chain . chain . try_into ( ) . expect ( "must be a named chain" ) ,
132156 ) ,
0 commit comments