pub struct Client { /* private fields */ }
Expand description
The Etherscan.io API client.
Implementations§
Source§impl Client
impl Client
Sourcepub async fn get_ether_balance_single(
&self,
address: &Address,
tag: Option<Tag>,
) -> Result<AccountBalance, EtherscanError>
pub async fn get_ether_balance_single( &self, address: &Address, 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?;
Sourcepub async fn get_ether_balance_multi(
&self,
addresses: &[Address],
tag: Option<Tag>,
) -> Result<Vec<AccountBalance>, EtherscanError>
pub async fn get_ether_balance_multi( &self, addresses: &[Address], 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());
Sourcepub async fn get_transactions(
&self,
address: &Address,
params: Option<TxListParams>,
) -> Result<Vec<NormalTransaction>, EtherscanError>
pub async fn get_transactions( &self, address: &Address, 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?;
Sourcepub async fn get_internal_transactions(
&self,
tx_query_option: InternalTxQueryOption,
params: Option<TxListParams>,
) -> Result<Vec<InternalTransaction>, EtherscanError>
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?;
Sourcepub async fn get_erc20_token_transfer_events(
&self,
event_query_option: TokenQueryOption,
params: Option<TxListParams>,
) -> Result<Vec<ERC20TokenTransferEvent>, EtherscanError>
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?;
Sourcepub async fn get_erc721_token_transfer_events(
&self,
event_query_option: TokenQueryOption,
params: Option<TxListParams>,
) -> Result<Vec<ERC721TokenTransferEvent>, EtherscanError>
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?;
Sourcepub async fn get_erc1155_token_transfer_events(
&self,
event_query_option: TokenQueryOption,
params: Option<TxListParams>,
) -> Result<Vec<ERC1155TokenTransferEvent>, EtherscanError>
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?;
Sourcepub async fn get_mined_blocks(
&self,
address: &Address,
block_type: Option<BlockType>,
page_and_offset: Option<(u64, u64)>,
) -> Result<Vec<MinedBlock>, EtherscanError>
pub async fn get_mined_blocks( &self, address: &Address, 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?;
Sourcepub async fn get_beacon_withdrawal_transactions(
&self,
address: &Address,
params: Option<TxListParams>,
) -> Result<Vec<BeaconWithdrawalTransaction>, EtherscanError>
pub async fn get_beacon_withdrawal_transactions( &self, address: &Address, 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§impl Client
impl Client
Sourcepub async fn get_block_by_timestamp(
&self,
timestamp: u64,
closest: &str,
) -> Result<BlockNumberByTimestamp, EtherscanError>
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§impl Client
impl Client
Sourcepub async fn contract_abi(
&self,
address: Address,
) -> Result<Abi, EtherscanError>
pub async fn contract_abi( &self, address: Address, ) -> Result<Abi, EtherscanError>
Fetches a verified contract’s ABI.
§Example
let address = "0xBB9bc244D798123fDe783fCc1C72d3Bb8C189413".parse()?;
let abi = client.contract_abi(address).await?;
Sourcepub async fn contract_source_code(
&self,
address: Address,
) -> Result<ContractMetadata, EtherscanError>
pub async fn contract_source_code( &self, address: Address, ) -> 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§impl Client
impl Client
Sourcepub async fn gas_estimate(&self, gas_price: U256) -> Result<u32, EtherscanError>
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
Sourcepub async fn gas_oracle(&self) -> Result<GasOracle, EtherscanError>
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§impl Client
impl Client
Sourcepub async fn eth_supply(&self) -> Result<u128, EtherscanError>
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.
Sourcepub async fn eth_supply2(&self) -> Result<EthSupply2, EtherscanError>
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.
Sourcepub async fn eth_price(&self) -> Result<EthPrice, EtherscanError>
pub async fn eth_price(&self) -> Result<EthPrice, EtherscanError>
Returns the latest price of 1 ETH.
Sourcepub async fn node_count(&self) -> Result<NodeCount, EtherscanError>
pub async fn node_count(&self) -> Result<NodeCount, EtherscanError>
Returns the total number of discoverable Ethereum nodes.
Source§impl Client
impl Client
Sourcepub async fn check_contract_execution_status(
&self,
tx_hash: impl AsRef<str>,
) -> Result<(), EtherscanError>
pub async fn check_contract_execution_status( &self, tx_hash: impl AsRef<str>, ) -> Result<(), EtherscanError>
Returns the status of a contract execution
Sourcepub async fn check_transaction_receipt_status(
&self,
tx_hash: impl AsRef<str>,
) -> Result<(), EtherscanError>
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§impl Client
impl Client
Sourcepub async fn submit_contract_verification(
&self,
contract: &VerifyContract,
) -> Result<Response<String>, EtherscanError>
pub async fn submit_contract_verification( &self, contract: &VerifyContract, ) -> Result<Response<String>, EtherscanError>
Submit Source Code for Verification
Sourcepub async fn check_contract_verification_status(
&self,
guid: impl AsRef<str>,
) -> Result<Response<String>, EtherscanError>
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]
Sourcepub async fn submit_proxy_contract_verification(
&self,
contract: &VerifyProxyContract,
) -> Result<Response<String>, EtherscanError>
pub async fn submit_proxy_contract_verification( &self, contract: &VerifyProxyContract, ) -> Result<Response<String>, EtherscanError>
Submit Proxy Contract for Verification
Sourcepub async fn check_proxy_contract_verification_status(
&self,
guid: impl AsRef<str>,
) -> Result<Response<String>, EtherscanError>
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§impl Client
impl Client
Sourcepub fn builder() -> ClientBuilder
pub fn builder() -> ClientBuilder
Creates a ClientBuilder
to configure a Client
.
This is the same as ClientBuilder::default()
.
§Example
use ethers_core::types::Chain;
use ethers_etherscan::Client;
let client = Client::builder().with_api_key("<API KEY>").chain(Chain::Mainnet).unwrap().build().unwrap();
Sourcepub fn new_cached(
chain: Chain,
api_key: impl Into<String>,
cache_root: Option<PathBuf>,
cache_ttl: Duration,
) -> Result<Self, EtherscanError>
pub fn new_cached( chain: Chain, api_key: impl Into<String>, cache_root: Option<PathBuf>, cache_ttl: Duration, ) -> Result<Self, EtherscanError>
Creates a new instance that caches etherscan requests
Sourcepub fn new(
chain: Chain,
api_key: impl Into<String>,
) -> Result<Self, EtherscanError>
pub fn new( chain: Chain, api_key: impl Into<String>, ) -> Result<Self, EtherscanError>
Create a new client with the correct endpoints based on the chain and provided API key
Sourcepub fn new_from_env(chain: Chain) -> Result<Self, EtherscanError>
pub fn new_from_env(chain: Chain) -> Result<Self, EtherscanError>
Create a new client with the correct endpoints based on the chain and API key
from the default environment variable defined in Chain
.
Sourcepub fn new_from_opt_env(chain: Chain) -> Result<Self, EtherscanError>
pub fn new_from_opt_env(chain: Chain) -> Result<Self, EtherscanError>
Create a new client with the correct endpoints based on the chain and API key
from the default environment variable defined in Chain
.
If the environment variable is not set, create a new client without it.
Sourcepub fn set_cache(
&mut self,
root: impl Into<PathBuf>,
ttl: Duration,
) -> &mut Self
pub fn set_cache( &mut self, root: impl Into<PathBuf>, ttl: Duration, ) -> &mut Self
Sets the root to the cache dir and the ttl to use
pub fn etherscan_api_url(&self) -> &Url
pub fn etherscan_url(&self) -> &Url
Sourcepub fn address_url(&self, address: Address) -> String
pub fn address_url(&self, address: Address) -> String
Return the URL for the given address
Sourcepub fn transaction_url(&self, tx_hash: H256) -> String
pub fn transaction_url(&self, tx_hash: H256) -> String
Return the URL for the given transaction hash
Trait Implementations§
Auto Trait Implementations§
impl Freeze for Client
impl !RefUnwindSafe for Client
impl Send for Client
impl Sync for Client
impl Unpin for Client
impl !UnwindSafe for Client
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more