1+ use alloy:: primitives:: B256 ;
2+ use alloy:: providers:: { Provider , ProviderBuilder } ;
13use futures03:: { future:: BoxFuture , stream:: FuturesUnordered } ;
24use graph:: abi;
35use graph:: abi:: DynSolValueExt ;
@@ -72,23 +74,40 @@ use crate::{
7274 ENV_VARS ,
7375} ;
7476
75- #[ derive( Debug , Clone ) ]
77+ #[ derive( Clone ) ]
7678pub struct EthereumAdapter {
7779 logger : Logger ,
7880 provider : String ,
7981 web3 : Arc < Web3 < Transport > > ,
82+ alloy : Arc < dyn Provider > ,
8083 metrics : Arc < ProviderEthRpcMetrics > ,
8184 supports_eip_1898 : bool ,
8285 call_only : bool ,
8386 supports_block_receipts : Arc < RwLock < Option < bool > > > ,
8487}
8588
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+
86104impl CheapClone for EthereumAdapter {
87105 fn cheap_clone ( & self ) -> Self {
88106 Self {
89107 logger : self . logger . clone ( ) ,
90108 provider : self . provider . clone ( ) ,
91109 web3 : self . web3 . cheap_clone ( ) ,
110+ alloy : self . alloy . clone ( ) ,
92111 metrics : self . metrics . cheap_clone ( ) ,
93112 supports_eip_1898 : self . supports_eip_1898 ,
94113 call_only : self . call_only ,
@@ -110,12 +129,24 @@ impl EthereumAdapter {
110129 supports_eip_1898 : bool ,
111130 call_only : bool ,
112131 ) -> 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+ } ;
113142 let web3 = Arc :: new ( Web3 :: new ( transport) ) ;
143+ let alloy = Arc :: new ( ProviderBuilder :: new ( ) . connect ( & rpc_url) . await . unwrap ( ) ) ;
114144
115145 EthereumAdapter {
116146 logger,
117147 provider,
118148 web3,
149+ alloy,
119150 metrics : provider_metrics,
120151 supports_eip_1898,
121152 call_only,
0 commit comments