这篇文章详细介绍了如何通过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 代币余额。
要在 Ethereum 上进行构建,你需要一个 API 端点来连接网络。你可以使用公共节点或部署和管理自己的基础设施;但是,如果你希望获得 8 倍更快的响应时间,可以将繁重的工作交给我们。免费注册账户 在这里。我们将使用一个启用了免费 Token API 附加组件的以太坊主网节点。
在这个例子中,我们使用 Vitalik 的以太坊钱包 (0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045) 和 BAT 代币 (0x0D8775F648430679A709E98d2b0Cb6250d2887EF)。
我们的 eth_call 中的 to 参数是 BAT 代币合约的地址。
接下来,使用以下过程创建 eth_call 的 data 参数,以便以太坊节点理解该请求:
符合 ERC20 标准的合约包含一个方法 balanceOf(address)。我们需要首先获取 balanceOf(address) 的 Keccak 哈希,并添加 0x 前缀,这样形成的字符串是:0x70a08231b98ef4ca268c9cc3f6b4590e4bfec28280db06bb5d45e689f2a360be
接下来,选择哈希字符串的前 10 个字符,0x70a08231。
在字符串后面附加 24 个 0:000000000000000000000000。
从 Vitalik 的地址 d8dA6BF26964aF9D7eEd9e03E53415D37aA96045 中移除 0x 前缀。
最后,将这三段字符串组合在一起,创建我们 eth_call 的 data 参数。字符串为:0x70a08231000000000000000000000000d8da6bf26964af9d7eed9e03e53415d37aa96045
向以太坊 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"}
响应中的值是一个十六进制编码的数字,解码后为 17467248908296943231。
为了确定 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"}
这真是 太多 的工作了!以太坊区块链上有 成百上千 个 ERC20 代币合约,以及 数百万 个活跃钱包。如果你不确定一个钱包中有哪些代币,使用 eth_call 可能需要大量的尝试和错误。QuickNode 的 Token API 简化了这个工作,只需一次简单的 API 调用即可。Token API 以人类可读的格式返回 ERC-20 代币数据,将十六进制数据转换为整数格式,并在不需要额外请求的情况下检索小数位。
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 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!