ERC-20及其不足:ERC-777和ERC-1820的崛起
最著名的以太坊评测请求(ERC)是ERC-20,它促进了去中心化应用程序(dApps),令牌和令牌标准的增长,这些服务将区块链社区作为创建令牌的蓝图。
以太坊最重要的承诺之一就是消除中介,实质上是消除我们在没有中央授权的情况下直接相互交易所的能力,这是ERC-20的一项基本原则。但是,这种能力并非没有易错性,我们没有像今天这样清楚地预见到这一点–即并非所有合约都可以接受所有ERC-20令牌,从而导致大量令牌永久丢失。
在ERC-20下,我们可以将令牌发送到任何以太坊地址,这意味着我们还可以将令牌发送到不支持令牌或没有私钥的合约,从而永久地将其丢失。据估计,丢失的代币价值数千万美元。随着不可替代令牌(NFT)的兴起,理想情况下,我们可以通过一次交易购买NFT,这是迄今为止不可能的。以前,要购买NFT,我们必须完成两次交易。一种是更改分类帐上的余额,另一种是将其转移到智能合约。
approve()
–在您的硬币上。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不使用transfer
和transferFrom
功能,而是使用send
和operatorSend
以避免接口混乱。与完成银行转账时的备注字段类似,ERC-777令牌转账中的“数据”可以是完整的也可以是空的。该tokensReceived
挂钩允许在单个交易中发送和通知合约。而ERC-20需要两次通话(approve
/ transferFrom
)才能实现此目的。
从批准到运营商
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
功能