以太坊 ERC20(EIP20)

以太坊支持自己编写合约在以太坊平台发放代币,既然每个人都可以在平台发布代币,那么就需要一个标准,保证每个代币的合约能正常的接入到平台。这里就说道了 EIP20 也叫,ERC20。但是现在统一都叫 EIP(Ethereum Improvement Proposals),直译过来就是 以太坊改善建议,这个是以太坊社区中发布的一些对以太坊进行改进的建议,并跟一个数字指明这个建议是第多少条建议。那么 EIP20 就是以太坊社区发布的第20条建议。这个建议的详细内容在后面详细说明,大致来说就是一个对代币发布的标准进行了定义。所有想要发布代币的人都需要依照这个标准对合约进行编码。

注意

  • 以下内容适用于 Solidity 0.4.17 或以上版本。
  • 调用者必须处理 returns (bool success) 返回 false 的情况,调用者不能认为永远不会返回 false

Token

Methods

  • name

返回 Token 的名称,例如:"MyToken"

1
function name() public view returns (string)
  • symbol
    返回 Token 的标识符,例如:”HIX”。

    1
    function symbol() public view returns (string)
  • decimals
    返回 Token 的小数位,例如:返回 8,表示将 Token 除以 100000000 以得到其表示方式。

    1
    function decimals() public view returns (uint8)
  • totalSupply
    返回 Token 的总供应量,即这个 Token 的发行总数量。

    1
    function totalSupply() public view returns (uint256)
  • balanceOf
    返回地址为 _owner 的账户余额。

    1
    function balanceOf(address _owner) public view returns (uint256 balance)
  • transfer
    _value 数量的 Token 转移到地址 _to 中,并且必须触发 Transfer 事件,如果调用者的余额不足以支付 _value 数量的 Token 则必须抛出 false

注意: 0值的传输必须视为正常传输,并触发 Transfer 事件。

1
function transfer(address _to, uint256 _value) public returns (bool success)
  • transferFrom
    _value 个数量的 Token 从地址 _from 转移到地址 _to,并且必须触发 Transfer 事件。

注意: 0值的传输必须视为正常传输,并触发 Transfer 事件。

1
function transferFrom(address _from, address _to, uint256 _value) public returns (bool success)
  • approve
    允许 _spender 多次从你的账户中提款,最高金额为 _value。如果再次调用,则会用 _value 覆盖可提款的余量。

    1
    function approve(address _spender, uint256 _value) public returns (bool success)
  • allowance
    返回 _spender 可以从 _owner 提取的 Token 余额。

    1
    function allowance(address _owner, address _spender) public view returns (uint256 remaining)

transferFrom、approve与allowance结合使用方式:
假设 Alice 的账户有 1000ETH,想授权其中 100 个给 Bob 使用,Alice 这时候就可以调用 approve(Bob, 100)。此时,假设 Bob 又需要支付 10 个给 Carol,这时 Bob 也调用 transferFrom(Alice, Carol, 10)即可。Bob 可以调用 allowance(Alice, Bob),查看自己还能动用多少个 Alice 账户上的 ETH

Events

  • Transfer
    Token 传输时必须触发该事件,包括 0 值的传输。在创建一个新的 Token 时,应该在创建 Token 时触发一个 _from 地址为 0x0Transfer 事件。

    1
    event Transfer(address indexed _from, address indexed _to, uint256 _value)
  • Approval
    在调用 approve(address _spender, uint256 _value) 成功之后必须触发该事件。

    1
    event Approval(address indexed _owner, address indexed _spender, uint256 _value)

如果需要在以太坊上发行一个代币,必须要按照以上标准实现相应的函数编写一个合约,并发布到以太坊平台上。

本文援引自https://eips.ethereum.org/EIPS/eip-20