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

Nom*_*mad 17 javascript node.js ethereum web3js binance

我正在尝试提取钱包地址持有的代币合约列表,类似于 bscscan 的做法,但以编程方式除外。bscscan.com/apis 没有端点,web3js 似乎只报告 ETH 余额。

这是可以实现的,因为 bscscan 报告列表并且许多令牌跟踪器(例如 farmfol.io )似乎也提取该信息。我只是没有找到正确的方法

Pet*_*jda 27

ERC-20(以及ERC-20-like如TRC-20BEP-20等)每个地址的代币余额存储在代币的合约中。

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

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

为了获取某个地址的所有 ERC-20 代币余额,最简单的解决方案(除了找到返回数据的 API 之外)是循环遍历所有代币合约(或仅您感兴趣的代币),然后调用他们的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();
}
Run Code Online (Sandbox Code Playgroud)