Alert Source Discuss
📢 Last Call Standards Track: ERC

ERC-5216: ERC-1155 授权扩展

用于 ERC-1155 安全授权的扩展

Authors Iván Mañús (@ivanmmurciaua), Juan Carlos Cantó (@EscuelaCryptoES)
Created 2022-07-11
Last Call Deadline 2022-11-12
Requires EIP-20, EIP-165, EIP-1155

摘要

此 ERC 定义了通过 idamountERC-1155 代币进行细粒度授权的标准函数。此 ERC 扩展了 ERC-1155

动机

ERC-1155 的普及意味着多代币管理交易每天都在发生。虽然它可以作为 ERC-721 的更全面的替代方案,但 ERC-1155 最常用于其预期用途:创建多个 id,每个 id 具有多个代币。虽然许多项目与这些半同质化代币交互,但到目前为止最常见的交互是与 NFT 市场。

由于区块链的性质,编程错误或恶意运营商可能会导致资金永久损失。因此,交易必须尽可能地无需信任。ERC-1155 使用 setApprovalForAll 函数,该函数授权具有特定 id 的所有代币。该系统存在明显的最低信任缺陷。此 ERC 结合了 ERC-20ERC-721 的思想,以创建一种信任机制,所有者可以允许第三方(例如市场)批准一个 id 的有限(而不是无限)数量的代币。

规范

本文档中的关键词“必须”,“禁止”,“需要”,“应该”,“不应该”,“推荐”,“可以”和“可选”应按照 RFC 2119 中的描述进行解释。

使用此 ERC 的合约必须实现 IERC5216 接口。

接口实现

/**
 * @title ERC-1155 Allowance Extension
 * 注意: 此接口的 ERC-165 标识符是 0x1be07d74
 */
interface IERC5216 is IERC1155 {

    /**
     * @notice 当 `account` 授予或撤销 `operator` 转移其代币的权限时发出,根据 `id` 和数量:`amount`。
     */
    event Approval(address indexed account, address indexed operator, uint256 id, uint256 amount);

    /**
     * @notice 授予 `operator` 转移调用者代币的权限,根据 `id` 和数量:`amount`。
     * 发出一个 {Approval} 事件。
     *
     * 要求:
     * - `operator` 不能是调用者。
     */
    function approve(address operator, uint256 id, uint256 amount) external;

    /**
     * @notice 返回分配给 `operator` 的数量,该数量被批准用于转移 `account` 的代币,根据 `id`。
     */
    function allowance(address account, address operator, uint256 id) external view returns (uint256);
}

approve(address operator, uint256 id, uint256 amount) 函数必须是 publicexternal

allowance(address account, address operator, uint256 id) 函数必须是 publicexternal,并且必须是 view

safeTrasferFrom 函数(由 ERC-1155 定义)必须:

  • 如果用户已批准 msg.sender 具有足够的 amount,则不会回退
  • 如果 msg.sender 未通过 setApprovalForAll 批准,则从批准的数量中减去转移的代币数量

此外,safeBatchTransferFrom 必须:

  • 添加一个额外的条件,检查所有 idsallowance 是否具有批准的 amounts(参见 _checkApprovalForBatch 函数参考实现)

当批准一定数量的代币时,必须发出 Approval 事件。

当使用 0x1be07d74 调用时,supportsInterface 方法必须返回 true

原理

选择名称“ERC-1155 授权扩展”是因为它是对此 ERC 的简洁描述。用户可以通过 idamount 将其代币授权给 operator

通过以类似于 ERC-20 的方式进行批准和撤销,信任级别可以由用户更直接地管理:

  • 使用 approve 函数,用户可以批准一个 operator 为每个 id 花费一定 amount 的代币。
  • 使用 allowance 函数,用户可以查看一个 operator 对每个 id 的授权。

由于与 ERC-20 授权的相似性,使用了 ERC-20 的命名模式。

向后兼容性

此标准与 ERC-1155 兼容。

参考实现

参考实现可以在这里找到。

安全考虑

此 ERC 的用户必须彻底考虑他们授予 operators 权限的代币数量,并且应撤销未使用的授权。

版权

版权及相关权利通过 CC0 放弃。

Citation

Please cite this document as:

Iván Mañús (@ivanmmurciaua), Juan Carlos Cantó (@EscuelaCryptoES), "ERC-5216: ERC-1155 授权扩展 [DRAFT]," Ethereum Improvement Proposals, no. 5216, July 2022. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-5216.