@@ -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,16 +210,7 @@ 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- }
213+ // Note: Fetcher struct removed as it's not used in the codebase
223214
224215type Result < T > = :: core:: result:: Result < T , CollectError > ;
225216
@@ -238,9 +229,12 @@ impl Source {
238229 trace_types : Vec < TraceType > ,
239230 ) -> Result < Vec < TraceResultsWithTransactionHash > > {
240231 let _permit = self . permit_request ( ) . await ;
241- Self :: map_err (
242- self . provider . trace_replay_block_transactions ( block. into ( ) , & trace_types) . await ,
243- )
232+ let trace_result = self
233+ . provider
234+ . trace_replay_block_transactions ( block. into ( ) )
235+ . trace_types ( trace_types)
236+ . await ;
237+ Self :: map_err ( trace_result)
244238 }
245239
246240 /// Get state diff traces of block
@@ -298,7 +292,9 @@ impl Source {
298292 trace_types : Vec < TraceType > ,
299293 ) -> Result < TraceResults > {
300294 let _permit = self . permit_request ( ) . await ;
301- Self :: map_err ( self . provider . trace_replay_transaction ( tx_hash, & trace_types) . await )
295+ let trace_result =
296+ self . provider . trace_replay_transaction ( tx_hash) . trace_types ( trace_types) . await ;
297+ Self :: map_err ( trace_result)
302298 }
303299
304300 /// Get state diff traces of transaction
@@ -348,7 +344,11 @@ impl Source {
348344 kind : BlockTransactionsKind ,
349345 ) -> Result < Option < Block > > {
350346 let _permit = self . permit_request ( ) . await ;
351- Self :: map_err ( self . provider . get_block ( block_num. into ( ) , kind) . await )
347+ let block_result = match kind {
348+ BlockTransactionsKind :: Full => self . provider . get_block ( block_num. into ( ) ) . await ,
349+ BlockTransactionsKind :: Hashes => self . provider . get_block ( block_num. into ( ) ) . await ,
350+ } ;
351+ Self :: map_err ( block_result)
352352 }
353353
354354 /// Gets the block with `block_hash` (transaction hashes only)
@@ -358,7 +358,11 @@ impl Source {
358358 kind : BlockTransactionsKind ,
359359 ) -> Result < Option < Block > > {
360360 let _permit = self . permit_request ( ) . await ;
361- Self :: map_err ( self . provider . get_block ( block_hash. into ( ) , kind) . await )
361+ let block_result = match kind {
362+ BlockTransactionsKind :: Full => self . provider . get_block ( block_hash. into ( ) ) . await ,
363+ BlockTransactionsKind :: Hashes => self . provider . get_block ( block_hash. into ( ) ) . await ,
364+ } ;
365+ Self :: map_err ( block_result)
362366 }
363367
364368 /// Returns all receipts for a block.
@@ -398,7 +402,7 @@ impl Source {
398402 block_number : BlockNumber ,
399403 ) -> Result < Bytes > {
400404 let _permit = self . permit_request ( ) . await ;
401- Self :: map_err ( self . provider . call ( & transaction) . block ( block_number. into ( ) ) . await )
405+ Self :: map_err ( self . provider . call ( transaction) . block ( block_number. into ( ) ) . await )
402406 }
403407
404408 /// Returns traces for given call data
@@ -411,10 +415,14 @@ impl Source {
411415 let _permit = self . permit_request ( ) . await ;
412416 if let Some ( bn) = block_number {
413417 return Self :: map_err (
414- self . provider . trace_call ( & transaction, & trace_type) . block_id ( bn. into ( ) ) . await ,
418+ self . provider
419+ . trace_call ( & transaction)
420+ . trace_types ( trace_type. clone ( ) )
421+ . block_id ( bn. into ( ) )
422+ . await ,
415423 ) ;
416424 }
417- Self :: map_err ( self . provider . trace_call ( & transaction, & trace_type) . await )
425+ Self :: map_err ( self . provider . trace_call ( & transaction) . trace_types ( trace_type. clone ( ) ) . await )
418426 }
419427
420428 /// Get nonce of address
@@ -495,7 +503,7 @@ impl Source {
495503 ..Default :: default ( )
496504 } ;
497505 let _permit = self . permit_request ( ) . await ;
498- Self :: map_err ( self . provider . call ( & transaction) . block ( block_number. into ( ) ) . await )
506+ Self :: map_err ( self . provider . call ( transaction) . block ( block_number. into ( ) ) . await )
499507 }
500508
501509 /// Return output data of a contract call
@@ -515,12 +523,15 @@ impl Source {
515523 if block_number. is_some ( ) {
516524 Self :: map_err (
517525 self . provider
518- . trace_call ( & transaction, & trace_type)
526+ . trace_call ( & transaction)
527+ . trace_types ( trace_type. clone ( ) )
519528 . block_id ( block_number. unwrap ( ) . into ( ) )
520529 . await ,
521530 )
522531 } else {
523- Self :: map_err ( self . provider . trace_call ( & transaction, & trace_type) . await )
532+ Self :: map_err (
533+ self . provider . trace_call ( & transaction) . trace_types ( trace_type. clone ( ) ) . await ,
534+ )
524535 }
525536 }
526537
0 commit comments