Alert Source Discuss
🚧 Stagnant Standards Track: ERC

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 标识符 _idlocked(_id) 必须返回常量值 true,并且任何尝试转移 token 的函数,包括 safeTransferFromsafeBatchTransferFrom 函数,都必须抛出异常。

// 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.