|
| 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,
|
@@ -238,12 +257,24 @@ impl EthereumAdapter {
|
238 | 257 | supports_eip_1898: bool,
|
239 | 258 | call_only: bool,
|
240 | 259 | ) -> Self {
|
| 260 | + let rpc_url = match &transport { |
| 261 | + Transport::RPC { |
| 262 | + client: _, |
| 263 | + metrics: _, |
| 264 | + provider: _, |
| 265 | + rpc_url, |
| 266 | + } => rpc_url.clone(), |
| 267 | + Transport::IPC(_ipc) => todo!(), |
| 268 | + Transport::WS(_web_socket) => todo!(), |
| 269 | + }; |
241 | 270 | let web3 = Arc::new(Web3::new(transport));
|
| 271 | + let alloy = Arc::new(ProviderBuilder::new().connect(&rpc_url).await.unwrap()); |
242 | 272 |
|
243 | 273 | EthereumAdapter {
|
244 | 274 | logger,
|
245 | 275 | provider,
|
246 | 276 | web3,
|
| 277 | + alloy, |
247 | 278 | metrics: provider_metrics,
|
248 | 279 | supports_eip_1898,
|
249 | 280 | call_only,
|
|
0 commit comments