比较ERC20,ERC223和新的以太坊ERC777令牌标准

大家都很熟悉ERC20令牌,因为您可能拥有一对,并通过某种令牌销售进行分发。但是您是否知道除ERC20之外还有更多其他标准?以太坊拥有悠久的开发标准历史.

为了让您更好地了解ERC的含义,它代表“以太坊请求发表评论”。这是一个供讨论的建议和对实际标准的建议。数字(如20)是指代码共享平台上的发行号 Github. 首先,让我们看一下ERC20标准.

ERC20标准

ERC20标准到底是什么?

ERC20代币的问世彻底改变了加密货币市场,并为通向众多货币市场的大门打开了大门。 ICO加密货币 该项目预测了2017年见证的世界。2015年推出的ERC20代码概述了给定基于以太坊的令牌必须部署的特定规则列表,从而简化了在以太坊的区块链上对令牌功能进行编程的过程。基本上,ERC20代币是利用以太坊区块链的特殊形式的智能合约.

ERC20代币最突出的例子包括Bancor,EOS,Tronix,BNB,VeC​​hain和Bankex.

在为以太坊令牌开发ERC20标准之前,编码人员必须创建特定的实施标准,以开发令牌并在以太坊网络上启动它。尽管如此,由于简化的协议和智能合约标准,ERC20令牌代码简化了令牌的创建过程。 ERC20代码减轻了与实施代币智能合约相关的复杂性,从而大大降低了破坏代币合约的可能性.

截至2018年4月, 66,468个ERC20代币合约, 由于ERC20标准提供的令牌代码的统一性,这使得加密货币交易所可以轻松地在其交易平台上列出各种令牌。因此,ERC20标准已帮助加密货币社区克服了可能导致大量基于以太坊的代币相关联的流动性问题.

ERC20令牌功能:

ERC20代码概述了令牌的六个特定功能,它们是

1-通过 "总供应" 功能

2-检索与该账户相关联的另一个账户的代币余额 "_所有者" 通过的地址 " balanceOf(address _owner)常量返回(uint256 balance)" 功能.

3-发送特定数量的令牌 "_价值" 通过 " transfer(地址_to,uint256 _value)返回(布尔成功)" 功能.

4-发送特定数量的令牌 "_价值" 从一个令牌(合约)地址到另一令牌(合约)地址,通过 "transferFrom(address _from,address _to,uint256 _value)返回(布尔成功)" 功能.

5-允许特定帐户重复从某人的帐户中提取代币,同时预定义将要使用的代币提取上限。 "_价值" 范围。这可以通过 "批准(address _spender,uint256 _value)返回(布尔成功)". 提款上限,即 "_价值" 参数,调用该函数时可以覆盖.

6-返回代币的剩余数量,在代币允许使用的上限所定义的预设数量内 "_spender" 从账户中提款 "_所有者". 这可以通过 "allowance(地址* _owner *,地址* _spender *)常量返回(剩余uint256)" 功能.

ERC20代码定义的这六个功能代表了基石功能性问题,其中包括如何在不同帐户之间转移这些令牌以及用户如何检索与给定ERC20令牌关联的数据。规定这些功能组是为了确保基于以太坊的代币在以太坊平台的任何部分中都具有相似的功能。因此,所有符合以太币的加密货币钱包也将支持基于ERC20标准的代币.

严重错误:

ERC20 是以太坊的第一个令牌标准。与新代码一样,它包含一些错误或逻辑错误。 ERC20假定执行令牌交易的两种方式。首先,转移功能可让您将令牌发送到某人的地址。如果您想将令牌存入智能合约,则应使用“ approve + transferFrom”组合。您应授权此合同通过批准功能提取代币。然后,您需要调用合约的功能,该功能将处理您的存款并通过transferFrom函数提取代币.

如果您将令牌意外地存入具有转移功能的合同该怎么办?交易将成功,但是接收方合同不会识别该交易。例如,如果您将令牌发送到去中心化交易所合约,则交易所合约将收到您的令牌,但不会将此令牌记入您的交易所令牌余额中。此外,如果分散交易合同没有执行紧急代币提取功能,那么无论如何都无法取回您的代币,从而导致代币的永久丢失。由于这个错误,以太坊生态系统已经损失了数百万美元.

