Alert Source Discuss
Standards Track: ERC

ERC-5192: 最小化的灵魂绑定NFT

用于灵魂绑定 EIP-721 NFT 的最小化接口

Authors Tim Daubenschütz (@TimDaub), Anders (@0xanders)
Created 2022-07-01
Requires EIP-165, EIP-721

摘要

本标准是 EIP-721 的扩展。它提出了一个最小化的接口,使用 EIP-165 的特性检测功能使 token 灵魂绑定。灵魂绑定 token 是一种绑定到单个帐户的非同质化 token。

动机

以太坊社区已经表达了对类似于魔兽世界灵魂绑定物品的不可转移、非同质化和具有社会定价的 token 的需求。但是,由于缺乏 token 标准,许多开发者只是在用户调用转移功能时抛出错误。从长远来看,这将导致碎片化和更少的组合性。

在本文档中,我们概述了 EIP-721 的一个最小的补充,它允许钱包实现者使用 EIP-165 检查 token 合约的永久性(非)可转移性。

规范

本文档中使用的关键词“MUST”,“MUST NOT”,“REQUIRED”,“SHALL”,“SHALL NOT”,“SHOULD”,“SHOULD NOT”,“RECOMMENDED”,“MAY”和“OPTIONAL”应按照 RFC 2119 中的描述进行解释。

合约接口

具有 uint256 tokenId 的 token 可以与接收帐户绑定,其中 function locked(...) 返回 true。 在这种情况下,合约中所有将 token 从一个帐户转移到另一个帐户的 EIP-721 函数都必须抛出。

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

interface IERC5192 {
  /// @notice 当锁定状态更改为锁定时发出。
  /// @dev 如果 token 被铸造并且状态被锁定,则应发出此事件。
  /// @param tokenId token 的标识符。
  event Locked(uint256 tokenId);

  /// @notice 当锁定状态更改为解锁时发出。
  /// @dev 如果 token 被铸造并且状态被解锁,则应发出此事件。
  /// @param tokenId token 的标识符。
  event Unlocked(uint256 tokenId);

  /// @notice 返回 Soulbound Token 的锁定状态
  /// @dev 分配给零地址的 SBT 被认为是无效的,并且关于它们的查询会抛出错误。
  /// @param tokenId SBT 的标识符。
  function locked(uint256 tokenId) external view returns (bool);
}

为了帮助识别 EIP-721 token 通过此 EIP 在调用 EIP-721function supportsInterface(bytes4 interfaceID) external view returns (bool) 时实现“灵魂绑定”,其中 interfaceID=0xb45a3c0e,实现此 EIP 的合约必须返回 true

理由

上述模型是实现 Soulbound token 的规范接口的最简单途径。 它反映了众多 Soulbound token 实现中,仅在转移时才恢复的情况。

向后兼容性

此提案与 EIP-721 完全向后兼容。

安全注意事项

没有与此标准的实现直接相关的安全注意事项。

版权

CC0 下放弃版权和相关权利。

Citation

Please cite this document as:

Tim Daubenschütz (@TimDaub), Anders (@0xanders), "ERC-5192: 最小化的灵魂绑定NFT," Ethereum Improvement Proposals, no. 5192, July 2022. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-5192.