吳說作者 | 吳卓鋮
本期編輯 | Colin Wu
8月20日,以太坊核心開發者 Tim Beiko 在開發團隊電話會議的內容回顧上表示,可能推遲12月的難度炸彈,但在合并前不會有新的 EIP,細數下來,這有可能是難度炸彈第五次被推遲,為何難度炸彈一再推遲?它存在的意義又是什么?它和 ETH2.0 的合并又有什么關聯?
1.難度炸彈的意義
難度炸彈是以太坊挖礦中致使挖礦難度迅速上升的開關。以太坊的挖礦難度除了與上一個區塊的出塊時間有關,還與該區塊的難度因子有關。下面列出了難度的計算公式,前半部分是常規的難度調整,將每一區塊的出塊時間穩定在13秒;后半部分(即紅框部分)即難度因子,決定了難度炸彈的開啟時間和爆炸的速度,
具體地,難度因子中包含了難度炸彈開啟的目標區塊高度,當區塊高度沒有達到目標值時,挖礦難度只受上一區塊的出塊時間影響;而一旦區塊高度到達預定值,出塊時間便會呈指數是上漲,隨后每挖出10萬個區塊難度便會調整一次。
2015年8月4日,前以太坊首席商務官 Stephan Tual 首次提及了難度炸彈。
“很多人一直想知道我們如何在寧靜階段實現從 PoW 到 PoS 的切換。這將通過新引入的難度調整計劃來處理,該計劃在未來16個月內將平穩地保證硬分叉點……它的工作原理如下:從20萬的區塊高度(時間約為2015年8月下旬)開始,挖礦難度將開始經歷指數型增長,大約一年后,難度會明顯增加,到那個時候(大概就是寧靜里程碑發布時),挖礦難度的大幅增加將使出塊時間變長,”
為何 PoW 轉換成 PoS 需要難度炸彈來過渡?明白了這個問題就能理清難度炸彈和 ETH2.0 的先后順序,首先我們需要接受一個事實,ETH2.0 完成后 PoW 將退出歷史舞臺,不存在兩種共識共存的情況,這在吳說過往的文章中也分析過,且 ETH2.0 合并階段的完成就是 PoW 挖礦方式的終結,
對此,龐大的礦工社區存在一種聲音,企圖在以太坊完成 1.0 與 2.0 合并后實行分叉,這對于整個以太坊社區無疑將是個雙輸的局面,因此開發團隊需要想辦法防止此類事件發生。我們知道,由于 Vitalik 的存在,以太坊開發團隊是比較容易統一戰線的;而礦工團隊則不然,去中心化導致全體礦工無法形成一個利益共同體,換言之,只要能讓礦工之間互相不信任,那么礦工將不具備足夠的算力來實現51%攻擊。
難度炸彈便是一個能讓礦工產生不信任的陽謀。根據 Stephan Tual 的預估,難度炸彈開啟后以太坊需要大約一年的時間(實際時間或許比這更短,后文會細數歷次難度炸彈開啟后實行的時間)才能上升到一個幾乎無法挖出區塊的難度。這意味著,從開啟到礦工入不敷出,當中至少有幾個月的時間,而這段時間正是瓦解礦工陣營的時候。
考慮到區塊高度越高,實現分叉的難度就越大,礦工不能等到完全沒有產出了才開始分叉,而是應該在難度炸彈開啟的第一時間就開始行動,然而試想一下,作為一個理性的礦工個體,你會在難度炸彈開啟的時候嘗試分叉主鏈嗎?事實上你會擔心:如果有個別礦工沒有齊心協力地分叉,而是在原最長鏈上繼續挖,那么他們的產出將會大幅上升,甚至超過難度炸彈造成的損失,一旦分叉失敗,這些“背叛”的礦工會賺的盆滿缽滿,而“團結”的礦工卻竹籃打水,因此,理性的礦工會選擇沿著主鏈繼續挖(或者選擇以合理的退出價格離場),即使知道最終的結果是產出為零,也沒人愿意帶頭冒險,
理解了難度炸彈的意義我們自然就能明白其開啟時間與 ETH2.0 合并時間的先后順序。如前文所述,難度炸彈的存在就是為了在以太坊 1.0 與 2.0 合并時不要發生礦工集體分叉的局面,因此如果以太坊已經順利完成了合并,那么難度炸彈也就沒有存在的意義了。之所以把難度炸彈的最終開啟時間視為 PoW 終結的先行指標便是基于這個邏輯,
難度炸彈開啟后,以太坊合并必須在兩三個月內完成,如果完成不了,團隊只能選擇暫停并推遲,這在歷史上發生過三次,
2 歷次推遲難度炸彈的EIPs
歷史上難度炸彈曾**開啟過,又四度被推遲了,四次推遲分別發生在拜占庭升級、君士坦丁堡升級、繆爾冰川升級和剛結束的倫敦升級。
上圖為歷史上以太坊出塊時間的變化,可以看到正常情況下出塊時間維持在13-14秒,但出現過三次急劇上升的情況,這三次正是難度炸彈開啟的時候,每次開啟后,出塊時間都會呈現鋸齒狀上升,這便是因為每挖出10萬個區塊難度會調整一次。以最初的13秒為例,10萬個區塊大約耗時15天,而最后一次時間增加到25秒,此時10萬個區塊需耗時將近一個月,因此鋸齒呈現逐漸變寬的趨勢,三次難度炸彈最終都被暫停并推遲,原因就是以太坊開發團隊還沒做好完全轉向 PoS 的準備,而 PoW 模式下區塊難度的上升會導致交易等待時間和叔塊概率的增加,從而降低以太坊的實用性與安全性。
第一次推遲難度炸彈
2017年3月,區塊高度達到370萬,難度炸彈第一次開啟,出塊時間迅速上升,期間經過6次難度調整,直至10月被延長至30秒,此時,若不盡快停止難度炸彈,將嚴重影響以太坊生態,經過開發團隊討論后,以太坊在區塊高度437萬處啟動硬分叉——拜占庭升級,在升級版本中包含了 EIP-649 提案,該提案通過把當前的區塊高度減去300萬作為公式中使用的偽區塊高度,以此來延緩難度炸彈的啟動時間。
此時的真實區塊高度是437萬,但用來啟動難度炸彈的偽區塊高度是137萬(437-300)。簡單計算可以得出,當偽區塊高度再次達到370萬,也就是233萬(370-137)個區塊后——即真實區塊高度達到670萬(437+233),難度炸彈會再次開啟。
第二次推遲難度炸彈
2019年1月15日,以太坊君士坦丁堡升級協調員 Afri Schodeon 發現以太坊的難度炸彈已經在670萬高度的區塊如期啟動,并在大約 700 萬高度的區塊發生了“爆炸”,第二日,以太坊核心開發成員 Eric Conner(即推出 EIP-1559 的開發者)在推特上指出,難度炸彈爆炸后,平均出塊時間已經從14秒升至15.5秒,并且會加速提升。
2月中,以太坊出塊時間上升至20秒,問題又一次擺在以太坊開發者面前,唯一的辦法還是分叉升級處理掉難度炸彈的影響。2月28日,君士坦丁堡升級在區塊高度為728萬處完成分叉,難度炸彈危機被再一次被暫時解除。君士坦丁堡升級中包含的 EIP-1234 不僅僅將難度炸彈推遲,還有一項重要的改變就是將出塊獎勵減少為2個 ETH。此次推遲爆炸的方法和拜占庭升級一樣,即簡單地將難度因子中的偽區塊高度減少500萬。調整后,真實高度為728萬,偽高度為228萬(728-500),當偽高度回到370萬,即真實高度達到870萬(370-228+728),難度炸彈將再次開啟,這次只需再經過142萬個區塊,因此時間較前一次更短。
第三次推遲難度炸彈
2019年10月5日,難度炸彈在區塊高度860萬處提前啟動,12月中,出塊時間上升至17秒。以太坊開發者不得不在進行伊斯坦布爾升級后不久,于920萬高度處再次進行硬分叉,這就繆爾冰川升級,此次升級只有一項改進提案(之所以以冰川命名就是因為升級只針對難度炸彈,炸彈完全爆發后,出塊獎勵將被“凍結”,近期考慮的第五次推遲也可能用這種方式命名),即 EIP-2384,旨在將難度炸彈再推遲400萬個區塊,即1320萬高度,大約是向后推遲了611天,
而提案中還有一句話引人關注:最好將難度炸彈再次推遲到 ETH2.0 最終版工具(finality gadget)預計發布的時間,
第四次推遲難度炸彈
這一次,以太坊開發團隊沒有等到難度炸彈爆炸。2021年8月5日,以太坊在高度為1296.5萬處啟動倫敦升級,難度炸彈被再次推遲,本次升級包含 EIP-3554,將難度因子中的偽區塊高度在約1247萬(此高度并非當前實際高度,而是協議提出時設立的一個預計高度)基礎上減少970萬,即277萬。因此大約經歷93萬(370-277)個區塊后會再次啟動難度炸彈,以出塊時間13秒計算,大約需要4.7個月(官方預估在12月的第一周啟動),
第五次提出 EIP 推遲難度炸彈?
7月份,以太坊核心開發者 Tim Beiko 曾表示:假設我們有一個非合并升級(作者注:假設12月的上海升級無法完成 2.0 的合并,事實上這個假設大概率會發生),我們需要決定是否要包括除了另一個難度炸彈延遲之外的任何其他內容(作者注:如果包含其他升級協議,那么保留“上海”這個名稱,否則考慮使用“冰川主題”命名,理由與繆爾冰川升級相同)。
8月20日,Tim Beiko 在以太坊核心開發者電話會議的內容回顧上表示,基本上所有團隊都同意,除了 Eth1 和 Eth2 合并的共識更改之外,還有其他重要的事情需要在接下來幾個月內完成,其中大部分是客戶端需要為合并進行性能優化、更好地分離共識引擎等。鑒于此,與會人員同意不在12月進行功能分叉(feature fork),這意味著可能會推遲難度炸彈,添加其他少量(one line)更改,但不會在合并之前產生新的 EIP,
現在看來,難度炸彈被再次推遲幾乎是板上釘釘,這也和我們之前分析過的它與以太坊合并之間的關聯相吻合。簡而言之,合并意味著 PoW 終結,而難度炸彈徹底爆炸則意味著合并的完成,在以前的文章中我們分析過,PoW 的終結最快也要到2022年的二季度,而難度炸彈從啟動到徹底爆炸僅需要兩三個月,因此如果12月便啟動難度炸彈,以太坊必須要在明年一季度完成合并,這是個難以完成的任務。
最后一個問題是,以太坊開發團隊是否會提出一個新的 EIP 來推遲難度炸彈?過去四次,開發者都是通過降低難度因子中的偽區塊高度來實現,而修改代碼則必須提出 EIP,如何在不提出 EIP 的情況下實現難度炸彈的推遲,這需要開發團隊進一步的解釋(作者猜測 Tim Beiko 的意思是,12月升級只包含推遲難度炸彈的 EIP 而沒有其他新的提案,因此考慮更改“上海”為其他“冰川主題”),