Skip to content

Commit 3349979

Browse files
committed
chain/ethereum: Add alloy provider to ethereum adapter
1 parent 6fbc5fe commit 3349979

File tree

2 files changed

+39
-1
lines changed

2 files changed

+39
-1
lines changed

chain/ethereum/src/ethereum_adapter.rs

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
use alloy::primitives::B256;
2+
use alloy::providers::{Provider, ProviderBuilder};
13
use futures03::{future::BoxFuture, stream::FuturesUnordered};
24
use graph::abi;
35
use graph::abi::DynSolValueExt;
@@ -72,23 +74,40 @@ use crate::{
7274
ENV_VARS,
7375
};
7476

75-
#[derive(Debug, Clone)]
77+
#[derive(Clone)]
7678
pub 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+
86104
impl 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,
@@ -238,12 +257,24 @@ impl EthereumAdapter {
238257
supports_eip_1898: bool,
239258
call_only: bool,
240259
) -> 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+
};
241270
let web3 = Arc::new(Web3::new(transport));
271+
let alloy = Arc::new(ProviderBuilder::new().connect(&rpc_url).await.unwrap());
242272

243273
EthereumAdapter {
244274
logger,
245275
provider,
246276
web3,
277+
alloy,
247278
metrics: provider_metrics,
248279
supports_eip_1898,
249280
call_only,

chain/ethereum/src/transport.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ pub enum Transport {
1717
client: http::Http,
1818
metrics: Arc<EndpointMetrics>,
1919
provider: ProviderName,
20+
url: String,
2021
},
2122
IPC(ipc::Ipc),
2223
WS(ws::WebSocket),
@@ -56,10 +57,13 @@ impl Transport {
5657
.build()
5758
.unwrap();
5859

60+
let rpc_url = rpc.to_string();
61+
5962
Transport::RPC {
6063
client: http::Http::with_client(client, rpc),
6164
metrics,
6265
provider: provider.as_ref().into(),
66+
url: rpc_url,
6367
}
6468
}
6569
}
@@ -73,6 +77,7 @@ impl web3::Transport for Transport {
7377
client,
7478
metrics: _,
7579
provider: _,
80+
url: _,
7681
} => client.prepare(method, params),
7782
Transport::IPC(ipc) => ipc.prepare(method, params),
7883
Transport::WS(ws) => ws.prepare(method, params),
@@ -85,6 +90,7 @@ impl web3::Transport for Transport {
8590
client,
8691
metrics,
8792
provider,
93+
url: _,
8894
} => {
8995
let metrics = metrics.cheap_clone();
9096
let client = client.clone();
@@ -132,6 +138,7 @@ impl web3::BatchTransport for Transport {
132138
client,
133139
metrics: _,
134140
provider: _,
141+
url: _,
135142
} => Box::new(client.send_batch(requests)),
136143
Transport::IPC(ipc) => Box::new(ipc.send_batch(requests)),
137144
Transport::WS(ws) => Box::new(ws.send_batch(requests)),

0 commit comments

Comments
 (0)