以太坊的通证(或者币圈叫代币)是由符合一些标准接口的以太坊智能合同来定义的。例如以太坊的ERC20通证标准接口,囊括的接口例如下面的重要的通证总量接口totalSuppy , 转帐接口transfer , 和检查余额接口balanceOf。
ERC兼容通证就是提供了ERC20所定义的接口的以太坊智能合同,通证标准化的好处是可以对通证相关应用兼容,例如支持ERC20的交易所或者支持ERC20的钱包应用可以支持所有符合ERC20标准的通证。
附ERC20 标准缩减版和解释
contract ERC20 {
//总量接口
function totalSupply() public view returns (uint256);
//检查余额接口
function balanceOf(address who) public view returns (uint256);
//转帐接口
function transfer(address to, uint256 value) public returns (bool);
//转账事件
event Transfer(address indexed from, address indexed to, uint256 value);
}
通常智能合同在实现上会在内部保存一个数据结构(例如映射),来追踪每个地址的余额。我们可以简单的认为通证合同就是一种智能合同用来保存谁拥有多少通证,同时提供用户的通证转账功能。
对于像货币一样的通证来说,ERC20标准已经够用了。但是对于具有唯一性的物品,ERC20接口就力不从心了,例如同是一幅名画,真实作品和复制品价值是不一样的。所以又有了专门针对收藏品的ERC721标准。
ERC20通证是可以互换的,而ERC721通证是不能互换的,而且ERC721的每个通证是唯一不可分割的,这就可以用来交易收藏品。
附ERC721 标准缩减版和解释
contract ERC721 {
event Transfer(address indexed _from, address indexed _to, uint256 _tokenId);
event Approval(address indexed _owner, address indexed _approved, uint256 _tokenId);
//返回地址拥有的代币数
function balanceOf(address _owner) public view returns (uint256 _balance);
//返回通证拥有者的地址
function ownerOf(uint256 _tokenId) public view returns (address _owner);
//通证拥有者转移通证(直接转移的方式)
function transfer(address _to, uint256 _tokenId) public;
//通证拥有者转移通证(通过批准转移的方式,还需要被批准者提取通证)
function approve(address _to, uint256 _tokenId) public;
//被批准者提取通证
function takeOwnership(uint256 _tokenId) public;
}
最后,说直接点吧,我们发代币就用ERC20标准,我们写加密猫游戏就用ERC721标准。
最后,让我们去github看看真实的定义了ERC20和ERC721智能合同接口吧.
参考资料:
https://github.com/OpenZeppelin/zeppelin-solidity/blob/master/contracts/token/ERC20/ERC20Basic.sol
https://github.com/OpenZeppelin/zeppelin-solidity/blob/master/contracts/token/ERC721/ERC721Basic.sol
转载自原文链接, 如需删除请联系管理员。
原文链接:让你秒懂以太坊通证(token)和ERC20,ERC721标准,转载请注明来源!