1
1
use crate :: Error ;
2
- use alloy_network:: Ethereum ;
3
- use alloy_primitives:: B256 ;
4
- use alloy_provider:: { Provider , ProviderBuilder , RootProvider } ;
5
- use alloy_rpc_client:: RpcClient ;
6
- use alloy_rpc_types:: { BlockTransactions , Transaction , TransactionReceipt } ;
7
- use alloy_transport:: { RpcError , TransportErrorKind } ;
8
- use alloy_transport_http:: Http ;
9
- use reqwest:: Client ;
2
+ use alloy:: network:: Ethereum ;
3
+ use alloy:: primitives:: B256 ;
4
+ use alloy:: providers:: { Provider , RootProvider } ;
5
+
6
+ use alloy:: rpc:: types:: { BlockTransactions , Transaction , TransactionReceipt } ;
7
+ use alloy:: transports:: http:: { Client , Http } ;
8
+ use alloy:: transports:: { RpcError , TransportErrorKind } ;
10
9
11
10
pub ( crate ) struct RpcProvider {
12
- provider : RootProvider < Ethereum , Http < Client > > ,
11
+ provider : RootProvider < Http < Client > , Ethereum > ,
13
12
}
14
13
15
14
impl RpcProvider {
16
- pub ( crate ) fn new ( url : & str ) -> Self {
17
- let http = Http :: < Client > :: new ( url. to_string ( ) . parse ( ) . unwrap ( ) ) ;
18
- let provider = ProviderBuilder :: < _ , Ethereum > :: new ( )
19
- . provider ( RootProvider :: new ( RpcClient :: new ( http, true ) ) ) ;
15
+ pub ( crate ) fn new ( rpc_url : url:: Url ) -> Self {
16
+ let provider = RootProvider :: new_http ( rpc_url) ;
20
17
Self { provider }
21
18
}
22
19
@@ -26,7 +23,10 @@ impl RpcProvider {
26
23
) -> Result < ( Vec < Transaction > , B256 ) , Error > {
27
24
let block = self
28
25
. provider
29
- . get_block ( block_number. into ( ) , true )
26
+ . get_block (
27
+ block_number. into ( ) ,
28
+ alloy:: rpc:: types:: BlockTransactionsKind :: Full ,
29
+ )
30
30
. await ?
31
31
. ok_or_else ( || Error :: BlockNotFound ) ?;
32
32
@@ -44,7 +44,10 @@ impl RpcProvider {
44
44
) -> Result < ( Vec < TransactionReceipt > , B256 ) , Error > {
45
45
let block = self
46
46
. provider
47
- . get_block ( block_number. into ( ) , true )
47
+ . get_block (
48
+ block_number. into ( ) ,
49
+ alloy:: rpc:: types:: BlockTransactionsKind :: Full ,
50
+ )
48
51
. await ?
49
52
. ok_or_else ( || Error :: BlockNotFound ) ?;
50
53
@@ -58,21 +61,29 @@ impl RpcProvider {
58
61
}
59
62
60
63
pub ( crate ) async fn get_tx_index_by_hash ( & self , tx_hash : B256 ) -> Result < u64 , Error > {
61
- let tx = self . provider . get_transaction_by_hash ( tx_hash) . await ?;
64
+ let tx = self
65
+ . provider
66
+ . get_transaction_by_hash ( tx_hash)
67
+ . await ?
68
+ . expect ( "tx not found" ) ;
62
69
63
70
let index: u64 = match tx. transaction_index {
64
- Some ( index) => index. try_into ( ) . map_err ( |_| Error :: TxNotFound ) ? ,
71
+ Some ( index) => index,
65
72
None => return Err ( Error :: TxNotFound ) ,
66
73
} ;
67
74
68
75
Ok ( index)
69
76
}
70
77
71
78
pub ( crate ) async fn get_tx_block_height ( & self , tx_hash : B256 ) -> Result < u64 , Error > {
72
- let tx = self . provider . get_transaction_by_hash ( tx_hash) . await ?;
79
+ let tx = self
80
+ . provider
81
+ . get_transaction_by_hash ( tx_hash)
82
+ . await ?
83
+ . expect ( "tx not found" ) ;
73
84
74
85
let height: u64 = match tx. block_number {
75
- Some ( height) => height. try_into ( ) . map_err ( |_| Error :: TxNotFound ) ? ,
86
+ Some ( height) => height,
76
87
None => return Err ( Error :: TxNotFound ) ,
77
88
} ;
78
89
0 commit comments