2、元数据字段详解:name、description、image、attributes等核心字段的含义与规范
好,咱们接着聊。上一章我们把元数据存储的几种方案捋了一遍,这一章我带你深入看看元数据本体——也就是那些 JSON 字段到底该怎么写。
说实话,我见过太多 NFT 项目因为元数据写得不规范,导致 Opensea 解析失败、钱包显示乱码。你想想看,一个价值几十万的 NFT,结果在市场上显示个「undefined」,那得多尴尬?
2.1 name 字段:你的 NFT 叫什么?
name 是最基础的字段。它决定了用户在钱包里看到的那行字。
规范要求:
- 必须是字符串类型
- 长度建议控制在 50 个字符以内
- 不要包含特殊符号(除非你刻意设计)
正确示例:
{
"name": "CryptoPunk #5822"
}
错误示例:
{
"name": null
}
我个人习惯把编号放在名字里,比如 Azuki #1234。这样用户在搜索时能直接定位。但要注意——编号不要用前导零,比如 #0012 这种,有些平台会解析成数字 12,导致排序错乱。
2.2 description 字段:讲个好故事
description 是文本描述。它不会影响合约逻辑,但直接影响买家决策。
我在项目中遇到过一件事:有个项目方把 description 写成了「This is a cool NFT」,结果用户根本不知道这玩意儿有什么用。后来改成了详细的世界观设定,地板价直接翻了三倍。
规范要求:
- 字符串类型,长度不限
- 建议包含:项目背景、稀有度说明、实用权益
- 不要放外部链接(Opensea 会过滤掉)
我的小技巧: 把 description 控制在 200-500 字之间。太短显得敷衍,太长用户没耐心看。重点信息放前两句,因为很多钱包只显示前 100 个字符。
2.3 image 字段:视觉的门面
这是最关键的字段。没有图片,NFT 就是个地址。
image 指向的是图片文件的 URI。可以是 IPFS 链接,也可以是 HTTP 链接(但不推荐)。
格式要求:
- 必须是有效的 URI 字符串
- 推荐使用 IPFS 协议:
ipfs://Qm.../image.png - 图片格式支持:PNG、JPG、GIF、SVG、MP4(视频)
- 文件大小建议不超过 10MB
我曾经踩过的坑: 有一次我把图片存到了中心化服务器,结果服务器挂了三天,所有 NFT 都显示空白。用户差点把我骂到退圈。从那以后,我所有项目的图片都强制走 IPFS。
另外,image 字段还有一个变体叫 image_data。它允许你把图片直接以 base64 编码嵌入 JSON 里。但我不建议这么做——JSON 文件会变得巨大,Gas 费高得吓人。
2.4 attributes 字段:稀有度的灵魂
attributes 是数组,里面每个元素是一个 trait(特征)。Opensea、LooksRare 等市场就是靠这个字段来展示稀有度排名的。
标准结构:
{
"attributes": [
{
"trait_type": "Background",
"value": "Red"
},
{
"trait_type": "Eyes",
"value": "Laser"
},
{
"display_type": "number",
"trait_type": "Level",
"value": 5
}
]
}
这里有几个关键点:
trait_type:特征名称,比如「头发」「眼睛」「背景」value:特征值,可以是字符串或数字display_type:可选字段,控制显示方式。常见值有number、boost_number、boost_percentage、date
数值型特征的写法:
{
"display_type": "boost_percentage",
"trait_type": "Speed",
"value": 15
}
这样 Opensea 会显示为「+15% Speed」。
嗯,这里要注意:attributes 数组的顺序不重要,但 trait_type 和 value 必须成对出现。我见过有人只写了 trait_type 忘了写 value,结果整个 NFT 在市场上显示为「无特征」。
2.5 其他常用字段
除了上面四个核心字段,还有一些扩展字段值得了解:
| 字段名 | 类型 | 说明 |
|---|---|---|
external_url |
字符串 | 项目官网链接。Opensea 会显示为「View on Website」按钮 |
animation_url |
字符串 | 3D 模型或视频的 URI。支持 GLB、MP4、HTML 等格式 |
background_color |
字符串 | 六位十六进制颜色码(不带 #),用于 Opensea 的占位背景 |
youtube_url |
字符串 | YouTube 视频链接。Opensea 会嵌入播放器 |
关于 external_url: 我建议所有项目都加上这个字段。它不仅能引流,还能在 Opensea 上增加项目的可信度。但注意——URL 必须是 HTTPS 协议,否则有些钱包会拦截。
2.6 元数据规范总结
说了这么多,我直接给你一个完整的模板吧。这是我个人项目里一直在用的:
{
"name": "MyNFT #0001",
"description": "这是蓝海系列的第一个NFT。持有者可获得社区白名单资格。",
"image": "ipfs://QmX.../0001.png",
"external_url": "https://myproject.io",
"background_color": "FF0000",
"attributes": [
{
"trait_type": "Rarity",
"value": "Legendary"
},
{
"display_type": "number",
"trait_type": "Power",
"value": 99
}
]
}
最后提醒一句:元数据一旦上链(比如存到合约里),就几乎不可更改了。所以在上传之前,一定要用 JSON 校验工具检查一遍。我曾经因为多了一个逗号,导致整个集合的元数据全部解析失败——那真是血泪教训。
下一章我们聊聊怎么把这些 JSON 文件批量上传到 IPFS,以及如何用 Pinata 和 Filecoin 做持久化存储。到时候我会分享一个我写的小脚本,能帮你省掉 80% 的手动操作。