ZombieClub Launch – Teahouse Finance

觀察參考 2022/5/12 – ZombieClub Token 地板價 0.85 ETH,研究目前由港星藝人余文樂帶領發行的天花板 NFT 項目。

Zombie Club 發售資訊

  • NFT 總數:6,666 顆
  • 初始售價:0.666 ETH
  • 預售時間:(台灣時間 UTC+8) 2022 年 3 月 15 日 21:00 – 3 月 17 日 21:00
  • 預售數量:5,000
  • 公售開始時間:(台灣時間 UTC+8) 2022 年 3 月 17 日 22:00
  • 公售數量:1,000
  • 內部團隊保留數量:666

 

以下是 Zombie Club 對於 Launch Gas fee 的調研報告說明

白名單的驗證方式

  1. 在合約指定簽章者地址,然後用對應的私鑰 off-chain 生成簽章,在 mint 時,再於合約中驗證簽章是否正確
  2. 以白名單地址建立 Merkle tree,mint 時以 Merkle tree proof 檢查地址是否在白名單內
  3. 將白名單地址全部寫在合約中,直接驗證

第三種方式明顯非常沒效率,而第一種、第二種各有優缺點,在這次 ZombieClub 的發行中,我們是採用第一種方式。

白名單鑄造階段,在合約中會紀錄每個地址已經鑄造過幾個 token,並在生成簽章中使用到允許鑄造的數量,而不再額外儲存其他驗證相關的資訊,達到安全目的的同時,不花費更多的手續費!

公售時的做法

  1. 依然檢查簽章,在生成簽章的過程中,不論地址為何,都當作白名單,並搭配 reCAPTCHA 防止機器人
  2. 記錄使用過的簽章,這是要避免科學家使用同一個簽章以腳本大量鑄造的方法,有了這個檢查每次鑄造都需要通過完成 reCAPTCHA 再取得新的簽章,當然如果有個人聘僱了一些人同時幫他操作,這就不在討論範圍了

在公售前與公售時,我們都非常密切關注伺服器以及鏈上的狀態,在公售還沒開始時,伺服器收到了每秒數次的 query,並且在公售後,reCAPTCHA 回報的異常使用者佔了約 50% (白名單時只有 1%),可以說是非常驚人,也說明了 reCAPTCHA 確實有發揮效果;而鏈上也有些人一直嘗試以奇怪的方式鑄造,可能是自行調整參數或是用了一些腳本,我們無從得知,當然這些都失敗了,例如:
https://etherscan.io/tx/0xa06aaa74957f1dd5ac06b034b510a192662f2b09a6b7f1a79c99e6a0197aaeba
https://etherscan.io/tx/0x9ed03adba7abb26733dbe6cf698e752a6fa0320bd59c4bfecbe2450f6f636a94
https://etherscan.io/tx/0xc5e8426fa1b5b1304484a37220ec7c35605304a26c8e36724a417a8189d00707
https://etherscan.io/tx/0x129d3f13910c2cc060cdc334cccba51333bd7df0ddbb3946f0c771d969f840b3

白名單與公售為何會有 Gas 的差異

前面已經說明的我們的作法,為了防止科學家大量鑄造,我們在公售時,多儲存了簽章的資訊,在區塊鏈上寫入/儲存資料是需要一定成本的,這也是為什麼公售時,消耗的 “gas” (gas fee = gas limit x gas price) 會略高於白名單鑄造。

為什麼正常操作卻發生 “out of gas” 的問題

在錢包收到發送交易的指令時,錢包會根據合約估計一個 gas limit,而當這個 gas limit 低於真正會花費的 gas 時,就會出現這個錯誤,並且手續費被消耗掉。首先有兩個技術點必須說明:

  1. 智能合約只負責邏輯的處理,並不能做對 gas limit 的調整
  2. 前端可以做,但我們並沒有限制 gas limit 的大小

所以可以確定這是錢包估計不正確所導致,一個好的作法是找出所有可能的花費,盡可能高估實際花費的 gas,並設定更高的 gas limit,所以常常會看到某些交易 gas limit 與實際消耗的 gas有不小的差距,像是這個我們隨機找個交易(實際花費大約只有估計的一半):
https://etherscan.io/tx/0xcd268d85a7f322457f5ca9cb75aafaf63b39004b1d57027472cce291ddd4c227
如何估計 gas limit 根據不同錢包可能有不同作法,這我們無法干涉,也有可能是錢包版本太舊,導致其估計的不正確。

為什麼有人在公售前就鑄造到?

有些人可能發現到,第一個鑄造到的人時間是在公售前2秒,如下圖:

這個時間是礦工填上去的時間,這個填寫數值可能會與實際時間有誤差,但實際上 #5406 這個 token 是在公售後才鑄造到的,我們已經在合約上做正確的限制以及簽名伺服器只在公售時才開啟,並且在 public sale 時,不斷監控剩餘數量,其沒有提前減少的現象發生,這些各位可以放心,我們團隊也在合約部署後就立刻完成了設定公售時間,如以下 transaction:
https://etherscan.io/tx/0x116a255dd56425afa968f473bf9049ee63d1871489383f8ec84419ce99559f8f

真的有防到科學家嗎?

以往一些熱門的 NFT 公售,都會有科學家以腳本搭配超高的 gas price 大量鑄造,造成其中一個錢包大量持有,或是大量 transaction 用了一樣的參數,而一般人都搶不到的問題,我們並沒有限制在公售時一個錢包只能鑄造一隻,但我們希望大家都能公平的鑄造,以下是實施措施的整理:

  1. 以 reCAPTCHA 搭配簽章防止機器人
  2. 簽章有效時間是一個小時,所以我們將白名單鑄造結束時間與公售開始時間拉開一個小時的間距,在白名單鑄造結束時,關閉簽章伺服器,並更換簽章私鑰以及地址,確保科學家無法以白名單鑄造時獲得的簽章,用在公售時大量鑄造。
  3. 為了防止流量瞬間衝高,我們將伺服器設計為不使用資料庫、不連結區塊鏈查詢資料,程式將所有設定存於記憶體中使用,降低伺服器負擔。

我們也分析了公售時地址與鑄造的數量關係,以下為將公售的 NFT 在鑄造完的那個 block 進行快照,統計每個地址鑄造到幾個的關係圖:

我們可以看到其實大部分地址都只鑄造到一個,並且每一個鑄造都用了不同的參數,這是我們樂見且預期的效果,公售的本質就是一種博弈,若要達到 first come first serve 的效果,只有完全的中心化才能做到,我們已經盡力做到最好,確保公平性以及體驗,希望大家可以理解!

以上是發行時的細節,祝 Zombie to the moon 🚀🚀🚀