参考资料
EIP165 规定了合约必须实现 supportsInterface 接口。这个接口告知该合约实现了什么方法。
比如,该合约实现了 ERC721 接口,就可以通过 supportsInterface 得知。
类似于,你的父母在外地,想要问你考试考了多少分?你说,生物,90,化学 100。
这里面就存在一个问题了,你的生物真的是 90,化学真的是 100 吗?
答案是否定的,因为,你完全可以胡编乱造,你可以实现 supportsInterface 里面的返回,但是,你可能没有实现对应的方法。
但是,这个接口存在的意义就是快速的判断该接口实现了什么功能。
比如,对于 NFT 交易所来说,会调用这个合约来咨询你是否实现了 ERC721 接口。如果实现了,那么就会调用 ERC721 相关的方法。
如果你只是假实现,那么,调用的时候会出错。
比如一个实现是
1 | function supportsInterface(bytes4 interfaceId) external pure override returns (bool) |
关于 interfaceId 请参考 solidity | type