原文标题:《Solidity 极简入门 ERC721 专题:2. ERC721 相关接口》 原文来源: 0xAA 我最近在重新学 solidity,巩固一下细节,也写一个「Solidity 极简入门」,供小白们使用(编程大佬可以另找教程),每周更新 1-3 讲。 不知不觉我已经完成了 Solidity 极简教程的前 13 讲(基础),内容包括:Helloworld.sol,变量类型,存储位置,函数,控制流,构造函数,修饰器,事件,继承,抽象合约,接口,库,异常。在进阶内容之前,我决定做一个 ERC721 的专题,把之前的内容综合运用,帮助大家更好的复习基础知识,并且更深刻的理解 ERC721 合约。希望在学习完这个专题之后,每个人都能发行自己的 NFT。本文为该系列第二讲,第一讲为:《Solidity 极简入门 | ERC721 专题第一讲:合约概览与相关库》 ERC721 相关接口 ERC721 的主合约一共引用了 4 个接口合约:IERC721.sol,IERC721Receiver.sol,IERC721Metadata.sol,和间接引用的 ERC165 的 IERC165.sol。这一讲我们将逐个介绍这 4 个接口合约。 IERC165 接口 首先我们介绍一下 EIP165(以太坊改进建议第 165 条),他的目的是创建一个标准方法来发布和检测智能合约实现的接口。讲一个去年年底发生的真实事件,PeopleDAO 有个朋友错转了 4000w 枚 PEOPLE 到 Token 合约。但合约没有实现转出 Token 的功能,只能进不能出,这些 Token 直接锁死在里面销毁了。试想一下,如果在转账的时候自动判断接收方合约是否实现了相应的接口,没实现的话就 revert 交易,很多错转 Token 的悲剧都不会发生。EIP165 就是干这个的,而 ERC165 就是 EIP165 的实现。 IERC165 是 ERC165 的接口合约,只有一个函数 supportsInterface(),输入想查询的接口的 interfaceId,返回一个 bool 告诉你合约是否实现了该接口。 ERC721 主合约对 supportsInterface() 的实现如下: 可以看到,ERC721 实现了 IERC721,IERC721Metadata 和 IERC165 的接口,查询的时候会返回 true;否则返回 false。我会在进阶内容中更详细的介绍 function selector 和 interfaceId。 IERC721 IERC721 是 ERC721 的接口合约,里面包括 3 个 event 和 9 个 function: 其中 event 包括: 1、Transfer 事件:在转账时被释放,记录 Token 的发出地址 from,接收地址 to 和 tokenid。 2、Approval 事件:在授权时释放,记录 approve 的发出地址 owner,被授权地址 approved 和 tokenid。 3、ApprovalForAll 事件:在批量授权时释放,记录 approve 的发出地址 owner,被授权地址 operator 和是否被授权 approved。 其中 function 包括: 1、balanceOf:参数为要查询的地 address,返回该地址的 NFT 持有量 balance。 2、ownerOf:参数为要查询的 tokenId,返回这个 tokenId 的主人 owner。 3、safeTransferFrom:安全转账(如果接收方是合约地址,会要求实现 ERC721 的接收接口)。参数为转出地址 from,接收地址 to 和 tokenId。 4、transferFrom:普通转账(不检查对方是否实现 ERC721 的接收接口),参数为转出地址 from,接收地址 to 和 tokenId。 5、approve:授权,批准另一个地址使用你的 NFT。参数为被授权地址 approve 和 tokenId。 6、getApproved:查询 NFT 被批准给了哪个地址,参数为 tokenId,返回被批准的地址 approve。 7、setApprovalForAll:将自己持有的这类 NFT 批量授权给某个地址,参数为被授权的地址 operator 和是否授权 approved。 8、isApprovedForAll:查询某人的 NFT 是否批量授权给了某个地址,参数为授权方 owner 和被授权地址 operator,返回 bool。 9、safeTransferFrom:安全转账,与 3. 不同的地方在于参数里面包含了 data,可以做额外处理。 IERC721Receiver IERC721Receiver 接口包含了一个函数 onERC721Received()。这个函数会在 safeTransferFrom() 中被调用,Token 的接收合约必须实现这个接口才能转账成功。 IERC721Metadata IERC721Metadata 是 ERC721 的拓展接口,实现了 3 个查询 metadata 的常用函数: 1、name():返回 Token 名称; 2、symbol():返回 Token 代号; 3、tokenURI():通过 tokenId 查询 metadata 所在 url。 总结 本文是 ERC721 专题的第二讲,我们介绍了 ERC721 主合约调用的 4 个接口合约 IERC165,IERC721,IERC721Receiver 和 IERC721Metadata。下一讲终于该介绍 ERC721 主合约了!LFG! 原文链接 —- 编译者/作者:区块律动BlockBeat 玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。 |
Solidity极简入门 | ERC721专题第二讲:ERC721相关接口
2022-04-28 区块律动BlockBeat 来源:区块链网络
LOADING...
相关阅读:
- Solidity极简入门 | ERC721专题第一讲:合约概览与相关库2022-04-26
- 引入退款机制的ERC721R到底能为NFT带来什么?2022-04-14
- NFT协议标准梳理:除了ERC721和ERC1155还有哪些?2021-08-20
- MetaMask 浏览器插件钱包发布 v10 版本更新,推出适配 EIP-1559 的用户界面2021-08-06
- 多链 NFT 资产流动性协议 Taker Protocol 完成 Electric Capital 领投的种子轮融2021-07-25