什么是ERC?
ERC(Ethereum Request for Comment)是以太坊的意见征求稿(RFC)版本,由互联网工程任务组设计。RFC中包含了以太坊的技术和组织说明,ERC则包含一些以太坊网络构建技术指南。
ERC标准是由以太坊开发人员为以太坊社区编写的。他们为了给以太坊平台创建标准,提交了以太坊改进建议( EIP )——包括协议规范和合同标准。如果EIP被委员会批准并最终确定,它就成为了一个ERC。
这些被委员会批准确定的EIP,为以太坊开发人员提供了一套可行的ERC标准。由于EIP的接口是开放的,所以开发人员可以基于这些标准之上构建智能合约。其中ERC-20是整个加密社区中最流行的标准,以太坊平台上的所有通证都使用这一标准。下面我们就来了解什么是ERC-20标准,以及其他的一些ERC标准。
什么是ERC-20标准
ERC-20标准包括以下方法:
-
totalSupply()
:返回token的总供应量。 -
balanceOf(address _owner)
:指定账户地址的账户余额。 -
transfer(address _to, uint256 _value)
:发送一笔交易,发送数量为_value的token到地址_to,触发Transfer事件。 -
transferFrom(address _from, address _to, uint256 _value)
:从地址_from发送数量为_value的token到地址_to,触发Transfer事件。 -
approve(address _spender, uint256 _value)
:允许_spender提取一定数量的金额。 -
allowance(address _owner, address _spender)
:返回允许_spender从_owner提取的金额。
以上这些方法将会触发以下事件:
-
transfer(address indexed _from, address indexed _to, uint256 _value)
:当token被转移时则会触发。 -
approval(address indexed _owner, addressindexed _spender, uint256 _value)
:成功调用approve方法后则会触发。
ERC-20标准于2015年被提出,并于2017年9月正式确定,这是通证标准化的一个很好的开始。但是,社区中的一些开发人员指出,这个标准存在缺陷和漏洞。另外,有些用例的确需要使用不同的标准,下面介绍一些其他的ERC标准。
ERC-223
状态:打开
提出日期:2017年5月3日
开发人员Dexaran详细描述了ERC-223标准适用的两种场景:
在ERC20通证标准中执行交易有两种方式:
1.transfer方法。
2.approve + transferFrom 机制。
Token余额只是通证合约中的一个变量。
Token的交易在合约中的表现是变量的变化:转出账户的余额将减少,接收账户的余额将增多。
交易发生时, transfer方法不会通知接收账户,接受账户也将无法识别传入交易!下面是我写的一个例子,来展示导致交易未处理和资金损失的过程 。
如果接收账户接受到的是合约,用户必须使用approve +transferFrom 机制来转移通证;如果接收账户是外部帐户地址,用户必须通过 transfer方法转移Token;如果选择了错误的方法,token将被卡在合约中(合约将不会识别交易),那么,我们将无法提取这些被卡住的token。
ERC-621
状态:打开
提出日期:2017年5月1日
ERC-721
状态:打开
提出日期: 2017年9月22日
ERC-721通证标准可以在任何一个交易中使用,但通证的价值则是“与每个通证相关联的唯一性和稀缺性的结果”。该标准的函数包括name,
symbol
, totalSupply
, balanceOf
, ownerOf
,approve
, takeOwnership
, transfer
, tokenOfOwnerByIndex
, tokenMetadata
。
ERC-721标准还定义了两个事件:Transfer
和Approval
。Gerald Nash(杰拉尔德·纳什)的文章就很好地解释了可互换性这一概念。
ERC-827
状态:打开
建议日期:2018年12月1日
ERC-20标准的另一个扩展是ERC-827标准,它允许用户转移Token,持有者也能允许第三方使用Token。以太坊上的Token可以被其他应用程序重用,这其中也包括钱包和交换机。在需要支持第三方动态消费限额调整时,这一点非常有用。另外,最重要的一点是,由于它是ERC-20标准的扩展,所以它也跟ERC-20标准兼容。
该标准中的一些方法如下所示:
transferFrom
(address_from, address _to, uint256 _value, bytes _data) returns (bool success)
function approve
(address_spender, uint256 _value, bytes _data) returns (bool success)
以上这些就是目前为止,几个有趣的标准化提案!