以太坊标准ERC-721
前一篇文章介绍了以太坊代币标准ERC20,这篇文章主要来介绍以太坊的另一个标准:ERC721,ERC721标准官方解释为Non-Fungible Tokens,简写为NFTs,或非同质代币。
首先我们要区分一下ERC20和ERC721标准之间的差异:
- 遵循ERC20标准的代币,可以立即兼容以太坊钱包,这也就意味着这些代币之间是可以立即交易的,也就是他们之间的价值可以相互转移。如果有人认可这种代币的价值,是可以与其它ERC20代币进行币币交易,例如当前很多交易所都支持ERC20代币与ETH之间进行币币交易。
- ERC721代币不支持价值转移,他们之间的价值交换是不可逆的。
- ERC20的代币是可分割的,例如ETH支持0.1、0.01的持有和交易。而ERC721代币最小单位为1,不支持分割为更小的单位。
- ERC721代币成为非同质代币,也就是每一枚币都是独一无二的(每枚币都是一个地址)。
ERC-721代币标准【官方文档】 https://github.com/ethereum/E...
以CryptoKitties为例,CryptoKitties是第一个遵循ERC721标准的应用,在这个游戏中我们可以使用ETH购买以太猫、加密狗,但是却不能将以太猫兑换成eth(这里的兑换和交易是有区别的,兑换是指市场上每笔交易都按照一个暂定的比例兑换,交易是没有固定的比例,只要有人出价,有人卖就要了),甚至它们之间也不能兑换。由于ERC721代币具有唯一性,不可分割的特点,所以很容易和一些具体的物品关联起来,通过这样一个标准,可以更广泛的应用到实际场景中。
ERC721作为以太坊标准,它规定了ERC721代币必须实现的方法、以及一些建议实现的方法,同时ERC721代币必须同时实现ERC721和ERC165。
具体合约规范如下,这里只列举了大部分方法用来解释说明,还有一些不常用的方法请参考官方文档
contract ERC721 { // Events,分别用来记录和授权 event Transfer(address indexed _from, address indexed _to, uint256 indexed _tokenId); event Approval(address indexed _owner, address indexed _approved, uint256 indexed _tokenId); event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved); // Required // 返回_owner的非同质代币的数量 function balanceOf(address _owner) external view returns (uint256); // 返回_tokenId非同质代币的拥有者的地址 function ownerOf(uint256 _tokenId) external view returns (address); // 将转移_tokenId从_from拥有者转移给_to新的拥有则 function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes data) external payable; function safeTransferFrom(address _from, address _to, uint256 _tokenId) external payable; function transferFrom(address _from, address _to, uint256 _tokenId) external payable; // 授权别人代替自己执行交易 function approve(address _approved, uint256 _tokenId) external payable; function setApprovalForAll(address _operator, bool _approved) external; function getApproved(uint256 _tokenId) external view returns (address); function isApprovedForAll(address _owner, address _operator) external view returns (bool); // Optional // 返回所有非同质代币的数量 function totalSupply() external view returns (uint256); function tokenByIndex(uint256 _index) external view returns (uint256); function tokenOfOwnerByIndex(address _owner, uint256 _index) external view returns (uint256); // 返回合约的名字 function name() external view returns (string _name); // 返回合约代币的符号 function symbol() external view returns (string _symbol); }
ERC721标准要求必须同时符合ERC165标准
interface ERC165 { // 用来验证这个合约是否实现了特定的接口。 function supportsInterface(bytes4 interfaceID) external view returns (bool); }
欢迎订阅「K叔区块链」 - 专注于区块链技术学习
博客地址:http://www.jouypub.com
简书主页:https://www.jianshu.com/u/756c9c8ae984
segmentfault主页:https://segmentfault.com/blog/jouypub
腾讯云主页:https://cloud.tencent.com/developer/column/72548
相关推荐
tianqinglei 2020-07-29
XFORG 2020-05-19
chenmoquan 2019-11-05
SkyBird0 2019-07-25
zuiyingong 2019-10-26
TokenInsight 2019-10-20
SkyBird0 2018-10-09
fengzi 2019-01-14
teaven0 2018-05-29
TokenInsight 2018-05-22
陀螺财经 2016-10-28
coinb 2019-01-14
Ritannn 2019-06-30
mon 2019-06-30
teaven0 2019-06-30