4.5 ERC-20通证标准及其爆发性应用

ERC-20通证标准

ERC-20(又常被写作ERC20)通证标准是在以太坊平台上通过智能合约制订的通证标准。

我们常常把以ERC-20通证标准发行出来的通证,叫做“代币”。但请注意,Bitcoin是代币,ETH也是代币,但在以太坊生态里首创的ERC-20是一个通证标准而非代币标准。区块链以通证(Token)取代代币(Coin)是一次伟大的飞跃!

ERC20让开发者能够基于智能合约执行以下操作:

  1. 制定通证总供应量

  2. 获得账户余额

  3. 转帐通证

  4. 批准转账通证

以下内容翻译自:https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md

  1. 概述

    ERC20是通证(token)的一种标准接口。

  2. 摘要

    本标准允许在智能合约中部署token的标准API。 该标准提供了转移token的基本功能,并允许token被批准,以便链上其它第三方可以使用它们。

  3. 动机

    这一标准接口可以让以太网上的任何token可以被其他应用程序再利用:从钱包到去中心化的交易所。

  4. 技术参数

    1)Token

    1.1. 方法

    注意:

    a. 请到原始提案中查询本标准所使用的语法的Solidity的最低版本号。

    b. 调用者必须处理returns(bool success)返回的false。调用者绝对不能假设永远不会返回false。

    name:返回令牌的名字,例如“MyToken”。 可选——这个方法可以用来提高可用性,但接口和其它合约不能依赖该值的存在。

    function name() public view returns (string)

    symbol:返回令牌的符号,例如“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事件。 如果_from帐户余额没有足够的token来支出,该方法应该throw。 注意:_value=0必须被视为正常转账并触发Transfer事件。

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

    transferFrom:从地址_from发送_value个token到地址_to,必须触发Transfer事件。 transferFrom方法用于提现流程,允许合约为你转移token。这可以用于允许合约为你转让代币或收取费用。除非帐户_from有意通过某种机制授权消息的发送者,否则该方法应该throw。

    注意:_value=0必须被视为正常转账并触发Transfer事件。

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

    approve:允许_spender多次从你的帐户提现,最高数量是_value。 如果再次调用此函数,它将以_value覆盖当前的值。

    注意:为了防止向量攻击,客户端需要确认以这样的方式创建用户接口,即在为同一个花费者设置另一个值之前,先将它的值设置为0。虽然合约本身不应该强制执行,以前部署的合同允许向后兼容。

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

    allowance:返回被允许从_owner提取到_spender余额。

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

    2)event

    Transfer:当token被转移(即使是0值)时必须被触发。

    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)

  5. 实施

    在以太坊网络上已经部署了大量符合ERC20标准的代币(查询:https://etherscan.io/tokens)。从节省gas到提高安全性,不同权衡的团队已经编写了各种不同的合约方案。

    合约实例:

    OpenZeppelin implementation

    对照一个新版本

    ConsenSys implementation


  6. 历史

    本标准的相关历史链接:

  7. 版权

    版权和相关权利通过CC0许可协议放弃。

OpenZeppelin的 ERC-20 智能合约扩展

OpenZeppelin 是构建在 EVM 之上的开源智能合约开发工具,让开发者可以安全地开发和管理智能合约和 Dapp。OpenZeppelin ERC-20库提供了一系列的扩展,提高了其功能性和安全性。ERC-20通证创建者可以根据项目需求灵活地选用和组合这些扩展,从而实现具有丰富功能和更高安全性的 ERC-20 通证。这些扩展包括:

  1. Mintable:允许特定账户(外部账户或合约账户)创建新的通证。

  2. Burnable:允许通证持有者销毁一定数量的通证,从而减少总供应量。

  3. Pausable:允许合约拥有者在紧急情况下暂停合约的所有交易和功能。

  4. Permit:允许用户通过签名授权他人代表自己进行通证转移,而无需在链上执行 approve()。

  5. Votes:为通证持有者提供投票功能,可用于事务决策。

  6. Flash Minting:闪电造:允许用户临时铸造大量通证,用于闪电贷等金融应用。

  7. Snapshots:快照:捕捉特定时间点的通证持有情况,用于分红、投票等应用。

  8. Access control:通过角色和权限管理来限制特定功能的访问。

  9. Ownable:将合约的所有权赋予某个地址,该地址可以管理合约的某些功能。

  10. Roles:为合约中的功能分配不同的角色,每个角色可以拥有特定的权限。

OpenZeppelin的ERC-20扩展库大大丰富了ERC-20的功用,但他们没有直接抛弃ERC-20,构建成新的通证标准,有两个原因:

其一是如果创建新的通证标准,与ERC-20割裂,就会给整个行业带来应用上的负担甚至打击。采用扩展库的优势是它只会推动整个行业的发展。

其二是扩展本身是可升级的。EIP因为升级后果复杂,则无升级机制。这样应用起来更灵活。

ICO爆发:ERC-20通证标准的应用

ICO是Initial Coin Offering的简称,顾名思义,就是项目方以初始产生或者首批公开发行的通证(代币)作为回报的一种众筹资金的方式。

ICO在很大程度上借鉴了证券业的Initial Public Offering(首次公开发行,IPO)。之所以没有沿用IPO而改为ICO,主因是传统的IPO(首次公开募股,initial public offerings)的门槛非常高而且涉及到跨国就更是难上加难。区块链业界删繁就简,采用了新的概念及新的模式,在突破障碍的同时规避了法律风险。

用最简单的话说:ICO就是项目方发行一种自己的通证,投资者用ETH或其它通证来兑换该通证。

有个别通证+收益分红模式(不同于股权模式)的区块链项目的众筹,采用过ITO(Initial Token Offering)这一名称,但因为我们知道只有符合ERC-20的通证才用于众筹,大众又更熟悉Coin,所以现在约定俗成,都采用ICO(Initial Coin Offering)。

典型的ICO流程与特点为:

  1. 核心团队通过专业会议等各种渠道发布ICO消息。

  2. 核心团队发布ICO规则,包括ICO的时间安排和融资额的安排。譬如最低融资额,如果达不到该额度,该ICO即告失败,所有投资都会被退回。有的项目同时会设定最高投资额(硬顶),达到该投资额,则ICO提前结束。

  3. ICO开启后,现在越来越多的项目只接受ETH,因为通过以太坊的智能合约,可以让ICO过程实现零人工、零差错。个别项目还像以前那样接受以太币、比特币等多种数字加密货币。

  4. ICO结束后,代币就会开始上交易所。

2015年11月创建、2017年9月11日定稿的ERC20通证标准,2017年4月提前爆发于ICO。这里面有多重原因:

  • 真正抗审查

  • 真正实现了全球范围的投融资

  • 极低的投融资成本

  • 极高的投融资效率(超快的转账速度、超快的融资速度)

  • 第一次实现了平等的投资权利

  • 真实的市场估值

  • 最高的流动性溢价

  • 零差错、零人工

以下为各种投融资手段的对比:

前面我们提过,以太坊早在2014年就通过ICO筹集了发展基金,为什么是2017年ICO才大爆发?

这里面有区块链知识传递和区块链项目发展的原因,还有一个很重要的原因就在于ETH和ERC20通证标准。2017年前ICO的主要币种为比特币,但比特币到账时间长达1小时,ETH一次确认只需要9秒,到帐通常不足2分钟。而且比特币网络堵塞,有很多转账无法完成;加上比特币2017年没有智能合约可用,通常还需要用户到官网注册,ERC20通证标准的出现,才实现了ICO的质变!

ICO的爆发,归功于ERC20通证标准,也是智能合约的第一个爆点!

ERC-20通证标准带来的问题

  1. 人人能自由发币听上去实现了哈耶克在《货币的非国家化》里提出的理想。但人人能自由发币与各国政府印钞有什么本质的区别吗?

  2. 人人能自由发币加上中本聪带来的匿名性,造成了区块链欺诈(scam)成行!经过五六年的肆虐,这个行业已经完全无诚信可言!

最后更新于