为什么我们仍然使用ERC20标准?

Reddit用户 u / Dexaran, ERC223标准的创造者,是最早将上述错误通知社区的开发人员之一。我们问他,即使在知道此严重错误的情况下,为什么ERC20仍被如此广泛地使用。他给出了以下原因:

  1. 由于代币开发者为其行为承担刑事责任.
  2. 因为以太坊基金会仍在推广ERC20令牌标准,即使它已知包含错误。与TheDAO之前的情况相同。他们需要说 "现在停止" 但他们不会.
  3. 因为代币开发的主要原因是资金的获取,而不是产品的创造.
  4. 因为使用不同的标准将导致更高的网络效果。考虑到以太坊网络已经存在可扩展性问题,这并不是我们真正需要的.

ERC223标准

ERC223 该标准是由u / Dexaran提出的,他帮助创建了本文。 ERC223是一种令牌标准,它允许令牌传输完全像以太币交易一样。 ERC223利用事件处理(将事务视为事件)来防止令牌在未处理的事务中丢失。改进后的标准通过使转账功能在无效转账上抛出错误并取消交易,从而解决了ERC20的严重错误,从而避免了资金损失。简而言之,ERC223专注于 安全.

增加和问题

ERC223在传递函数中添加了一个额外的数据参数,以实现比令牌传递更复杂的操作.

Dexaran的主要担心是,太多的人可能会通过使用传递函数(而不是如前所述的approve和transferFrom方法)将其发送至合同而丢失其令牌。他的解决方案是修改传输方法,以检查接收地址是否为合同(即包含数据)。如果它是合同,则假定有一个tokenFallback函数可对其进行回调。主要缺点是,如果tokenFallback不存在,则将调用接收合同的后备功能,并且所发送的令牌可能仍会丢失.

ERC777标准

ERC777 是一种新的可替代令牌标准,它依赖于ERC820(合同伪自省注册表),并试图解决ERC20的问题,例如缺少导致以太坊生态系统损失数百万美元的交易处理机制。简而言之,ERC777专注于 采用 通过提供一个 广泛的交易处理机制.

好处

ERC777的主要优点是它使用了一种识别合同接口的新方法。该标准假定以太坊网络上有一个中央合同注册中心(在ERC820中定义)。每个人都可以调用此注册表来知道某个地址(该地址是否为合同都无关紧要)是否支持某些功能集,即“接口”。.

以太坊的主要问题之一是无法知道合同执行的功能。 ERC820旨在解决此问题。 ERC777利用了这种方法,这绝对是一个好主意.

另一方面,您可以创建一个令牌,该令牌将实现ERC20的默认功能以及新的ERC777功能,而不会进行覆盖(并且可以选择继承ERC20的严重错误)。这可以保证此新令牌标准的良好网络效果并加快采用速度。正如实践所示,代币开发者的主要目标是筹集资金,这是假设他们需要将其代币推向交易所的。对于交易所来说,更容易支持实现传统ERC20功能的令牌(这些功能是否包含bug无关紧要),而无需对新令牌标准的新功能进行任何研究。交易所越容易在新标准上支持令牌,则更多的开发人员将使用它。这促进了ERC777的采用,而ERC223缺少此属性.

有什么不同?

该令牌标准定义了一组全新的功能,即“发送”功能而不是“转移”功能。 “ authoriseOperator”而不是“ approve”。 `tokensReceived`处理函数而不是`tokenFallback`处理函数.

这种方法可以确保该标准的功能不会与任何其他令牌标准的功能交叉和覆盖,因此可以使令牌同时与ERC777和ERC820标准兼容.

最后,ERC777进行了标准化 薄荷和烧伤 代币的功能.

故障点和安全问题

ERC777实现了“ authoriseOperator”功能,该功能允许某人代表您管理令牌。 Dexaran向我们解释说,他认为此方法已被弃用,不应使用。此外,授权某人代表您管理令牌会损害网络的带宽并需要更多的资源。 “ authoriseOperator”已经代表一项交易,而执行另一项交易则需要另一项交易 "授权提款". 因此,需要两笔交易才能执行转帐,而只需一笔交易即可完成.

