@@ -5,7 +5,7 @@ use alloy::{
55 primitives:: { Address , BlockNumber , Bytes , TxHash , B256 , U256 } ,
66 providers:: {
77 ext:: { DebugApi , TraceApi } ,
8- Provider , ProviderBuilder , RootProvider ,
8+ DynProvider , Provider , ProviderBuilder ,
99 } ,
1010 rpc:: types:: {
1111 trace:: {
@@ -22,7 +22,7 @@ use alloy::{
2222 Block , BlockTransactions , BlockTransactionsKind , Filter , Log , Transaction ,
2323 TransactionInput , TransactionReceipt , TransactionRequest ,
2424 } ,
25- transports:: { http:: reqwest:: Url , BoxTransport , RpcError , TransportErrorKind } ,
25+ transports:: { http:: reqwest:: Url , RpcError , TransportErrorKind } ,
2626} ;
2727use governor:: {
2828 clock:: DefaultClock ,
@@ -43,7 +43,7 @@ pub type RateLimiter = governor::RateLimiter<NotKeyed, InMemoryState, DefaultClo
4343#[ derive( Clone , Debug ) ]
4444pub struct Source {
4545 /// provider
46- pub provider : RootProvider < BoxTransport > ,
46+ pub provider : DynProvider ,
4747 /// chain_id of network
4848 pub chain_id : u64 ,
4949 /// number of blocks per log request
@@ -119,7 +119,7 @@ impl Source {
119119 pub async fn init ( rpc_url : Option < String > ) -> Result < Source > {
120120 let rpc_url: String = parse_rpc_url ( rpc_url) ;
121121 let parsed_rpc_url: Url = rpc_url. parse ( ) . expect ( "rpc url is not valid" ) ;
122- let provider = ProviderBuilder :: new ( ) . on_http ( parsed_rpc_url. clone ( ) ) ;
122+ let provider = ProviderBuilder :: new ( ) . connect_http ( parsed_rpc_url. clone ( ) ) ;
123123 let chain_id = provider
124124 . get_chain_id ( )
125125 . await
@@ -128,10 +128,10 @@ impl Source {
128128 let rate_limiter = None ;
129129 let semaphore = None ;
130130
131- let provider = ProviderBuilder :: new ( ) . on_http ( parsed_rpc_url) ;
131+ let provider = ProviderBuilder :: new ( ) . connect_http ( parsed_rpc_url) ;
132132
133133 let source = Source {
134- provider : provider. boxed ( ) ,
134+ provider : provider. erased ( ) ,
135135 chain_id,
136136 inner_request_size : DEFAULT_INNER_REQUEST_SIZE ,
137137 max_concurrent_chunks : Some ( DEFAULT_MAX_CONCURRENT_CHUNKS ) ,
@@ -210,17 +210,6 @@ pub struct SourceLabels {
210210 pub initial_backoff : Option < u64 > ,
211211}
212212
213- /// Wrapper over `Provider<P>` that adds concurrency and rate limiting controls
214- #[ derive( Debug ) ]
215- pub struct Fetcher < P > {
216- /// provider data source
217- pub provider : RootProvider < P > ,
218- /// semaphore for controlling concurrency
219- pub semaphore : Option < Semaphore > ,
220- /// rate limiter for controlling request rate
221- pub rate_limiter : Option < RateLimiter > ,
222- }
223-
224213type Result < T > = :: core:: result:: Result < T , CollectError > ;
225214
226215// impl<P: JsonRpcClient> Fetcher<P> {
@@ -238,9 +227,12 @@ impl Source {
238227 trace_types : Vec < TraceType > ,
239228 ) -> Result < Vec < TraceResultsWithTransactionHash > > {
240229 let _permit = self . permit_request ( ) . await ;
241- Self :: map_err (
242- self . provider . trace_replay_block_transactions ( block. into ( ) , & trace_types) . await ,
243- )
230+ let trace_result = self
231+ . provider
232+ . trace_replay_block_transactions ( block. into ( ) )
233+ . trace_types ( trace_types)
234+ . await ;
235+ Self :: map_err ( trace_result)
244236 }
245237
246238 /// Get state diff traces of block
@@ -298,7 +290,9 @@ impl Source {
298290 trace_types : Vec < TraceType > ,
299291 ) -> Result < TraceResults > {
300292 let _permit = self . permit_request ( ) . await ;
301- Self :: map_err ( self . provider . trace_replay_transaction ( tx_hash, & trace_types) . await )
293+ let trace_result =
294+ self . provider . trace_replay_transaction ( tx_hash) . trace_types ( trace_types) . await ;
295+ Self :: map_err ( trace_result)
302296 }
303297
304298 /// Get state diff traces of transaction
@@ -348,7 +342,11 @@ impl Source {
348342 kind : BlockTransactionsKind ,
349343 ) -> Result < Option < Block > > {
350344 let _permit = self . permit_request ( ) . await ;
351- Self :: map_err ( self . provider . get_block ( block_num. into ( ) , kind) . await )
345+ let block_result = match kind {
346+ BlockTransactionsKind :: Full => self . provider . get_block ( block_num. into ( ) ) . await ,
347+ BlockTransactionsKind :: Hashes => self . provider . get_block ( block_num. into ( ) ) . await ,
348+ } ;
349+ Self :: map_err ( block_result)
352350 }
353351
354352 /// Gets the block with `block_hash` (transaction hashes only)
@@ -358,7 +356,11 @@ impl Source {
358356 kind : BlockTransactionsKind ,
359357 ) -> Result < Option < Block > > {
360358 let _permit = self . permit_request ( ) . await ;
361- Self :: map_err ( self . provider . get_block ( block_hash. into ( ) , kind) . await )
359+ let block_result = match kind {
360+ BlockTransactionsKind :: Full => self . provider . get_block ( block_hash. into ( ) ) . await ,
361+ BlockTransactionsKind :: Hashes => self . provider . get_block ( block_hash. into ( ) ) . await ,
362+ } ;
363+ Self :: map_err ( block_result)
362364 }
363365
364366 /// Returns all receipts for a block.
@@ -398,7 +400,7 @@ impl Source {
398400 block_number : BlockNumber ,
399401 ) -> Result < Bytes > {
400402 let _permit = self . permit_request ( ) . await ;
401- Self :: map_err ( self . provider . call ( & transaction) . block ( block_number. into ( ) ) . await )
403+ Self :: map_err ( self . provider . call ( transaction) . block ( block_number. into ( ) ) . await )
402404 }
403405
404406 /// Returns traces for given call data
@@ -411,10 +413,14 @@ impl Source {
411413 let _permit = self . permit_request ( ) . await ;
412414 if let Some ( bn) = block_number {
413415 return Self :: map_err (
414- self . provider . trace_call ( & transaction, & trace_type) . block_id ( bn. into ( ) ) . await ,
416+ self . provider
417+ . trace_call ( & transaction)
418+ . trace_types ( trace_type. clone ( ) )
419+ . block_id ( bn. into ( ) )
420+ . await ,
415421 ) ;
416422 }
417- Self :: map_err ( self . provider . trace_call ( & transaction, & trace_type) . await )
423+ Self :: map_err ( self . provider . trace_call ( & transaction) . trace_types ( trace_type. clone ( ) ) . await )
418424 }
419425
420426 /// Get nonce of address
@@ -495,7 +501,7 @@ impl Source {
495501 ..Default :: default ( )
496502 } ;
497503 let _permit = self . permit_request ( ) . await ;
498- Self :: map_err ( self . provider . call ( & transaction) . block ( block_number. into ( ) ) . await )
504+ Self :: map_err ( self . provider . call ( transaction) . block ( block_number. into ( ) ) . await )
499505 }
500506
501507 /// Return output data of a contract call
@@ -515,12 +521,15 @@ impl Source {
515521 if block_number. is_some ( ) {
516522 Self :: map_err (
517523 self . provider
518- . trace_call ( & transaction, & trace_type)
524+ . trace_call ( & transaction)
525+ . trace_types ( trace_type. clone ( ) )
519526 . block_id ( block_number. unwrap ( ) . into ( ) )
520527 . await ,
521528 )
522529 } else {
523- Self :: map_err ( self . provider . trace_call ( & transaction, & trace_type) . await )
530+ Self :: map_err (
531+ self . provider . trace_call ( & transaction) . trace_types ( trace_type. clone ( ) ) . await ,
532+ )
524533 }
525534 }
526535
0 commit comments