這章節要說一下在ERC-721 裡面有一個靈魂的屬性 MetaData
我們透過 tokenURI 去設定“屬性”,對程式來說我們就是設定檔案的位置及資料。
利用OpenSea 的文檔來解說
https://docs.opensea.io/docs/metadata-standards
可透過下圖試著理解合約的設定與畫面的呈現(不展開做法說明),可以看到很多屬性都是來至Metadata,有這概念我們就來看看Metadata細節。
Metadata 結構
{
"description": "", // 說明
"external_url": "<https://openseacreatures.io/3>", //外部連結
"image": "<https://storage.googleapis.com/opensea-prod.appspot.com/puffs/3.png>", // 圖片存放位置
"name": "Dave Starbelly", // NFT 名稱
"animation_url":"" // 動態網址
"youtube_url":"" // youtube 網址
"attributes": [ ... ], // 屬性
}
多媒體附件的 URL。支持文件擴展名 GLTF、GLB、WEBM、MP4、M4V、OGV 和 OGG,以及僅音頻擴展名 MP3、WAV 和 OGA。
animation_url 還支持 HTML 頁面,允許您使用 JavaScript 畫布、WebGL 等構建豐富的體驗和交互式 NFT。現在支持 HTML 頁面中的腳本和相對路徑。但是,不支持訪問瀏覽器擴展。
例如:**Murakami.Flowers seed、Pluto Studio NFT**
透過這些玩法我們更可以讓NFT 生態更繁榮!
為了讓生態更豐富還在裡面制定了“屬性”的欄位,如下圖
結構如下
...
{
"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
}
]
}
可以透過屬性定義的方式,讓我們的NFT更有稀缺度,甚至應用在遊戲裡面,這都是非常好用的方法。
特別注意:會發現這個MetaData屬性的檔案不是存在鏈上的,所以項目方or遊戲開發者可以改變底層元數據,改變遊戲規則! 🙀
如果你想把所有的物品信息放在鏈上,你可以利用 IPFS 來存儲 tokenURI 信息。
有任何問題可反饋: [email protected]