4.5 ERC-20通证标准及其爆发性应用
ERC-20通证标准
ERC-20(又常被写作ERC20)通证标准是在以太坊平台上通过智能合约制订的通证标准。
我们常常把以ERC-20通证标准发行出来的通证,叫做“代币”。但请注意,Bitcoin是代币,ETH也是代币,但在以太坊生态里首创的ERC-20是一个通证标准而非代币标准。区块链以通证(Token)取代代币(Coin)是一次伟大的飞跃!
ERC20让开发者能够基于智能合约执行以下操作:
制定通证总供应量
获得账户余额
转帐通证
批准转账通证
以下内容翻译自:https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md
概述
ERC20是通证(token)的一种标准接口。
摘要
本标准允许在智能合约中部署token的标准API。 该标准提供了转移token的基本功能,并允许token被批准,以便链上其它第三方可以使用它们。
动机
这一标准接口可以让以太网上的任何token可以被其他应用程序再利用:从钱包到去中心化的交易所。
技术参数
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)
实施
在以太坊网络上已经部署了大量符合ERC20标准的代币(查询:https://etherscan.io/tokens)。从节省gas到提高安全性,不同权衡的团队已经编写了各种不同的合约方案。
合约实例:
(对照一个新版本)
版权
版权和相关权利通过CC0许可协议放弃。
OpenZeppelin的 ERC-20 智能合约扩展
OpenZeppelin 是构建在 EVM 之上的开源智能合约开发工具,让开发者可以安全地开发和管理智能合约和 Dapp。OpenZeppelin ERC-20库提供了一系列的扩展,提高了其功能性和安全性。ERC-20通证创建者可以根据项目需求灵活地选用和组合这些扩展,从而实现具有丰富功能和更高安全性的 ERC-20 通证。这些扩展包括:
Mintable:允许特定账户(外部账户或合约账户)创建新的通证。
Burnable:允许通证持有者销毁一定数量的通证,从而减少总供应量。
Pausable:允许合约拥有者在紧急情况下暂停合约的所有交易和功能。
Permit:允许用户通过签名授权他人代表自己进行通证转移,而无需在链上执行 approve()。
Votes:为通证持有者提供投票功能,可用于事务决策。
Flash Minting:闪电造:允许用户临时铸造大量通证,用于闪电贷等金融应用。
Snapshots:快照:捕捉特定时间点的通证持有情况,用于分红、投票等应用。
Access control:通过角色和权限管理来限制特定功能的访问。
Ownable:将合约的所有权赋予某个地址,该地址可以管理合约的某些功能。
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流程与特点为:
核心团队通过专业会议等各种渠道发布ICO消息。
核心团队发布ICO规则,包括ICO的时间安排和融资额的安排。譬如最低融资额,如果达不到该额度,该ICO即告失败,所有投资都会被退回。有的项目同时会设定最高投资额(硬顶),达到该投资额,则ICO提前结束。
ICO开启后,现在越来越多的项目只接受ETH,因为通过以太坊的智能合约,可以让ICO过程实现零人工、零差错。个别项目还像以前那样接受以太币、比特币等多种数字加密货币。
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通证标准带来的问题
人人能自由发币听上去实现了哈耶克在《货币的非国家化》里提出的理想。但人人能自由发币与各国政府印钞有什么本质的区别吗?
人人能自由发币加上中本聪带来的匿名性,造成了区块链欺诈(scam)成行!经过五六年的肆虐,这个行业已经完全无诚信可言!
最后更新于