人神共憤的 NFT Gas War

  • FrankFrank
  • /
  • 5 分鐘閱讀
  • /
  • Oct 17, 2021
  • /
  • - views

首先我們來欣賞一個 Etherscan 上的交易記錄。這個交易是 2021年10月16日 早上 Jungle Freaks 開賣時的其中一筆 mint 交易。各位請留意,這個交易, mint 了 3 個 NFT,每個 NFT 花費0.07 ETH, 但是,叮叮叮,有沒有注意到 Transaction Fee 竟然高達1.744 ETH,相等於 6,712 美元,52,195 港元。

有沒有嚇到,有沒有震驚到。這就是以太坊上讓然目瞪口呆的 Gas War 的力量。

究竟發生了什麼?

首先我們需要知道區塊鏈上的每一筆操作都需要支付礦工費。這筆費用是以太坊上的礦工們幫你將數據寫入區塊鏈的「酬勞」。 而以太坊平均約 15 秒產生一個區塊, 而每個區塊內可以容納的 gas 上限大約為 15,000,000 個。區塊內的所有交易的 gas 總和,不能超過這個上限。

因此,當某一時刻出現交易量暴增,超過區塊容量的上限時,大量的交易會出現擁堵,大家都想盡快被礦工處理,擠進下一個區塊中。可是,以太坊上的礦工選取交易,並不是「先到先得」,而是「價高者得」,誰給的礦工費更高,礦工就會優先選擇誰。

在 NFT 新發售的時刻,因為發售價往往會非常低,有點像新股發售的概念,所以大家擠破頭皮都想在NFT 新發售的時候搶到,正因為如此,出現上面的情況就不足為奇了。一些熱門的 NFT 項目,如果公開發售是使用這種「大家同時一起 mint」的模式,那麼如果你想得到 NFT,不給出超乎常理高的 gas price,則基本沒有希望能夠成功。

因為 NFT 的數量有限,一旦達到上限,之後的交易全部會註定失敗。可是發出去的交易指令,如果你不做任何操作,最終還是會被礦工處理,因此 gas fee 還是會照樣消耗( 但因為智能合約會執行 revert 操作,不會執行餘下的邏輯,因此失敗的交易 gas 數量消耗會較少,而且對應的 eth 會退回)。

當然,你可以發出「取消」指令。但是,取消的成本,可能更高

根據太坊網規則,同一地址的每一筆交易 nonce 值是連續,不可跳躍,不可重複的。舉例來說,假如你的錢包發起 5 筆轉賬,其中第一筆因為網路擁堵而處於「等待」狀態,那麼,因為 nonce 的連續性要求,餘下的 4 筆交易都必須等待,直到第一筆交易成功後,才能繼續執行。

可是,如果出現重複的 nonce 值,會怎麼樣呢?根據規定,如果同一個地址出現多個相同 nonce 值,礦工會選擇其中一個來進行處理,其它的則會被廢棄。而礦工們由於逐利的心態,往往會選擇 gas price 給的更高的一個來處理。正是這個原因,我們利用相同 nonce ,對已經提交的交易進行「加速」,或是「取消」操作。如果要加速,則重新提交一個 nonce 相同,交易內容相同,但 gas price 更高的操作;如果要取消交易,則重新提交一個 nonce 相同,交易金額為0,gas price 更高的交易。

所以說,無論「加速」,或是「取消」操作,前提是你都需要重新提交一個 gas price 更高的交易。而往往,在類似 NFT 發售這種「秒殺」的場合下,gas price 的升幅會非常驚人。如果你想取消之前的交易,所要付出的 gas ,絕對不低。

為什麼說 NFT 項目如果採取這種「大家同時一起 mint」的 Gas War 模式發售,是人神共憤,正式因為有大量,巨量,海量的交易,因為給的 gas price 不夠多,被礦工處理的不夠快,而導致最終因為 NFT 已經售罄而失敗,但這個過程,無論是否取消交易,都依然要付出昂貴的 gas 成本。這些成本,並沒有實現任何價值,完全是徹頭徹尾的浪費網路資源。

我比較認同的 NFT 出售方式,是 White List 形式,所有「鬥快」,「抽獎」,等等市場推廣的「伎倆」,其實完全可以透過 offchain 的方式處理,即便是想營造「秒殺」氛圍,都完全可以使用類似在一個指定時間開放登記,按照登記次序先到先得的模式進行。登記完成後,被選擇出來的地址才有上鏈 mint 的資格,這樣完全不會引致 Gas War, 會節省大量的金錢和網路成本。