作者:Labrys
編譯:深潮TechFlow
本文討論了以太坊網路中執行客戶端Nethermind 遇到的一個故障,導致所有使用Nethermind 的驗證器(約佔網路的10%)離線。文章強調了Geth 客戶端在以太坊網路中佔據的超多數地位以及由此帶來的潛在風險。儘管Geth 是穩定且可靠的用戶端,但如果出現嚴重故障,由於其在網路中的普遍使用,可能對整個網路造成重大影響。文章呼籲社群重視執行客戶端的多樣性,以降低網路面臨的集中化風險。
介紹
本週,以太坊網路的一個執行客戶端Nethermind 經歷了一個故障,導致所有運行Nethermind 的驗證器(約佔網路的10%)離線。
這是一個較小的事件,因為Nethermind 是少數由利益相關者運作的。以下是我自己運行Nethermind 的驗證器的總餘額的圖表。你可以看到在當地時間凌晨4 點左右,當故障首次發生時,驗證器就離線了。團隊在大約4 小時後發布了一個補丁,等我安裝好後,驗證器在當地時間上午9 點左右恢復運作。在此期間,我的驗證器受到的懲罰與它獲得的獎勵相同。在同一天下午1 點,驗證器的餘額高於宕機前。總的來說,這是一個小的故障。
許多人錯誤地假設,當執行Geth 時,如果發生類似的故障,懲罰會類似。這不是真的。這與Geth 或Geth 的建造方式無關,而是與運行Geth 的人數有關。
根據ClientDiversity.org 的數據,以太坊上約84% 的驗證器都在運行Geth。現在這些持有者的辯護是,Geth 無疑是最好、最穩定的客戶端。雖然像Nethermind 這樣的少數客戶端本週受到了故障和停機的困擾,但Geth 自合併以來(甚至在此之前)一直運作良好。根據我自己的經驗,當從Geth 轉換到少數派客戶端時,我發現驗證器需要更多的資源,遺漏的驗證也更多。
這篇文章並不是對Geth 的攻擊。我非常尊重他們的團隊。不幸的是,由於Geth 的廣泛使用,我們需要誠實地討論當Geth 持有絕大多數質押時運行Geth 的風險。
如果他們知道自己更有可能經歷更多錯過的證明和更多的停機時間,那麼沒有人願意離開Geth,尤其是那些依賴正常運作時間來宣傳最高收益的商業模式,例如專業的質押業者。
截至去年9 月,估計最大的營運商Lido 在Geth 上運行約76% 的驗證器。
但我很高興我在運行一個少數的客戶端,即使我失去了一些額外的獎勵,不是因為我是利他主義者,為了網絡的去中心化犧牲個人利益,而是因為我知道我的ETH 會因此免於大多數bug 的影響。
如果Geth 出現bug,會發生什麼事?
這取決於bug 本身。
因為超過三分之二的以太坊驗證器運行Geth,任何Geth 中的嚴重故障都會立即阻止鏈的最終確定。這並不意味著鏈停止或中斷。只要其他客戶端仍在運行,鏈就會繼續運作。大約84% 的區塊將被遺漏,這意味著每隔約75 秒才會提出一個新區塊,而不是約12 秒的區塊時間。這些區塊將容易重組,因此當鏈再次完成時,這些區塊中包含的交易不保證仍然存在。這聽起來很糟糕,但讓我們記住,多年來以太坊在合併前從未有過最終確認的概念,比特幣今天也是如此——這就是為什麼交易所讓你等待6 個以上的區塊確認才能存款,以降低重組和損失資金的風險。
有些人可能還記得,以太坊在2023 年5 月就已經發生過這種情況,當時一些共識客戶端出現了bug。在兩天時間裡,鏈條兩次停止終結,導致許多區塊被遺漏,一度只有40% 的網路仍在運作。網路恢復後,大多數DApp 用戶除了交易區塊確認速度稍慢外,沒有發現任何問題。
但驗證器會怎麼樣呢?
非活動洩漏
當少數客戶端失敗時,懲罰是以與獲得它的速率相同的速率失去ETH(正如您在我上面的驗證器圖中看到的),但如果Geth 失敗,因為它會立即阻止鏈最終確定,所以懲罰會更加嚴厲。這種增加的懲罰被稱為非活動洩漏(The inactivity leak),當鏈停止最終確定4 個週期(約25 分鐘)或更長時間時,它會應用於離線驗證器。這種更嚴厲的懲罰旨在鼓勵離線驗證器盡快恢復在線,或者在最壞的情況下,銷毀離線驗證器的權益,直到他們的權益佔總權益的1/3 以下,從而允許在線驗證器完成鏈的確認。
在非活動洩漏期間,驗證器僅需離線2 天就會損失其權益的0.6%,或相當於2 個月的權益獎勵!
只要離線5 天,就會消耗掉整整一年的質押獎勵(3.5%)!這意味著需要超過2 年以上的質押才能恢復驗證者在事件發生前擁有的餘額。
在離線1 週內,10% 的權益,或3 年的獎勵,將會遺失。大約20 天內,50% 的權益將會遺失,在約40 天內,90% 的權益將會遺失。
相較之下,由於少數客戶端故障而離線的驗證器在40 天內僅會損失其權益的0.4%。
不活躍的懲罰將持續多久?
這取決於bug。
如果bug 能被修補,那麼懲罰將持續到Geth 團隊修補bug 並將其應用到您的驗證器所需的時間(或切換到其他執行用戶端所需的時間)。
實際上,我們預計這個問題可以在幾個小時或最多幾天內解決。如果修復bug 所需的時間與最近的Nethermind 事件相同,驗證器將損失0.004% 的權益,這不是什麼大問題。
如果bug 導致驗證器產生無效區塊,並且Geth 將其視為有效並對其進行認證,情況就會變得糟糕。這將導致鏈分叉。鏈將分成兩個分支,一個包含無效區塊的分支(Geth 鏈),另一個忽略無效區塊的分支(非Geth 鏈)。運行Geth 的驗證器將認為這兩個分支都是有效的,因此決定在權重最重的鏈上建構。 84% 的驗證器將其權益認證給Geth 鏈,僅有16% 的驗證器將其權益認證給非Geth 鏈。因此,Geth 驗證器將選擇Geth 鏈作為權重最重的鏈,並繼續在其上建構。
當然,一旦所有這些問題解決了,Geth 鏈上的區塊將被棄用(這將引起自己的問題),但更大的問題是Geth 鏈將擁有足夠的權益(大於2/3)來確認無效鏈。
一旦Geth 鏈最終確定,如果驗證器對Geth 鏈進行了認證,它就不能參與非Geth 鏈的建設(直到非Geth 鏈也被確認),否則會被削減。本質上,運行Geth 的驗證器已經承諾使用無效鏈,並被鎖定在該鏈上,直到非Geth 鏈被確認。這正是許多人誤解的關鍵風險。
由於Geth 驗證器被困在無效鏈上,他們在非Geth 鏈上被視為不活躍,並將遭受非活動洩漏的損失。沒有任何軟體更新或bug 修補可以拯救這些驗證器。他們將被耗盡,直到他們的權益佔網路的1/3 以下,讓非Geth 鏈得以確認。
目前網路上有28,976,695 ETH 處於質押狀態。其中84%(約2,400 萬枚ETH)可歸因於運行Geth 的驗證器,16%(約500 萬枚ETH)歸於不運行Geth 的驗證器。為了讓非Geth 鏈得以確認,運行Geth 的驗證器需要將其權益銷毀,直到其所佔的剩餘總權益少於1/3。這意味著需要從這些驗證器中銷毀約2,150 萬枚ETH(約佔總權益的90%),將Geth 權益減少到約25 萬枚ETH,少於總量的1/3(250 萬枚+ 500萬枚ETH)。非Geth 驗證器控制的約500 萬枚ETH 現在將代表多於2/3 的權益,使他們能夠確認鏈。
這將是一個極其痛苦的過程,大約需要40 天來完成。它將導致所有ETH 的總供應量減少約18%,,使總供應量低於1 億枚ETH。
爭奪出口
這裡的一個重要點是,處於無效鏈上的驗證器不太可能坐視不管。他們仍然有選擇退出他們的權益的選項,如果他們不這麼做,網路將在他們的有效餘額達到16 ETH 時強制將他們驅逐出去。但這並不意味著他們的損失僅限於16 ETH。
當你退出一個驗證器(即使是被強制退出)時,你會進入退出隊列,而你在退出隊列中時,你仍會流失ETH!
我們知道,在最壞的情況下,需要約40 天的時間,非活動洩漏才能允許有效鏈重新開始確認。那麼退出隊列需要多長時間呢?
退出佇列有一個流失限制,限制每個時期可以退出網路的驗證者數量(約6.4 分鐘)。流失限制定義如下:
目前的退出率為每6.4 分鐘退出13 個驗證器,如果每個執行Geth 的驗證器都想退出,至少需要約260 天才能讓所有驗證器退出。鑑於90% 的權益將在約40 天內被銷毀,大多數驗證器的餘額將在他們能夠退出鏈之前就被耗盡。
最初2% 的Geth 驗證器發起退出的將在前5 天內退出,損失的最大值約為1 年的質押獎勵。
你需要成為前3% 的退出驗證器,才能將損失控制在你權益的10% 以下。
只有前8% 的退出驗證器才能將損失控制在其權益的50% 以下。此時,任何未手動發起退出的人將被強制退出,並添加到退出隊列中,有效餘額為16 ETH。
在40 天后,當他們的90% 權益被銷毀時,超過85% 的驗證器仍將在隊列中。
退出的能力將無法拯救你,你的下行風險不僅限於你被強制退出的損失(16 ETH)。
那麼削減呢?
有些人錯誤地認為,如果出現bug,運行Geth 的質押者不僅會遭受非活動洩漏,還會被削減。這是錯誤的。
削減懲罰只適用於雙重簽章事件,這完全由共識客戶端控制。 Geth 中的bug 不應該導致共識客戶端犯下可削減的錯誤。 Geth 產生無效區塊不是可削減的錯誤。
只有非活動洩漏的懲罰適用於Geth 的bug。
你應該怎麼做?
當今運行Geth 的質押者可能並不完全了解運行絕對多數執行客戶端相關的風險。許多人錯誤地假設,一旦出現bug,將在幾小時內發布補丁解決問題,並且在此過程中損失的以太幣很少。
許多人並不了解,證明一個無效區塊的風險會讓他們被鎖定在一個無效的最終鏈中,幾乎可以肯定他們大部分ETH 將被銷毀。這是一個有可能成為現實的真實風險。
質押以太坊並非無風險收益。你是否會向最大潛在收益為每年3.5% 的工具投資至少75,000 美元?但有可能產生100% 的損失?可能不會,但這正是今天84% 的以太坊質押者所做的。
透過轉向少數客戶端(假設相同的bug 不會在多個客戶端中出現),你可以將損失最大限制在年化3.5%。
有了這些知識,任何人仍在運行Geth 看起來都是瘋狂的。我只能假設那些運行Geth 的人並沒有完全理解這個風險。
如果你持有LST(例如stETH、cbETH 等),並且LST 在其驗證器上運行Geth,請理解你的以太坊處於風險中,並考慮取消質押或切換到另一個LST,直到Geth 不再佔據超主流地位。