感謝 Matheus Franco 審閱
摘要 (Abstract)
Holesky 測試網事件揭示了以太坊共識機制中的一個關鍵漏洞:當絕大多數驗證者因客戶端錯誤(Bugs)而錯誤地對無效鏈狀態進行證明(attest)時,網路會進入不可恢復的狀態,需要透過破壞性的「非活躍懲罰」(inactivity leaks)來恢復最終確認性(finality)。本文提出 具備異質營運商的分布式驗證者技術(DVT)可以提供一種保護機制 ,對抗此類多數分叉場景。透過在 DVT 集群層級引入檢查點驗證(checkpoint validation),我們展示了多樣化的驗證者營運商如何選擇性地棄權,不對惡意分叉進行證明,從而在不需要大規模罰沒(slashing)事件的情況下防止錯誤狀態被最終確認。此機制以犧牲錯誤分叉的短期合理化(justification)為代價,換取網路的長期安全,讓誠實的少數派最終能透過社會共識和非活躍懲罰勝出。
1. 以太坊的核心設計選擇:活性優先於安全性
這是對以太坊「活性(liveness)優先於安全性(safety)」設計及其與非活躍懲罰關係的簡述。熟悉此概念的讀者可跳至下一節。
1.1 CAP 定理與區塊鏈共識
以太坊的共識設計反映了底層架構的刻意選擇:當網路必須在安全性(防止衝突的最終狀態)與活性(持續產出並最終確認區塊)之間做出選擇時,以太坊優先考慮活性 。這意味著它允許不同的分叉競爭網路的認可。
這一選擇根植於 CAP 定理 。CAP 定理指出,分布式系統無法同時保證一致性(Consistency/安全性)、可用性(Availability/活性)和分區容錯性(Partition-tolerance)。以太坊作為一個必須容忍網路分區的無許可系統,無法同時實現這三者。以太坊選擇在災難性故障期間犧牲一致性,以確保網路保持運作。
1.2 合理化:非活躍懲罰 (The Inactivity Leak)
以太坊透過 非活躍懲罰機制 將這一選擇正式化。正如以太坊 Gasper 規範所述,當鏈無法最終確認超過四個時段(epochs)時,非活躍懲罰就會啟動。一旦啟動,它會逐漸懲罰那些未對多數分叉進行證明的驗證者,無論該多數分叉是否有效。一個擁有 32 ETH 的驗證者需要 4986 個時段(約 3 週)才會被逐出系統。
協議的邏輯是:暫時的網路可用性優於永久的安全性 。如果發生分區且大多數驗證者位於其中一側,非活躍懲罰可確保該側最終能達成最終確認並恢復。另一側的誠實少數派雖然會遭受懲罰,但最終可以透過社會共識(硬分叉)恢復並重新加入網路。
2. Holesky 事件:假設破裂下的共識失敗案例研究
2.1 發生了什麼事
2025 年 2 月 25 日,以太坊 Holesky 測試網啟動了 Pectra 升級。幾小時內,網路遭遇了關鍵故障:三個佔多數的執行層客戶端——Geth、Nethermind 和 Besu——被錯誤配置了不正確的存款合約地址。受影響的客戶端無法正確追蹤驗證者存款,導致共識不一致。隨之而來的是執行層與共識層失去同步。大多數驗證者開始對無效鏈上的區塊進行證明,無法偵測到底層執行狀態的錯誤。
結果是 不可恢復的最終確認失敗 。為了讓網路恢復,對錯誤鏈進行證明的驗證者面臨罰沒風險。非活躍懲罰機制必須緩慢地耗盡離線驗證者的質押金,直到正確的鏈重新獲得三分之二的絕對多數——這個過程耗時 約三週 。儘管少數派客戶端(一個執行客戶端)持續產出有效區塊,但絕大多數人的證明阻止了正確鏈的最終確認。
2.2 誠實多數假設的違背
以太坊的共識協議有一個基本的安全假設:誠實多數假設 。Casper FFG 的最終確認需要三分之二的驗證者對同一個檢查點進行證明。活性(區塊生產)依賴於簡單多數遵循分叉選擇規則。協議設計旨在只要拜占庭驗證者(惡意或故障)少於三分之一,就能正確地最終確認狀態。
Holesky 事件違背了這一假設。該錯誤導致誠實的驗證者對網路產生了對抗性行為。客戶端多數實際上變成了拜占庭節點,為無效狀態投票。
關鍵的洞察是:以太坊的安全性 取決於拜占庭驗證者少於三分之一 。當三個多數客戶端都以同樣的方式失敗時,它們構成的比例遠超網路的三分之一,從而破壞了安全保證。
2.3 為什麼非活躍懲罰具有破壞性
一旦網路進入分叉狀態,恢復就需要以太坊犧牲安全性來換取活性。非活躍懲罰機制 會逐漸減少未對多數分叉進行證明的驗證者的有效餘額。這會持續到未證明驗證者的餘額低到退出驗證者集,從而允許剩餘的(正確的)驗證者達到三分之二。
然而,這種機制在多方面具有 破壞性 :
經濟損失 :多數(錯誤)分叉上的驗證者受到懲罰,永久損失 ETH。少數(正確)分叉上的驗證者也因表象上的非活躍而受到懲罰。
分叉風險 :如果非活躍懲罰運行時間夠長,兩個分區可能分別達到三分之二的質押比例,並最終確認各自獨立的歷史版本。
恢復時間 :整個過程耗時數週,期間網路無法最終確認交易,也無法為用戶和應用程式提供確定性。
3. DVT PBFT 問題:為什麼簡單的基於法定人數的證明會失敗
3.1 原始的 DVT 方法
分布式驗證者技術(DVT)使用閾值加密和秘密分享,將單個驗證者的簽署密鑰拆分給多個獨立營運商。每個營運商持有密鑰分片,並參與拜占庭容錯(BFT)共識機制,以就執行哪項職責達成一致。
在原始的 DVT 設計中,一旦 BFT 共識達成一致,所有營運商都會簽署並提交證明。其邏輯很直觀:如果 BFT 共識達到了法定人數(quorum),則決策是正確的 。
然而,這種邏輯會讓我們落入 多數分叉陷阱 。
3.2 陷阱特性 (Trapping Property)
非正式直覺
一旦驗證者投票推進某個分叉上檢查點的最終確認,它在該時間點就會對該分叉產生 局部鎖定 。
具體來說,假設有兩個衝突的分叉 (A) 和 (B),且分叉 (A) 比分叉 (B) 進度更領先。如果驗證者 (V) 投出一票 ((s_a, t_a)),有助於分叉 (A) 上的檢查點 (a) 最終確認,那麼從那一刻起,(V) 就不能在分叉 (B) 上投出任何目標時段(target epoch)等於或晚於 (t_a) 的票,否則會違反 Casper FFG 罰沒規則。
直觀地說,透過投票最終確認 (a),驗證者承諾了分叉 (A) 上的特定時段區間。任何試圖透過投票給相同或更晚時段的檢查點來「追趕」分叉 (B) 的行為,要麼會:
對同一目標時段重複投票,或
產生環繞投票(surround vote),
這兩者都是可被罰沒的違規行為。
因此,在投票最終確認 (a) 之後,驗證者相對於分叉 (B) 被 困住 了:它無法幫助分叉 (B) 達成最終確認,除非分叉 (B) 先將其已合理化的檢查點推進到超出該驗證者鎖定範圍的時段。在此之前,驗證者無法在不違反陷阱特性的情況下為分叉 (B) 的最終確認做出貢獻。
為了清晰起見,讓我們將其正式化。
Casper FFG 複習
首先,快速複習 Casper FFG 的投票機制:
每次證明都包含一個試圖合理化某時段的 目標檢查點投票 (target checkpoint vote) ,以及一個試圖最終確認某時段的 來源檢查點投票 (source checkpoint vote) 。一個時段只有在獲得超過 2/3 的目標投票時才能變為「已合理化(justified)」。它只有在先前已合理化、獲得超過 2/3 的來源投票,且在其直接上方的時段使用同一組證明集創建了新的已合理化檢查點時,才能變為「已最終確認(finalized)」。
現在,複習罰沒規則:
令 (s_a, s_b) 表示兩個不同的來源投票。
令 (t_a, t_b) 表示兩個不同的目標投票。
令 (h(x)) 表示任何投票或檢查點的高度(時段)。
若由同一驗證者發出,則在以下情況構成罰沒違規:
根據這些規則,Casper FFG 論文推導出以下特性:
(iv) 高度為 (n) 的已合理化檢查點最多只有一個。
陷阱特性的正式定義
預備知識
令 (a, b) 為不同分叉 ((A) 和 (B)) 上最新的已合理化檢查點,它們分別可以透過投票 ((s_a, t_a)) 或 ((s_b, t_b)) 推進到最終確認,其中 (h(s_a) = h(a)) 且 (h(b) = h(s_b))。
我們注意到,如果 (h(a) = h(b)),則至少有 (1/3) 的驗證者犯下了罰沒違規 (1)。
陷阱特性
在不失一般性的情況下,如果 (h(a) > h(b)),且 (V) 是一個投票支持以 ((s_a, t_a)) 最終確認 (a) 的驗證者,那麼 (V) 就無法在不觸發罰沒違規的情況下,創建任何滿足 (h(t_b) \ge h(t_a)) 的 ((s_b, t_b)) 投票(即推進分叉)。
由此可見,(V) 現在無法在不被罰沒的情況下為 (B) 上的任何檢查點最終確認做出貢獻。
證明
如果 (V) 發出一個滿足 (h(t_b) = h(t_a)) 的 ((s_b, t_b)),這顯然違反了重複投票規則。因此,為了超越分叉 (A),(V) 必須發出一個滿足 (h(t_b) > h(t_a)) 的 (t_b)。(V) 必須使用 (s_b) 投票,因為 (b) 是最新的已合理化檢查點。已知 (h(s_b) = h(b) < h(a) = h(s_a)),因此該投票構成了環繞投票的罰沒違規。
3.2 多數分叉陷阱:情境範例
情境設定:
一個 DVT 集群有 4 個營運商:(O_1), (O_2), (O_3), (O_4)。
法定人數閾值為 3 個營運商。
網路發生了分叉:鏈 (A)(網路多數)和鏈 (B)(少數,正確鏈),位於時段 (X+1)。
(A) 和 (B) 都沒有足夠的驗證者證明來合理化或最終確認檢查點。
BFT 領導者(透過輪詢選出)現在是 (O_1)。
情境過程:
(O_1) 位於鏈 (A)(多數分叉)。
(O_1) 作為 BFT 領導者,向 DVT 集群提議:「證明鏈 (A):來源投票在時段 (X),目標投票在時段 (X+1)」。
(O_2) 和 (O_3) 恰好位於鏈 (B),但他們只檢查該提議是否會導致罰沒違規。
BFT 共識達到法定人數:(O_1), (O_2), (O_3) 批准了鏈 (A) 區塊 (X) 的證明。
該證明由 DVT 集群簽署並提交。
在時段結束時,鏈 (B) 上沒有創建或最終確認任何檢查點。
下一個時段,(O_2) 擔任 BFT 領導者並向 DVT 集群提議:證明鏈 (B):來源投票在時段 (X),目標投票在時段 (X+2)。
這不可被罰沒,因為它不是重複投票且不環繞之前的投票,因此被接受。
DVT 集群在鏈 (A) 和鏈 (B) 之間不斷輪換證明,從而從兩個分叉中獲取獎勵。注意 :由於一條鏈上的驗證者數量較少,會出現遺漏插槽(slots)。這會抵消正面影響,因為證明很難被包含進去。
4 個時段後,兩個分叉都啟動了非活躍懲罰。對於每條鏈,DVT 驗證者的非活躍分數在每個非活躍時段增加 (4),在每個活躍時段減少 (1)。
鏈 (A) 開始在 (B) 之前合理化檢查點。一旦 DVT 驗證者推進了來源投票,它實際上就會被困在 (A) 上。
DVT 集群在 (B) 上的非活躍分數開始每時段增加 (4)。
此時,DVT 集群只有在以下情況才能逃離 (A):
a. 停止在 (A) 上證明
b. 在 (B) 的非活躍懲罰中倖存
c. 鏈 (B) 在比 DVT 在 (A) 上投票的目標高度更高的位置合理化了一個檢查點。
後果:
DVT 集群強迫少數派營運商與多數派營運商保持一致。
如果多數派是誠實的 ,這是有益的行為。
DVT 驗證者參與兩條鏈,因為它預先不知道哪一條最終會成為規範鏈(canonical)。第一條恢復 2/3 多數的鏈就是它將繼續構建的鏈。
如果多數派是惡意的 ,DVT 集群就會被多數分叉困住。稍後,當非活躍懲罰導致網路恢復且鏈 (B) 成為規範鏈時,DVT 集群的驗證者將面臨因雙重投票(equivocation)或放棄鏈 (B)(接受損失)而產生的罰沒。
關鍵問題在於:DVT 集群被迫為多數分叉投票,即使並非所有營運商都同意它是正確的 。BFT 共識變成了一種強迫少數派營運商接受多數派選擇的機制。
4. 解決方案:檢查點驗證與集群級棄權
4.1 引入檢查點驗證
為了修復多數分叉陷阱,DVT 集群可以在證明檢查點之前實施檢查點驗證 。
檢查點驗證規則:
對於 DVT 集群要在時段 (E) 證明檢查點 (C):
4.2 當證明失敗時:棄權機制
這是關鍵機制:如果沒有法定人數的營運商能就時段級檢查點結構達成一致,集群就不會進行證明 。
與必須證明(否則面臨非活躍懲罰)的單個驗證者不同,DVT 集群可以 選擇性棄權 。這是一個核心優勢:DVT 集群的設計是為了容錯和冗餘,而不是為了保證參與。
當 DVT 集群停止證明時會發生什麼:
5. 網路級安全性:多樣化 DVT 如何防止多數分叉最終確認
5.1 異質性假設
整個機制取決於一個關鍵假設:DVT 集群必須是異質的(heterogeneous) 。
如果所有 DVT 集群都使用相同的執行客戶端(例如全部使用 Geth),它們在類似 Holesky 的事件中都會遇到相同的錯誤。它們都會位於同一個多數分叉上,並且都會(透過 BFT 共識)被迫進行證明。在這種情況下,DVT 無法提供保護。
然而,如果 DVT 集群由使用 多樣化客戶端 (有的用 Geth,有的用 Nethermind,有的用 Besu)的獨立方營運:
一旦分叉被合理化,檢查點驗證就會啟動棄權機制。
5.2 關鍵閾值:防止多數分叉最終確認
以太坊的最終確認規則要求 超過三分之二 (66.7%) 的驗證者同意一個檢查點 ,該檢查點才能被最終確認。
如果以太坊有足夠比例的驗證者是具備異質營運商的 DV,那麼:
範例計算:
讓我們以 SSV 網路目前的滲透率為基礎:
DV 佔比:14%(全部棄權最終確認)。
在多數分叉期間,假設 80% 的網路(錯誤地)轉向多數分叉。
傳統驗證者:69% 證明多數分叉,17% 證明少數分叉。
多數分叉在沒有 DVT 參與的情況下完成了最終確認 。
然而,假設以太坊有 30% 的驗證者是具備異質營運商的 DV:
5.3 網路穩定性論點
關鍵洞察:如果存在足夠多樣化的 DVT 群體,那麼在沒有他們參與的情況下,最終確認一個錯誤分叉將變得非常困難 。這創造了一個自然的停止點:
多數分叉試圖最終確認。
多樣化的 DV 偵測到不一致並棄權。
最終確認被阻斷,防止了規範鏈的分裂。
網路「卡在」沒有最終確認的狀態。
非活躍懲罰機制啟動。
誠實社群獲得了協調的時間窗口。
至關重要的是 ,這個結果優於 Holesky 的情境:
正確鏈上的驗證者不會被罰沒。
誠實少數派不會被迫接受多數分叉作為規範鏈。
社會共識可以決定正確的恢復路徑。
在此發生之前,兩個分叉都保持活躍。
6. 權衡:沒有最終確認的合理化
6.1 為什麼 DV 可能合理化(但不最終確認)錯誤分叉
我們提出的檢查點驗證機制 刻意不檢查狀態根 (state roots) 。這是一個關鍵的設計選擇,它產生了一個基本的限制:DVT 集群仍然可能對錯誤分叉進行證明(並藉此使其合理化),儘管它們無法使其最終確認。
為什麼排除狀態根檢查:
在 DVT 營運商之間比較完整的狀態根將需要:
所有營運商都已處理並驗證了完全相同的區塊狀態。
對給定插槽的整個執行層狀態達成一致。
拒絕任何具有微小狀態差異的區塊。
這會產生一個致命問題:由於網路延遲和區塊傳播延遲,營運商在同一時刻可能沒有相同的狀態根 。某些營運商接收區塊 X 的時間比其他營運商稍早。要求完美的狀態根一致意味著 DVT 集群 幾乎永遠無法進行證明 ——這會導致持續的非活躍懲罰,使 DVT 在經濟上不可行。在對抗性場景中,這個問題會進一步惡化。
為了解決這個問題,該機制刻意放寬了驗證規則:僅驗證時段級檢查點結構,而不驗證完整的執行狀態 。這允許營運商即使對當前 HEAD 插槽有略微不同的視圖,只要時段級共識結構(來源檢查點、目標檢查點、已合理化檢查點)一致,就可以進行證明。
權衡:
這個設計選擇有一個直接後果:因為 DVT 集群不驗證狀態根,它們會協助分叉的合理化 。
在分叉的第一個時段:
後果:
DV 可能僅僅因為時段級結構表面上正確,就 合理化 (累積超過三分之一的證明)一個錯誤分叉。在不透過持續失敗的證明來損害可用性的情況下,無法阻止這種行為。
6.2 為什麼這是可以接受的
從 DVT 驗證者的角度來看,這是理想的且符合其激勵機制:
網路可用性 :透過排除狀態根檢查,我們保留了 DVT 的可用性。即使在網路分區或暫時狀態分歧期間,DVT 集群也可以繼續參與共識,這對網路活性至關重要。
最終確認仍受保護 :雖然 DV 可能合理化錯誤分叉,但只要它們具備多樣化設置,就不會使其最終確認。
可逆性 :在合理化之後,DV 始終可以選擇切換到另一個分叉而不會受到處罰,從而使它們能夠從任一條鏈中獲得最大獎勵。
減少非活躍懲罰的風險 :DV 根據其集群組成在每條鏈上按比例證明,直到被陷阱鎖定。過早停止意味著要忍受非活躍懲罰的怒火。
7. 其他驗證者的困境:罰沒與最終確認的權衡
7.1 非 DVT 驗證者的問題
一旦 DVT 集群對多數分叉進行了證明,網路上的其他驗證者就會面臨困境 :
情況:
後果:
被困住的驗證者無法幫助最終確認正確的分叉。
7.2 DVT 機遇:通往更強網路韌性的路徑
從網路安全的角度來看,這個結果 並非最優 。儘管如此,DVT 集群有動力不透過在兩條鏈上同時證明來加速自身的非活躍懲罰。對於擔心災難性多數分叉事件的驗證者,採取主動措施可以幫助減輕風險。
一個關鍵選擇是過渡到 DVT 集群。DV 的廣泛採用甚至可以解決 客戶端多樣性問題 :透過多樣化的營運商設置,DVT 驗證者有效地整合了跨多個客戶端實現的檢查,從而加強整個生態系統。
8. DVT 多數的重要性
8.1 關鍵安全屬性
以太坊的最終確認組件 (Casper FFG) 需要三分之二的驗證者來合理化並最終確認一個檢查點。如果網路上超過三分之一由多樣化的 DV 組成,那麼就可以保證在沒有社會共識的情況下,任何分叉都不會被最終確認。
8.2 解救被困驗證者
由於合理化後的棄權避免了陷阱,DV 可以在達成社會共識後立即切換到對正確分叉的證明。
一旦選定的分叉在比錯誤分叉更高的高度合理化,被困的傳統驗證者現在就可以安全地切換。
DVT 群體越大,選定分叉的最終確認速度就越快,非活躍懲罰結束得也越快。如果這發生得夠快,被困的驗證者將能夠在社會共識達成後不久脫困。
8.3 實際效果
在實踐中,這意味著:
9. 局限性與假設:DVT 保護失效的情況
9.1 同質 DVT 場景
整個機制取決於 異質 DVT 營運商 。如果 DVT 集群由關聯方營運,或僅使用一種客戶端實現,它提供的保護將非常有限甚至沒有。
9.2 協調營運商攻擊
如果 DVT 集群的營運商受到激勵去圍繞特定分叉進行協調(例如,出於與正確性無關的經濟原因,他們集體偏好分叉 A),檢查點驗證機制無法防止這種情況。
DVT 的密碼學安全性確保了單個營運商無法竊取驗證者密鑰。然而,它並不強制營運商必須符合網路利益行事。如果法定人數的營運商是惡意的或相互協調的,他們可以強迫集群為任何分叉證明。
9.3 客戶端絕對多數問題
在 Holesky 期間,三個執行客戶端受到影響:Geth、Nethermind 和 Besu。如果這三個客戶端代表了超過 66.7% 的所有驗證者(包括獨立驗證者和 DVT),那麼所有使用這些客戶端的 DV 都將位於多數分叉上。
9.4 無法逃脫非活躍懲罰
DV 在鎖定到陷阱之前,會在少數鏈上進行證明,頻率與其委員會中視該鏈為規範鏈的營運商數量成正比。然而,由於大多數驗證者不提議區塊,證明登記會出現延遲。結果是,無論 DV 的表現如何,都可能遭受非活躍懲罰。
10. 結論:通往韌性共識之路
具備異質營運商的分布式驗證者技術提供了一種新穎的解決方案。透過在集群層級實施檢查點驗證,DVT 可以實現對多數分叉的 選擇性棄權 。如果達到臨界質量的驗證者採用多樣化的 DVT,網路將獲得以下能力:
防止錯誤分叉的最終確認 ,且不需要大規模罰沒。
保留社會共識恢復路徑 ,阻斷不可逆的分裂。
提供時間與空間 ,讓誠實社群協調硬分叉恢復。
在協議層級激勵持續的客戶端與營運商多樣性 。
此機制並非萬靈丹。它需要:
然而,即使在這些假設下,與目前客戶端絕對多數故障可能導致網路失控分叉的現狀相比,它仍代表了顯著的進步。
前進之路 是積極推動 DVT 的採用,確保多樣化的營運商與客戶端參與,並使檢查點驗證成為 DVT 共識機制的標準組成部分。隨著以太坊的成熟,這一層保護對於網路的長期穩定將變得越來越重要。