嘟嘟房NFT鑄造出包!智能合約到底哪裡出了問題?

嘟嘟房NFT鑄造出包!智能合約到底哪裡出了問題?

隨著 的觀念及討論逐漸在台灣流行,許多本土業者及團隊將業務範圍擴展至此領域,但畢竟產業尚未成熟,的撰寫、Discord 社群的經營等等皆不是一般傳統業者能用過往的方式處理的,也因此產生許多爭議問題。今日,要談的主角是全台停車場龍頭「嘟嘟房」在 發行時的合約問題,究竟哪部分有問題導致大量鑄造失敗?

(本篇轉載自 FULY.AI 智能投資機器人創辦人 Rex Chen,原文請見)

嘟嘟房 NFT 出包事件

嘟嘟房 3/11 早上 10:00 開放白名單可以去 mint,但是幾乎所有人有白名單的全部都 mint 失敗!

這是嘟嘟房的地址:
https://etherscan.io/address/0xae122962331c2b02f837b2aa501d3c5d903ed28a#code

根據合約可以看得出來他的 preSaleMint,有做檢查判斷是否 isWhitelisted。

這是這次出包問題的核心,isWhitelisted 的 function。

而真正儲存在的變數是 whitelistedAddresses,他是一個 Array 裡面塞滿了所有的白名單。

在智能合約裡面用 for loop 去一個一個檢查資料,如果當 array 資料少的時候沒什麼太大問題,但如果白名單增長了,那問題可就大了。

根據合約 transaction 可以看出所有的白名單有 898 筆,寫入這些白名單資料花費了 0.689 以太的手續費,真是爆多啊。

如果你運氣很好的你白名單在前面的順位,恭喜你可以用很低的 gas fee 去 mint 到,如果你在後面的話你就衰小了。

1DlIr4rRq osMNQErSOeQEg

1inty8RZvgBs3K mS1sLGhg

這時間換算台灣時間就是早上十點。

1eMy4BbjnQQ5XsqFJjZdUSw

這是第一筆真的交易失敗的交易紀錄,他是在白名單裡面的258號,算是比較中間的,這時候的 Gas Limit 是設定 420,000,因為 Gas Limit 設定太少,所以他 out of gas。

1QJwIoUbInB4OyDCQgLuFZA

這是第一筆成功 mint 到的人,他在白名單裡面編號是第 4 號,運氣超好,所以他只有花了 16.93 美的手續費就 mint 到了,最近很冷清,這時候的 Base gas fee 才 32 Gwei,這樣子的手續費是正常的。

我們來看後來項目方手動調整到 Gas Limit 兩百萬,還是有人失敗,因為他在白名單裡面編號是869號,真是有夠衰小,花了144.99美的手續費,還是 out of gas。

1Mi87EeBQCylDfOVWYF1Y w

所以問題是什麼呢?

  1. Gas Limit 設定太小是第一點,但正常自己用 都可以進階去手動調整,應該不是什麼太大問題
  2. 真正的問題在用 for loop去爬 array,造成越後面順位的人手續費就越高,會是等比級數的成長,很恐怖,前面的人就很lucky

那這樣的問題該怎麼解決呢?比較簡單的做法就是不要用 array 去存,用一個 mapping 去存這個地址是這個地址是白名單。

然後判斷的時候直接判斷,就不用一個 for loop 去跑。

1KMsDQhs2aaaoN2Slb2O0Ig

但缺點是設定白名單一樣成本很高,但至少不會造成用戶去 mint 的時候成本很高!

所以現在主流做法都是用 merkle tree 的方式來實作白名單,好處是修改名單方便,也不用這麼高的手續費,小弟最近也剛研究完而已,有任何寫錯的地方都歡迎技術交流。

本文轉自網路,如有侵權請來信告知,本網站不代表任何投資建議,僅提供資訊,若用戶有任何投資相關行為皆與本站無關

本網站所載的任何資訊均不構成投資建議,投資有賺有賠,投資人應獨立判斷,審慎投資,自負

Related Posts