You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Web3j判断一笔交易是否属于NFT相关交易

Web3j识别交易代币类型可行方案
  • 修正EIP-165接口调用逻辑
    supportsInterface是校验代币标准的首选方案,调用失败大多是参数或调用方式错误导致,注意以下规则:
    各标准固定interfaceId为:

    • ERC20:0x36372b07
    • ERC721:0x80ac58cd
    • ERC1155:0xd9b67a26
      Web3j调用时优先用官方封装的标准合约接口类发起eth_call请求,不要手动拼Function参数,避免参数编码错误导致返回异常。例如直接导入Web3j生成的ERC721接口类,调用erc721.supportsInterface(INTERFACE_ID_ERC721).send()即可拿到正确结果,该方案可覆盖95%以上遵循EIP标准的合约。
  • 基于交易日志特征匹配判断
    针对不支持EIP-165的非标合约,可通过匹配日志的事件签名完成判断,你已经拿到TokenID,只要匹配topic0的事件签名即可:

    • ERC20 Transfer事件签名:0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef,对应日志共3个topic,data字段存储转账金额,无单独TokenID字段。
    • ERC721 Transfer事件签名和ERC20完全一致,但对应日志共4个topic,第4个topic为你获取的TokenID,data字段为空,符合该特征即可判定为ERC721代币。
    • ERC1155 单币转账(TransferSingle)签名:0xc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62,多币转账(TransferBatch)签名:0x4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb,匹配到两个签名任意一个即可判定为ERC1155代币。
      Web3j中直接遍历TransactionReceipt.getLogs(),取每个日志的首个topic和上述签名对比即可,无需全量解码日志字段。
  • 异常场景兼容校验
    遇到篡改事件参数的极端非标合约时,可补充调用合约标准方法二次校验:判定为ERC721的可调用ownerOf(tokenId),能正常返回地址即为有效;判定为ERC1155的可调用balanceOf(userAddress, tokenId)做校验,避免错判。

内容的提问来源于stack exchange,提问作者wollenS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 01:45:02