参考资料
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