1
+ use alloy:: primitives:: B256 ;
2
+ use alloy:: providers:: { Provider , ProviderBuilder } ;
1
3
use futures03:: { future:: BoxFuture , stream:: FuturesUnordered } ;
2
4
use graph:: abi;
3
5
use graph:: abi:: DynSolValueExt ;
@@ -72,23 +74,40 @@ use crate::{
72
74
ENV_VARS ,
73
75
} ;
74
76
75
- #[ derive( Debug , Clone ) ]
77
+ #[ derive( Clone ) ]
76
78
pub struct EthereumAdapter {
77
79
logger : Logger ,
78
80
provider : String ,
79
81
web3 : Arc < Web3 < Transport > > ,
82
+ alloy : Arc < dyn Provider > ,
80
83
metrics : Arc < ProviderEthRpcMetrics > ,
81
84
supports_eip_1898 : bool ,
82
85
call_only : bool ,
83
86
supports_block_receipts : Arc < RwLock < Option < bool > > > ,
84
87
}
85
88
89
+ impl std:: fmt:: Debug for EthereumAdapter {
90
+ fn fmt ( & self , f : & mut std:: fmt:: Formatter < ' _ > ) -> std:: fmt:: Result {
91
+ f. debug_struct ( "EthereumAdapter" )
92
+ . field ( "logger" , & self . logger )
93
+ . field ( "provider" , & self . provider )
94
+ . field ( "web3" , & self . web3 )
95
+ . field ( "alloy" , & "<Provider>" )
96
+ . field ( "metrics" , & self . metrics )
97
+ . field ( "supports_eip_1898" , & self . supports_eip_1898 )
98
+ . field ( "call_only" , & self . call_only )
99
+ . field ( "supports_block_receipts" , & self . supports_block_receipts )
100
+ . finish ( )
101
+ }
102
+ }
103
+
86
104
impl CheapClone for EthereumAdapter {
87
105
fn cheap_clone ( & self ) -> Self {
88
106
Self {
89
107
logger : self . logger . clone ( ) ,
90
108
provider : self . provider . clone ( ) ,
91
109
web3 : self . web3 . cheap_clone ( ) ,
110
+ alloy : self . alloy . clone ( ) ,
92
111
metrics : self . metrics . cheap_clone ( ) ,
93
112
supports_eip_1898 : self . supports_eip_1898 ,
94
113
call_only : self . call_only ,
@@ -110,12 +129,24 @@ impl EthereumAdapter {
110
129
supports_eip_1898 : bool ,
111
130
call_only : bool ,
112
131
) -> Self {
132
+ let rpc_url = match & transport {
133
+ Transport :: RPC {
134
+ client : _,
135
+ metrics : _,
136
+ provider : _,
137
+ rpc_url,
138
+ } => rpc_url. clone ( ) ,
139
+ Transport :: IPC ( _ipc) => todo ! ( ) ,
140
+ Transport :: WS ( _web_socket) => todo ! ( ) ,
141
+ } ;
113
142
let web3 = Arc :: new ( Web3 :: new ( transport) ) ;
143
+ let alloy = Arc :: new ( ProviderBuilder :: new ( ) . connect ( & rpc_url) . await . unwrap ( ) ) ;
114
144
115
145
EthereumAdapter {
116
146
logger,
117
147
provider,
118
148
web3,
149
+ alloy,
119
150
metrics : provider_metrics,
120
151
supports_eip_1898,
121
152
call_only,
0 commit comments