元数据标准
https://docs.opensea.io/v2.0/docs/metadata-standards
如何将丰富的元数据添加到您的 ERC721 或 ERC1155 NFT
提供资产元数据允许像 OpenSea 这样的应用程序为数字资产提取丰富的数据并轻松地在应用程序中显示它们。给定智能合约上的数字资产通常仅由唯一标识符表示(例如,ERC721 中的 ),因此元数据允许这些资产具有其他属性,例如名称、描述和图像。<span class="cm-s-neo">token_id</span>
实现令牌 URI
为了让 OpenSea 为 ERC721 和 ERC1155 资产提取链下元数据,您的合约需要返回一个 URI,我们可以在其中找到元数据。为了找到这个URI,我们使用ERC721中的方法和ERC1155中的方法。首先,让我们仔细看看Creature 合约中的方法。<span class="cm-s-neo">tokenURI</span>``<span class="cm-s-neo">uri</span>``<span class="cm-s-neo">tokenURI</span>
NFT.sol
/**
* @dev Returns an URI for a given token ID
*/
function tokenURI(uint256 _tokenId) public view returns (string) {
return Strings.strConcat(
baseTokenURI(),
Strings.uint2str(_tokenId)
);
}
ERC721 中的函数或ERC1155合约中的函数应返回 HTTP 或 IPFS URL。查询时,此 URL 应反过来返回一个 JSON 数据块,其中包含您的令牌的元数据。您可以在此处查看用于在 OpenSea 生物存储库中提供元数据的简单 Python 服务器示例。<span class="cm-s-neo">tokenURI</span>``<span class="cm-s-neo">uri</span>
请参阅下面有关IPFS 和 Arweave的部分,了解如何处理去中心化元数据 URI。
元数据结构
OpenSea 支持根据官方 ERC721 元数据标准或Enjin 元数据建议构建的元数据。
此外,我们还支持其他几个允许多媒体附件的属性(包括音频、视频和 3D 模型)以及您的项目的交互式特征,为您提供 OpenSea 市场上的所有排序和过滤功能。
以下是其中一种 OpenSea 生物的元数据示例:
{
"description": "Friendly OpenSea Creature that enjoys long swims in the ocean.",
"external_url": "https://openseacreatures.io/3",
"image": "https://storage.googleapis.com/opensea-prod.appspot.com/puffs/3.png",
"name": "Dave Starbelly",
"attributes": [ ... ],
}
以下是每个属性的工作原理:
图片 | 这是项目图像的 URL。几乎可以是任何类型的图像(包括 SVG,OpenSea 将缓存成 PNG),并且可以是IPFS URL 或路径。我们建议使用 350 x 350 的图像。 |
---|---|
图像数据 | 原始 SVG 图像数据,如果您想动态生成图像(不推荐)。仅当您不包含参数时才使用它。image |
外部网址 | 这是显示在 OpenSea 上资产图像下方的 URL,允许用户离开 OpenSea 并在您的站点上查看该项目。 |
描述 | 项目的人类可读描述。支持降价。 |
姓名 | 项目的名称。 |
属性 | 这些是项目的属性,将显示在项目的 OpenSea 页面上。(见下文) |
背景颜色 | OpenSea 上项目的背景颜色。必须是不带前置 # 的六字符十六进制。 |
动画网址 | 项目多媒体附件的 URL。支持文件扩展名 GLTF、GLB、WEBM、MP4、M4V、OGV 和 OGG,以及仅音频扩展名 MP3、WAV 和 OGA。Animation_url 还支持 HTML 页面,允许您使用 JavaScript 画布、WebGL 等构建丰富的体验和交互式 NFT。现在支持 HTML 页面中的脚本和相对路径。但是,不支持访问浏览器扩展。 |
youtube_url | YouTube 视频的 URL。 |
属性
为了让您的项目更有活力,我们还允许您将自定义“属性”添加到您的元数据中,这些属性将显示在您的每个资产下方。例如,以下是其中一种 OpenSea 生物的属性。
为了生成这些属性,元数据中包含以下属性数组:
...
{
"attributes": [
{
"trait_type": "Base",
"value": "Starfish"
},
{
"trait_type": "Eyes",
"value": "Big"
},
{
"trait_type": "Mouth",
"value": "Surprised"
},
{
"trait_type": "Level",
"value": 5
},
{
"trait_type": "Stamina",
"value": 1.4
},
{
"trait_type": "Personality",
"value": "Sad"
},
{
"display_type": "boost_number",
"trait_type": "Aqua Power",
"value": 40
},
{
"display_type": "boost_percentage",
"trait_type": "Stamina Increase",
"value": 10
},
{
"display_type": "number",
"trait_type": "Generation",
"value": 2
}
]
}
这是 trait 的名称,是 trait的值,并且是一个字段,指示您希望它如何显示。对于特征,您不必担心.<span class="cm-s-neo">trait_type</span>``<span class="cm-s-neo">value</span>``<span class="cm-s-neo">display_type</span>``<span class="cm-s-neo">string</span>``<span class="cm-s-neo">display_type</span>
数字特征
对于数字特征,OpenSea 目前支持三种不同的选项,(下图中的右下角)、(上图中的左下角)和(类似于但不显示百分号)。如果您传入一个数字并且您没有设置 a ,则该特征将出现在“排名”部分(上图中的右上角)。`number<span class="cm-s-neo">boost_percentage</span>
boost_number<span class="cm-s-neo">boost_percentage</span>
value``display_type