Post by @isoulove • Hey
#Solidity学习笔记-应用E-ERC721 ERC721-以太坊非同质化代币标准 EIP与ERC:`EIP`全称 `Ethereum Improvement Proposals`(以太坊改进建议), 是以太坊开发者社区提出的改进建议,`EIP`可以是 `Ethereum` 生态中任意领域的改进, 比
Stats
Actions: 7
Comments: 9
Likes: 20
Mirrors: 8
Quotes: 0
Comments
create和mint虽然显示pending,但实际成功了,回查之前其他部署的合约也是如此,应该是IDE内置环境的正常显示。 为了防止NFT被转到一个没有能力操作NFT的合约中去,目标必须正确实现ERC721TokenReceiver接口,这是一种利用ERC165思想进行的操作。接口是某些行为的集合(在solidity中更甚,接口完全等价于函数选择器的集合),某个类型只要实现了某个接口,就表明该类型拥有这样的一种功能。 ERC165是一种对外表明自己实现了哪些接口的技术标准,合约之间就能够通过ERC165标准对对方进行查询以检查对方是否拥有相应的能力。怎么做?如下: ERC721: **0x80ac58cd**= `bytes4(keccak256(ERC721.Transfer.selector) ^ keccak256(ERC721.Approval.selector) ^ ··· ^keccak256(ERC721.isApprovedForAll.selector))` ERC165: **0x01ffc9a7**=`bytes4(keccak256(supportsInterface.selector))` ERC721Metadata: **0x5b5e139f=**`bytes4(keccak256(`IERC721Metadata.name.*selector* ^ IERC721Metadata.symbol.*selector* ^ IERC721Metadata.tokenURI.*selector*`))` function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) { return interfaceId == 0x01ffc9a7 || // ERC165 Interface ID for ERC165 interfaceId == 0x80ac58cd || // ERC165 Interface ID for ERC721 interfaceId == 0x5b5e139f; // ERC165 Interface ID for ERC721Metadata } 且该函数是可继承的,可优雅扩展。
gm
niubi 啊
学习了 互关一下
学习到了
Too professional, learn from you!
感谢分享
厉害了