三大標準協議 ERC20、ERC721(衍生 ERC721A)和 ERC1155,在之前的文章中已經為大家介紹並實戰了前 2 個,但第三個 1155 一直沒有遇到不錯的例子來講解。本文源「今天有更懂這個世界一點了嗎」陳劍的自微信公眾號文章,由動區專欄作者 TheBlockBeats 整理、轉錄、編譯。
(前情提要:觀點|三大定義理解 NFT 究竟是什麼?如何看待非同質化中的「同質化」)
(事件背景:以太坊 6 月合併無望!基金會:推遲但確定 2022 年終結 POW 挖礦)
昨天有朋友疑惑為什麼愛迪達的 NFT 只有一個 item 卻有 3 萬人持有,研究了一下覺得是一個不錯的例子,故寫下本文來以此闡述什麼是 ERC1155。
我們先看一下愛迪達 NFT 是什麼情況,opensea 網址如下:https://opensea.io/collection/adidasoriginals。
我們進入後可以看到只有 1 個 NFT,但卻有 2 萬餘人持有它,這時候下意識你可能會猜測它是共享 NFT?或是碎片化 NFT 嗎?
進入該 NFT 的詳情頁,我們可以看到共有 21.7K 人持有它。
再往下可看到有很多持有者掛單,並且價格不一。
我們點擊購買,可以發現要求支付1.499ETH,即所有掛單價格的最低價。
到這裡你會感覺好像確實和平時常見的 NFT 看起來不一樣,怪怪的。
然後我們再點擊 details 看一下,Token Id 是 0,眾所周知大多數 NFT 的 token id 都是遞增的,即我發行一萬個NFT,ID 應該是從 0 遞增至一萬的,但是愛迪達發行了 3 萬個,按照常理應該有 3 萬個 NFT,且 ID 是遞增至 3 萬的,但為什麼這裡只有 1 個 ID 為 0 的 NFT 呢?
我們繼續向下看,它的協議是 ERC1155,細節可能是出在這裡,大家也許會發現自己在 opensea 上傳的 NFT 也用的是 1155 協議,這兩者有什麼關係嗎?
為什麼愛迪達要用這樣一個不常見的 NFT 協議,這裡面一定是有原因的,所以我們繼續順藤摸瓜,我們看看愛迪達官網對於它的 NFT 的介紹。
愛迪達 NFT 共分為四個階段,第 1、2、3 階段都涉及到銷毀兌換操作,第四個階段會獲得一個 ERC721NFT。
那我們推演一下,愛迪達在下一盤大棋,通過遊戲化的形式使用四個階段的收集、銷毀、兌換過程層層打怪,提升大家的參與度從而打出品牌影響力,所以這裡的重點是「銷毀」,如果 3 萬人手裡的 NFT 要被銷毀,那意味著這些 NFT 工具屬性非常強,不能有差異,從這個點來看常見的 ERC721 發行非同質化代幣協議好像不太適用。
那 ERC1155 好像是比較適用的,我們先簡單了解一下什麼是 ERC1155,然後再一起看愛迪達合約具體都做了一些什麼事。
ERC1155 相比於 ERC721 簡而言之最大的區別就是它可以一個合約承載多類 FT 與 NFT,可以將其理解為是 ERC20 和 ERC721 的融合加強版,想發行同質化和非同質化的代幣 1155 全部搞定,而不用用多個合約承載再進行互動。
ERC721 是一個合約承載 1 類 NFT,1 類 NFT 承載多個 NFT,如無聊猿,它的合約有且僅能發行無聊猿這一套NFT,每個具體的 NFT 編號均不相同為遞增,但是 ERC1155 一個合約可以發行多類 NFT,它最常用的場景在遊戲。
比如一個遊戲中,可能會有很多類裝備如「武器」、「坐騎」、「藥品」等,這些裝備有的是非同質化的,比如屠龍寶刀只有 1 個,有的是同質化的比如藥品都是一樣的喝一瓶補 10 滴血,而傳統的 721 只能發行一類實體,但是 1155 卻可以發行多類,說起來還有點抽像是不是,直接上原始碼。
我們來演示一個最簡單的 1155 協議合約,自上而下,我先創建了 3 種代幣類型分別為武器 wq、坐騎 zj 和寶石 bs,他們的編號分別為 0、1、2。
然後我定義這三類代幣的發售最大數量分別為 1、10 和 9999。
在 mint 函數中,傳入三個參數分別為地址、代幣編號和數量,依次校驗當前用戶要 mint 的代幣類型數量是否超過了最大發售數,若未超過則執行 mint 操作,這裡大家注意,相比 721 的 mint 這裡的 mint 多傳入了一個 id,這個 id 即 1155 協議中定義的代幣類型。
同樣的在校驗的過程中用到了 totalSupply 相比如 721 多傳入了 id,也是因為有多個代幣類型,所以需要用 id 來檢索到底要獲取的是哪一個代幣類型的數量。
我們執行 mint 操作,輸入地址,mint 編號為 2 的代幣,mint100 個出來,點擊 transcat 執行。
可以看到我進行 balanceOf 查詢編號為 2 的代幣持有 100 個。
我也可以將我的代幣轉移給其他人,同樣的需要定義轉移的哪一類,以及轉移多少個,這和常見的 721 都是不一樣的。
至此你已經明白了 1155 和 721 到底有什麼區別,接下來我們看看愛迪達的合約原始碼,原始碼有點多我挑著重要的講,不懂原始碼沒關係請一定要耐心看下去,理解項目方到底做了什麼事。
首先定義了最多發售 3 萬個,白名單預售最多發售 20,380 個,白名單每人最多 mint 1 個,公售每人最多 mint 2 個。
然後定義了預售、公售的開始和結束時間,這裡使用的是時間戳定義。
最後定義了銷毀窗口期的時間。
然後執行了構造函數,這裡挺有意思項目方給自己一開始自動 mint了 380 個。
這裡我們學以致用,把上篇文章教大家的閱讀 etherscan 使用起來,我們查一下這個地址的情況。
挺窮的啊錢包裡都沒什麼錢。
再看一下他的交易記錄,有大量的動輒幾十上百的 ETH 流水,項目方自己 mint+ 錢包裡沒錢+有大量大額交易記錄,所以這個錢包可能是一個白手套。
繼續看原始碼,這裡到了 mint 函數,可見它目前只有 1 類代幣所以自動傳入了編號 0。
有趣的來了,這個函數是用來在銷毀窗口期執行的,首先判斷用戶持有情況和窗口期時間,然後先執行 burn 銷毀用戶代幣,再執行 mint 給用戶新創建代幣出來,這裡用到了 cardIdToMint 這個參數用來管控到達了第幾輪,還記得一開始愛迪達說總共有 4 輪嗎。
這兩個函數則是項目方用來操控 cardIdToMint 具體的輪次。
以上帶著大家通過實戰和解讀愛迪達原始碼學習了 ERC1155 協議,相信對於 NFT 生態有了更深的理解,協議作為基建的創新會釋放出更多上層 NFT 的應用場景。
📍相關報導📍
什麼是Gh0stly Gh0sts?首個基於LayerZero、跨7條鏈的幽靈NFT,衝上Opensea交易榜首
ERC721R 新標準發布!允許用戶在鑄造 NFT 後「期限內反悔退款」;但遭社群打槍
以太坊新手科普 | 三分鐘搞懂 ERC-20 和 ERC-721 的不同
讓動區 Telegram 新聞頻道再次強大!!立即加入獲得第一手區塊鏈、加密貨幣新聞報導。
LINE 與 Messenger 不定期為大家服務