以太坊研究員圖解區塊重組事件,為何合併後不會再發生?

Jim
分享
以太坊研究員圖解區塊重組事件,為何合併後不會再發生?

以太坊信標鏈在 5/25 發生 7 個區塊重組,研究員 Barnabé Monnot 綜合多位分析師與開發者的見解,以圖解的方式敘述重組原因,並強調合併後所有驗證節點將使用相同用戶端軟體,區塊重組將不再發生。

本文節錄自 Barnabé Monnot 專文,如有疑慮情以原文為主:https://barnabe.substack.com/p/pos-ethereum-reorg

簡言之,發生重組並非信標鏈所預期,主因在於部分用戶端並未更新針對抵禦幽靈攻擊的 Proposer Boost,導致節點分歧,Monnot 也強調重組並未使驗證最終性延遲或出錯。

以太坊共識機制

本次的重組原因與以太坊共識層所採用的分岔選擇規則 LMD GHOST (Last Message Driven Greediest Heaviest Observed SubTree) 有關。

在分析重組原因前,需要了解 LMD GHOST 與 Slots 的運作機制。

LMD GHOST

當區塊鏈以誠實的方式運作時,鏈上按理一次只會出現一個新的區塊,並獲得所有驗證者支持,但由於網路延遲或提議者 (Block Proposer) 分歧,用戶端需要一種演算法來決定要支持哪條鏈,以太坊所使用的算法稱為 LMD GHOST,能使用戶識別出哪條鏈包含最多的驗證者證明。

Slots

在以太坊的共識機制中,時間被劃分為 Slots,每個 Slot 為 12 秒並會選出一個提議者 (Block Proposer),並由證明者 (Attesters) 進行投票。

提議者會根據 LMD-GHOST 分叉選擇規則,在他認為擁有最多驗證者證明的鏈構建下一個區塊。「提議者」預期在 Slot 開始時釋出區塊,而「證明者」應在 Slot 的 4 秒時釋出投票,從而留給提議者足夠時間,讓區塊能被證明者所見。

而由於引入了 Proposer Boost,證明者投給的提議者提升了權重,使運作上傾向於更即時的區塊提議。作者接著以圖解方式說明重組過程。

如何分岔的?

下圖中長方形為重組的七個區塊,圓圈為證明 (投票),圓圈越大代表權重越高。

區塊 74 和 75 同時出現形成分岔,多個提議者在 75 構建區塊,但區塊 74 比競爭鏈累積更多權重,最終區塊 82 提議者將區塊構建在 74 之上,並以重組區塊 75 到 81 為代價結束分岔。

分岔步驟

Slot 73

在 Slot 73 時,證明者投給了區塊 73 並即時完成,目前一切正常。

但在 Slot 74 時沒有出現任何區塊,因此證明者持續投票給區塊 73,進而增加期權重。

區塊73示例

區塊 74、75

下圖的事發經過:

  1. 區塊 74 延遲。
  2. 導致 Slot 75 開始時,區塊 74、75 幾乎同時出現。
  3. Proposer Boost 賦予了 75 更多權重。
  4. 因此 Slot 75 更傾向即時的區塊 75 而非 74。
區塊 73-75 示例

而重點在於,並非所有證明者 (用戶端) 都升級了 Proposer Boost,因此兩條鏈票數約五五波:

  • 沒有激活 Proposer Boost 的用戶端更傾向塊 74。
  • 運行 Proposer Boost 的用戶端較傾向塊 75。

但圖中能發現區塊 74 權重略高於 75,這代表沒有運行 Proposer Boost 的用戶端比例較高一些。

區塊 76

既然區塊 74 權重更高,為何 76 的區塊提議者選擇了區塊 75?

這是因為 Proposer Boost 適用於當前執行分岔選擇的提議者,因此 76 提議者誤將 75 選擇為父塊,從 76 提議者的角度來看:

區塊 75 證明者+Proposer Boost 在 75 的權重 > 74 證明者。

區塊 73-76 示例

區塊 76-81

與此同時,區塊 75-81 的證明者持續在 74 與 75 兩條鏈之間分配選票,且沒有運行 Proposer Boost 的用戶端驗證者持續投票給區塊 74,進而增加其權重。

區塊 73-81 示例

最後,一位未運行 Proposer Boost 的提議者出現,他需要決定在哪條鏈構建區塊,區塊 82 提議者認為區塊 74 比 81 的權重更高 (作者強調區塊 74 的權重高過 75-81 的任何一個區塊)。

至此,區塊 75-81 被有效地重組,甚至運行 Proposer Boost 的驗證者也將區塊 82 視為勝出,驗證投票也不再分裂。

區塊 73-83 示例

總結

作者認為,區塊重組是理論上可能發生,但在現實中卻難以實現的案例,也因此他想強調信標鏈的重組事件是純屬意外。

目前,以太坊開發者從重組事件中已清楚了解驗證者之間存在見解分歧的可能性,一組驗證者所看到的可能與其他節點不同,也意識到這些分歧可能延遲區塊,而 Proposer Boost 的不平衡或許是分歧的原因。

此外,作者也認為以太坊合併後,因為硬分岔升級而所有節點皆必須更新,所有驗證節點在合併後都將運行相同的用戶端軟體,這將不會再出現相同肇因而導致的區塊重組事件。

他總結道,雖然類似的失敗事件讓人不滿,但區塊重組並沒有使以太坊 (信標鏈) 的共識機制失效,相反,這次事件讓以太坊開發者更謹慎行事,更有動力打造一個無論是在理論上、現實中,都更為穩健的協議。