為什麼以太坊需要一個具備動態可用性的協議
本文主張以太坊的下一個共識設計必須優先考慮動態可用性,以確保在驗證者參與度波動或網路中斷時,區塊鏈仍能持續產出區塊。文中解釋了將快速心跳鏈與終局性機制解耦的雙層架構,是平衡活性與安全性的必要手段。
非常感謝 Ben、Francesco、Joachim、Justin、Mikhail、Roberto、Thomas 以及 Yann 提供的反饋。
我們正在為以太坊的下一個共識協議制定提案。新設計的核心是一個兩層架構:一個快速可用的鏈 —— 心跳(heartbeat) —— 由一個隨機抽樣的小型委員會產生;以及一個獨立的、緊隨其後的最終性機制(finality mechanism),用於對心跳層已經產生的區塊進行最終確認。至關重要的一點是,這兩層是完全解耦的,這與目前的 Gasper 設計不同,在 Gasper 中 LMD-GHOST 和 Casper FFG 的交互方式已被證明難以推理。Vitalik 在最近的一篇文章中概述了這個方向。
本文重點討論第一層 —— 心跳層 —— 以及我們認為該層必須具備的一個嚴格屬性:動態可用性(dynamic availability)。
為什麼動態可用性至關重要
以太坊從未斷線^([1])。歷經合併(The Merge)、客戶端漏洞、雲端服務商故障 —— 這條鏈始終保持區塊產出。這並非偶然,而是協議處理波動參與率的結果,也是下一個共識設計應該加強而非妥協的屬性。
圖 1. 以太坊信標鏈每日區塊提議歷史(來源)。綠色代表區塊成功提議的時隙(slots),橙色代表錯過的時隙,灰色代表孤塊。記錄中最低的提議率約為 90%,發生在 2023 年 5 月的共識客戶端事件期間。該比率從未接近零。
動態可用性是這一屬性的正式定義:如果一個協議只要當前在線(awake)^([2])的質押權重中多數是誠實的,就能保持安全性和活躍性,那麼該協議就是動態可用的。這不是指所有註冊驗證者的多數,而是指在線驗證者的多數。無論有多少驗證者離線,只要在線的驗證者大多是誠實的,鏈就會繼續運行。
為什麼這應該是一個嚴格的要求?
韌性與自我修復。 當驗證者因共識客戶端漏洞、雲端服務商故障或區域性網絡中斷而離線時,動態可用協議會繼續產出區塊。在常見情況下,修復很簡單:受影響的運營者修復漏洞,數據中心恢復在線,參與率回到正常水平。因為鏈從未停止,所以不需要重啟。如果參與率無法恢復 —— 例如大部分驗證者無限期離線 —— 以太坊有一個備案:不活躍懲罰(inactivity leak)。這是一種逐漸懲罰不活躍驗證者的機制,減少其有效質押,直到最終性組件可以在無需帶外(out-of-band)協調的情況下恢復運行。有一類鏈(通常為吞吐量而優化)隱含地依賴響應迅速的社會層來從極端事件中恢復:鏈停止運行,一小群利益相關者進行協調,驗證者同步重啟。當去中心化不是主要約束時,這種方法是高效的。但它不符合以太坊的設計哲學。
這些並非假設情境。2023 年 5 月,Prysm 和 Teku 共識客戶端(合計運行超過 50% 的驗證者)的漏洞導致了以太坊首次主網不活躍懲罰。2020 年 11 月,Geth 中的一個共識漏洞導致了鏈分叉,干擾了 Infura、MetaMask、MakerDAO 和 Uniswap。當多數客戶端發生分叉時,動態可用性確保兩個分叉都能繼續運行。個別運營者可以在網絡範圍達成共識之前,識別並切換到正確的分叉。
抗審查性。 如果擁有過半質押的對手方開始進行審查,誠實的少數派需要發起反擊。動態可用鏈允許他們開始構建替代分叉,即使驗證者數量很少,並隨著其他人意識到情況並加入而逐漸壯大。
應用層連續性。 DeFi 協議、Rollups 和橋接器都依賴於正常運行的 L1。基礎層停擺會同時凍結可組合的 DeFi(清算無法執行、預言機價格過時、倉位累積無法管理的風險)、使 Rollup 運作停滯(批次提交、欺詐證明、有效性證明),並迫使橋接器進入模糊狀態。這並非理論:在 Solana 2024 年 2 月的停擺期間,該鏈停止產出區塊長達五個小時 —— DeFi 協議完全無法操作,倉位無法調整,風險在沒有管理機制的情況下不斷累積。相比之下,在以太坊 2023 年 5 月的最終性中斷期間,區塊照常產出,交易繼續正常處理 —— 應用層基本不受影響,因為可用鏈從未停止。最終結算仍需要最終性層,但運作連續性取決於心跳層持續產出區塊。
這些觀點背後有一個統一原則:
盡可能向人們提供更多關於鏈未來狀態的信息是更好的做法。
這與「短最終性時間優於長最終性時間」、「最終性優於純概率確認」的原則一致。當最終性中斷時,動態可用鏈能提供關於未來可能狀態的部分但有用的信息。而停擺的鏈則完全無法提供任何信息。
BFT 假設的世界並非以太坊所處的世界
你聽過的大多數共識協議 —— PBFT、Tendermint、HotStuff —— 都假設有一組固定的驗證者且他們可靠地在線。在該模型下,安全性是可以證明的,但如果太多驗證者離線(通常約為 \ge \frac{1}{3}),活躍性通常會失效。這種權衡是不可避免的。
以太坊擁有數萬個獨立運行的節點,即使是有良好激勵的運營者也會離線:升級、雲端和 ISP 事故、硬件故障、配置錯誤、普通人為錯誤。設計一個需要「近乎完美參與率」才能維持活躍性的協議,是在為一個不存在的世界做設計。
沉睡模型(sleepy model)認真對待了現實世界的(某些)方面:誠實的驗證者可能在線或在線,且這會隨時間變化。在這種設定下,如果一個協議只要當前在線的質押權重中多數是誠實的,就能保持安全性和活躍性,那麼它就是動態可用的。離線的驗證者不計入任何容錯預算 —— 無論是拜占庭故障還是崩潰故障。這在實踐中很重要:現實世界的停機事件曾將參與率推低至 33% 左右(圖 10),這個水平會超過任何將離線驗證者視為故障的協議的容錯極限。
換句話說:
只要大部分實際在線的質押權重是誠實的,以太坊就應該繼續產出連貫的鏈。
你無法避免兩層拆分
有人可能會問:為什麼不構建一個既能動態可用又能提供最終性的單一協議?換句話說:為什麼我們需要在上面增加一個追隨式的最終性機制?答案是這是不可能的。
可用性-最終性困境(availability-finality dilemma) —— 區塊鏈特有的 CAP 定理形式 —— 證明了沒有單一協議可以同時保證:
-
動態參與下的活躍性:即使在線驗證者集合發生波動,鏈也能繼續增長。
-
網絡分區下的安全性:一旦交易被確認,即使網絡暫時分裂,也無法被撤銷。
換言之,動態可用協議必須假設同步性。
BFT 協議實現了分區安全性,但在參與率下降時會停擺。最長鏈協議(例如比特幣的共識協議)實現了動態可用性,但僅提供概率性確認 —— 且必須假設同步性才能做到這一點。沒有協議能同時做到這兩點。這是一個根本性的限制。
架構上的含義很直接:任何旨在永不停擺且提供不可逆最終性的協議,都必須包含一個動態可用組件。心跳層並非一種優化 —— 它是因不可能結果而產生的結構性必然。
從屬性到協議
雖然確定心跳層必須是動態可用的,但使用哪種協議仍是開放的。這一要求排除了現成的 BFT(在動態參與下會停擺),但也排除了對 LMD-GHOST 的簡單改編。雖然 Gasper 在不同參與水平下實踐表現良好,但 LMD-GHOST 無法被證明是動態可用的:Neu、Tas 和 Tse 證明了在同步模型中破壞 LMD-GHOST 安全性和活躍性的對抗策略,隨後的補丁也未能彌補這一差距。根據定義,只有在沉睡模型中同時滿足安全性和活躍性,協議才是動態可用的 —— 這些攻擊的存在意味著 LMD-GHOST 未能達到這一標準。
Goldfish 的設計就是為了填補這一空白。它是一個提議-投票(propose-and-vote)協議 —— 結構上比最長鏈更接近 BFT —— 它通過以下方式實現動態可用性:
-
恆定的預期確認延遲:確認時間不會隨著目標安全級別的提高而增長。這是與最長鏈協議的關鍵區別。
-
重組韌性:誠實提議者產出的區塊保證會留在規範鏈中。這一屬性在 LMD-GHOST 中缺失,它消除了困擾以太坊當前分叉選擇規則的一類攻擊。
-
子抽樣(Subsampling):協議可以由每時隙隨機選擇的約 256 名驗證者組成的委員會運行,使每時隙的通信複雜度相對於總驗證者集保持在 O(1)。
-
可組合性:Goldfish 可以作為 ebb-and-flow 協議中的可用鏈組件,與最終性組件配對。
實踐中的收益:時隙時間(Slot Times)
目前的以太坊時隙結構需要聚合約 30,000 個證明(attestations)。由於這超過了單個子網所能傳播的範圍,證明在到達全局網絡之前需要經過多輪聚合。正如 Vitalik 所觀察到的:
\text{聚合時間} \approx \log_C(\text{驗證者數量})
其中 C 是每個子網的容量(數百到數千個簽名),聚合時間以網絡輪次衡量,每輪大約耗時 \Delta^([3])。由於完整驗證者集都在關鍵路徑上,每個時隙需要 3\Delta 到 4\Delta 之間。
一個擁有約 256 名子抽樣驗證者的動態可用協議可以容納在單個子網廣播中。不需要聚合輪次。這完全消除了聚合開銷,關鍵路徑上僅留下區塊傳播和委員會投票的時間。^([4])
最終性仍然涉及完整的驗證者集,但它與動態可用組件並行進行,不在關鍵路徑上。這兩層不會競爭相同的延遲預算。
短期收益:抗量子準備與抗量子心跳
向抗量子密碼學轉型是以太坊持續關注的問題。一個主要的障礙是簽名聚合:以太坊目前依賴 BLS 簽名,它可以高效且容易地聚合,但目前還沒有抗量子簽名方案能在實際尺寸下提供相當的聚合屬性。
一個擁有小型子抽樣委員會的動態可用心跳層避開了這個問題。由於每時隙只有約 256 名驗證者,簽名根本不需要聚合 —— 它們可以進行簡單的拼接。不同方案的抗量子簽名大小各異;若方案每個簽名約 3 KB,256 個簽名總計約 768 KB。leanMultisig —— 一個針對 XMSS 簽名聚合和遞歸的極簡 zkVM —— 可以進一步壓縮:早期基準測試顯示,聚合超過一千個簽名的證明大小在 300–500 KB 範圍內,接近簡單拼接的成本。這些結果目前依賴於一個推測的安全假設;可證明的安全參數正在開發中。
這意味著抗量子心跳 —— 一個運行抗量子簽名的動態可用協議 —— 可以比完整的抗量子解耦協議更早部署,後者還需要為最終性層的完整驗證者集提供抗量子簽名聚合。心跳-最終性解耦使這種增量部署路徑成為可能:先將心跳層升級到抗量子,隨著抗量子聚合技術的成熟,再單獨處理最終性層的簽名。
如果沒有這種解耦,抗量子遷移就變成了一個「全有或全無」的問題:在你擁有一個能擴展到完整驗證者集的 PQ 聚合方案(這是一個活躍的研究領域)之前,你無法升級以太坊的簽名。兩層架構將其轉化為兩個獨立的問題,其中一個(約 256 個拼接簽名)利用現有方案即可解決。
我們正在構建什麼
目標架構:
-
心跳層:一個動態可用協議(Goldfish/RLMD-GHOST 家族),每時隙約有 256 名隨機抽樣的驗證者 —— 規模小到可以使用拼接的抗量子簽名運行,使抗量子心跳成為早期的部署里程碑。
-
追隨式最終性組件:一個使用完整活躍驗證者集的獨立機制,對心跳層的鏈頭進行最終確認。
這兩層完全解耦。這帶來了快速的時隙、選擇最終性機制的靈活性、不活躍懲罰期間的清晰分離,以及相對於 Gasper 更低的複雜度。
關於最終性層的詳細探討將在後續文章中發布。
-
我們指的是區塊產出,而非最終性。最終性曾暫時中斷 —— 最著名的是在 2023 年 5 月共識客戶端事件期間 —— 但鏈從未停止產出區塊。每日區塊提議圖表顯示,即使在該事件期間,超過 90% 的時隙仍收到了提議的區塊。這是客戶端多樣性(Lighthouse、Nimbus 和 Lodestar 未受 Prysm/Teku 漏洞影響)和動態可用性(協議繼續由保持在線的驗證者產出區塊,而不是因為總參與率低於絕對閾值而停擺)共同作用的結果。↩︎
-
我們在沉睡模型的意義上使用「在線(awake)」:如果驗證者正在積極參與協議,則為在線,否則為沉睡。這是一個協議層面的概念,不同於網絡連接性。↩︎
-
\Delta 表示任何兩個誠實驗證者之間網絡消息傳遞時間的假設上限。↩︎
-
精確的時隙結構取決於協議。例如,Goldfish 使用 3\Delta 時隙(提議、投票緩衝、投票),如果實現了快速確認,則為 4\Delta。↩︎