eth2.0(ETH2.0測試網出現BUG?對于以太坊只是小風小浪)
作者 | 秦曉峰
編輯 |Mandy王夢蝶
出品 |Odaily星球日報
過去的這個周末,以太坊 2.0 測試網又出幺蛾子了。
北京時間 8 月 15 日凌晨,Eth2.0 客戶端執行團隊 Prysmatic Labs(旗下客戶端是 Prysm )聯合創始人 Preston Vanloon 表示:Eth2.0 測試網 Medalla 上出現時鐘 Bug,導致對所有節點造成影響,Prysm 客戶端出現了長達近 90 分鐘的時鐘偏斜(clock skew),驗證器也陸續收到超前 Slot (時隙)區塊和證明。
簡單來說,這次測試網出現的根源,主要在于 Prysm 客戶端的時間服務器 Roughtime 中斷,出現時鐘偏斜,導致驗證者與區塊頭無法同步,最終影響了測試網 Medalla 正常運行。
(1)事故回溯
所謂時鐘偏斜,即區塊時間與正常時間出現的偏差。
時間對 Eth2.0 至關重要,每一個區塊中都包含時間戳;時間一旦不同步,網絡就無法正常運行。
為了防止系統時間不夠精準,Prysm 采用了美國 Cloudflare 公司的時間服務器 Roughtime 來校正。并且,為了防止單體機器故障,還選擇了 6 臺。
然而,問題還是發生了。北京時間 8 月 15 日凌晨,Roughtime 出現故障,這也導致 Prysm 被波及。
根據事后的一份診斷報告:“ Cloudflare 的 Roughtime 服務器都返回了錯誤的信息,Prysm 節點沒有從這種情況適當退避。雖然他們使用 6 臺時間服務器,但似乎還不夠,因為它們都返回了錯誤的時間。”
最終的結果是,Prysm 客戶端上「時鐘偏斜」超過 2 秒的時間長達 90 分鐘;并且整個客戶端時間也比標準時間提前了 4 個小時。根據 Preston Vanloon 的推文,時鐘偏斜發生在北京時間的 15 日凌晨 1 點半-3 點種之間。如下所示:
(時鐘偏斜)
事故發生后, Prysm 客戶端第一時間停止了 Roughtime 服務器的使用,并號召用戶切換到其他客戶端。
“我們決定默認情況下禁用「 Roughtime」同步。Roughtime 計算中肯定存在一些錯誤,我們希望盡快發現它。無論調查結果如何,我們認為都應該選擇自動調整時鐘或完全取消。”Preston Vanloon 表示。
幾個小時后,開發人員完成調查并發布了修復程序。
不過,名為 PR 6898 的修復程序卻存在嚴重缺陷。
開發人員 Raul Jordan 表示:“在修復此錯誤時,我們無意中刪除了Prysm節點起作用的所有關鍵功能,這使問題變得更加嚴重。”
(2)后果
由于時間不同步,通過 Prysm 客戶端進行驗證的“幾乎沒有人同步到鏈頭”。這也意味著,他們的數據是無效的,也就不能參與驗證、獲得質押獎勵等。
雖然目前Eth2.0 仍然是測試網階段,這些獎勵也不是真實的——包括用戶參與驗證質押的ETH也是測試網版的,不具有真實流通性。
但這次事故,還是對整個 Medalla 測試網造成了沖擊。
由于 prysm 客戶端占據 全網 64% 以上的份額,在事件發生后,Medalla 測試網中主動投票的驗證者數量與總驗證者數量的比值從 75% 左右一度降至 5 %以下。這也意味著,剩余驗證者無法達成全網共識,網絡無法正常運行。
(網絡參與率)
外媒《Trustnodes》報導稱,此次事故也造成以太坊網絡一度停止:大約 30% 的驗證流程失敗時,內存問題就開始出現;大約 50% 之后,問題就變得更大;最后在 70% 之后,網絡顯然就停止了。
因此,在過去兩天,Prysm 客戶端修繕了自己的客戶端,想要盡快啟動測試網。
今天下午,星火礦池發出號召,所有運行 Prysm 客戶端參與 Medalla 測試網的朋友,請檢查自己的客戶端是否升級到了 alpha.22 版本。如果尚未升級,請盡快升級,以支援 Medalla 測試網從同步障礙中恢復。
(3)思考
這次事故也反映了多客戶端的重要性。
某個客戶端使用占比過高,一旦出現問題,最中可能導致整個網絡運行受到影響。
但從現實情況來看,Prysm 客戶端能夠獲得青睞也是有原因的。
目前,Eth2.0 上線了 5 個客戶端,但 Prysm 提供的教學無疑是最好上手的,所以絕大多數驗證者仍使用 Prysm。
因此,對整個以太坊生態來說,要想平衡各個客戶端的力量,必須提升其他客戶端易用性,而這是一條任重而道遠的漫長之路。
最后,我想說這次事故對 Eth2.0 來說也是一次歷練。所有的問題在測試網階段充分暴露,才能保證 Eth2.0 未來的可用性和安全性。
從以太坊過去 5 年的發展來看,相比于 The DAO 攻擊、分叉等一系列挑戰,這次測試網發生的事故只是小問題。
對于以太坊來說,只會愈挫愈勇。