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-721 的 function 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.