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:可选字段,控制显示方式。常见值有 numberboost_numberboost_percentagedate

数值型特征的写法:

{
  "display_type": "boost_percentage",
  "trait_type": "Speed",
  "value": 15
}

这样 Opensea 会显示为「+15% Speed」。

嗯,这里要注意:attributes 数组的顺序不重要,但 trait_typevalue 必须成对出现。我见过有人只写了 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% 的手动操作。