欧易OKEx
数字资产服务平台

ERC协议终极解读:ERC-223、ERC-827

从ERC标准发行以来,基于以太坊网络的token被大范围的创造出来并被用于交易,这些代币俨然已经成为以太坊生态系统的支柱。一些企业用这些token作为它们系统内的货币,一些token被当作公司的股权放在交易所上交易,一些token则作为收藏品存在,如加密猫。

ERC-223

ERC-223协议是基于ERC-20开发的,它向后兼容ERC-20。所以ERC-223继承了ERC-20全部的功能,并且解决了下文要讨论的问题。

丢失的token

基于ERC-20协议发行的token在从一个地址转账到智能合约的时候可能发生丢失。如果你不小心调用了钱包里发送token的函数,并且把token发送到了一个不识别该指令的智能合约,那么这些token将卡死在这个智能合约中。更严重的是,因为这个智能合约并不是为该种token设计的,所以这些token将永久的卡在里面。

摘录一段ERC-223 Github项目方对于这个问题的解释:

如果你发送了一笔100 ETH的交易到一个智能合约地址,但是这个智能合约并不是设计为接受以太坊,所以它只会拒收这笔交易,不会有任何不好的事情发生。但是如果你发送 100个ERC-20 token到一个智能合约地址,而这个智能合约并不是为该ERC-20 token设计的,所以它并不会拒收该笔交易,因为它根本无法识别出这笔进账交易。结果是你的这些token将会被永久的卡在这个智能合约地址中。

截至2018年初,下表列出了丢失的ERC-20 token:

1. QTUM, $1,204,273

2. EOS, $1,015,131

3. GNT, $249,627

4. STORJ, $217,477

5. Tronix , $201,232

6. DGD, $151,826

7. OMG, $149,941

8. STORJ, $102,560

每个以太坊智能合约地址对于ERC-20 token都是一个潜在的危险。以上只列出了8种token,实际上被卡在智能合约里的token数量会比上面的多得多。

节能环保

ERC-223智能合约的转账只需要一步,而ERC-20协议转账需要两步。这就是说,ERC-223 token转账只需要消耗一半的gas,所以它会减轻以太坊网络拥堵。

ERC-223 技术详解

了解了ERC-223解决的问题以后,以下为ERC-223协议的构造。

ERC223ReceivingContract

标准的ERC223ReceivingContract必须包含一个tokenFallback函数。

transfer

totalSupply和balanceOf函数已经在ERC-20中讨论过了,ERC-223引入了新的transfer函数。

以上为ERC-223对ERC-20做出的改进,ERC-223引入了transfer函数。这个函数引入一个新的_data参数作为输入。assembly函数被用作获取目标地址代码长度,如果合约地址codeLength大于0,tokenFallback就会被其调用,接受转账操作。如果收款地址的智能合约没有设置tokenFallback函数,或者其他类型的fallback函数来接收资金,这笔token交易就会被自动撤回。

简单来说,ERC-223协议在每次交易前,检查收款方地址的代码字节长度。如果收款地址为一个智能合约,则会检查其是否具有tokenFallback签名的函数。这样就避免了token被卡在智能合约中的问题。

ERC-827

ERC-827是一个可以与ERC-223协议相媲美的协议,ERC-827解决了ERC-223解决的相同问题。ERC-827协议下,将token发送至智能合约时,可以同时传输数据,并且合约会自动执行这些数据。这就意味着除了解决token被卡死在智能合约的问题,ERC-827协议可以解决一些更具体的问题。最近,ERC-827的采用率要高于ERC-223,因为开源合约系统zeppelin采用了ERC-827作为官方支持的协议。

ERC-827官方在提出该EIP时的动机

我们对ERC-20做出的这种扩展,允许了以太坊上的任何token被其他应用程序重新使用,从钱包到去中心化交易所。ERC-20协议虽然被广泛接受,但是它只支持金钱的转移。有了ERC-827,以太坊上的用户在交易时,不但可以转移金钱,同时也可以传输数据。

ERC-827协议就像一个商城里的购物车

购物车里放着即将被购买的商品,但是只有在用户有足够的token时候才可以结账。如果有人向这个购物车转token,同时被传输的是一串请求数据,它调用协议里的一个函数,这个函数自动检查购物车拥有者是否有足够的token,如果有就执行结账操作。

ERC-827 技术详解

ERC-827协议继承了ERC-20协议的全部。ERC-827通过更新ERC-20协议approve,transfer和transferFrom三个函数的签名和逻辑,达到向后兼容ERC-20的目的。

approve

此函数用来授权转账,并且调用另一个函数处理交易中包含的数据信息。

需要注意的是!在此协议下修改额度(allowance),在某些情况下,如交易处理顺序不利时,被授权人可以将修改前后的额度叠加,消费新旧两个额度总和那么多的token。一种解决方案,是先将被授权人的额度将为0,然后重新为他设置额度。

transfer

此函数将一定数量的token转移到指定的地址,并且调用合约中另一个函数来处理交易中包含的数据。如果函数成功被调用,则返回一个true参数。

transferFrom

与transfer函数一样,其功能也是将token从一个地址转到另一个地址,同时调用一个合约内部的函数。不同的是,transferFrom可以与approve函数协同来建立更复杂的逻辑。

猜你喜欢