Struct Etherscan

Source
pub struct Etherscan { /* private fields */ }
Expand description

A client over HTTP for the Etherscan gas tracker API that implements the GasOracle trait

Implementations§

Source§

impl Etherscan

Source

pub fn new(client: Client) -> Etherscan

Creates a new Etherscan gas price oracle.

Source

pub fn category(self, gas_category: GasCategory) -> Etherscan

Sets the gas price category to be used when fetching the gas price.

Source

pub async fn query(&self) -> Result<GasOracle, GasOracleError>

Perform a request to the gas price API and deserialize the response.

Methods from Deref<Target = Client>§

Source

pub async fn get_ether_balance_single( &self, address: &H160, tag: Option<Tag>, ) -> Result<AccountBalance, EtherscanError>

Returns the Ether balance of a given address.

§Examples
let address = "0x58eB28A67731c570Ef827C365c89B5751F9E6b0a".parse()?;
let balance = client.get_ether_balance_single(&address, None).await?;
Source

pub async fn get_ether_balance_multi( &self, addresses: &[H160], tag: Option<Tag>, ) -> Result<Vec<AccountBalance>, EtherscanError>

Returns the balance of the accounts from a list of addresses.

§Examples
let addresses = [
    "0x3E3c00494d0b306a0739E480DBB5DB91FFb5d4CB".parse::<Address>()?,
    "0x7e9996ef050a9Fa7A01248e63271F69086aaFc9D".parse::<Address>()?,
];
let balances = client.get_ether_balance_multi(&addresses, None).await?;
assert_eq!(addresses.len(), balances.len());
Source

pub async fn get_transactions( &self, address: &H160, params: Option<TxListParams>, ) -> Result<Vec<NormalTransaction>, EtherscanError>

Returns the list of transactions performed by an address, with optional pagination.

§Examples
let address = "0x1f162cf730564efD2Bb96eb27486A2801d76AFB6".parse()?;
let transactions = client.get_transactions(&address, None).await?;
Source

pub async fn get_internal_transactions( &self, tx_query_option: InternalTxQueryOption, params: Option<TxListParams>, ) -> Result<Vec<InternalTransaction>, EtherscanError>

Returns the list of internal transactions performed by an address or within a transaction, with optional pagination.

§Examples
use ethers_etherscan::account::InternalTxQueryOption;

let address = "0x2c1ba59d6f58433fb1eaee7d20b26ed83bda51a3".parse()?;
let query = InternalTxQueryOption::ByAddress(address);
let internal_transactions = client.get_internal_transactions(query, None).await?;
Source

pub async fn get_erc20_token_transfer_events( &self, event_query_option: TokenQueryOption, params: Option<TxListParams>, ) -> Result<Vec<ERC20TokenTransferEvent>, EtherscanError>

Returns the list of ERC-20 tokens transferred by an address, with optional filtering by token contract.

§Examples
use ethers_etherscan::account::TokenQueryOption;

let address = "0x4e83362442b8d1bec281594cea3050c8eb01311c".parse()?;
let query = TokenQueryOption::ByAddress(address);
let events = client.get_erc20_token_transfer_events(query, None).await?;
Source

pub async fn get_erc721_token_transfer_events( &self, event_query_option: TokenQueryOption, params: Option<TxListParams>, ) -> Result<Vec<ERC721TokenTransferEvent>, EtherscanError>

Returns the list of ERC-721 ( NFT ) tokens transferred by an address, with optional filtering by token contract.

§Examples
use ethers_etherscan::account::TokenQueryOption;

let contract = "0x06012c8cf97bead5deae237070f9587f8e7a266d".parse()?;
let query = TokenQueryOption::ByContract(contract);
let events = client.get_erc721_token_transfer_events(query, None).await?;
Source

pub async fn get_erc1155_token_transfer_events( &self, event_query_option: TokenQueryOption, params: Option<TxListParams>, ) -> Result<Vec<ERC1155TokenTransferEvent>, EtherscanError>

