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 定义了通过 id
和 amount
对 ERC-1155 代币进行细粒度授权的标准函数。此 ERC 扩展了 ERC-1155。
动机
ERC-1155 的普及意味着多代币管理交易每天都在发生。虽然它可以作为 ERC-721 的更全面的替代方案,但 ERC-1155 最常用于其预期用途:创建多个 id
,每个 id
具有多个代币。虽然许多项目与这些半同质化代币交互,但到目前为止最常见的交互是与 NFT 市场。
由于区块链的性质,编程错误或恶意运营商可能会导致资金永久损失。因此,交易必须尽可能地无需信任。ERC-1155 使用 setApprovalForAll
函数,该函数授权具有特定 id
的所有代币。该系统存在明显的最低信任缺陷。此 ERC 结合了 ERC-20 和 ERC-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)
函数必须是 public
或 external
。
allowance(address account, address operator, uint256 id)
函数必须是 public
或 external
,并且必须是 view
。
safeTrasferFrom
函数(由 ERC-1155 定义)必须:
- 如果用户已批准
msg.sender
具有足够的amount
,则不会回退 - 如果
msg.sender
未通过setApprovalForAll
批准,则从批准的数量中减去转移的代币数量
此外,safeBatchTransferFrom
必须:
- 添加一个额外的条件,检查所有
ids
的allowance
是否具有批准的amounts
(参见_checkApprovalForBatch
函数参考实现)
当批准一定数量的代币时,必须发出 Approval
事件。
当使用 0x1be07d74
调用时,supportsInterface
方法必须返回 true
。
原理
选择名称“ERC-1155 授权扩展”是因为它是对此 ERC 的简洁描述。用户可以通过 id
和 amount
将其代币授权给 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.