Alert Source Discuss
Standards Track: ERC

ERC-5484: 共识灵魂绑定代币

具有不可变所有权和预定的不可变销毁授权的特殊 NFT 的接口

Authors Buzz Cai (@buzzcai)
Created 2022-08-17
Requires EIP-165, EIP-721

摘要

本 EIP 定义了一个扩展 EIP-721 以创建 soulbound tokens 的接口。在发行之前,双方(发行方和接收方)必须就谁有权销毁此 token 达成一致。销毁授权在声明后是不可变的。发行后,soulbound token 不能被转移,但可以根据预定的不可变销毁授权进行销毁。

动机

自从发布以来,soulbound tokens 的想法引起了极大的关注。然而,在没有标准接口的情况下,soulbound tokens 是不兼容的。如果没有对 token 实现的最小共识,很难开发针对 soulbound tokens 的通用服务。

本 EIP 设想 soulbound tokens 为专门的 NFT,将扮演凭证、信用记录、贷款历史、会员资格等等角色。为了在这些场景中提供灵活性,soulbound tokens 必须具有特定于应用程序的销毁授权,并且有一种方法可以将自己与常规 EIP-721 tokens 区分开来。

规范

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

  • 该 token 必须实现以下接口:

    1. EIP-165ERC165 (0x01ffc9a7)
    2. EIP-721ERC721 (0x80ac58cd)
  • burnAuth 应该在发行前呈现给接收方。
  • burnAuth 在发行后应该是不可变的。
  • burnAuth 应该是决定哪一方有权销毁 token 的唯一因素。
  • 发行方在发行前应该向接收方提供 token 元数据并获得接收方的签名。
  • 发行方不应该在发行后更改元数据。

/// 注意:此接口的 EIP-165 标识符为 0x0489b56f

合约接口

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

interface IERC5484 {
    /// 标准化销毁授权编码的指南
    enum BurnAuth {
        IssuerOnly,
        OwnerOnly,
        Both,
        Neither
    }

    /// @notice 当 soulbound token 被发行时发出。
    /// @dev 此 emit 是 nft 转移 emit 的附加组件,以便区分 sbt
    /// 与普通 nft,同时提供向后兼容性。
    /// @param from 发行方
    /// @param to 接收方
    /// @param tokenId 已发行 token 的 ID
    event Issued (
        address indexed from,
        address indexed to,
        uint256 indexed tokenId,
        BurnAuth burnAuth
    );

    /// @notice 提供 token id 的销毁授权。
    /// @dev 未分配的 tokenId 无效,并且查询会抛出错误
    /// @param tokenId token 的标识符。
    function burnAuth(uint256 tokenId) external view returns (BurnAuth);
}

原理

Soulbound Token (SBTs) 作为 EIP-721 的扩展

我们认为 soulbound token 是现有 EIP-721 tokens 的一个专门子集。这种设计的优点是 soulbound token 与现有 NFT 服务的无缝兼容性。服务提供商可以将 SBT 视为 NFT,而无需对其现有代码库进行重大更改。

不可转移

当前从 EIP-721 扩展的 soulbound token 实现的一个问题是,所有转移实现都会抛出错误。一种更简洁的方法是转移函数仍然抛出错误,但也允许第三方提前检查合约是否实现了 soulbound 接口,以避免调用转移。

销毁授权

我们希望在接口使用方面获得最大的自由。一个灵活且预定的销毁规则至关重要。以下是不同销毁授权的一些示例场景:

  • IssuerOnly: 贷款记录
  • ReceiverOnly: 付费会员资格
  • Both: 凭证
  • Neither: 信用记录

销毁授权与特定的 token 绑定,并且在发行后是不可变的。因此,重要的是在发行 token 之前通知接收方并获得接收方的同意。

Issued 事件

在发行时,将与 EIP-721Transfer 事件一起发出一个 Issued 事件。此设计保持了向后兼容性,同时向第三方发出了明确的信号,表明这是一个 soulBound token 发行事件。

密钥轮换

以太坊用户担心的一个问题是,具有不可变所有权的 soulbound tokens 会阻止密钥轮换。这是一个合理的担忧。但是,拥有可销毁的 soulbound token 使得密钥轮换成为可能。soulbound token 的所有者,当需要密钥更新时,可以通知 token 的发行者。然后,具有销毁授权的一方可以销毁 token,而发行方可以向新地址发行副本。

向后兼容性

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

安全注意事项

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

版权

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

Citation

Please cite this document as:

Buzz Cai (@buzzcai), "ERC-5484: 共识灵魂绑定代币," Ethereum Improvement Proposals, no. 5484, August 2022. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-5484.