Web3 通过钱包地址获取所有代币

Web3 Get All Tokens by Wallet Address

我正在尝试拉取钱包地址持有的代币合约列表,这与 bscscan 的工作方式类似,只是以编程方式进行。 bscscan.com/apis没有端点,web3好像只报告ETH余额。

这是有可能实现的,因为 bscscan 报告了列表并且许多标记跟踪器(例如 farmfol.io)似乎也提取了该信息。我只是没有找到正确的方法。感谢任何帮助!

ERC-20(和类似 ERC-20,例如 TRC-20, BEP-20 等)每个地址的代币余额存储在代币的 合约中

区块链浏览器扫描每笔交易以查找 Transfer() 事件,如果发射器是代币合约,他们会更新其单独数据库中的代币余额。每个地址(来自这个单独的数据库)的所有代币余额随后显示为地址详细信息页面上的代币余额。

Etherscan 和 BSCScan 目前不提供 API 每个地址的代币余额 return。

为了获得地址的所有 ERC-20 代币余额,最简单的解决方案(除了找到 API 数据 return 之外)是遍历所有代币合约(或者只是您感兴趣的标记),然后调用它们的 balanceOf(address) 函数。

const tokenAddresses = [
    '0x123',
    '0x456',
];
const myAddress = '0x789';

for (let tokenAddress of tokenAddresses) {
    const contract = new web3.eth.Contract(erc20AbiJson, tokenAddress);
    const tokenBalance = await contract.methods.balanceOf(myAddress).call();
}

您可以拨打

https://api.bscscan.com/api?module=account&action=tokentx&address=0x7bb89460599dbf32ee3aa50798bbceae2a5f7f6a&page=1&offset=5&startblock=0&endblock=999999999&sort=asc&apikey=YourApiKeyToken

并解析结果。你接触过的所有代币都会在这里

Reference