我正在尝试提取钱包地址持有的代币合约列表,类似于 bscscan 的做法,但以编程方式除外。 bscscan.com/apis 没有端点,web3 好像只报告 ETH 余额。
这是有可能实现的,因为 bscscan 报告列表并且许多令牌跟踪器(例如 farmfol.io)似乎也提取该信息。我只是没有找到正确的方法。任何帮助表示赞赏!
答案 0 :(得分:2)
ERC-20(以及类似ERC-20的如TRC-20、BEP-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();
}