首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过eth.getTransactionReceipts()在EVM中识别ERC-721、ERC-777和ERC-223合同,等等

通过eth.getTransactionReceipts()在EVM中识别ERC-721、ERC-777和ERC-223合同,等等
EN

Ethereum用户
提问于 2020-05-09 13:51:59
回答 2查看 550关注 0票数 3

是否有任何特定的方法来识别ERC-721,ERC-777,& ERC-223合同事件,特别是在eth.getTransactionReceipt()函数下?

我知道有一种通过过滤Transfer keccak-256散列来实现ERC-20令牌的方法:

代码语言:javascript
复制
0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef

我可以为CryptoKitties使用的一个强力示例也是对'DepositKittyAndMintToken'哈希进行过滤,但是显然,除了CryptoKitties之外,还有更多的ERC-721令牌事件:

代码语言:javascript
复制
0x999fa95b06ad12b3436bab902713e383705707923f9d7c75f5432b28a6487010

我正在运行一个程序,运行两个循环:通过每个块下的每个transactionHash,并试图分离所有ERC-20,ERC-721,ERC-777和ERC-223令牌事件,但它只对ERC-20's起作用。

任何帮助都将不胜感激,谢谢!

EN

回答 2

Ethereum用户

发布于 2022-12-19 04:19:42

对于支持ERC-165的ERC-721和现代合同类型,这可以通过内省来完成。

做这件事的基本方法(这里用Node +醚显示的实现)是:

代码语言:javascript
复制
// Use ERC-165 to check if contract is ERC-721, try/catch in case contract does not support ERC-165
const contract = new ethers.Contract(contractAddress, erc165Abi, provider);
let isErc721 = 0;
try {
    isErc721 = await contract.supportsInterface(erc721Id) ? 1 : 0;
} catch (error) {
    // Contract does not support ERC-165
}

这是您可以在https://github.com/fulldecent/contract-scanner/blob/main/index.mjs上学习的完整实现的摘录。

此外,我已经叙述并解释了这里的每一行代码,如果您想深入挖掘,请参阅https://youtu.be/lukshxTYpUw和我有办公室课程(“社区服务时间”)来回答任何问题。

票数 0
EN

Ethereum用户

发布于 2020-05-09 14:15:33

页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/83211

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档