接下来,ERC777标准包含一个可选标志,以通过对ITokenRecipient接口进行一些检查来防止令牌被卡住,并检查地址是否被列入白名单。由于此标准侧重于处理价值数百万美元的令牌的网络的安全性,因此将这些检查设为可选不是一件好事.

其他标准

还有许多其他标准,例如 ERC827 结合了ERC223的一些优势和旧版ERC20功能。这 ERC664 标准着重于令牌标准的模块化。该标准允许令牌合约可升级,但它继承了ERC20严重错误。其他标准包括ERC721,ERC677和ERC820,但鲜为人知.

标准之间的兼容性

我们问Dexaran哪些标准是向后兼容的。他告诉我们,我们首先应该理解“向后兼容性”的含义:“向后兼容性是系统,产品或技术的属性,可以与较旧的旧系统或为此系统设计的输入进行互操作。”

ERC20 & ERC223: ERC223令牌与ERC20兼容。旨在与ERC20正常配合使用的所有物品(如钱包)也可以与ERC223配合使用。这里唯一的例外是依赖批准+ transferFrom令牌存放模式的合同。但是,可以使用ERC223令牌实现批准+ transferFrom函数,即使它们现在不包含在标准中。对于不是智能合约的钱包和任何第三方服务,它们会自动支持ERC223,因为ERC20令牌的输入呼叫数据对ERC223有效.

ERC20 & ERC777:您可以在ERC777提案的“向后兼容性”部分中找到以下声明:“此EIP不会引入向后兼容性,并且与较早的ERC-20令牌标准兼容。”

但是,Dexaran告诉我们完全相反,并举了一个例子:“诸如MetaMask,Mist和MyEtherWallet之类的钱包和服务都在使用ERC20令牌。专为ERC20令牌设计的输入是合同调用,其中包含编码的参数和功能签名。以太坊虚拟机中的函数调用由与事务一起发送的数据的前四个字节指定。这些4字节的签名定义为函数签名的规范表示形式的哈希值的前四个字节。这意味着`transfer(address,uint256)`和`send(address,uint256)`函数将具有不同的签名。结果,为ERC20令牌设计的输入将对ERC777令牌无效。”由于我们使用向后兼容的定义,因此ERC777与ERC20令牌标准不兼容.

何时使用哪个标准

ERC20: Reddit用户u / Dexaran给了我们这个讽刺的建议,“当您希望您的投资者因错误而蒙受损失时。”

ERC223: 该令牌标准也可与ERC777一起使用。 ERC777具有ERC223所缺乏的一些优雅功能,但是与ERC777相比,ERC223的逻辑很简单,可以保证它的一致性 错误代码少. 此外,ERC223并不依赖任何中央服务,这意味着您的ERC223令牌将仅取决于您自己的实现。正如我们前面提到的,ERC223旨在提高安全性,但这使ERC223令牌不符合ERC20标准.

ERC777: 该令牌标准已经可用。另一方面,如上所述,ERC777具有一些安全问题。他们还依赖于中央合同注册中心,这也是一个安全问题。中央注册表可以使开发人员的生活更轻松,但与Parity Multisig一样,它也可以作为失败的中心点。所有奇偶校验Multisigs都依赖于中央代码库。碰巧库中存在一个错误,并且已被利用。结果,所有奇偶校验多重签名都崩溃了。此外,ERC777定义了一组新功能。这是为了允许令牌开发人员为了使采用而使他们的令牌同时与ERC20和ERC777标准兼容。这意味着开发人员可以继承ERC777中的ERC20错误,但允许开发人员使用更多事务处理事件。.

一般来说:所有令牌都有类似的用例-ICO。我要说的是ERC223和ERC777试图以不同的方式解决ERC20的一个问题。 ERC223已经在 以太坊经典 代替ERC20.

本文是在ERC223开发人员Dexaran的帮助下创建的。 Paul Edge对以太坊令牌标准的一些评论也被使用.