以太坊 ERC-20 Token Standard(翻译)

ERC-20 代币(Token )标准

英文原文: https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md
Fabian Vogelsteller fabian@ethereum.org, Vitalik Buterin vitalik.buterin@ethereum.org

Token翻译为’代币’感觉更直观一些。在有些文章中翻译为’令牌’

简单说明

一个代币的标准接口

摘要

以下标准可以在智能合约实现一个标准的代币接口。该标准提供交易代币的基本功能,以及允许授以代币的使用权,这样他们可以被区块链上的第三方使用。

起因

使得以太坊上的任意代币可以被其他应用中使用的一个标准接口:从钱包之间到分散的交易。

规范
代币
函数(Methods)

注意: 当调用的函数具有 returns (bool success)时,必须要处理返回 false的情况。调用时不能假设返回值永远不会是false。

name
返回值 - 代币的名称。 比如 “名人币”

可选的 - 此函数可用于提高可用性, 但接口和其他合同绝不能指望它一定存在。

function name() view returns (string name)

symbol
返回值 - 代币的标识。比如 “RMB”

可选的 - 此函数可用于提高可用性,但接口和其他合同绝不能指望它一定存在。

function symbol() view returns (string symbol)

decimals
返回值 - 代币所使用的小数位数。比如 8,意思是代币量除以100000000 得到显示形式

可选的 - 此函数可用于提高可用性,但接口和其他合同绝不能指望它一定存在。

function decimals() view returns (uint8 decimals)

totalSupply
返回值 - 代币发行总数。

function totalSupply() view returns (uint256 totalSupply)

balanceOf
返回值 - 地址为 _owner 的账户的账户余额

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

transfer
_value 数量的代币转让给 _to 账户, 同时必须触发 Transfer 事件。如果 _from 账户的余额不足那么此函数必须 抛异常。

注意: 转让值为0时必须被视为正常转让并触发 Transfer 事件。

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

transferFrom
将_value数量的代币从 _from 账户转让到地址 _to 账户,并且必须触发Transfer事件。
transferFrom函数用于撤销流程,允许合约代表您转让代币。例如,允许合约代表您转让代币和/或以子货币方式收取费用。除非 _from 帐户通过某种机制故意授权msg.send,否则该函数应抛出异常。

注意: 转让值为0时必须被视为正常转让并触发 Transfer 事件。

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

approve
授权 _spender 多次从您的帐户中消费代币(withdraw),最高为 _value 金额。
如果再次调用此函数,它将使用 _value 覆盖当前的允许值。

注意:为了防止向量攻击,应如此处所述和此处讨论的那样做。对于同一个 _spender 客户端应该确保先设置限额为0,再设置它到另一个值的方式创建用户接口。然而,合约本身不应强制这点,以允许向后兼容之前部署的合约。

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

allowance
返回值 - _spender 目前能从 _owner 提取的金额

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

Transfer
转让代币时必须触发,包括零值转让。

创建新代币的代币合约应该触发一个 Transfer 事件,并将 _from 地址设置为0x0

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

Approval
必须触发当 approve 调用成功时。

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

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

示例实现可在以下处获得
https://github.com/OpenZeppelin/zeppelin-solidity/blob/master/contracts/token/ERC20/StandardToken.sol
https://github.com/ConsenSys/Tokens/blob/master/contracts/eip20/EIP20.sol
再次调用“approve”之前强制为0的实现:
https://github.com/Giveth/minime/blob/master/contracts/MiniMeToken.sol

历史

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

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/
原始问题 #20: https://github.com/ethereum/EIPs/issues/20

版权

Copyright and related rights waived via CC0.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值