LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 行情分析 > Solidity极简入门 | ERC721专题第二讲:ERC721相关接口

Solidity极简入门 | ERC721专题第二讲:ERC721相关接口

2022-04-28 区块律动BlockBeat 来源:区块链网络
原文标题:《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

玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。

知识 ERC721
LOADING...
LOADING...