0%

solidity | ERC165

参考资料

EIP165 规定了合约必须实现 supportsInterface 接口。这个接口告知该合约实现了什么方法。

比如,该合约实现了 ERC721 接口,就可以通过 supportsInterface 得知。

类似于,你的父母在外地,想要问你考试考了多少分?你说,生物,90,化学 100

这里面就存在一个问题了,你的生物真的是 90,化学真的是 100 吗?

答案是否定的,因为,你完全可以胡编乱造,你可以实现 supportsInterface 里面的返回,但是,你可能没有实现对应的方法。

但是,这个接口存在的意义就是快速的判断该接口实现了什么功能。

比如,对于 NFT 交易所来说,会调用这个合约来咨询你是否实现了 ERC721 接口。如果实现了,那么就会调用 ERC721 相关的方法。

如果你只是假实现,那么,调用的时候会出错。

比如一个实现是

1
2
3
4
5
6
function supportsInterface(bytes4 interfaceId) external pure override returns (bool)
{
return
interfaceId == type(IERC721).interfaceId ||
interfaceId == type(IERC165).interfaceId;
}

关于 interfaceId 请参考 solidity | type

请我喝杯咖啡吧~