为什么我们需要在ERC721令牌中注册接口ID。我只是浏览了openzeppelin-solidity的erc721代码,并且好奇地想知道为什么我们需要使用它。该接口id寄存器代码如下所示:
/*
* bytes4(keccak256('name()')) == 0x06fdde03
* bytes4(keccak256('symbol()')) == 0x95d89b41
* bytes4(keccak256('tokenURI(uint256)')) == 0xc87b56dd
*
* => 0x06fdde03 ^ 0x95d89b41 ^ 0xc87b56dd == 0x5b5e139f
*/
bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;
constructor (string memory name, string memory symbol) public {
_name = name;
_symbol = symbol;
// register the supported interfaces to conform to ERC721 via ERC165
_registerInterface(_INTERFACE_ID_ERC721_METADATA);
}发布于 2019-06-08 21:18:28
使用ERC-165公布接口支持。这在https://eips.ethereum.org/EIPS/eip-165中有记录。
在两种情况下,这是有用的,这些原因促使将此特性作为所有ERC-721合同的一项要求:
1)允许离链实体(钱包、阻止探索者、Web3客户端)识别合同的能力。例如,MetaMask可以在ERC-721协议上调用safeTransferFrom时检查是否正在传输令牌,而不是仅仅显示原始的四字节函数标识符。
2)允许链上合同对其他合同进行质问。例如,OpenSea可以使用此特性检测来识别ERC-721合同,其中包括标准化的批处理转移扩展。在某些情况下,它可以利用这个特性更有效地传输令牌。
老实说,离链客户端的开发速度比我预期的要慢,而且大多数合同,如复合协议,都是支持令牌的硬编码。因此,实现ERC-165的价值比我们计划的要少得多。
https://ethereum.stackexchange.com/questions/71560
复制相似问题