ERC-20及其不足:ERC-777和ERC-1820的崛起

最著名的以太坊评测请求(ERC)是ERC-20,它促进了去中心化应用程序(dApps),令牌和令牌标准的增长,这些服务将区块链社区作为创建令牌的蓝图。

以太坊最重要的承诺之一就是消除中介,实质上是消除我们在没有中央授权的情况下直接相互交易所的能力,这是ERC-20的一项基本原则。但是,这种能力并非没有易错性,我们没有像今天这样清楚地预见到这一点–即并非所有合约都可以接受所有ERC-20令牌,从而导致大量令牌永久丢失。

在ERC-20下,我们可以将令牌发送到任何以太坊地址,这意味着我们还可以将令牌发送到不支持令牌或没有私钥的合约,从而永久地将其丢失。据估计,丢失的代币价值数千万美元。随着不可替代令牌(NFT)的兴起,理想情况下,我们可以通过一次交易购买NFT,这是迄今为止不可能的。以前,要购买NFT,我们必须完成两次交易。一种是更改分类帐上的余额,另一种是将其转移到智能合约。

  1. approve() –在您的硬币上。
  2. transfer() –在合约方面。

由于最近的努力,现在可以在一次交易中购买NFT。

ERC-223的努力

ERC-223具有ERC-20的所有功能,但它还会检查智能合约是否可以接受令牌。ERC-223接收器可以调用一个函数,因此也可以用于购买NFT。

根据ERC-223,要使合约能够接收令牌,它必须实现ERC-223接收器接口。但是,它仍然不如ERC-777完整,后者是为了与ERC-20向后兼容而建立的。解决其主要障碍并避免EIP-223的弱点。

ERC-777简介

ERC-777是对ERC-20的重大改进。ERC-777不只是发送令牌,还定义了令牌的生命周期,从铸造过程开始,然后是发送过程,再到刻录过程结束。它允许其他人(称为“运营商”)管理资金。

从转移(至,金额)到发送(至,金额,数据)

EIP-777不使用transfertransferFrom功能,而是使用sendoperatorSend以避免接口混乱。与完成银行转账时的备注字段类似,ERC-777令牌转账中的“数据”可以是完整的也可以是空的。该tokensReceived挂钩允许在单个交易中发送和通知合约。而ERC-20需要两次通话(approvetransferFrom)才能实现此目的。

从批准到运营商

ERC-777的Solidity合约中的另一个区别是使用的operators功能而不是approve()。ERC-777允许地址持有人授权他人代表他们发送和刻录令牌。此外,令牌持有者在使用其地址时会收到通知。

ERC-1820

ERC-1820是用于检查哪个地址支持哪个接口的注册表。与ERC-777不同,ERC-1820不是令牌标准。这是注册表的标准。

虽然依靠单独的标准可能会有不利之处,但ERC-1820的好处是必须认识到的。例如,它允许ERC-777保持相对简单,而不会增加向其添加注册表的复杂性。也许更重要的是,它允许其他EIP和智能合约基础结构在其用例中利用注册表。

该协议的作者可以选择使协议更加复杂,也可以创建单独的协议,这将导致依赖性问题。奇偶破解是此类依赖关系可能造成哪些问题的一个明显示例。

ERC-777代码和说明

以下代码是https://github.com/ethereum/EIPs/blob/master/EIPS/eip-777.md中 ERC-777合约的基本示例:

interface ERC777Token {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function totalSupply() external view returns (uint256);
    function balanceOf(address holder) external view returns (uint256);
    function granularity() external view returns (uint256);

    function defaultOperators() external view returns (address[] memory);
    function isOperatorFor(
        address operator,
        address holder
    ) external view returns (bool);
    function authorizeOperator(address operator) external;
    function revokeOperator(address operator) external;

    function send(address to, uint256 amount, bytes calldata data) external;
    function operatorSend(
        address from,
        address to,
        uint256 amount,
        bytes calldata data,
        bytes calldata operatorData
    ) external;

    function burn(uint256 amount, bytes calldata data) external;
    function operatorBurn(
        address from,
        uint256 amount,
        bytes calldata data,
        bytes calldata operatorData
    ) external;

    event Sent(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256 amount,
        bytes data,
        bytes operatorData
    );
    event Minted(
        address indexed operator,
        address indexed to,
        uint256 amount,
        bytes data,
        bytes operatorData
    );
    event Burned(
        address indexed operator,
        address indexed from,
        uint256 amount,
        bytes data,
        bytes operatorData
    );
    event AuthorizedOperator(
        address indexed operator,
        address indexed holder
    );
    event RevokedOperator(address indexed operator, address indexed holder);
}

ERC-777定义了令牌的整个生命周期,包括令牌的铸造(4),发送(3)和刻录(5)。以下是该协议的功能和事件。有关更多详细信息,请阅读官方EIP-777 Github页面

查看功能

  • name
  • symbol
  • totalSupply
  • balanceOf
  • granularity

经营者

  • AuthorizedOperator 事件
  • RevokedOperator 事件
  • defaultOperator 功能
  • authorizeOperator 功能
  • revokeOperator 功能
  • isOperatorFor 功能

发送令牌

  • Sent 事件
  • Send 功能
  • operatorSend 功能

造币

  • Minted 事件

销毁令牌

  • Burned 事件
  • burn 功能
  • operatorBurn 功能

进一步阅读

  1. https://medium.com/coinmonks/erc-777-a-new-advanced-token-standard-c841788ab3cb
  2. https://github.com/ethereum/EIPs/issues/777
  3. https://github.com/0xjac/ERC777
  4. https://eips.ethereum.org/EIPS/eip-777
提示:投资有风险,入市需谨慎,本资讯不作为投资理财建议。请理性投资,切实提高风险防范意识;如有发现的违法犯罪线索,可积极向有关部门举报反映。
你可能还喜欢