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,部分测试工具会专门校验这一点。
相关标准
同属「接口」的其他标准