diff --git a/ethers-core/src/types/fee.rs b/ethers-core/src/types/fee.rs new file mode 100644 index 000000000..1152cf01e --- /dev/null +++ b/ethers-core/src/types/fee.rs @@ -0,0 +1,34 @@ +use std::str::FromStr; + +use crate::types::U256; +use serde::{de::Deserializer, Deserialize, Serialize}; + +#[derive(Deserialize, Serialize, Debug, Clone)] +#[serde(rename_all = "camelCase")] +pub struct FeeHistory { + pub base_fee_per_gas: Vec, + pub gas_used_ratio: Vec, + #[serde(deserialize_with = "from_int_or_hex")] + /// oldestBlock is returned as an unsigned integer up to geth v1.10.6. From + /// geth v1.10.7, this has been updated to return in the hex encoded form. + /// The custom deserializer allows backward compatibility for those clients + /// not running v1.10.7 yet. + pub oldest_block: U256, + pub reward: Vec>, +} + +fn from_int_or_hex<'de, D>(deserializer: D) -> Result +where + D: Deserializer<'de>, +{ + #[derive(Deserialize)] + #[serde(untagged)] + enum IntOrHex { + Int(u64), + Hex(String), + } + match IntOrHex::deserialize(deserializer)? { + IntOrHex::Int(n) => Ok(U256::from(n)), + IntOrHex::Hex(s) => U256::from_str(s.as_str()).map_err(serde::de::Error::custom), + } +} diff --git a/ethers-core/src/types/mod.rs b/ethers-core/src/types/mod.rs index ed9f19997..6e821163b 100644 --- a/ethers-core/src/types/mod.rs +++ b/ethers-core/src/types/mod.rs @@ -54,3 +54,6 @@ pub use chain::*; mod proof; pub use proof::*; + +mod fee; +pub use fee::*; diff --git a/ethers-providers/src/lib.rs b/ethers-providers/src/lib.rs index ba538a8ad..83a6a5915 100644 --- a/ethers-providers/src/lib.rs +++ b/ethers-providers/src/lib.rs @@ -27,8 +27,8 @@ pub use pubsub::{PubsubClient, SubscriptionStream}; use async_trait::async_trait; use auto_impl::auto_impl; use ethers_core::types::transaction::{eip2718::TypedTransaction, eip2930::AccessListWithGasUsed}; -use serde::{de::DeserializeOwned, Deserialize, Deserializer, Serialize}; -use std::{error::Error, fmt::Debug, future::Future, pin::Pin, str::FromStr}; +use serde::{de::DeserializeOwned, Serialize}; +use std::{error::Error, fmt::Debug, future::Future, pin::Pin}; pub use provider::{FilterKind, Provider, ProviderError}; @@ -636,36 +636,6 @@ pub trait Middleware: Sync + Send + Debug { } } -#[derive(Deserialize, Serialize, Debug, Clone)] -#[serde(rename_all = "camelCase")] -pub struct FeeHistory { - pub base_fee_per_gas: Vec, - pub gas_used_ratio: Vec, - #[serde(deserialize_with = "from_int_or_hex")] - /// oldestBlock is returned as an unsigned integer up to geth v1.10.6. From - /// geth v1.10.7, this has been updated to return in the hex encoded form. - /// The custom deserializer allows backward compatibility for those clients - /// not running v1.10.7 yet. - pub oldest_block: U256, - pub reward: Vec>, -} - -fn from_int_or_hex<'de, D>(deserializer: D) -> Result -where - D: Deserializer<'de>, -{ - #[derive(Deserialize)] - #[serde(untagged)] - enum IntOrHex { - Int(u64), - Hex(String), - } - match IntOrHex::deserialize(deserializer)? { - IntOrHex::Int(n) => Ok(U256::from(n)), - IntOrHex::Hex(s) => U256::from_str(s.as_str()).map_err(serde::de::Error::custom), - } -} - #[cfg(feature = "celo")] #[cfg_attr(target_arch = "wasm32", async_trait(?Send))] #[cfg_attr(not(target_arch = "wasm32"), async_trait)] diff --git a/ethers-providers/src/provider.rs b/ethers-providers/src/provider.rs index c4b152ed4..09f3036b7 100644 --- a/ethers-providers/src/provider.rs +++ b/ethers-providers/src/provider.rs @@ -2,7 +2,7 @@ use crate::{ ens, pubsub::{PubsubClient, SubscriptionStream}, stream::{FilterWatcher, DEFAULT_POLL_INTERVAL}, - FeeHistory, FromErr, Http as HttpProvider, JsonRpcClient, JsonRpcClientWrapper, MockProvider, + FromErr, Http as HttpProvider, JsonRpcClient, JsonRpcClientWrapper, MockProvider, PendingTransaction, QuorumProvider, }; @@ -15,9 +15,10 @@ use ethers_core::{ abi::{self, Detokenize, ParamType}, types::{ transaction::{eip2718::TypedTransaction, eip2930::AccessListWithGasUsed}, - Address, Block, BlockId, BlockNumber, BlockTrace, Bytes, EIP1186ProofResponse, Filter, Log, - NameOrAddress, Selector, Signature, Trace, TraceFilter, TraceType, Transaction, - TransactionReceipt, TxHash, TxpoolContent, TxpoolInspect, TxpoolStatus, H256, U256, U64, + Address, Block, BlockId, BlockNumber, BlockTrace, Bytes, EIP1186ProofResponse, FeeHistory, + Filter, Log, NameOrAddress, Selector, Signature, Trace, TraceFilter, TraceType, + Transaction, TransactionReceipt, TxHash, TxpoolContent, TxpoolInspect, TxpoolStatus, H256, + U256, U64, }, utils, };