fetch_erc20_balances_multicall_v6
Documentation for eth_defi.balances.fetch_erc20_balances_multicall_v6 function.
- fetch_erc20_balances_multicall_v6(web3, address, tokens, block_identifier, decimalise=True, chunk_size=50, token_cache=LRUCache({}, maxsize=1024, currsize=0), gas_limit=10000000, raise_on_error=True, max_workers=1)
Read balance of multiple ERC-20 tokens on an address once using multicall.
Fast, batches multiple calls on one JSON-RPC request
Using internal multicall module
eth_defi.event_reader.multicall_batcher
Example:
def test_fetch_erc20_balances_multicall(web3): tokens = { "0x6921B130D297cc43754afba22e5EAc0FBf8Db75b", # DogInMe "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913", # USDC on Base } # Velvet vault address = "0x9d247fbc63e4d50b257be939a264d68758b43d04" block_number = get_almost_latest_block_number(web3) balances = fetch_erc20_balances_multicall( web3, address, tokens, block_identifier=block_number, ) existing_dogmein_balance = balances["0x6921B130D297cc43754afba22e5EAc0FBf8Db75b"] assert existing_dogmein_balance > 0 existing_usdc_balance = balances["0x833589fcd6edb6e08f4c7c32d4f71b54bda02913"] assert existing_usdc_balance > Decimal(1.0)
- Parameters
address (Union[eth_typing.evm.HexAddress, str]) – Our wallet address of which balances we query
tokens (list[Union[eth_typing.evm.HexAddress, str]] | set[Union[eth_typing.evm.HexAddress, str]]) – List of ERC-20 addresses.
block_identifier –
Fetch at specific height.
Must be given for a multicall.
chunk_size – How many ERC-20 addresses feed to multicall once
gas_limit – Gas limit of the multicall request
decimalise –
If
True, convert output amounts to humanised format in PythonDecimal.Use cached
TokenDetailsdata.token_cache (cachetools.Cache | None) – Cache ERC-20 decimal data.
max_workers – Use this many worker processes
raise_on_error – See BalanceFetchFailed.
web3 (web3.main.Web3) –
- Raises
balanceOf() call failed.
When you give a non-ERC-20 contract as a token.
- Returns
Map of token address -> balance.
If ERC-20 call failed, balance is set to None if raise_on_error is False.
- Return type
dict[Union[eth_typing.evm.HexAddress, str], decimal.Decimal]