事後發展:GRANDPA Equivocation和sysinfo進程最終導致Kusama Network大幅懲罰
PolkaBase
2020-08-21 06:02
本文约1629字,阅读全文需要约7分钟
冒險主義的Kusama金絲雀網絡在一個月前又發生了一次小小的“波折”:網絡懲罰,節點失聯,在經過一系列躬行實踐後Kusama又將增強幾分抵抗力(robustness),PolkaBase帶你一文解讀喧鬧之外的技術

正文

事後發展:GRANDPA Equivocation 和sysinfo 進程最終導致Kusama Network 大幅懲罰

圖片描述

圖片描述

圖片描述

「代碼中的多個錯誤導致節點從Kusama 網絡退出,並丟失了存儲已驗證塊區塊的數據庫。因此,相同的節點在重新啟動時對這些塊進行了雙重簽名。Kusama 議會的動議已給用戶補償了由這一問題而造成的懲罰罰金。」

https://wiki.polkadot.network/

7 月31 日,週五,運行時(runtime) 版本為v2019 的兩個Kusama 驗證節點開始每隔幾分鐘崩潰,給出兩個明顯的錯誤,並報告了一個問題。乍一看,問題似乎與驗證者的密鑰有關。隨後發現這不是原因,因為受影響的驗證節點間確認他們沒有在過程中更改密鑰。此外,該問題似乎僅存在於Kusama 網絡上,而不存在於Polkadot 上。

進一步深入研究,團隊意識到該問題似乎是由GRANDPA 模棱兩可引起的,導致Kusama 中的斜線事件開始的,該事件最初是由文件描述符洩漏引起的,導致節點崩潰。此洩漏使節點無法將GRANDPA 投票者的狀態(給定回合中的投票)寫入磁盤,並導致丟失此數據的節點在重新啟動後再次投票,這次投票的區塊比其原本選擇要驗證的區塊更新。這導致了GRANDPA 算法遭遇了表現模棱兩可的算法情況。https://github.com/

GRANDPA Equivocation: 一個驗證人在同一個區塊時間、但在不同鏈上同時簽署兩個意向或兩個以上意向投票信息的區塊。

這兩個事件的組合導致在v0.8.15 (Kusama v2015)發布併升級了網絡之後的某個時候出現了大幅懲罰驗證節點的情況。頒發機構發現功能已經在運行時模塊級別上使用了一段時間,但是在客戶端上默認未啟用,並且該版本還使GRANDPA 算法能夠報告未簽名外部的模棱兩可。

GRANDPA 的新報告功能:

掌握了這些信息後,團隊的主要假設是,文件描述符洩漏引起的模棱兩可實際上早就已經開始發生,但僅在7 月v0.8.15 升級後才報告:通過運行此版本的網絡,節點撞車事故後開始報告自身的節點情況,引起了相關團隊的關注。儘管如此,對由Parity 運行的節點的日誌進行的調查仍未發現任何先前的模棱兩可“Equivocation”(它們將被記錄到終端)的問題的發生。

對文件描述符洩漏的根本原因的進一步研究指出了兩個主要罪魁禍首:權限發現和度量收集。授權發現使用了過多的套接字來從DHT 查詢數據(即發現其他授權IP 地址)。對於系統指標收集(例如,CPU 和內存),我們依靠sysinfo crate,該crate 在系統中的所有進程和每個進程的線程上保留文件描述符的高速緩存(通過從/ proc 讀取來獲取數據) 。

短期解決方案是默認禁用“授權發現”功能,並停止收集系統指標。如果有適當的解決方法,可以過度使用sockets,那麼將來的發行版中將再次重新啟用Authority Discovery 模塊。

https://matrix.to/

在發布新版本之前,Parity 團隊建議手動禁用頒發機構發現。另外,在節點崩潰的任何情況下,建議驗證節點在重新啟動之前引入延遲(1-2 分鐘)。如果未在磁盤上持久保留節點的票證,這會降低節點在GRANDPA 中產生”模棱兩可”(Equivocation) 的可能性。

https://wiki.polkadot.network/

為了跟上發展步伐,有很多方法可以加入Kusama 社區。加入Kusama 頻道的討論:

https://polkadot.network/

正文

原文鏈接:https://polkadot.network

PolkaBase
作者文库