Alert Source Discuss
🚧 Stagnant Standards Track: ERC

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-721ERC-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-1155ERC-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.