Returns the list of ERC-1155 ( NFT ) tokens transferred by an address, with optional filtering by token contract.

§Examples
use ethers_etherscan::account::TokenQueryOption;

let address = "0x216CD350a4044e7016f14936663e2880Dd2A39d7".parse()?;
let contract = "0x495f947276749ce646f68ac8c248420045cb7b5e".parse()?;
let query = TokenQueryOption::ByAddressAndContract(address, contract);
let events = client.get_erc1155_token_transfer_events(query, None).await?;
Source

pub async fn get_mined_blocks( &self, address: &H160, block_type: Option<BlockType>, page_and_offset: Option<(u64, u64)>, ) -> Result<Vec<MinedBlock>, EtherscanError>

Returns the list of blocks mined by an address.

§Examples
let address = "0x9dd134d14d1e65f84b706d6f205cd5b1cd03a46b".parse()?;
let blocks = client.get_mined_blocks(&address, None, None).await?;
Source

pub async fn get_beacon_withdrawal_transactions( &self, address: &H160, params: Option<TxListParams>, ) -> Result<Vec<BeaconWithdrawalTransaction>, EtherscanError>

Returns the list of beacon withdrawal transactions performed by an address, with optional pagination.

§Examples
let address = "0xB9D7934878B5FB9610B3fE8A5e441e8fad7E293f".parse()?;
let beacon_withdrawal_transactions = client.get_beacon_withdrawal_transactions(&address, None).await?;
Source

pub async fn get_block_by_timestamp( &self, timestamp: u64, closest: &str, ) -> Result<BlockNumberByTimestamp, EtherscanError>

Returns either (1) the oldest block since a particular timestamp occurred or (2) the newest block that occurred prior to that timestamp

§Examples
// The newest block that occurred prior to 1 January 2020
let block_number_before = client.get_block_by_timestamp(1577836800, "before");
// The oldest block that occurred after 1 January 2020
let block_number_after = client.get_block_by_timestamp(1577836800, "after");
Source

pub async fn contract_abi( &self, address: H160, ) -> Result<Contract, EtherscanError>

Fetches a verified contract’s ABI.

§Example
let address = "0xBB9bc244D798123fDe783fCc1C72d3Bb8C189413".parse()?;
let abi = client.contract_abi(address).await?;
Source

pub async fn contract_source_code( &self, address: H160, ) -> Result<ContractMetadata, EtherscanError>

Fetches a contract’s verified source code and its metadata.

§Example
let address = "0xBB9bc244D798123fDe783fCc1C72d3Bb8C189413".parse()?;
let metadata = client.contract_source_code(address).await?;
assert_eq!(metadata.items[0].contract_name, "DAO");
Source

pub async fn gas_estimate(&self, gas_price: U256) -> Result<u32, EtherscanError>

Returns the estimated time, in seconds, for a transaction to be confirmed on the blockchain for the specified gas price

Source

pub async fn gas_oracle(&self) -> Result<GasOracle, EtherscanError>

Returns the current Safe, Proposed and Fast gas prices Post EIP-1559 changes:

  • Safe/Proposed/Fast gas price recommendations are now modeled as Priority Fees.
  • New field suggestBaseFee, the baseFee of the next pending block
  • New field gasUsedRatio, to estimate how busy the network is
Source

pub async fn eth_supply(&self) -> Result<u128, EtherscanError>

Returns the current amount of Ether in circulation excluding ETH2 Staking rewards and EIP1559 burnt fees.

Source

pub async fn eth_supply2(&self) -> Result<EthSupply2, EtherscanError>

Returns the current amount of Ether in circulation, ETH2 Staking rewards, EIP1559 burnt fees, and total withdrawn ETH from the beacon chain.

Source

pub async fn eth_price(&self) -> Result<EthPrice, EtherscanError>

Returns the latest price of 1 ETH.

Source

