🐷13 ERC系列标准2
[TOC]
ERC-777 代币标准
ERC-777 是一个易于交易的通证标准,改进现有的 ERC-20 标准。
ERC-777 增加了钩子函数,规定了代币小数位 18位,使用适当的事件进行铸造和燃烧等等。
ERC-777 的实现 https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC777/ERC777.sol 。
ERC-777 的接口说明 https://eips.ethereum.org/EIPS/eip-777 。
与ERC20相比,ERC777有以下方面的优势:
任何合约都可以定义收到代币时触发的
tokensReceived事件,这避免了在ERC20代币 中存在的双重调用问题。合约和常规地址都可以通过注册一个
tokensToSend或tokensReceivedFunction函数来控制拒绝发送或接收的代币,避免 ERC20 代币中存在的代币卡死问题。代币持有者可以授权或回收管理其代币的操作员权限。这些操作员通常是交易所 合约或自动收费系统中的支付处理器。
每个代币交易都包含
userData数据字段,在操作员操作时也有类似的operatorData字段,从而可以自由地将数据传递给接收方。可以后向兼容那些不支持
tokensReceived函数的钱包。
ERC-1155 多通证标准
ERC-1155 的特点是它使用单个智能合约一次代表多个代币。这就是为什么它的
balanceOf功能不同于 ERC20 和 ERC777 的原因,它有一个额外的id参数,用于您要查询余额的代币的标识符。
这类似于 ERC721 的处理方式,但在该标准中,代币id没有平衡的概念:每个代币都是不可替代的,存在或不存在。ERC721balanceOf函数是指一个账户有多少不同的代币,而不是每个有多少。另一方面,在 ERC1155 账户中,每个代币都有不同的余额id,不可替代的代币是通过简单地铸造其中一个来实现的。
这种方法可以为需要多个代币的项目节省大量气体。无需为每种代币类型部署新合约,单个 ERC1155 代币合约可以保存整个系统状态,从而降低部署成本和复杂性。
这个标准用于链游的场景非常合适。
非同质化代币
当供应量仅为 1 时,代币本质上就是一个非同质化的代币 (NFT)。 按照 ERC-721 的标准可以定义一个元数据 URI,客户端可以读取并修改 URI。但是 1155 原生的实现 ERC1155 中使用的是 baseUri/{id} 的形式作为指向元数据 URI,十分不灵活,具体使用时要进行改造。
ERC-1155 做 NFT 的元数据扩展
有些不同的平台已经要求不论 ERC721 还 1155 作 NFT 都以 1155 的元数据扩展文件为准。
1155 文档 https://eips.ethereum.org/EIPS/eip-1155 。
properties:数组为特定于令牌的显示属性和元数据提出了一些建议的格式。
EIP-1167 最小代理合约
EIP-1167 是代理合约的一个实现标准,被称为最小代理合约,但它不是以可升级合约为目的,而是以复用合约代码为目的。是为了避免重复部署同样的合约代码,取而代之的是只部署一次合约代码,当需要一份拷贝的时候,就只需要部署一个简单的代理合约。代理合约使用 delegatecall 来调用合约代码,代理合约有自己的地址、存储插槽和以太余额等。主要目的是为了节约 Gas。它应用场景主要是批量创建合约,例如需要根据不同情况动态部署合约,需要方便并且低成本去生成和部署合约,类似编程中常见的工厂模式,不需要关系的对象的具体创建逻辑,只需要根据暴露的接口就可以创建出想要的对象,将克隆出来的合约调用都委派到一个已知的 EIP-1167 合约地址中。
Last updated