Struct zksync_web3_rs::etherscan::Client
pub struct Client { /* private fields */ }Expand description
The Etherscan.io API client.
Implementations§
§impl Client
impl Client
pub async fn get_ether_balance_single(
&self,
address: &H160,
tag: Option<Tag>
) -> impl Future<Output = Result<AccountBalance, EtherscanError>>
pub async fn get_ether_balance_single( &self, address: &H160, tag: Option<Tag> ) -> impl Future<Output = 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?;pub async fn get_ether_balance_multi(
&self,
addresses: &[H160],
tag: Option<Tag>
) -> impl Future<Output = Result<Vec<AccountBalance, Global>, EtherscanError>>
pub async fn get_ether_balance_multi( &self, addresses: &[H160], tag: Option<Tag> ) -> impl Future<Output = Result<Vec<AccountBalance, Global>, 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());pub async fn get_transactions(
&self,
address: &H160,
params: Option<TxListParams>
) -> impl Future<Output = Result<Vec<NormalTransaction, Global>, EtherscanError>>
pub async fn get_transactions( &self, address: &H160, params: Option<TxListParams> ) -> impl Future<Output = Result<Vec<NormalTransaction, Global>, 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?;pub async fn get_internal_transactions(
&self,
tx_query_option: InternalTxQueryOption,
params: Option<TxListParams>
) -> impl Future<Output = Result<Vec<InternalTransaction, Global>, EtherscanError>>
pub async fn get_internal_transactions( &self, tx_query_option: InternalTxQueryOption, params: Option<TxListParams> ) -> impl Future<Output = Result<Vec<InternalTransaction, Global>, 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?;pub async fn get_erc20_token_transfer_events(
&self,
event_query_option: TokenQueryOption,
params: Option<TxListParams>
) -> impl Future<Output = Result<Vec<ERC20TokenTransferEvent, Global>, EtherscanError>>
pub async fn get_erc20_token_transfer_events( &self, event_query_option: TokenQueryOption, params: Option<TxListParams> ) -> impl Future<Output = Result<Vec<ERC20TokenTransferEvent, Global>, 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?;pub async fn get_erc721_token_transfer_events(
&self,
event_query_option: TokenQueryOption,
params: Option<TxListParams>
) -> impl Future<Output = Result<Vec<ERC721TokenTransferEvent, Global>, EtherscanError>>
pub async fn get_erc721_token_transfer_events( &self, event_query_option: TokenQueryOption, params: Option<TxListParams> ) -> impl Future<Output = Result<Vec<ERC721TokenTransferEvent, Global>, 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?;pub async fn get_erc1155_token_transfer_events(
&self,
event_query_option: TokenQueryOption,
params: Option<TxListParams>
) -> impl Future<Output = Result<Vec<ERC1155TokenTransferEvent, Global>, EtherscanError>>
pub async fn get_erc1155_token_transfer_events( &self, event_query_option: TokenQueryOption, params: Option<TxListParams> ) -> impl Future<Output = Result<Vec<ERC1155TokenTransferEvent, Global>, 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?;pub async fn get_mined_blocks(
&self,
address: &H160,
block_type: Option<BlockType>,
page_and_offset: Option<(u64, u64)>
) -> impl Future<Output = Result<Vec<MinedBlock, Global>, EtherscanError>>
pub async fn get_mined_blocks( &self, address: &H160, block_type: Option<BlockType>, page_and_offset: Option<(u64, u64)> ) -> impl Future<Output = Result<Vec<MinedBlock, Global>, 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?;§impl Client
impl Client
pub async fn get_block_by_timestamp(
&self,
timestamp: u64,
closest: &str
) -> impl Future<Output = Result<BlockNumberByTimestamp, EtherscanError>>
pub async fn get_block_by_timestamp( &self, timestamp: u64, closest: &str ) -> impl Future<Output = 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");§impl Client
impl Client
pub async fn contract_abi(
&self,
address: H160
) -> impl Future<Output = Result<Contract, EtherscanError>>
pub async fn contract_abi( &self, address: H160 ) -> impl Future<Output = Result<Contract, EtherscanError>>
Fetches a verified contract’s ABI.
Example
let address = "0xBB9bc244D798123fDe783fCc1C72d3Bb8C189413".parse()?;
let abi = client.contract_abi(address).await?;pub async fn contract_source_code(
&self,
address: H160
) -> impl Future<Output = Result<ContractMetadata, EtherscanError>>
pub async fn contract_source_code( &self, address: H160 ) -> impl Future<Output = 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");§impl Client
impl Client
pub async fn gas_estimate(
&self,
gas_price: U256
) -> impl Future<Output = Result<u32, EtherscanError>>
pub async fn gas_estimate( &self, gas_price: U256 ) -> impl Future<Output = Result<u32, EtherscanError>>
Returns the estimated time, in seconds, for a transaction to be confirmed on the blockchain for the specified gas price
pub async fn gas_oracle(
&self
) -> impl Future<Output = Result<GasOracle, EtherscanError>>
pub async fn gas_oracle( &self ) -> impl Future<Output = 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
§impl Client
impl Client
§impl Client
impl Client
pub async fn submit_contract_verification(
&self,
contract: &VerifyContract
) -> impl Future<Output = Result<Response<String>, EtherscanError>>
pub async fn submit_contract_verification( &self, contract: &VerifyContract ) -> impl Future<Output = Result<Response<String>, EtherscanError>>
Submit Source Code for Verification
pub async fn check_contract_verification_status(
&self,
guid: impl AsRef<str>
) -> impl Future<Output = Result<Response<String>, EtherscanError>>
pub async fn check_contract_verification_status( &self, guid: impl AsRef<str> ) -> impl Future<Output = Result<Response<String>, EtherscanError>>
Check Source Code Verification Status with receipt received from
[Self::submit_contract_verification]
pub async fn submit_proxy_contract_verification(
&self,
contract: &VerifyProxyContract
) -> impl Future<Output = Result<Response<String>, EtherscanError>>
pub async fn submit_proxy_contract_verification( &self, contract: &VerifyProxyContract ) -> impl Future<Output = Result<Response<String>, EtherscanError>>
Submit Proxy Contract for Verification
§impl Client
impl Client
pub 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();pub fn new_cached(
chain: Chain,
api_key: impl Into<String>,
cache_root: Option<PathBuf>,
cache_ttl: Duration
) -> Result<Client, EtherscanError>
pub fn new_cached( chain: Chain, api_key: impl Into<String>, cache_root: Option<PathBuf>, cache_ttl: Duration ) -> Result<Client, EtherscanError>
Creates a new instance that caches etherscan requests
pub fn new(
chain: Chain,
api_key: impl Into<String>
) -> Result<Client, EtherscanError>
pub fn new( chain: Chain, api_key: impl Into<String> ) -> Result<Client, EtherscanError>
Create a new client with the correct endpoints based on the chain and provided API key
pub fn new_from_env(chain: Chain) -> Result<Client, EtherscanError>
pub fn new_from_env(chain: Chain) -> Result<Client, EtherscanError>
Create a new client with the correct endpoints based on the chain and API key
from the default environment variable defined in Chain.
pub fn new_from_opt_env(chain: Chain) -> Result<Client, EtherscanError>
pub fn new_from_opt_env(chain: Chain) -> Result<Client, 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.
pub fn set_cache(
&mut self,
root: impl Into<PathBuf>,
ttl: Duration
) -> &mut Client
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
pub fn etherscan_api_url(&self) -> &Url
pub fn etherscan_url(&self) -> &Url
pub fn address_url(&self, address: H160) -> String
pub fn address_url(&self, address: H160) -> String
Return the URL for the given address
pub 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 !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
§impl<T> Conv for T
impl<T> Conv for T
§impl<T> FmtForward for T
impl<T> FmtForward for T
§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where Self: Binary,
self to use its Binary implementation when Debug-formatted.§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where Self: Display,
self to use its Display implementation when
Debug-formatted.§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where Self: Octal,
self to use its Octal implementation when Debug-formatted.§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.§fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
fn fmt_list(self) -> FmtList<Self>where &'a Self: for<'a> IntoIterator,
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> 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>
§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere Self: Sized,
§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere R: 'a,
self and passes that borrow into the pipe function. Read more§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere R: 'a,
self and passes that borrow into the pipe function. Read more§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere
Self: Borrow<B>,
B: 'a + ?Sized,
R: 'a,
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere Self: Borrow<B>, B: 'a + ?Sized, R: 'a,
§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R
) -> Rwhere
Self: BorrowMut<B>,
B: 'a + ?Sized,
R: 'a,
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R ) -> Rwhere Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,
§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere
Self: AsRef<U>,
U: 'a + ?Sized,
R: 'a,
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere Self: AsRef<U>, U: 'a + ?Sized, R: 'a,
self, then passes self.as_ref() into the pipe function.§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere
Self: AsMut<U>,
U: 'a + ?Sized,
R: 'a,
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere Self: AsMut<U>, U: 'a + ?Sized, R: 'a,
self, then passes self.as_mut() into the pipe
function.§impl<T> Tap for T
impl<T> Tap for T
§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere
Self: Borrow<B>,
B: ?Sized,
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere Self: Borrow<B>, B: ?Sized,
Borrow<B> of a value. Read more§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere
Self: BorrowMut<B>,
B: ?Sized,
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere Self: BorrowMut<B>, B: ?Sized,
BorrowMut<B> of a value. Read more§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere
Self: AsRef<R>,
R: ?Sized,
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere Self: AsRef<R>, R: ?Sized,
AsRef<R> view of a value. Read more§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere
Self: AsMut<R>,
R: ?Sized,
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere Self: AsMut<R>, R: ?Sized,
AsMut<R> view of a value. Read more§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere
Self: Deref<Target = T>,
T: ?Sized,
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere Self: Deref<Target = T>, T: ?Sized,
Deref::Target of a value. Read more§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere
Self: DerefMut<Target = T> + Deref,
T: ?Sized,
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere Self: DerefMut<Target = T> + Deref, T: ?Sized,
Deref::Target of a value. Read more§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere
Self: Borrow<B>,
B: ?Sized,
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere Self: Borrow<B>, B: ?Sized,
.tap_borrow() only in debug builds, and is erased in release
builds.§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere
Self: BorrowMut<B>,
B: ?Sized,
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere Self: BorrowMut<B>, B: ?Sized,
.tap_borrow_mut() only in debug builds, and is erased in release
builds.§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere
Self: AsRef<R>,
R: ?Sized,
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere Self: AsRef<R>, R: ?Sized,
.tap_ref() only in debug builds, and is erased in release
builds.§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere
Self: AsMut<R>,
R: ?Sized,
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere Self: AsMut<R>, R: ?Sized,
.tap_ref_mut() only in debug builds, and is erased in release
builds.