【端午企劃】NFT 的鑄造&銷毀是怎麼一回事 | 智能合約開發計劃 #9
你領到端午節 NFT 了嗎
端午節 NFT 已經在端午節當天發送給所有有填表單的人手上了,快去檢查一下自己的錢包看看有沒有收到吧!
端午節 NFT 在 OpenSea 二級市場連結:https://opensea.io/collection/dragonboatfestival
鑄造(Mint)與銷毀(Burn)機制
上一篇文章的兩個小程式做完其實只是把程式碼放到區塊鏈上而已,實際上並沒有產生 NFT ,再來要做 NFT 的鑄造與銷毀了,鑄造會被稱作「Mint」,銷毀被稱作「Burn」,所謂鑄造就是要產生新的 NFT 的函式,而銷毀則是讓這個 NFT 消失的函式,直接來看一下程式碼。
MintAndBurn.sol
// SPDX-License-Identifier: MIT pragma solidity >=0.8.0 <0.9.0; import "@openzeppelin/contracts/token/ERC1155/ERC1155.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; contract MintAndBurn is ERC1155, Ownable { constructor() ERC1155("ipfs://QmdnBQrQa6KXVeeNr7fpc9uxQLtcCyknjcWqLXtoG1ahTK") {} function setURI(string memory newuri) public onlyOwner { _setURI(newuri); } function mint(uint256 id, uint256 amount) public onlyOwner { _mint(msg.sender, id, amount, ""); } function burn(uint256 id, uint256 amount) public{ _burn(msg.sender, id, amount); } }
大致上都沒有變化,只是底下增加了mint 跟 burn 兩個函式,分別對應到 _mint 與 _burn,這兩個跟前面使用 _setURI 相同,都是 OpenZeppelin 幫我們寫好的程式可以直接用,寫完之後一樣編譯再發佈新的智能合約,底下我們來實際鑄造看看。
測試 Mint 與 Burn 的功能
一樣需要重新編譯跟發佈新的智能合約,這裡實際會操作這三個紅色圈圈,另外還會搭配 OpenSea 來看一下自己的帳戶出現的 NFT。
一開始先檢查錢包的 NFT 數量,使用「balanceOf」函式,填入自己的錢包地址以及對應的 ID 號碼按下「call」按鈕,底下就會出現結果,由於這次我們只打算發行一種圖片的 NFT ,所有操作的 ID 欄位都填 0 就可以了。正常來說在發佈合約以後鑄造以前,錢包中的 NFT 餘額會是 0。
再來,使用「mint」函式,填入 ID 以及要鑄造的 NFT 數量,按下「transact」發佈鑄造 NFT 的請求到區塊鏈上,等到上鏈了就可以再查一次錢包的 NFT 餘額。
再查一次錢包餘額,數量變成剛剛鑄造的 10 了。
再來去 OpenSea 上看看自己剛剛鑄造的 NFT 長得怎樣,我們發佈在 Rinkeby 測試網,OpenSea 也要用測試網的版本,網址是:https://testnets.opensea.io/
用錢包登入後,點選右上角的個人檔案,再選擇「Acticity」,這裡就能看到在甚麼時候鑄造了幾個 NFT ,像剛剛鑄造了 10 個 Logo 的 NFT,這裡就會顯示我在三分鐘前 Minted 10 個 NFT。
點開這個 NFT 可以看到更細微的內容,像這些名稱(ITechNote Logo)、簡單描述的 Description (The first ITechNote logo NFT created by ITechNote)還有右上角五個按鈕的中間那個可以直接連線到我的個人網站,都是透過之前設定的 .json 檔告訴 OpenSea 的內容哦!
一般的專案似乎不太需要銷毀 NFT 的機制,但是 ERC-1155 有很大一部分是設計給遊戲用的,試想這些 NFT 是遊戲道具,除了可以被放到鏈上進行交易以外,也應該要能夠在遊戲中被消耗掉,消耗 NFT 就會是一個銷毀 NFT 的動作。
看了一下 OpenZeppelin 的程式碼是怎麼做到銷毀 NFT 的,才知道原來銷毀也不是真的銷毀,而是把這個 NFT 發送給 0 地址。
試試看「burn」的函式,ID 一樣給 0 ,amount 就是要銷毀多少個 NFT,這裡假設我要燒掉 3 個,再按「transact」發佈燒掉 NFT 的請求到區塊鏈上。
請問原本 10 個 NFT,燒掉 3 個剩幾個呢?
再次使用「balanceOf」查詢,答案當然是 7 個。
回到 OpenSea 刷新之後,可以看到一筆新的 NFT 轉移,從我們的錢包轉了 3 個到空地址裡面。
點開之後,確實也從 10 owned by you 變成 7 owned by you。
OpenSea 上的 Collection 編輯
可以先參考我這次發行的「端午節 NFT」,在 OpenSea 二級市場上的網址為:https://opensea.io/collection/dragonboatfestival
以我在端午節發行的 NFT 為例子,寫完程式也發布到區塊鏈上之後,在 OpenSea 上可以看到這些東西,然而我們的 .json 檔只有設定到 NFT 單一個體的 Name、Description 等等內容,Collection的欄位出現的是 “Unidentified contract – ooxxooxx”,你可以把Collection想像成一整套系列作品的名稱,而在同一系列底下可以有很多不同的 NFT,要是這個系列不只一種 NFT ,那麼 Collection 就變得相當重要了,如果不設定不僅讓大家少了透過Collection的方式搜尋到你的作品,在 NFT 個體的呈現也不太好看。
直接點選「Unidentified contract – ooxxooxx」就可以進入這個 NFT 的 Collection,中間偏右側的最右邊有個 … 的按鈕,按下去選「Edit」就可以編輯這個 Collection。
接著就會到 Collection 的編輯頁面,這裡有超級多東西可以設定的,我會大略寫一下它們各自的用途,希望讓正在發揮創意的你可以瞭解到怎麼設定才是更符合你的 NFT 作品。
- Logo image: 這系列 NFT 你想要放的 Logo 樣式。
- Featured image: 這個圖片會出現在主頁、類別頁面或 OpenSea 的其他促銷區域用來展示你的收藏,以我實際的感覺類似作品的大圖,這個圖最好不要文字,而且是可以馬上認出這個系列底下的 NFT 會是什麼樣子的。
- Banner image: 這個圖片就只會出現在Collection頁面的最上方,就是系列作品橫幅的概念,需要又寬又窄的圖片,可以豐富你的 Collection 頁面或是營造這個 NFT 給人的氛圍,蠻重要的。
- Name: 幫這個系列取個名字吧。
- URL: 看有沒有想要放的連結名稱,就是到時候其他人連到這個 Collection 時出現的 URL,既然是網址,只能是小寫的英文、數字,也可以加一些橫槓之類的特殊符號。
- Description: 對於這一系列作品更詳細的描述。
- Category: 就是類別,目前在 OpenSea 上分了很多不同類型,單看你覺得這系列更偏向哪一種的 NFT,這有助於某類型的 NFT 藏家更容易搜尋到你的作品。
- Links: 可以放你的官方網站連結,或是你希望大家在哪個社交軟體上找的到你的網址連結。
- Royalties: 簡單來說就是版稅的抽成,畢竟我們那麼努力創作出來的作品,賣出後後面被有心人士炒作,賺的錢要是都與我們無關不是很嘔嗎?所以 OpenSea 提供了版稅的設定,最高可以設到10%,只要我們的作品有被交易,就能不斷從中獲利,舉個例子:
例子1: 我創建了某個NFT,販售價格為 10 ETH,版稅設定10%,當作品賣掉後我當下可以得到 8.75 ETH,0.25 ETH會被 OpenSea 拿走(2.5%平台手續費),而最後版稅的部分會在2~4週後收到最後價值1的 ETH,賣了10 ETH,實收9.75 ETH。
例子2: 後來買我作品的人,又以 15 ETH 出售給別人,所以對於發行者而言,由於我們設定版稅10%,到時候我們仍然能夠再收到1.5 ETH。
- Blockchain: 在 OpenSea 中目前已經支援四個區塊鏈可以讓大家選擇,Ethereum (以太坊)、 Polygon、Klaytn 以及 Solana ,Polygon 是以太坊的擴容方案,之所以出現 Polygon 是為了解決長久以來以太坊網路壅塞加上幣價不斷上漲導致的手續費飆漲問題,在這裡我們不詳談區塊鏈的技術,你只要知道以太坊仍然是現在大部分 NFT 發行的主流地方,但是它的手續費高昂,若你只是剛開始嘗試發行以及交易 NFT,我們可以選擇在 Polygon 或是其他區塊鏈上發行,它們的手續費相對以太坊低很多,可以大大降低使用與交易門檻,讓我們在學習的過程中少繳一點學費。
一旦你選擇了不同的鏈發行 NFT,理論上你的 NFT 就會永遠存在在那個鏈上,而不能轉換到其他鏈上,但是由於 Polygon 是以太坊的擴容方案,都是照著以太坊的協議走的,他們現在也有推出給NFT專用的跨鏈橋,在這裡 ERC721 及 ERC1155 都有支援,所以如果某天你想要把 Polygon 上的 NFT 轉發到以太坊上是可行的,不過會要付額外的手續費來做到這件事。
而後面剩下的其他選項直接用預設的就好嚕!
設定完了以後回到 Collection 看看剛剛設定德是不是符合自己預期的那樣。
結語
可以鑄造可以銷毀還會顯示圖片跟一些詳細資訊,大概開發到這裡,基本上就已經是一個完整的 NFT 專案了。
你會發現 ERC-1155 跟之前的 ERC-20 類似,都是可以一次轉很多代幣出去,所以對我來說其實給你一個跟給你一億個端午節 NFT 沒甚麼差別,總之祝大家端午佳節安康,先前填過領取 NFT 表單的讀者們可以在 Polygon 上看到資產了哦!
全文完整程式碼:https://github.com/ITechNote/DragonBoatNFT
端午節 NFT 在 OpenSea 二級市場連結:https://opensea.io/collection/dragonboatfestival
延伸閱讀
智能合約開發計劃目錄列表:https://itechnote.co/sc/
上一篇:【端午企劃】簡易開發 NFT 專案的三步驟 | 智能合約開發計劃 #8
最後,謝謝你在百忙之中願意抽空來花時間來看我的文章,如果還喜歡這些內容的話希望能獲得你的追蹤及小額贊助支持,讓我更有繼續寫下去的動力,EVM 兼容錢包地址為 0xae1dd06d57f582999a9c50b86ba913eecd7155ce。
也歡迎加入 Line 社群 或 Telegram 群組 一起討論相關話題
我們下次見嚕 o((>ω< ))o~
原文連結 ITechNote 科技隨筆