1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
use crate::gas_oracle::{GasOracle, GasOracleError};
use async_trait::async_trait;
use ethers_core::types::U256;
use ethers_providers::Middleware;
use std::fmt::Debug;
#[derive(Debug)]
pub struct ProviderOracle<M: Middleware> {
provider: M,
}
impl<M: Middleware> ProviderOracle<M> {
pub fn new(provider: M) -> Self {
Self { provider }
}
}
#[cfg_attr(target_arch = "wasm32", async_trait(?Send))]
#[cfg_attr(not(target_arch = "wasm32"), async_trait)]
impl<M: Middleware> GasOracle for ProviderOracle<M>
where
<M as Middleware>::Error: 'static,
{
async fn fetch(&self) -> Result<U256, GasOracleError> {
self.provider
.get_gas_price()
.await
.map_err(|err| GasOracleError::ProviderError(Box::new(err)))
}
async fn estimate_eip1559_fees(&self) -> Result<(U256, U256), GasOracleError> {
self.provider
.estimate_eip1559_fees(None)
.await
.map_err(|err| GasOracleError::ProviderError(Box::new(err)))
}
}