Alert Source Discuss
Standards Track: ERC

ERC-5625: NFT 元数据 JSON 模式 dStorage 扩展

向非同质化代币 (NFT) 元数据 JSON 模式添加一个 dStorage 属性,以提供 NFT 资产的去中心化存储信息

Authors Gavin Fu (@gavfu), Leo Wang (@wanglie1986), Bova Chen (@appoipp), Guang Han (@pangwa), Brian Wu (@wuhaixian1984)
Created 2022-09-08
Requires EIP-721, EIP-1155

摘要

此 EIP 扩展了 EIP-721EIP-1155 中定义的 NFT 元数据 JSON 模式,添加了一个 dStorage 键,用于提供有关 NFT 数据存储方式的信息。

动机

作为极具价值的加密资产,NFT 资产本质上需要有保障的存储,以确保其不可变性可靠性持久性。NFT 的所有权由 EIP-721EIP-1155 智能合约跟踪,因此会持久保存在区块链中,这不是问题。但是 NFT 代币所代表的 mime 类型资产又该如何处理呢?理想情况下,它们也应该存储在某些可靠且可验证的去中心化存储系统中,该系统旨在存储比区块链本身更多的数据。为了促进 NFT 世界中去中心化存储的采用,我们建议将额外的 dStorage 信息添加到 NFT 元数据 JSON 模式中。

作为回顾,让我们回顾一下现有的 NFT 元数据 JSON 模式标准。EIP-721 定义了一个标准的合约方法 tokenURI,用于返回给定的 NFT 的元数据 JSON 文件,该文件符合 EIP-721 元数据 JSON 模式,该模式定义了三个属性:namedescriptionimage

类似地,EIP-1155 也定义了一个标准的合约方法 uri,用于返回符合 EIP-1155 元数据 JSON 模式 的 NFT 元数据 JSON 文件,该模式定义了如 namedecimalsdescriptionimagepropertieslocalization 等属性。

此外,作为当今世界上最大的 NFT 市场,OpenSea 定义了他们自己的 元数据标准,包括更多的属性,如 image_dataexternal_urlattributesbackground_coloranimation_urlyoutube_url 等。这个标准实际上被其他 NFT 市场(如 LooksRare)所尊重和遵循。

所有这些标准都没有传达有关 NFT 代币所代表的 mime 类型资产的存储信息。本提案旨在填补缺失的部分。

规范

本文档中使用的关键词“MUST”,“MUST NOT”,“REQUIRED”,“SHALL”,“SHALL NOT”,“SHOULD”,“SHOULD NOT”,“RECOMMENDED”,“MAY”和“OPTIONAL”应按照 RFC 2119 中的描述进行解释。

除了现有的属性之外,由 EIP-721EIP-1155 智能合约(分别通过 tokenURIuri 方法)返回的元数据 JSON 文件应该可选地包含一个 dStorage 属性。

对于 EIP-721 智能合约,元数据 JSON 文件模式为:

{
    "title": "资产元数据",
    "type": "object",
    "properties": {
        "name": {
            "type": "string",
            "description": "标识此 NFT 代表的资产"
        },
        "description": {
            "type": "string",
            "description": "描述此 NFT 代表的资产"
        },
        "image": {
            "type": "string",
            "description": "指向具有 mime 类型 image/* 的资源的 URI,代表此 NFT 代表的资产。考虑使任何图像的宽度在 320 到 1080 像素之间,宽高比在 1.91:1 到 4:5 之间(包括端点值)。"
        },
        "dStorage": {
            "type": "object",
            "required": ["platform", "description", "persistence_mechanism", "challenge_mechanism", "consensus", "dstorage_note"],
            "properties": {
                "platform": {
                    "type": "string",
                    "description": "dStorage 平台名称,如 Swarm、Arweave、Filecoin、Crust 等"
                },
                "description": {
                    "type": "string",
                    "description": "dStorage 平台的简要描述"
                },
                "persistence_mechanism": {
                    "type": "string",
                    "description": "dStorage 平台的持久性机制或激励结构,如“基于区块链”、“基于合约”等"
                },
                "challenge_mechanism": {
                    "type": "string",
                    "description": "dStorage 平台的挑战机制,如 Arweave 的访问证明等"
                },
                "consensus": {
                    "type": "string",
                    "description": "dStorage 平台的共识机制,如 PoW、PoS 等"
                },
                "dstorage_note": {
                    "type": "string",
                    "description": "用于证明 NFT 资产存储在 dStorage 平台上的注释,如 Filecoin 交易 ID、Crust place_storage_order 交易哈希等"
                }
            }
        }
    }
}

