Alert Source Discuss
🚧 Stagnant Standards Track: ERC

ERC-5633: 可组合的 Soulbound NFT,EIP-1155 扩展

向 EIP-1155 token 添加可组合的 soulbound 属性

Authors HonorLabs (@honorworldio)
Created 2022-09-09
Discussion Link https://ethereum-magicians.org/t/composable-soulbound-nft-eip-1155-extension/10773
Requires EIP-165, EIP-1155

摘要

此标准是 EIP-1155 的扩展。它提出了一个智能合约接口,可以表示任意数量的 soulbound 和非 soulbound NFT 类型。Soulbound 是指 token 的一种属性,可以防止 token 在账户之间转移。此标准允许每个 token ID 拥有自己的 soulbound 属性。

动机

类似于《魔兽世界》中 soulbound 物品的 soulbound NFT 正在以太坊社区中引起越来越多的关注。在像《魔兽世界》这样的真实游戏中,有成千上万的物品,每个物品都有自己的 soulbound 属性。例如,护身符“卡莉西亚项链”具有 soulbound 属性,但另一个低等级的护身符则没有。此提案提供了一种标准的方法来表示可以与非 soulbound NFT 共存的 soulbound NFT。在一个合约中为一个完整的集合设计可组合的 NFT 很容易。

此标准概述了一个 EIP-1155 接口,允许钱包实现者和开发者使用 EIP-165 检查 token ID 的 soulbound 属性。可以提前检查 soulbound 属性,并且只有在 token 不是 soulbound 时才能调用 transfer 函数。

规范

本文档中的关键词“必须(MUST)”、“禁止(MUST NOT)”、“必需(REQUIRED)”、“应(SHALL)”、“不应(SHALL NOT)”、“应该(SHOULD)”、“不应该(SHOULD NOT)”、“推荐(RECOMMENDED)”、“可以(MAY)”和“可选(OPTIONAL)”应按照 RFC 2119 中的描述进行解释。

如果函数 isSoulbound(uint256 id) 返回 true,则具有 uint256 id 的 token 类型是 soulbound。在这种情况下,合约中所有将 token 从一个帐户转移到另一个帐户的 EIP-1155 函数都必须抛出异常,除了 mint 和 burn。

// SPDX-License-Identifier: CC0-1.0
pragma solidity ^0.8.0;

interface IERC5633 {
  /**
   * @dev 当 token 类型 `id` 设置或取消为 soulbound 时,根据 `bounded` 发出事件。
   */
  event Soulbound(uint256 indexed id, bool bounded);

  /**
   * @dev 如果 token 类型 `id` 是 soulbound,则返回 true。
   */
  function isSoulbound(uint256 id) external view returns (bool);
}

实现此标准的智能合约必须实现 EIP-165 supportsInterface 函数,并且如果通过 interfaceID 参数传递 0x911ec470,则必须返回常量值 true。

理由

如果合约中的所有 token 默认都是 soulbound,则在实现过程中,isSoulbound(uint256 id) 应该默认返回 true。

向后兼容性

此标准与 EIP-1155 完全兼容。

测试用例

测试用例包含在 test.js 中。

在终端中运行:

cd ../assets/eip-5633
npm install
npx hardhat test

测试合约包含在 ERC5633Demo.sol 中。

参考实现

请参阅 ERC5633.sol

安全考虑

没有与此标准的实现直接相关的安全考虑。

版权

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

Citation

Please cite this document as:

HonorLabs (@honorworldio), "ERC-5633: 可组合的 Soulbound NFT,EIP-1155 扩展 [DRAFT]," Ethereum Improvement Proposals, no. 5633, September 2022. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-5633.