header-langage
简体中文
繁體中文
English
Tiếng Việt
한국어
日本語
ภาษาไทย
Türkçe
掃碼下載APP
Partnered With:

以阿迪達斯NFT爲例, 帶你瞭解什麼是ERC1155

閱讀本文需 14 分鐘
爲什麼一枚NFT,持有者卻可達數萬人?
原文標題:《 ERC1155 是什麼?以阿迪達斯 NFT 爲例解析 》
原文作者:今天有更懂這個世界一點了嗎
本文來自微信公衆號:今天有更懂這個世界一點了嗎


三大標準協議 ERC20、ERC721(衍生 ERC721A)和 ERC1155,在之前的文章中已經爲大家介紹並實戰了前 2 個,但第三個 1155 一直沒有遇到不錯的例子來講解,恰好昨天有朋友疑惑爲什麼阿迪達斯的 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 的 toklen 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 發行非同質化 Token 協議好像不太適用。


那 ERC1155 好像是比較適用的,我們先簡單瞭解一下什麼是 ERC1155,然後再一起看阿迪達斯合約具體都做了一些什麼事。


ERC1155 相比於 ERC721 簡而言之最大的區別就是它可以一個合約承載多類 FT 與 NFT,可以將其理解爲是 ERC20 和 ERC721 的融合加強版,想發行同質化和非同質化的 Token 1155 全部搞定,而不用用多個合約承載再進行交互。


ERC721 是一個合約承載 1 類 NFT,1 類 NFT 承載多個 NFT,如無聊猿,它的合約有且僅能發行無聊猿這一套 NFT,每個具體的 NFT 編號均不相同爲遞增,但是 ERC1155 一個合約可以發行多類 NFT,它最常用的場景在遊戲,比如一個遊戲中,可能會有很多類裝備如「武器」、「坐騎」、「藥品」等,這些裝備有的是非同質化的,比如屠龍寶刀只有 1 個,有的是同質化的比如藥品都是一樣的喝一瓶補 10 滴血,而傳統的 721 只能發行一類實體,但是 1155 卻可以發行多類,說起來還有點抽象是不是,直接上代碼。


我們來演示一個最簡單的 1155 協議合約,自上而下,我先創建了 3 種 Token 類型分別爲武器 wq、坐騎 zj 和寶石 bs,他們的編號分別爲 0、1、2。


然後我定義這三類 Token 的發售最大數量分別爲 1、10 和 9999。


在 mint 函數中,傳入三個參數分別爲地址、 Token 編號和數量,依次校驗當前用戶要 mint 的 Token 類型數量是否超過了最大發售數,若未超過則執行 mint 操作,這裏大家注意,相比 721 的 mint 這裏的 mint 多傳入了一個 id,這個 id 即 1155 協議中定義的 Token 類型,同樣的在校驗的過程中用到了 totalSupply 相比如 721 多傳入了 id,也是因爲有多個 Token 類型,所以需要用 id 來檢索到底要獲取的是哪一個 Token 類型的數量。



我們執行 mint 操作,輸入地址,mint 編號爲 2 的 Token ,mint100 個出來,點擊 transcat 執行。



可以看到我進行 balanceOf 查詢編號爲 2 的 Token 持有 100 個。



我也可以將我的 Token 轉移給其他人,同樣的需要定義轉移的哪一類,以及轉移多少個,這和常見的 721 都是不一樣的。



至此你已經明白了 1155 和 721 到底有什麼區別,接下來我們看看阿迪達斯的合約代碼,代碼有點多我挑着重要的講,不懂代碼沒關係請一定要耐心看下去,理解項目方到底做了什麼事。


首先定義了最多發售 3 萬個,白名單預售最多發售 20380 個,白名單每人最多 mint1 個,公售每人最多 mint2 個。


然後定義了預售、公售的開始和結束時間,這裏使用的是時間戳定義。


最後定義了銷燬窗口期的時間。



然後執行了構造函數,這裏挺有意思項目方給自己一開始自動 mint 了 380 個。



這裏我們學以致用,把上篇文章教大家的閱讀 etherscan 使用起來,我們查一下這個地址的情況。


挺窮的啊錢包裏都沒什麼錢。



再看一下他的交易記錄,有大量的動輒幾十上百的 ETH 流水,項目方自己 mint+錢包裏沒錢+有大量大額交易記錄,所以這個錢包可能是一個白手套。



繼續看代碼,這裏到了 mint 函數,可見它目前只有 1 類 Token 所以自動傳入了編號 0。



有趣的來了,這個函數是用來在銷燬窗口期執行的,首先判斷用戶持有情況和窗口期時間,然後先執行 burn 銷燬用戶 Token ,再執行 mint 給用戶新創建 Token 出來,這裏用到了 cardIdToMint 這個參數用來管控到達了第幾輪,還記得一開始阿迪達斯說總共有 4 輪嗎。



這兩個函數則是項目方用來操控 cardIdToMint 具體的輪次。



以上帶着大家通過實戰和解讀阿迪達斯代碼學習了 ERC1155 協議,相信對於 NFT 生態有了更深的理解,協議作爲基建的創新會釋放出更多上層 NFT 的應用場景。


大家可以關注我的公衆號《今天有更懂這個世界一點了嗎 》查閱往期文章,與我進行更深度的交流探討,也可以關注我的推特:jason_chen998  


原文鏈接


歡迎加入律動 BlockBeats 官方社群:

Telegram 訂閱群:https://t.me/theblockbeats

Telegram 交流群:https://t.me/BlockBeats_App

Twitter 官方帳號:https://twitter.com/BlockBeatsAsia

举报 糾錯/舉報
選擇文庫
新增文庫
取消
完成
新增文庫
僅自己可見
公開
保存
糾錯/舉報
提交