【端午企划】原来NFT 也有客制化的规格标准| 智能合约开发计划#7

科技隨筆
·
·
IPFS
·
介绍NFT 的Metadata、JSON 格式是什么,如何去客制化我们的NFT,它的规格标准怎么透过Metadata 来设定的,目前最大的NFT 二级市场OpenSea 又提供哪些Metadata 可以使用。

前言

上一篇文章中我们已经在IPFS 上传了自己的图片,但是如果是使用像OpenSea 之类的NFT 二手交易市场,除了NFT 对应到的多媒体(图片、声音、影片),一定还会看到许多不同的属性吧!

拿这张水母NFT 为例,它是一个ERC-721 的NFT,除了常见的名字与图片网址,但它还可以有其他属性,例如附上自己的官网连结、这张NFT 各个零件组合起来的稀有度之类的讯息,若要设定这些东西就必须要提到上面这张图片右下角的「Metadata」是什么,它怎么运作的。

Metadata 与JSON 格式

所谓NFT 的Metadata 有点像是用来描述这个NFT 是什么的文件,透过Metadata 我们就可以快速知道这个NFT 的名称是什么(“name”)、一段话叙述这个NFT 的大纲(“description”)、图片放在哪个网址(“image”)等等的相关资讯,当然如果NFT 的Metadata 没有固定写法的话,大家都可以随意撰写自己的文件,可能会导致你发的NFT 我看不懂,我发的NFT 你也看不懂,所以当初在定义EIP-721EIP-1155时,官方文档就有写道Metadata 的格式,这个资料格式是一种网路传输时常见的资料格式叫「JSON」,如果你从来没看过JSON 也不用害怕,它的格式非常的简单易懂。

JSON(JavaScript Object Notation) 是写网页程式时常见语言JavaScript 中用来表示物件的一种格式,我们只是要拿来做Metadata 而已,其实不用完全去了解它在干嘛,只要会登记学生成绩,你就会JSON!

如果你是小老师,全班考完试老师改完考卷后一定会遇到要登记成绩的时候吧,这时候假设老师希望我们以每位同学为单位,将他们各科成绩填写上去,做为学生个别的成绩单,可能会长成这样:

JSON 格式中分为key 跟value,key 就会是标头的栏位,value 则是该栏位的值,所以将上方表格转换成JSON 格式的话,会长得像这个样子:

 {
    "姓名" : "Alice",
    "国文" : 90,
    "英文" : 80,
    "数学" : 70
}

看完之后应该不难理解,所谓的key 是表格中最上面的标题,value 是这个标题底下的值,一组资料会是“key” : “value” 的形式做储存。

其实像这种可以转换成表格的东西,已经可以当作是一种简易的资料库来看待了,对于我们要填NFT 的Metadata 也是类似的用法,如果要填图片网址就会写“image” : “#NFT的图片网址…”, “image” 就会是key 值;”#NFT的图片网址” 就是value 值了。

OpenSea 支援的Metadata

直到撰文当下,OpenSea 仍然是目前最大的NFT 二手交易市场,官方有提供一份关于Metadata 的标准规格可以让我们开发者参考看看,网址是:https://docs.opensea.io/docs/metadata-standards

当中有个表格,指的是NFT 的属性,对于挑几个我觉得比较用得到的来讲一下,Metadata 不只有这些,但对于这次要开发的NFT 我想应该就够用了。

1. image: 就是这个NFT 图片储存的网址,除了使用HTTP 以外也有支援IPFS,我们在上篇文章已经存放图片在IPFS 上了,所以可以直接用那个网址来填值。

2. external_url: 外部连结网址,可以设定让它连结到我们自己的网站或是这个专案的官网,如果有设定这个Metadata,在NFT 的页面会多一个外部连结的按钮。

3. name: 这个NFT 专案的名称。

4. description: 这个NFT 专案的概述。

5. attributes: NFT 的属性,当你发行的NFT 是用多个零件随机拼凑起来的时候就具有不同稀有度,设定attributes 可以一目了然的看出各个NFT 的稀有度,但由于这次我们只是要发一张端午节图片的NFT ,所以我不需要去设定它。

6. animation_url 与youtube_url: 这些都是附加的网址,假设专案有设计一些宣传影片也可以这样放上来。

实作Metadata 的.json 档

我拿几个Metadata 为例实作一个JSON 的档案,你也可以挑几个上面提到的Metadata 属性来编辑,先打开一个新的记事本并输入以下内容:

 {
    "name": "ITechNote Logo",
    "description": "The first ITechNote logo NFT created by ITechNote",
    "image": "ipfs://QmYHiLbYTK9hMpGwLdG9JZvStRGfBaFwv6XEW2JaENuBox",
    "external_url": "https://itechnote.co/"
}

储存后重新命名档案,将副档名由原本的.txt 改为.json 就完成了,在这个例子我使用四个属性,告诉这些二级市场NFT 的名字、描述、图片路径以及科技随笔的官网网址,图片路径是ipfs://#图片的CID。

上传到IPFS

IPFS 不只能拿来储存图片还能储存档案,.json 档自然也是可以上传上去的,回到Pinata 把.json 档上传,网址为: https://pinata.cloud/

就像前一篇文章上传的方式,点击左上角「+ Upload」选择「File」。

照着相同的三个步骤把.json 档上传。

上传完成后就会得到一组.json 档的CID,做到这里就完成啦!

它储存的网址就会是ipfs://#CID,以我实际上传的例子CID 为「QmdnBQrQa6KXVeeNr7fpc9uxQLtcCyknjcWqLXtoG1ahTK」,则.json 档的网址就会是「ipfs://QmdnBQrQa6KXVeeNr7fpc9uxQLtcCyknjcWqLXtoG1ahTK」。

现在有三个东西之间的关系要厘清,NFT 本身、 NFT 的.json档、NFT 的图片档。

未来当我们开始写智能合约的程式码,会看到NFT 需要填上一个URI 的栏位,就是填上这个.json 档IPFS 的网址。

当NFT 的显示器在尝试显示这张NFT 的样貌时会先透过网址连到这个.json 档,并在解析.json 档底下的Metadata 时,会找到image 栏位,再透过image 栏位里面的IPFS 网址去连结到真正的图片将NFT 完整地显示出来。

延伸阅读

第一篇: 【新年企划】过年就包红包币| 智能合约开发计划#1

上一篇: 【端午企划】我的第一张去中心化图片! | 智能合约开发计划#6


最后,谢谢你在百忙之中愿意抽空来花时间来看我的文章,如果还喜欢这些内容的话希望能获得你的追踪及小额赞助支持,让我更有继续写下去的动力,也欢迎点此连结在其他平台找到我

下次见噜o((>ω< ))o~

原文连结ITechNote 科技随笔

CC BY-NC-ND 2.0 授权

喜欢我的作品吗?别忘了给予支持与赞赏,让我知道在创作的路上有你陪伴,一起延续这份热忱!

logbook icon
科技隨筆| 科技閱讀 | 程式語言 | 理財規劃 | 工具推薦 | 音樂盛宴 | 生活雜談 | 科技隨筆中,不只有科技! 在這裡,我會隨筆記下科技閱讀、程式語言、理財規劃、音樂饗宴以及生活雜談等等內容。 邀請您在過程中與我一同分享也一同成長。 讓我們在人生的旅途中不斷學習,努力成為更棒的人吧~ 在其他平臺關注我: https://linkby.tw/itechnote.co
  • 来自作者
  • 相关推荐

【音樂月報 #13】2022年10月號

【音樂月報 #12】2022年9月號

【音樂月報 #11】2022年8月號