Go-Ethereum

ERC 20 和 ERC 721 交易收據之間的區別

  • April 8, 2020

我想從本地乙太坊節點獲取某些事務日誌。為此,我需要確定如何區分 ERC 20 和 ERC 721 交易收據。從我在 Etherscan 上看到的情況來看,我找不到任何區分方法,因為兩張收據看起來都很相似。一個ERC 20交易收據的連結在這裡https://etherscan.io/tx/0xbad497f6d96dd111c221ce41355cbb9ac912a6c0953ccb94113ba8232ab95e0a和ERC 721交易收據是https://etherscan.io/tx/0x1ae8ba8417d6603e4f0b930b768814883af2d0ee091bc78145e871171768710e

以下是Transfer每個標準的事件原型:

  • ERC20:event Transfer(address, address indexed _to, uint256 _value)
  • ERC721:event Transfer(address, address indexed _to, uint256 indexed _tokenId)

Transfer當您對它們進行雜湊處理以使用(例如)在分類帳中定位事件時,這兩個簽名確實是相同的:

receipt.topics[0] == Web3.utils.keccak256("Transfer(address,address,uint256)")

但是,請注意,它們中的每一個都有不同數量的indexed參數。

因此,您可以確定transfer收據是 ERC20 還是 ERC721,如下所示:

  • ERC20:receipt.topics.length == 1
  • ERC721:receipt.topics.length == 2

引用自:https://ethereum.stackexchange.com/questions/80285