如何通过RPC API查询ERC20代币的钱包余额

  • QuickNode
  • 发布于 2025-01-30 16:55
  • 阅读 26

这篇文章详细介绍了如何通过RPC方法查找ERC20代币的余额,包括使用原生RPC eth_call请求和QuickNode的Token API。文章提供了丰富的代码示例和逐步说明,可以帮助开发者快速上手。Token API简化了获取代币余额的过程,提升了效率。

概述

仅使用 RPC eth_call 请求查询钱包中的 ERC20 代币余额是可行的,但这是一项 繁琐耗时 的过程。作为替代方案,QuickNode 的 Token API 是一个免费的附加组件,可以通过一行代码即时访问 ERC20 代币信息、余额和转账。

我们将要做的事情

  • 使用原生 RPC eth_call 请求查询钱包中的 ERC20 代币余额。

  • 使用 QuickNode 的 Token API 查询钱包中的 ERC20 代币余额。

你需要的准备

设置你的免费 QuickNode 端点

要在 Ethereum 上进行构建,你需要一个 API 端点来连接网络。你可以使用公共节点或部署和管理自己的基础设施;但是,如果你希望获得 8 倍更快的响应时间,可以将繁重的工作交给我们。免费注册账户 在这里。我们将使用一个启用了免费 Token API 附加组件的以太坊主网节点。

使用 eth_call RPC 请求查询 ERC20 余额

  1. 确定一个钱包地址和一个 ERC20 代币合约地址。

在这个例子中,我们使用 Vitalik 的以太坊钱包 (0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045) 和 BAT 代币 (0x0D8775F648430679A709E98d2b0Cb6250d2887EF)。

  1. 我们的 eth_call 中的 to 参数是 BAT 代币合约的地址。

  2. 接下来,使用以下过程创建 eth_call 的 data 参数,以便以太坊节点理解该请求:

    • 符合 ERC20 标准的合约包含一个方法 balanceOf(address)。我们需要首先获取 balanceOf(address) 的 Keccak 哈希,并添加 0x 前缀,这样形成的字符串是:0x70a08231b98ef4ca268c9cc3f6b4590e4bfec28280db06bb5d45e689f2a360be

    • 接下来,选择哈希字符串的前 10 个字符,0x70a08231。

    • 在字符串后面附加 24 个 0:000000000000000000000000。

    • 从 Vitalik 的地址 d8dA6BF26964aF9D7eEd9e03E53415D37aA96045 中移除 0x 前缀。

    • 最后,将这三段字符串组合在一起,创建我们 eth_call 的 data 参数。字符串为:0x70a08231000000000000000000000000d8da6bf26964af9d7eed9e03e53415d37aa96045

  3. 向以太坊 RPC 节点发出以下 eth_call 请求:

curl https://your-subdomain-here.quiknode.pro/yourtoken/ \
  -X POST \
  -H "Content-Type: application/json" \
  -H "x-qn-api-version: 1" \
  --data '{
    "id":67,
    "jsonrpc":"2.0",
    "method":"eth_call",
    "params":[{"data":"0x70a08231000000000000000000000000d8da6bf26964af9d7eed9e03e53415d37aa96045","to":"0x0D8775F648430679A709E98d2b0Cb6250d2887EF"}, "latest"]
  }'

这是响应:

{"jsonrpc":"2.0","id":67,"result":"0x000000000000000000000000000000000000000000000000f26822562e5e767f"}
  1. 响应中的值是一个十六进制编码的数字,解码后为 17467248908296943231。

  2. 为了确定 BAT 的余额,你需要通过发出另一个 RPC 请求来找出该 BAT 合约实现了多少个小数位。获取 decimals() 的 Keccak 哈希,为其添加一个 0x 前缀,并进行这个 eth_call:

curl https://your-subdomain-here.quiknode.pro/yourtoken/ \
  -X POST \
  -H "Content-Type: application/json" \
  -H "x-qn-api-version: 1" \
  --data '{
    "id":67,
    "jsonrpc":"2.0",
    "method":"eth_call",
    "params":[{"data":"0x313ce567add4d438edf58b94ff345d7d38c45b17dfc0f947988d7819dca364f9","to":"0x0D8775F648430679A709E98d2b0Cb6250d2887EF"}, "latest"]
  }'

{"jsonrpc":"2.0","id":67,"result":"0x0000000000000000000000000000000000000000000000000000000000000012"}
  1. 解码结果中的十六进制字符串,解码后为 18。BAT 实现了 18 位小数,因此 Vitalik 钱包中的 BAT 余额为 17.467248908296943231。

这真是 太多 的工作了!以太坊区块链上有 成百上千 个 ERC20 代币合约,以及 数百万 个活跃钱包。如果你不确定一个钱包中有哪些代币,使用 eth_call 可能需要大量的尝试和错误。QuickNode 的 Token API 简化了这个工作,只需一次简单的 API 调用即可。Token API 以人类可读的格式返回 ERC-20 代币数据,将十六进制数据转换为整数格式,并在不需要额外请求的情况下检索小数位。

使用 Token API 查询 ERC20 代币余额

Token API 使你能够通过一次简单的请求查询钱包中的代币和余额。Token API 作为 QuickNode Ethereum 端点的免费附加组件提供 🎉

这个例子演示了如何使用 contracts 参数并将结果限制为 BAT 代币。如果你选择省略 contracts 参数,响应将包含钱包中的所有代币和余额。

curl --request POST \
  --url https://your-subdomain-here.quiknode.pro/yourtoken/ \
  --header 'content-type: application/json' \
  --header 'accept: application/json' \
  -H "x-qn-api-version: 1" \
  --data '{
    "id":67,
    "jsonrpc":"2.0",
    "method":"qn_getWalletTokenBalance",
    "params":{
      "wallet": "0xd8da6bf26964af9d7eed9e03e53415d37aa96045",
            "contracts": ["0x0D8775F648430679A709E98d2b0Cb6250d2887EF"]
    }
  }'

这是响应:

{"jsonrpc":"2.0","id":67,"result":{"assets":[{"address":"0x0D8775F648430679A709E98d2b0Cb6250d2887EF","name":"Basic Attention Token","decimals":18,"symbol":"BAT","logoURI":"","chain":"ETH","network":"mainnet","amount":"17467248908296943231"}],"owner":"0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045","totalPages":1,"totalItems":1,"pageNumber":1}}

结论

Token API 消除了通过繁琐的 eth_call 请求获取所需 ERC-20 代币数据的必要性,还提供对一些通过 eth_call 请求无法获得的宝贵索引数据的即时访问,例如钱包中的所有代币余额、钱包-代币转账等。

恭喜你!你已学会如何查询 ERC20 代币余额,并成功使用了 Token API。欲了解更多信息,请查看我们其他出色的教程 这里

我们 ❤️ 反馈!

如果你对本指南有任何反馈或问题,请 告诉我们! 你也可以通过 Twitter 或我们的 Discord 社区服务器与我们联系。我们期待你的反馈!

  • 原文链接: quicknode.com/guides/qui...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
QuickNode
QuickNode
江湖只有他的大名,没有他的介绍。