2020年12月19日,Filecoin網絡經歷了鏈中斷,這意味著在一段時間內,可以創建新的區塊,但鏈上節點無法就產生的狀態達成共識,每個礦工計算出不同的值。由於社區成員、礦工和開發人員的快速響應,修復程序在4小時內發布,且網絡在7小時內完全恢復。這篇文章描述了遇到的問題、中斷的影響、快速響應以及下一步方案。
原因
引發終端的潛在問題是對存儲礦工參與者實現中的對象映射進行潛在的不確定性迭代。參與者是在Go語言中實現的。眾所周知,反覆調用Go語言地圖映射是有不確定性的,參與者使用一種模式來始終在使用迭代之前對迭代結果進行排序(強制執行靜態分析)。不幸的是,在對兩個這樣的映射(地圖)進行排序的比較函數中出現了一個錯誤,導致排序無效(請參閱#1335)。因此,不同節點處理map條目的順序不同,從而導致不同的結果和Gas消耗。
實際上,該代碼路徑實際上只有通過(a)一個節點聲明多個扇區立即終止,或(b)一個節點立即恢復跨越多個分區的故障,才能到達。(其他兩種代碼路徑會到達這一點,但在實踐中極不可能)。
在此之前,主網中都沒有使用這兩種路徑,沒有將多個扇區/分區作為暴露非確定性的數據。網絡的中斷是由多個扇區同時終止而觸發的。
Filecoin參與者的測試涵蓋了所涉及的代碼,但不包括驗證不同測試運行之間確定性執行的機制。Lotus節點實現的集成測試不包括終止多個扇區。
網絡中斷帶來的影響
最重要的是,應該強調在中斷期間沒有數據丟失。
雖然無法創建新的區塊而暫時抑制了網絡上的交易,但存儲供應商提供的所有數據都是安全的,一旦網絡恢復運行,就可以隨時使用。此外,值得注意的是,即使在鏈中斷的情況下Filecoin協議的規範也提供了可以檢索數據的功能。因此,儘管在中斷持續時間內不可能進行鏈上交易,但Filecoin網絡的核心功能仍然完好無損。此外,網絡已採取的修復措施確保節點挖掘工作不會因停機而受到處罰;取而代之的是,為了降低優先級並鼓勵網絡恢復,暫時降低了共識削減。
響應迅速
首先發現、識別、修復和解決問題的速度也是值得注意的:
① 事件發生15分鐘內,自動監控觸發了警報;
② 在30分鐘內,礦工和實施開發人員聚集在一起解決問題;
③ 在4個小時內,開發人員確定並發布了對該問題的修復程序;
④ 在7個小時內,足夠多的節點採用了此修復程序,以超過多數共識算力閾值,使網絡處於恢復的道路上。
對於年輕的去中心化網絡而言,這是一個令人難以置信的快速響應。即使是已經建立的區塊鏈項目也會不時經歷鏈斷和分叉,Filecoin解決這一事件的時間可以與已經運行多年的區塊鏈相媲美。整個社會應該為處理此事件的速度感到自豪。
只有通過世界各地多個團體的共同努力才能實現對此次事故的恢復。整個生態系統的各方通力合作,實現了這一目標: 節點檢測、報告了問題,並引起了開發者的注意; 工程團隊協調開發並發布一個同行評審的補丁,同時通過社區渠道溝通修復的狀態;全球各地的網絡參與者都在努力應用補丁程序,使網絡儘快恢復運行。
雖不需如此複雜,但這是Filecoin生態系統內參與度和專注度令人印象深刻的體現。
下一步是什麼
構建區塊鏈就像構建一個軟體火箭。它們是一項非常複雜的技術,因此很難在第一次嘗試中就把所有東西都做好。就像真正的火箭,事情可能會以意想不到的方式出錯;當這種情況發生時,重要的是要有適當的基礎架構,以儘快解決問題,將其影響降到最低,並減少再次發生問題的可能性。
為了實現這個目標,多個團隊進行了事後驗收的編寫和執行,確定了對參與者/lotus的測試覆蓋範圍,以及網絡基礎設施/通信的警報和問題升級,以幫助減小未來事故發生的可能性。
得益於Filecoin社區的耐心、努力工作和投入,這種新技術的問題才能不斷得到解決。隨著所有問題的識別和解決,該網絡將進一步發展成為一個穩定、可靠和經得起考驗的平臺。
聲明:文章內容、圖片來源於IPFS官方網站,斯年科技僅翻譯/整理/搬運。原文:https://filecoin.io/blog/resolving-the-chain-halt/