对于 EIP-1155 智能合约,元数据 JSON 文件模式为:

{
    "title": "代币元数据",
    "type": "object",
    "properties": {
        "name": {
            "type": "string",
            "description": "标识此代币代表的资产",
        },
        "decimals": {
            "type": "integer",
            "description": "代币数量应显示的十进制位数 - 例如 18,表示将代币数量除以 1000000000000000000 以获得其用户表示。",
        },
        "description": {
            "type": "string",
            "description": "描述此代币代表的资产"
        },
        "image": {
            "type": "string",
            "description": "指向具有 mime 类型 image/* 的资源的 URI,代表此代币代表的资产。考虑使任何图像的宽度在 320 到 1080 像素之间,宽高比在 1.91:1 到 4:5 之间(包括端点值)。"
        },
        "properties": {
            "type": "object",
            "description": "任意属性。值可以是字符串、数字、对象或数组。",
        },
        "localization": {
            "type": "object",
            "required": ["uri", "default", "locales"],
            "properties": {
                "uri": {
                    "type": "string",
                    "description": "用于从其获取本地化数据的 URI 模式。此 URI 应包含子字符串“{locale}”,该子字符串将在发送请求之前替换为适当的语言环境值。"
                },
                "default": {
                    "type": "string",
                    "description": "基本 JSON 中默认数据的语言环境"
                },
                "locales": {
                    "type": "array",
                    "description": "可用于数据的语言环境列表。这些语言环境应符合 Unicode 通用语言环境数据存储库 (http://cldr.unicode.org/) 中定义的语言环境。"
                }
            }
        },
        "dStorage": {
            "type": "object",
            "required": ["platform", "description", "persistence_mechanism", "challenge_mechanism", "consensus", "dstorage_note"],
            "properties": {
                "platform": {
                    "type": "string",
                    "description": "dStorage 平台名称,如 Swarm、Arweave、Filecoin、Crust 等"
                },
                "description": {
                    "type": "string",
                    "description": "dStorage 平台的简要描述"
                },
                "persistence_mechanism": {
                    "type": "string",
                    "description": "dStorage 平台的持久性机制或激励结构,如“基于区块链”、“基于合约”等"
                },
                "challenge_mechanism": {
                    "type": "string",
                    "description": "dStorage 平台的挑战机制,如 Arweave 的访问证明等"
                },
                "consensus": {
                    "type": "string",
                    "description": "dStorage 平台的共识机制,如 PoW、PoS 等"
                },
                "dstorage_note": {
                    "type": "string",
                    "description": "用于证明 NFT 资产存储在 dStorage 平台上的注释,如 Filecoin 交易 ID、Crust place_storage_order 交易哈希等"
                }
            }
        }
    }
}

理由

接口和 JSON 模式扩展之间的选择

扩展 EIP-721 或 EIP-1155 合约接口将不必要地需要额外的代码来实现,并且 NFT 项目将无法使用,因为这些项目已经完成了 NFT 智能合约的最终确定和部署。 可选的 JSON 模式扩展是非侵入性的,并且更容易采用。

向后兼容性

此 EIP 向后兼容 EIP-721EIP-1155

安全考虑

此 EIP 不会引入任何新的安全风险或漏洞,因为 dStorage 属性只是由 EIP-721EIP-1155 智能合约返回的元数据 JSON 文件的信息字段。 它不影响 NFT 交易的执行或有效性。

版权

版权及相关权利通过 CC0 放弃。

Citation

Please cite this document as:

Gavin Fu (@gavfu), Leo Wang (@wanglie1986), Bova Chen (@appoipp), Guang Han (@pangwa), Brian Wu (@wuhaixian1984), "ERC-5625: NFT 元数据 JSON 模式 dStorage 扩展," Ethereum Improvement Proposals, no. 5625, September 2022. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-5625.