pub async fn node_count(&self) -> Result<NodeCount, EtherscanError>

Returns the total number of discoverable Ethereum nodes.

Source

pub async fn check_contract_execution_status( &self, tx_hash: impl AsRef<str>, ) -> Result<(), EtherscanError>

Returns the status of a contract execution

Source

pub async fn check_transaction_receipt_status( &self, tx_hash: impl AsRef<str>, ) -> Result<(), EtherscanError>

Returns the status of a transaction execution: false for failed and true for successful

Source

pub async fn submit_contract_verification( &self, contract: &VerifyContract, ) -> Result<Response<String>, EtherscanError>

Submit Source Code for Verification

Source

pub async fn check_contract_verification_status( &self, guid: impl AsRef<str>, ) -> Result<Response<String>, EtherscanError>

Check Source Code Verification Status with receipt received from [Self::submit_contract_verification]

Source

pub async fn submit_proxy_contract_verification( &self, contract: &VerifyProxyContract, ) -> Result<Response<String>, EtherscanError>

Submit Proxy Contract for Verification

Source

pub async fn check_proxy_contract_verification_status( &self, guid: impl AsRef<str>, ) -> Result<Response<String>, EtherscanError>

Check Proxy Contract Verification Status with receipt received from [Self::submit_proxy_contract_verification]

Source

pub fn set_cache( &mut self, root: impl Into<PathBuf>, ttl: Duration, ) -> &mut Client

Sets the root to the cache dir and the ttl to use

Source

pub fn etherscan_api_url(&self) -> &Url

Source

pub fn etherscan_url(&self) -> &Url

Source

pub fn block_url(&self, block: u64) -> String

Return the URL for the given block number

Source

pub fn address_url(&self, address: H160) -> String

Return the URL for the given address

Source

pub fn transaction_url(&self, tx_hash: H256) -> String

Return the URL for the given transaction hash

Source

pub fn token_url(&self, token_hash: H160) -> String

Return the URL for the given token hash

Trait Implementations§

Source§

impl Clone for Etherscan

Source§

fn clone(&self) -> Etherscan

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Etherscan

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
Source§

impl DerefMut for Etherscan

Source§

fn deref_mut(&mut self) -> &mut <Etherscan as Deref>::Target

Mutably dereferences the value.
Source§

impl GasOracle for Etherscan

Source§

fn fetch<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = Result<U256, GasOracleError>> + Send + 'async_trait>>
where 'life0: 'async_trait, Etherscan: 'async_trait,

Makes an asynchronous HTTP query to the underlying GasOracle to fetch the current gas price estimate. Read more
Source§

fn estimate_eip1559_fees<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = Result<(U256, U256), GasOracleError>> + Send + 'async_trait>>
where 'life0: 'async_trait, Etherscan: 'async_trait,

Makes an asynchronous HTTP query to the underlying GasOracle to fetch the current max gas fee and priority gas fee estimates. Read more
Source§

impl Deref for Etherscan

Source§

type Target = Client

The resulting type after dereferencing.
Source§

fn deref(&self) -> &<Etherscan as Deref>::Target

Dereferences the value.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> Conv for T

Source§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
Source§

impl<T> FmtForward for T

Source§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
Source§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
Source§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
Source§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
Source§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
Source§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
Source§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
Source§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
Source§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Pipe for T
where T: ?Sized,

Source§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
Source§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
Source§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
Source§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
Source§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe function.
Source§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
Source§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
Source§

impl<P, T> Receiver for P
where P: Deref<Target = T> + ?Sized, T: ?Sized,

Source§

type Target = T

🔬This is a nightly-only experimental API. (arbitrary_self_types)
The target type on which the method may be called.
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> Tap for T

Source§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
Source§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
Source§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
Source§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
Source§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
Source§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
Source§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
Source§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
Source§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
Source§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> TryConv for T

Source§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> ErasedDestructor for T
where T: 'static,

Source§

impl<T> JsonSchemaMaybe for T