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-721 和 EIP-1155 中定义的 NFT 元数据 JSON 模式,添加了一个 dStorage
键,用于提供有关 NFT 数据存储方式的信息。
动机
作为极具价值的加密资产,NFT 资产本质上需要有保障的存储,以确保其不可变性、可靠性和持久性。NFT 的所有权由 EIP-721 或 EIP-1155 智能合约跟踪,因此会持久保存在区块链中,这不是问题。但是 NFT 代币所代表的 mime 类型资产又该如何处理呢?理想情况下,它们也应该存储在某些可靠且可验证的去中心化存储系统中,该系统旨在存储比区块链本身更多的数据。为了促进 NFT 世界中去中心化存储的采用,我们建议将额外的 dStorage 信息添加到 NFT 元数据 JSON 模式中。
作为回顾,让我们回顾一下现有的 NFT 元数据 JSON 模式标准。EIP-721 定义了一个标准的合约方法 tokenURI
,用于返回给定的 NFT 的元数据 JSON 文件,该文件符合 EIP-721 元数据 JSON 模式,该模式定义了三个属性:name
、description
和 image
。
类似地,EIP-1155 也定义了一个标准的合约方法 uri
,用于返回符合 EIP-1155 元数据 JSON 模式 的 NFT 元数据 JSON 文件,该模式定义了如 name
、decimals
、description
、image
、properties
、localization
等属性。
此外,作为当今世界上最大的 NFT 市场,OpenSea 定义了他们自己的 元数据标准,包括更多的属性,如 image_data
、external_url
、attributes
、background_color
、animation_url
、youtube_url
等。这个标准实际上被其他 NFT 市场(如 LooksRare)所尊重和遵循。
所有这些标准都没有传达有关 NFT 代币所代表的 mime 类型资产的存储信息。本提案旨在填补缺失的部分。
规范
本文档中使用的关键词“MUST”,“MUST NOT”,“REQUIRED”,“SHALL”,“SHALL NOT”,“SHOULD”,“SHOULD NOT”,“RECOMMENDED”,“MAY”和“OPTIONAL”应按照 RFC 2119 中的描述进行解释。
除了现有的属性之外,由 EIP-721 和 EIP-1155 智能合约(分别通过 tokenURI
和 uri
方法)返回的元数据 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-721 和 EIP-1155。
安全考虑
此 EIP 不会引入任何新的安全风险或漏洞,因为 dStorage
属性只是由 EIP-721 和 EIP-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.