ERC-5114: Soulbound 徽章
一种在铸造时附加到“灵魂”上的 token,之后无法转移。
Authors | Micah Zoltu (@MicahZoltu) |
---|---|
Created | 2022-05-30 |
Last Call Deadline | 2023-09-19 |
Table of Contents
摘要
soulbound 徽章是一种 token,在铸造时,它被绑定到另一个 Non-Fungible Token (NFT),并且之后无法转移/移动。
规范
interface IERC5114 {
// 每次铸造此徽章的新实例时都会触发
// 对于相同的 `badgeId`,**不得** 两次触发此事件
event Mint(uint256 indexed badgeId, address indexed nftAddress, uint256 indexed nftTokenId);
// 返回此徽章绑定到的 NFT。
// 如果尚未铸造徽章,则此函数**必须**抛出
// 在铸造后,每次调用此函数时,此函数**必须**始终返回相同的结果
// 此函数**必须**返回与徽章的原始 `Mint` 事件中找到的值相同的值
function ownerOf(uint256 badgeId) external view returns (address nftAddress, uint256 nftTokenId);
// 返回一个 URI,其中包含有关此徽章集合的详细信息
// 由此返回的元数据与 `badgeUri(uint256)` 返回的元数据合并
// collectionUri **必须** 是不可变的(例如,ipfs:// 而不是 http://)
// collectionUri **必须** 是内容可寻址的(例如,ipfs:// 而不是 http://)
// 来自 `badgeUri` 的数据优先于此方法返回的数据
// `collectionUri` 内容引用的任何外部链接也**必须**遵循上述所有规则
function collectionUri() external pure returns (string collectionUri);
// 返回一个具有抗审查性的 URI,其中包含有关此徽章实例的详细信息
// collectionUri **必须** 是不可变的(例如,ipfs:// 而不是 http://)
// collectionUri **必须** 是内容可寻址的(例如,ipfs:// 而不是 http://)
// 来自此的数据优先于 `collectionUri` 返回的数据
// `badgeUri` 内容引用的任何外部链接也**必须**遵循上述所有规则
function badgeUri(uint256 badgeId) external view returns (string badgeUri);
// 返回一个字符串,指示 `badgeUri` 和 `collectionUri` 结果的格式(例如,“EIP-ABCD”或“soulbound-schema-version-4”)
function metadataFormat() external pure returns (string format);
}
此标准的实现者应该还依赖于接口检测的标准,以便调用者可以轻松地找出给定的合约是否实现了此接口。
理由
不可变性
通过要求徽章永远不能移动,我们既保证了绑定到单个 NFT 的 soulbound 徽章集合之间的不可分离性和不可合并性,同时又允许用户积极地缓存结果。
需要内容可寻址 URI
Soulbound 徽章旨在成为附加到角色的永久徽章/指示器。 这意味着不仅用户不能转移所有权,而且铸造者也不能撤回/转移/更改所有权。 这包括更改或删除任何远程内容,以此来审查或操纵特定用户。
没有 badgeUri
数据格式的规范
collectionUri()
和 badgeUri(uint256)
指向的数据格式,以及如何合并它们,被有意地从本标准中排除,以便在未来可以对单独的标准进行迭代。
不可变约束是此标准定义的唯一内容,以确保保持此徽章的精神,无论数据格式的具体细节如何。
metadataFormat
函数可用于通知调用者他们应该在 URI 中期望的数据类型/格式/版本,因此调用者可以直接解析数据,而无需首先通过检查来推断其格式。
向后兼容性
这是一种新的 token 类型,并非旨在与任何现有的 token 向后兼容,除了现有的可行的灵魂(任何可以通过 [address,id]
识别的资产)。
安全考虑
声称实现此 EIP 的徽章的用户必须勤奋地验证它们是否真的实现了。 徽章作者可以创建一个徽章,该徽章在最初探测 API 表面时,可能看起来遵循规则,但实际上并非如此。 例如,合约可以通过某种机制允许转移,但最初只是不使用它们。
还应该明确的是,soulbound 徽章不是绑定到人的,它们是绑定到角色的。 角色是任何行动者(可能是一群人),他们随着时间的推移收集多个 soulbound 徽章,以建立徽章集合。 这个角色可能会转移到另一个人,或者转移到另一群人,并且与角色互动的任何人都不要假设这个角色背后有唯一的永久人类。
soulbound 徽章有可能绑定到另一个 soulbound 徽章。 从理论上讲,如果链中的所有徽章都是同时创建的,它们可能会形成一个循环。 尝试遍历此类链的软件应注意在检测到循环时制定退出策略。
版权
版权和相关权利通过 CC0 放弃。
Citation
Please cite this document as:
Micah Zoltu (@MicahZoltu), "ERC-5114: Soulbound 徽章 [DRAFT]," Ethereum Improvement Proposals, no. 5114, May 2022. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-5114.