ERC-4341: 有序 NFT 批量标准
保留和管理多个NFT的排序信息
Authors | Simon Tian (@simontianx) |
---|---|
Created | 2021-10-01 |
Discussion Link | https://github.com/ethereum/EIPs/issues/3782 |
摘要
本标准引入了一个智能合约接口,它可以表示一批非同质化代币,其中排序信息应被保留和管理。如果 tokenId
使用表意文字和表情符号的 unicode
集合进行编码,则此类信息特别有用。因此,NFT 可以用作含义的载体。
动机
非同质化代币被广泛接受为加密资产的载体,因此在 ERC-721 和 ERC-1155 中,多个 NFT 的排序信息被丢弃。然而,正如 EIP-3754 中提出的那样,非同质化代币被认为是区块链上的基本单元,并且可以携带带有 unicode tokenId
的抽象含义。转移此类代币是传输有序的 unicode 序列,从而有效地在区块链上传输短语或含义。
表意文字 是一种书写字符,代表一个单词或语素,例如普通话中的 hanzi、日语中的 kanji、韩语中的 hanja 等。Unicode 是一种信息技术标准,用于一致地编码、表示和处理文本。
很自然地将两者结合起来创建 unicode NFT 来表示表意文字。由于在这种语言中只需几个字符就可以传输大量含义,因此从技术上讲,创建它的标准既实用又有价值。表情符号与表意文字相似,也可以包含在内。对于非表意文字语言(如英语),虽然可以应用相同的标准,但用 NFT 来表示每个字母很乏味,因此收益很难证明是合理的。
一个有说服力的例子是,与其发送长城的两个汉字“长城”,不如批量转移两个 ID 分别为 #38271
和 #22478
的 NFT。这两个 ID 对应于两个字符的十进制 unicode。接收端解码 ID 并检索原始字符。关键的一点是,在这种情况下,排序信息很重要,因为元组 (38271, 22478)
和 (22478, 38271)
可以分别解码为 长城
和 城长
,并且两者都是汉字中的合法词汇。这说明了本标准与 ERC-1155 之间的关键区别。
此外,在东亚文化中,人物有时被认为是或实际上被用作春节等节日中的礼物。(24685, 21916, 21457, 36001)
恭喜发财
可以字面上用作礼物,表达对财务繁荣的最佳祝愿。因此,转移代币以表达具有此标准的含义在文化上是很自然的。
同样在表意文字语言系统中,古代教义通常以简洁的方式书写,这样少量的字符就可以展开大量的含义。现在,现代人获得了一种可靠的技术手段,可以通过发送代币将他们的文字、诗歌和谚语传递给后代。
其他实用且有趣的应用程序包括中国象棋、婚礼誓言、家庭世代名言和谚语、葬礼褒扬词、祈祷文、轶事等。
规范
pragma solidity ^0.8.0;
/**
@title EIP-4341 Multi Ordered NFT Standard
@dev See https://eips.ethereum.org/EIPS/eip-4341
*/
interface ERC4341 /* is ERC165 */ {
event Transfer(address indexed from, address indexed to, uint256 id, uint256 amount);
event TransferBatch(address indexed from, address indexed to, uint256[] ids, uint256[] amounts);
event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;
function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;
function safePhraseTransferFrom(address from, address to, uint256[] calldata phrase, bytes calldata data) external;
function balanceOf(address owner, uint256 id) external view returns (uint256);
function balanceOfPhrase(address owner) external view returns (uint256);
function balanceOfBatch(address[] calldata owners, uint256[] calldata ids) external view returns (uint256[] memory);
function retrievePhrase(address owner, uint256 phraseId) external view returns (uint256[] memory);
function setApprovalForAll(address operator, bool approved) external;
function isApprovedForAll(address owner, address operator) external view returns (bool);
}
理由
在 ERC-1155 和 ERC-721 中,NFT 用于表示加密资产,并且在本标准中与 EIP-3754 一起,NFT 配备了实用程序。在本标准中,一批 NFT 的排序信息通过构造 phrase
来保留和管理。
短语
phrase
通常由少量的基本字符或有序的 unicode 序列组成,并且能够在一批代币中保留排序信息。从技术上讲,它存储在无符号整数数组中,并且不应传播。一个短语不会以任何方式增加或减少任何 NFT 的数量。一个短语不能被转移,但是,它可以被检索和解码以恢复原始的 unicode 序列。短语信息保存在存储中,因此需要比 ERC-1155 更多的存储空间。
向后兼容性
EIP-3754 是本标准的先决条件。
参考实现
https://github.com/simontianx/ERC4341
版权
在 CC0 下放弃版权和相关权利。
Citation
Please cite this document as:
Simon Tian (@simontianx), "ERC-4341: 有序 NFT 批量标准 [DRAFT]," Ethereum Improvement Proposals, no. 4341, October 2021. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-4341.