如何获取以太坊(ETH)授权列表?寻求API解决方案
获取以太坊授权列表的替代方案
你提到能在Etherscan的代币授权检查页面查看ETH授权列表,但官方公开API中没有直接提供该功能的端点,可通过以下两种方式实现:
直接查询链上事件日志:
以太坊上的代币授权操作会触发对应的合约事件,你可以通过调用以太坊节点的eth_getLogs方法筛选相关事件来获取授权记录:- 对于ERC20代币,监听
Approval(address owner, address spender, uint256 value)事件 - 对于ERC721/ERC1155代币,监听
ApprovalForAll(address owner, address operator, bool approved)事件
示例代码(使用ethers.js):
const { ethers } = require("ethers"); const provider = new ethers.providers.JsonRpcProvider("你的RPC节点URL"); // 查询指定地址的ERC20授权记录 async function fetchERC20Approvals(ownerAddress) { const approvalEventTopic = ethers.utils.id("Approval(address,address,uint256)"); const logs = await provider.getLogs({ fromBlock: 0, toBlock: "latest", topics: [approvalEventTopic, ethers.utils.hexZeroPad(ownerAddress, 32)] }); return logs.map(log => { const [spender, value] = ethers.utils.defaultAbiCoder.decode( ["address", "uint256"], log.data ); return { tokenAddress: log.address, spender, value: ethers.utils.formatUnits(value, 18) // 根据代币小数位调整 }; }); }- 对于ERC20代币,监听
借助第三方链上数据服务:
部分链上数据聚合平台提供了封装好的授权查询接口,这类接口会预先聚合链上事件日志,返回结构化的授权列表数据。
注:Etherscan的代币授权检查页面本质也是通过聚合链上事件日志实现的,官方未公开对应的查询API。
内容的提问来源于stack exchange,提问作者Sithu Soe
相关产品推荐
相关产品推荐

