智能合约部署二:ERC系列

ERC币很多,最常见的是ERC20:https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md

可替代型代币(同质代币)的标准 API,包括转账和余额跟踪的功能。

所有基于以太坊开发的代币合约都遵守这个协议。遵守这些协议的代币我们可以认为是标准化的代币,而标准化带来的好处是兼容性好。这些标准化的代币可以被各种以太坊钱包支持,用于不同的平台和项目。说白了,你要是想在以太坊上发行代币融资,必须要遵守ERC20标准。

ERC20的标准接口:

contract ERC20 {
      //返回ERC20代币的名字,例如"My test token"。
      function name() constant returns (string name)
      //返回代币的简称,例如:MTT,这个也是我们一般在代币交易所看到的名字。
      function symbol() constant returns (string symbol)
      //返回token使用的小数点后几位。比如如果设置为3,就是支持0.001表示。
      function decimals() constant returns (uint8 decimals)
      //返回token的总供应量
      function totalSupply() constant returns (uint totalSupply);
      //返回某个地址(账户)的账户余额
      function balanceOf(address _owner) constant returns (uint balance);
      //从代币合约的调用者地址上转移 _value的数量token到的地址 _to,并且必须触发Transfer事件。
      function transfer(address _to, uint _value) returns (bool success);
      //从地址 _from发送数量为 _value的token到地址 _to,必须触发Transfer事件。transferFrom方法用于允许合同代理某人转移token。条件是from账户必须经过了approve。
      function transferFrom(address _from, address _to, uint _value) returns (bool success);
      //允许 _spender多次取回您的帐户,最高达 _value金额。 如果再次调用此函数,它将以 _value覆盖当前的余量
      function approve(address _spender, uint _value) returns (bool success);
      //返回 _spender仍然被允许从 _owner提取的金额。
      function allowance(address _owner, address _spender) constant returns (uint remaining);
      event Transfer(address indexed _from, address indexed _to, uint _value);
      event Approval(address indexed _owner, address indexed _spender, uint _value);
    }
ERC721:
contract ERC721 {
   // 类似ERC20的函数(方便展示)

   // 该函数用于告诉外部合约和应用程序该代币的名称。该函数的一项实现示例可以如下。
   function name() constant returns (string name);

   // 该函数同时有助于提供与ERC20代币标准的兼容性。其向外部程序提供该代币的简称或标识符。
   function symbol() constant returns (string symbol);

   // 该函数会返回区块链上可提供的货币的总数量。这种供给不一定要保持不变。
   function totalSupply() constant returns (uint256 totalSupply);

   // 该函数用来获得某个给定地址拥有的代币数量。
   function balanceOf(address _owner) constant returns (uint balance);

   // 所有权函数
   // 该函数返回某代币的所有者的地址。由于每个ERC721代币都是非同质且因此独一无二的,其在区块链上通过一个唯一的ID被查询。我们可以利用其ID判断代币的所有者。
   function ownerOf(uint256 _tokenId) constant returns (address owner);

   // 该函数批准或授予另一个实体代表所有者转移代币的权利。例如,如果Alice拥有1个MyNFT(我的非同质代币),她可以为朋友Bob调用 approve 函数。调用成功后,Bob稍后就可以代表Alice获得该代币的所有权或对该代币进行操作。关于所有权转移的更多内容可参见函数 
   function approve(address _to, uint256 _tokenId);

   // 该函数担任提现功能,因为某个外部方可以调用它来从另一个用户的账户中提取出代币。因此,在某个用户已经被授权获得一定数额的代币并且希望从另一个用户的余额中提取所述代币的时候,可以使用函数 takeOwnership 。
   function takeOwnership(uint256 _tokenId);

   // 转移代币的下一个方法就是使用该函数。函数transfer让代币所有者将其代币发送给另一个用户,与独立加密货币类似。然而,只有收款账户事先被打款账户授予获得代币的权利,转账才能开始。
   function transfer(address _to, uint256 _tokenId);

   // 每个非同质代币所有者可以一次拥有1个以上的代币。每个代币通过唯一的ID来查询,然而,追踪某个用户可能拥有的每个代币也许存在困难。为此,合约记录着每个用户拥有的所有代币的ID。因此,某个用户拥有的每个代币都可以在该用户拥有的代币列表(数组)中通过索引检索到。 tokenOfOwnerByIndex
   function tokenOfOwnerByIndex(address _owner, uint256 _index) constant returns (uint tokenId);

   // 元数据函数
   // 该函数让我们发现代币的元数据或指向其数据的链接。
   function tokenMetadata(uint256 _tokenId) constant returns (string infoUrl);

   // 事件
   // 该事件在代币被转手时得以触发。当代币的所有权从某个用户转移到另一个用户手上时,该事件被广播。其详细说明了哪个账户发送该代币,哪个账户接收该代币,以及哪个代币(通过ID定义)被转移。
   event Transfer(address indexed _from, address indexed _to, uint256 _tokenId);
   
   // 该事件在某个用户授权另一个用户获得某个代币的所有权时(即,当授权被执行时)得以触发。其详细说明了哪个账户目前拥有该代币,哪个账户获许在未来获得该代币,以及哪个代币(通过ID定义)被授权转移其所有权。
   event Approval(address indexed _owner, address indexed _approved, uint256 _tokenId);
}


 

ERC874:https://github.com/ethereum/EIPs/issues/874  已关闭。

ERC888:https://github.com/ethereum/EIPs/issues/888

ERC918:https://github.com/ethereum/EIPs/blob/master/EIPS/eip-918.md

ERC1155:https://github.com/ethereum/EIPs/issues/1155

ERC1178:https://eips.ethereum.org/EIPS/eip-1178  https://github.com/ethereum/EIPs/issues/1179

原文地址:https://www.cnblogs.com/zccst/p/14419946.html