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