ERC-6268: EIP-1155 的不可转移性指示器
EIP-1155 的一个扩展,用于指示 token 的可转移性。
Authors | Yuki Aoki (@yuki-js) |
---|---|
Created | 2022-01-06 |
Discussion Link | https://ethereum-magicians.org/t/sbt-implemented-in-erc1155/12182 |
Requires | EIP-165, EIP-1155 |
摘要
本 EIP 标准化了一个接口,该接口使用 EIP-165 特性检测来指示与 EIP-1155 兼容的 token 的不可转移性。
动机
Soulbound Tokens (SBT) 是不可转移的 token。EIP-5192 标准化了非同质化 SBT,但 Soulbound 半同质化或同质化 token 的标准尚未存在。引入与同质化无关的标准不可转移性指示器可以促进 Souldbound 半同质化或同质化 token 的使用。
规范
本文档中使用的关键词“必须 (MUST)”,“不得 (MUST NOT)”,“必需 (REQUIRED)”,“应 (SHALL)”,“不应 (SHALL NOT)”,“应该 (SHOULD)”,“不应该 (SHOULD NOT)”,“推荐 (RECOMMENDED)”,“不推荐 (NOT RECOMMENDED)”,“可以 (MAY)”和“可选 (OPTIONAL)”按照 RFC 2119 和 RFC 8174 中的描述进行解释。
实现此标准的智能合约必须符合 EIP-1155 规范。
实现此标准的智能合约必须实现 IERC6268
接口中的所有函数。
实现此标准的智能合约必须实现 EIP-165 的 supportsInterface 函数,并且如果通过 interfaceID 参数传递 0xd87116f3
,则必须返回常量值 true。
对于标记为 locked
的 token 标识符 _id
,locked(_id)
必须返回常量值 true,并且任何尝试转移 token 的函数,包括 safeTransferFrom
和 safeBatchTransferFrom
函数,都必须抛出异常。
// SPDX-License-Identifier: CC0-1.0
pragma solidity ^0.8.0;
interface IERC6268 {
/// @notice 当锁定状态更改为锁定时,必须发出 `LockedSingle` 或 `LockedBatch`。
/// @dev 如果一个 token 被铸造并且状态被锁定,则应该发出此事件。
/// @param _id token 的标识符。
event LockedSingle(uint256 _id);
/// @notice 当锁定状态更改为锁定时,必须发出 `LockedSingle` 或 `LockedBatch`。
/// @dev 如果一个 token 被铸造并且状态被锁定,则应该发出此事件。
/// @param _ids token 的标识符列表。
event LockedBatch(uint256[] _ids);
/// @notice 当锁定状态更改为解锁时,必须发出 `UnlockedSingle` 或 `UnlockedBatch`。
/// @dev 如果一个 token 被铸造并且状态被解锁,则应该发出此事件。
/// @param _id token 的标识符。
event UnlockedSingle(uint256 _id);
/// @notice 当锁定状态更改为解锁时,必须发出 `UnlockedSingle` 或 `UnlockedBatch`。
/// @dev 如果一个 token 被铸造并且状态被解锁,则应该发出此事件。
/// @param _ids token 的标识符列表。
event UnlockedBatch(uint256[] _ids);
/// @notice 返回 token 的锁定状态。
/// @dev 分配给零地址的 SBT 被认为是无效的,并且关于它们的查询会抛出异常。
/// @param _id token 的标识符。
function locked(uint256 _id) external view returns (bool);
/// @notice 返回多个 token 的锁定状态。
/// @dev 分配给零地址的 SBT 被认为是无效的,并且关于它们的查询会抛出异常。
/// @param _ids token 的标识符列表。
function lockedBatch(uint256[] _ids) external view returns (bool);
}
原理
需要讨论。
向后兼容性
此提案与 EIP-1155 完全向后兼容。
安全注意事项
需要讨论。
版权
版权及相关权利通过 CC0 放弃。
Citation
Please cite this document as:
Yuki Aoki (@yuki-js), "ERC-6268: EIP-1155 的不可转移性指示器 [DRAFT]," Ethereum Improvement Proposals, no. 6268, January 2022. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-6268.