@@ -5,7 +5,7 @@ use alloy::{
5
5
primitives:: { Address , BlockNumber , Bytes , TxHash , B256 , U256 } ,
6
6
providers:: {
7
7
ext:: { DebugApi , TraceApi } ,
8
- Provider , ProviderBuilder , RootProvider ,
8
+ DynProvider , Provider , ProviderBuilder ,
9
9
} ,
10
10
rpc:: types:: {
11
11
trace:: {
@@ -22,7 +22,7 @@ use alloy::{
22
22
Block , BlockTransactions , BlockTransactionsKind , Filter , Log , Transaction ,
23
23
TransactionInput , TransactionReceipt , TransactionRequest ,
24
24
} ,
25
- transports:: { http:: reqwest:: Url , BoxTransport , RpcError , TransportErrorKind } ,
25
+ transports:: { http:: reqwest:: Url , RpcError , TransportErrorKind } ,
26
26
} ;
27
27
use governor:: {
28
28
clock:: DefaultClock ,
@@ -43,7 +43,7 @@ pub type RateLimiter = governor::RateLimiter<NotKeyed, InMemoryState, DefaultClo
43
43
#[ derive( Clone , Debug ) ]
44
44
pub struct Source {
45
45
/// provider
46
- pub provider : RootProvider < BoxTransport > ,
46
+ pub provider : DynProvider ,
47
47
/// chain_id of network
48
48
pub chain_id : u64 ,
49
49
/// number of blocks per log request
@@ -119,7 +119,7 @@ impl Source {
119
119
pub async fn init ( rpc_url : Option < String > ) -> Result < Source > {
120
120
let rpc_url: String = parse_rpc_url ( rpc_url) ;
121
121
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 ( ) ) ;
123
123
let chain_id = provider
124
124
. get_chain_id ( )
125
125
. await
@@ -128,10 +128,10 @@ impl Source {
128
128
let rate_limiter = None ;
129
129
let semaphore = None ;
130
130
131
- let provider = ProviderBuilder :: new ( ) . on_http ( parsed_rpc_url) ;
131
+ let provider = ProviderBuilder :: new ( ) . connect_http ( parsed_rpc_url) ;
132
132
133
133
let source = Source {
134
- provider : provider. boxed ( ) ,
134
+ provider : provider. erased ( ) ,
135
135
chain_id,
136
136
inner_request_size : DEFAULT_INNER_REQUEST_SIZE ,
137
137
max_concurrent_chunks : Some ( DEFAULT_MAX_CONCURRENT_CHUNKS ) ,
@@ -210,17 +210,6 @@ pub struct SourceLabels {
210
210
pub initial_backoff : Option < u64 > ,
211
211
}
212
212
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
-
224
213
type Result < T > = :: core:: result:: Result < T , CollectError > ;
225
214
226
215
// impl<P: JsonRpcClient> Fetcher<P> {
@@ -238,9 +227,12 @@ impl Source {
238
227
trace_types : Vec < TraceType > ,
239
228
) -> Result < Vec < TraceResultsWithTransactionHash > > {
240
229
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)
244
236
}
245
237
246
238
/// Get state diff traces of block
@@ -298,7 +290,9 @@ impl Source {
298
290
trace_types : Vec < TraceType > ,
299
291
) -> Result < TraceResults > {
300
292
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)
302
296
}
303
297
304
298
/// Get state diff traces of transaction
@@ -348,7 +342,11 @@ impl Source {
348
342
kind : BlockTransactionsKind ,
349
343
) -> Result < Option < Block > > {
350
344
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)
352
350
}
353
351
354
352
/// Gets the block with `block_hash` (transaction hashes only)
@@ -358,7 +356,11 @@ impl Source {
358
356
kind : BlockTransactionsKind ,
359
357
) -> Result < Option < Block > > {
360
358
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)
362
364
}
363
365
364
366
/// Returns all receipts for a block.
@@ -398,7 +400,7 @@ impl Source {
398
400
block_number : BlockNumber ,
399
401
) -> Result < Bytes > {
400
402
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 )
402
404
}
403
405
404
406
/// Returns traces for given call data
@@ -411,10 +413,14 @@ impl Source {
411
413
let _permit = self . permit_request ( ) . await ;
412
414
if let Some ( bn) = block_number {
413
415
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 ,
415
421
) ;
416
422
}
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 )
418
424
}
419
425
420
426
/// Get nonce of address
@@ -495,7 +501,7 @@ impl Source {
495
501
..Default :: default ( )
496
502
} ;
497
503
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 )
499
505
}
500
506
501
507
/// Return output data of a contract call
@@ -515,12 +521,15 @@ impl Source {
515
521
if block_number. is_some ( ) {
516
522
Self :: map_err (
517
523
self . provider
518
- . trace_call ( & transaction, & trace_type)
524
+ . trace_call ( & transaction)
525
+ . trace_types ( trace_type. clone ( ) )
519
526
. block_id ( block_number. unwrap ( ) . into ( ) )
520
527
. await ,
521
528
)
522
529
} 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
+ )
524
533
}
525
534
}
526
535
0 commit comments