W3
EIP-165ERC接口Final(2018-01-30)

接口检测标准

让合约声明「我实现了哪些接口」,调用方在转账或交互前可以自检。

适用链:全部 EVM 链

为什么重要:没有它,safeTransferFrom 无法判断目标合约到底支不支持 NFT 接收,只能盲转。

函数签名与选择器

选择器是签名的 keccak256 前 4 字节;事件则是完整的 32 字节 topic0。 点一下即可复制。

签名 / 字段选择器 / topic0说明
supportsInterface(bytes4)返回是否实现了该 interfaceId。
interfaceId 计算方式接口内所有函数选择器的 XOR。例如 ERC-721 是 0x80ac58cd。
0xffffffff必须返回 false,这是 EIP-165 的强制自检约定。
0x01ffc9a7查询 supportsInterface 本身必须返回 true。

代码模板

标准实现
标准实现Solidity

实现与使用时的常见陷阱

  • interfaceId 是 XOR 而非哈希,任意一个函数签名写错都会导致整个 id 不匹配。
  • 必须对 0xffffffff 返回 false,部分测试工具会专门校验这一点。

相关标准

同属「接口」的其他标准
想把这个标准用起来?开发者路径的第 1–2 阶段讲了怎么把它写进项目;合约 IDE里有对应的可编辑模板与静态自检;链上 API 参考则给出前端调用它的三种写法。