ERC-7632: 命名 Token 的接口
允许 token 拥有字符串名称,并能够在名称和 ID 之间进行转换。
Authors | Zainan Victor Zhou (@xinbenlv) |
---|---|
Created | 2024-02-08 |
Discussion Link | https://ethereum-magicians.org/t/erc-tbd-named-nfts-extending-erc-721/18550 |
Requires | EIP-165 |
摘要
扩展使用 uint256 tokenId
的 token,以支持类型为 string
的 tokenName
,并能够反向转换为 tokenId
。
动机
为了让市场、浏览器、钱包、DeFi 和 dApp 能够更好地展示和操作带有名称的 NFT。
规范
本文档中使用的关键词“必须 (MUST)”,“禁止 (MUST NOT)”,“需要 (REQUIRED)”,“应该 (SHALL)”,“不应该 (SHALL NOT)”,“推荐 (RECOMMENDED)”,“不推荐 (NOT RECOMMENDED)”,“可以 (MAY)”和“可选 (OPTIONAL)”按照 RFC 2119 和 RFC 8174 中的描述进行解释。
- 兼容的合约必须 (MUST) 支持
tokenName
,并且必须 (MUST) 通过以下方式之一在tokenName
和tokenId
之间进行映射:- 1a 所有兼容的合约都推荐 (RECOMMENDED) 实现以下接口:
IERC_NamedTokenCore
,interface IERC_NamedTokenCore { function idToName(uint256 _tokenId) external view returns (string); function nameToId(string memory _tokenName) external returns (uint256); }
- 1a 所有兼容的合约都推荐 (RECOMMENDED) 实现以下接口:
并且它应该满足以下行为规则:
- 1a.1. 当引入新名称时,推荐 (RECOMMENDED) 发出事件 newName(uint256 indexed tokenId, string tokenName)
。
- 1a.2. tokenId 和 tokenName 必须 (MUST) 是双向单映射,这意味着如果 tokenId 存在,则 tokenName 必须 (MUST) 存在,反之亦然,并且
tokenId = nameToId(idToName(tokenId))
和
tokenName = idToName(nameToId(tokenName))
必须 (MUST) 成立。
- 1b. 如果兼容的合约未实现
IERC_NamedTokenCore
, 它可以 (MAY) 遵循tokenId
和tokenName
之间的默认映射规则uint256 tokenId = uint256(keccak256(tokenName))
。
-
对于兼容的合约,所有涉及
tokenId
的方法都推荐 (RECOMMENDED) 有一个以ByName
结尾的对应方法,该方法将所有uint256 tokenId
的参数替换为string memory tokenName
, 并且对应方法的行为必须 (MUST) 与原始方法一致。 -
兼容的合约可以 (MAY) 实现以下一个或多个额外的接口
interface IERC_NamedTokenExtension {
function isValidTokenName(string memory _tokenName) external view returns (string);
function normalizeTokenName(string memory _tokenName) external view returns (string memory);
}
理由
-
为了方便起见,我们允许默认方式来映射
tokenId
和tokenName
,但是 我们也允许合约实现他们自己的方式来映射tokenId
和tokenName
以获得灵活性。 -
我们考虑提供一个接口用于
向后兼容性
此提案与使用 uint256 tokenId
作为唯一标识符的 token 合约完全向后兼容。
安全考虑
此提案假设 tokenName
和 tokenId
在所有 token 中都是唯一的。
如果 tokenName 未被规范化,则两个不同的 tokenName 可能会因它们看起来相似而混淆用户。如果允许使用非唯一的 tokenName
,则合约开发者应声明规范化机制,使用 IERC_NamedTokenExtension
。
版权
版权及相关权利通过 CC0 放弃。
Citation
Please cite this document as:
Zainan Victor Zhou (@xinbenlv), "ERC-7632: 命名 Token 的接口 [DRAFT]," Ethereum Improvement Proposals, no. 7632, February 2024. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-7632.