Alert Source Discuss
Standards Track: ERC

ERC-20: Token 标准

Authors Fabian Vogelsteller <fabian@ethereum.org>, Vitalik Buterin <vitalik.buterin@ethereum.org>
Created 2015-11-19

简单总结

Token 的标准接口。

摘要

以下标准允许在智能合约中实现 token 的标准 API。 此标准提供传输 token 的基本功能,并允许 token 被批准,以便链上的另一第三方可以使用它们。

动机

标准接口允许以太坊上的任何 token 被其他应用程序重用:从钱包到去中心化交易所。

规范

Token

方法

注意:

  • 以下规范使用 Solidity 0.4.17(或更高版本)的语法
  • 调用者必须处理 returns (bool success) 返回的 false。调用者绝不能假设永远不会返回 false

name

返回 Token 的名称 - 例如 "MyToken"

可选 - 此方法可用于提高可用性, 但接口和其他合约不应该期望这些值的存在。

function name() public view returns (string)

symbol

返回 Token 的符号。例如 “HIX”。

可选 - 此方法可用于提高可用性, 但接口和其他合约不应该期望这些值的存在。

function symbol() public view returns (string)

decimals

返回 Token 使用的小数位数 - 例如 8,表示将 Token 数量除以 100000000 以获得其用户表示。

可选 - 此方法可用于提高可用性, 但接口和其他合约不应该期望这些值的存在。

function decimals() public view returns (uint8)

totalSupply

返回 Token 的总供应量。

function totalSupply() public view returns (uint256)

balanceOf

返回地址为 _owner 的另一个账户的账户余额。

function balanceOf(address _owner) public view returns (uint256 balance)

transfer

_value 数量的 Token 转移到地址 _to,并且必须触发 Transfer 事件。 如果消息调用者的账户余额没有足够的 Token 可供花费,则该函数应该 throw

注意 0 值的转移必须被视为正常转移并触发 Transfer 事件。

function transfer(address _to, uint256 _value) public returns (bool success)

transferFrom

_value 数量的 Token 从地址 _from 转移到地址 _to,并且必须触发 Transfer 事件。

transferFrom 方法用于提款工作流程,允许合约代表您转移 Token。 例如,这可用于允许合约代表您转移 Token 和/或以子货币收取费用。 除非 _from 账户已通过某种机制故意授权消息的发送者,否则该函数应该 throw

注意 0 值的转移必须被视为正常转移并触发 Transfer 事件。

function transferFrom(address _from, address _to, uint256 _value) public returns (bool success)

approve

允许 _spender 从您的账户中多次提取,最高可达 _value 数量。如果再次调用此函数,它将使用 _value 覆盖当前的授权额度。

注意:为了防止像此处描述此处讨论的攻击向量, 客户端应该确保创建用户界面,以便在将授权额度设置为同一 spender 的另一个值之前,首先将其设置为 0。 虽然合约本身不应该强制执行此操作,以允许与之前部署的合约向后兼容

function approve(address _spender, uint256 _value) public returns (bool success)

allowance

返回 _spender 仍然可以从 _owner 提取的数量。

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

事件

Transfer

当 Token 被转移时必须触发,包括零值转移。

创建新 Token 的 Token 合约应该在创建 Token 时触发一个 _from 地址设置为 0x0 的 Transfer 事件。

event Transfer(address indexed _from, address indexed _to, uint256 _value)

Approval

必须在任何成功调用 approve(address _spender, uint256 _value) 时触发。

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

实现

以太坊网络上已经部署了大量符合 ERC20 标准的 Token。 不同的团队编写了不同的实现,这些实现具有不同的权衡:从节省 gas 到提高安全性。

示例实现可在以下位置找到

历史

与此标准相关的历史链接:

  • Vitalik Buterin 的原始提案:https://github.com/ethereum/wiki/wiki/Standardized_Contract_APIs/499c882f3ec123537fc2fccd57eaa29e6032fe4a
  • Reddit 讨论:https://www.reddit.com/r/ethereum/comments/3n8fkn/lets_talk_about_the_coin_standard/
  • 原始 Issue #20:https://github.com/ethereum/EIPs/issues/20

版权

版权及相关权利通过 CC0 放弃。

Citation

Please cite this document as:

Fabian Vogelsteller <fabian@ethereum.org>, Vitalik Buterin <vitalik.buterin@ethereum.org>, "ERC-20: Token 标准," Ethereum Improvement Proposals, no. 20, November 2015. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-20.