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 foundry_block_explorers::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 foundry_block_explorers::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 foundry_block_explorers::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 foundry_block_explorers::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?;
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<JsonAbi, EtherscanError>
pub async fn contract_abi( &self, address: Address, ) -> Result<JsonAbi, 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");
Sourcepub async fn contract_creation_data(
&self,
address: Address,
) -> Result<ContractCreationData, EtherscanError>
pub async fn contract_creation_data( &self, address: Address, ) -> Result<ContractCreationData, EtherscanError>
Fetches a contract’s creation transaction hash and deployer address.
§Example
let address = "0xBB9bc244D798123fDe783fCc1C72d3Bb8C189413".parse()?;
let creation_data = client.contract_creation_data(address).await?;
let deployment_tx = creation_data.transaction_hash;
let deployer = creation_data.contract_creator;
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 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 alloy_chains::Chain;
use foundry_block_explorers::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_with_api_version(
chain: Chain,
api_key: impl Into<String>,
api_version: EtherscanApiVersion,
) -> Result<Self, EtherscanError>
pub fn new_with_api_version( chain: Chain, api_key: impl Into<String>, api_version: EtherscanApiVersion, ) -> Result<Self, EtherscanError>
Create a new client for the given EtherscanApiVersion
.
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 endpoint with the chain
Sourcepub fn new_v1_from_env(chain: Chain) -> Result<Self, EtherscanError>
pub fn new_v1_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
Sourcepub fn etherscan_api_version(&self) -> &EtherscanApiVersion
pub fn etherscan_api_version(&self) -> &EtherscanApiVersion
Returns the configured etherscan api version.
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: B256) -> String
pub fn transaction_url(&self, tx_hash: B256) -> 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, R> CollectAndApply<T, R> for T
impl<T, R> CollectAndApply<T, R> for T
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 moreSource§impl<T> Paint for Twhere
T: ?Sized,
impl<T> Paint for Twhere
T: ?Sized,
Source§fn fg(&self, value: Color) -> Painted<&T>
fn fg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self
with the foreground set to
value
.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like red()
and
green()
, which have the same functionality but are
pithier.
§Example
Set foreground color to white using fg()
:
use yansi::{Paint, Color};
painted.fg(Color::White);
Set foreground color to white using white()
.
use yansi::Paint;
painted.white();
Source§fn bright_black(&self) -> Painted<&T>
fn bright_black(&self) -> Painted<&T>
Source§fn bright_red(&self) -> Painted<&T>
fn bright_red(&self) -> Painted<&T>
Source§fn bright_green(&self) -> Painted<&T>
fn bright_green(&self) -> Painted<&T>
Source§fn bright_yellow(&self) -> Painted<&T>
fn bright_yellow(&self) -> Painted<&T>
Source§fn bright_blue(&self) -> Painted<&T>
fn bright_blue(&self) -> Painted<&T>
Source§fn bright_magenta(&self) -> Painted<&T>
fn bright_magenta(&self) -> Painted<&T>
Source§fn bright_cyan(&self) -> Painted<&T>
fn bright_cyan(&self) -> Painted<&T>
Source§fn bright_white(&self) -> Painted<&T>
fn bright_white(&self) -> Painted<&T>
Source§fn bg(&self, value: Color) -> Painted<&T>
fn bg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self
with the background set to
value
.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like on_red()
and
on_green()
, which have the same functionality but
are pithier.
§Example
Set background color to red using fg()
:
use yansi::{Paint, Color};
painted.bg(Color::Red);
Set background color to red using on_red()
.
use yansi::Paint;
painted.on_red();
Source§fn on_primary(&self) -> Painted<&T>
fn on_primary(&self) -> Painted<&T>
Source§fn on_magenta(&self) -> Painted<&T>
fn on_magenta(&self) -> Painted<&T>
Source§fn on_bright_black(&self) -> Painted<&T>
fn on_bright_black(&self) -> Painted<&T>
Source§fn on_bright_red(&self) -> Painted<&T>
fn on_bright_red(&self) -> Painted<&T>
Source§fn on_bright_green(&self) -> Painted<&T>
fn on_bright_green(&self) -> Painted<&T>
Source§fn on_bright_yellow(&self) -> Painted<&T>
fn on_bright_yellow(&self) -> Painted<&T>
Source§fn on_bright_blue(&self) -> Painted<&T>
fn on_bright_blue(&self) -> Painted<&T>
Source§fn on_bright_magenta(&self) -> Painted<&T>
fn on_bright_magenta(&self) -> Painted<&T>
Source§fn on_bright_cyan(&self) -> Painted<&T>
fn on_bright_cyan(&self) -> Painted<&T>
Source§fn on_bright_white(&self) -> Painted<&T>
fn on_bright_white(&self) -> Painted<&T>
Source§fn attr(&self, value: Attribute) -> Painted<&T>
fn attr(&self, value: Attribute) -> Painted<&T>
Enables the styling Attribute
value
.
This method should be used rarely. Instead, prefer to use
attribute-specific builder methods like bold()
and
underline()
, which have the same functionality
but are pithier.
§Example
Make text bold using attr()
:
use yansi::{Paint, Attribute};
painted.attr(Attribute::Bold);
Make text bold using using bold()
.
use yansi::Paint;
painted.bold();
Source§fn rapid_blink(&self) -> Painted<&T>
fn rapid_blink(&self) -> Painted<&T>
Source§fn quirk(&self, value: Quirk) -> Painted<&T>
fn quirk(&self, value: Quirk) -> Painted<&T>
Enables the yansi
Quirk
value
.
This method should be used rarely. Instead, prefer to use quirk-specific
builder methods like mask()
and
wrap()
, which have the same functionality but are
pithier.
§Example
Enable wrapping using .quirk()
:
use yansi::{Paint, Quirk};
painted.quirk(Quirk::Wrap);
Enable wrapping using wrap()
.
use yansi::Paint;
painted.wrap();
Source§fn clear(&self) -> Painted<&T>
👎Deprecated since 1.0.1: renamed to resetting()
due to conflicts with Vec::clear()
.
The clear()
method will be removed in a future release.
fn clear(&self) -> Painted<&T>
resetting()
due to conflicts with Vec::clear()
.
The clear()
method will be removed in a future release.Source§fn whenever(&self, value: Condition) -> Painted<&T>
fn whenever(&self, value: Condition) -> Painted<&T>
Conditionally enable styling based on whether the Condition
value
applies. Replaces any previous condition.
See the crate level docs for more details.
§Example
Enable styling painted
only when both stdout
and stderr
are TTYs:
use yansi::{Paint, Condition};
painted.red().on_yellow().whenever(Condition::STDOUTERR_ARE_TTY);