区块链-以太坊学习笔记(九)

                                          ERCx协议

引子:2018年世界杯刚结束,法国队4:2战胜克罗利亚队获取最后的胜利,大家一定还是沉浸在这个发生了很多故事的夏日里。而让我感到惊喜的是一个连接虚拟世界和真实世界的一个例子也是因为这届世界杯,一张通往世界杯的门票,来至于新加坡的区块链公司StormBird的一个项目,这个项目主要采用ERC875协议实现的。

导入钱包的token门票:

区块链-以太坊学习笔记(九)_第1张图片

在链上交易的记录:

区块链-以太坊学习笔记(九)_第2张图片

ERC协议的了解

ERC是以太坊代币标准的缩写,让以太坊开发者在撰写智能合约时能更为流畅,目前主要有ERC20 和 ERC721 两大协议。

ERC20是2015年提出并于2017年9月正式实施。在使用ERC20代币,只有数量上的不一样,代币之间没有什么区别,所以ERC20代币被称为可替换的代币,适用于可替换资产的价值。

ERC-20标准:

  Methods:
  function name() view returns (string name);//返回合约名称

  function symbol() view returns (string symbol);//返回合约代币符号

  function decimals() view returns (uint8 decimals);//返回token使用的小数点后几位

  function totalSupply() view returns (uint256 totalSupply);//返回代币供给总量

  function balanceOf(address _owner) view returns (uint256 balance);//返回_owner的帐户余额

  function transfer(address _to, uint256 _value) returns (bool success);//将数量为_value的代币转入地址 _to

  function transferFrom(address _from, address _to, uint256 _value) returns (bool success);//地址_from中的_value数量的代币转入地址_to

  function approve(address _spender, uint256 _value) returns (bool success);//允许_spender提取限额_value的代币

  function allowance(address _owner, address _spender) view returns (uint256 remaining);//_spender可从地址_owner提款的代币数量上限

  Events:
  event Transfer(address indexed _from, address indexed _to, uint256 _value);//进行代币转移的时候触发

  event Approval(address indexed _owner, address indexed _spender, uint256 _value);//调用approve()方法时触发

ERC721是加拿大的新创公司Axiom Zen的总监 Dieter Shirley在2017年9月20提出的,他是ERC721规格标准的作者和主要贡献者。例子是比较出名的谜恋猫 CryptoKitties。

ERC721标准:

interface ERC721 /* is ERC165 */ {

    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);

    function balanceOf(address _owner) external view returns (uint256);

    function ownerOf(uint256 _tokenId) external view returns (address);

    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);
}

相比于ERC721,ERC875协议族目前主要进行了两方面的核心改进:一是Magic Link 实现原子交易,二是打包功能。

ERC875标准:

contract ERC
{
    event Transfer(address indexed _from, address indexed _to, uint256 _tokenId);
    event Approval(address indexed _owner, address indexed _approved, uint256 _tokenId);

    function name() constant returns (string name);
    function symbol() constant returns (string symbol);
    function balanceOf(address _owner) public view returns (uint256[] _balances);
    function transfer(address _to, uint256[] _tokens) public;
    function transferFrom(address _from, address _to, uint256[] _tokens) public;

    //optional
    function totalSupply() constant returns (uint256 totalSupply);
    function trade(uint256 expiryTimeStamp, uint256[] tokenIndices, uint8 v, bytes32 r, bytes32 s) public payable
    function ownerOf(uint256 _tokenId) public view returns (address _owner);
}

可以参考相关文档:

1、https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md

2、https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md 或http://erc721.org/

3、https://github.com/ethereum/EIPs/issues/875

 

你可能感兴趣的:(区块链)