如何找到 erc20 代币余额

How to find erc20 tokens balance

我正在尝试查找特定地址的 ERC20 代币(例如 Tether)余额。

实际上,我希望找到一个像下面这样工作的API,获取帐户地址和合约地址以及return该特定代币的余额。

Ether Scan token check

为了阐明我的目的,在TRC20网络中,我使用this endpoint 响应中有一组 TRC20 代币余额。

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

Trongrid 使用一个单独的数据库来汇总 Tron 网络历史上所有 Transfer() 事件(在 ERC-20 标准中定义)的代币余额。可能有针对 ERC-20 令牌的类似第三方服务,但我不知道。例如 Etherscan 确实有相同的信息,但他们只在地址 detail 页面上显示它,并且他们不提供包含此数据的 API。

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

在以太坊中,没有像 Trongrid 这样的内置 API 来检索某些账户的代币余额。

如果你想这样做,你必须调用智能合约代币的“balanceOf”方法。

Infura API 有一个 eth_call method 可以做到这一点。

调用这个 API 有点棘手,为此我在 JS 和 Go 中写了两个代码片段。

JS: https://gist.github.com/arshamalh/33e6646eb793997f2cc69668bd97010a

开始:https://gist.github.com/arshamalh/9fe035f7fe18cb5387737546ef84bf6c

您可以使用一个简单的 Covlanet API 调用来调用它: https://www.covalenthq.com/docs/api/#get-/v1/{chain_id}/address/{address}/balances_v2/

如果您想切换到任何其他网络,只需更改 chain_id