イーサリアムテストネットがクラッシュ
今月はじめ、無事稼働に成功した次世代イーサリアム「ETH2.0」の最終テストネット「Medalla」で14日、エラーが発生し、ネットワークがダウンする事態となった。原因は、主要クライアントPrysmの時刻同期に関するバグだったことが判明している。現在、問題は緩和されているものの、ネットワークでは、いくつかのフォークが起こっており、最新ブロックのピアを特定できないノードが多数報告されている。
Prysmが状況を分析
バグが発見されたのは、最多数のノード(76.6%)が使用しているクライアントPrysmで、ネットワークが約1時間半にわたり、ファイナリティを達成できないという事態が発生した。その結果、Medallaテストネットのバリデータの参加率が75%から5%以下に激減した。このエラーはグローバルレベルで発生し、全てのPrysmノードが影響を受けたという。
Prysmの開発者チームは、その原因と解決法について報告書を作成している。(順次更新中)
報告書によると、根本的な原因はcloudflare の時刻同期プロトコル「Roughtime」サーバーからの誤ったレスポンスによるもので、通常の0.1秒以下ではなく最大4時間の歪みが観測された。その影響で、NTPサーバーに接続したバリデータは「4時間先の未来」という時刻にリンクされ、大量のブロックや認証が誤って提案されたり、拒否される結果となった。
開発者チームは、暫定的にデフォルトでRoughtimeの同期を無効にし、オプトイン機能のフラグに置き換えることで問題に対応、発見から約90分後に時刻同期のエラー自体は解決したという。
開発者チームは、Roughtimeサーバーがダウンするという事態に十分備えていなかったと振り返っている。NTPサーバーは十分に分散されており、グローバル規模で障害を引き起こすものではないと過信していたという。
日本時間の今日、チェーンの同期に関する多くの修正が含まれた新たなバージョン(v1.0.0ーalpha.22)がリリースされた。同チームは引き続きこの問題の調査を継続すると同時に、ネットワークの同期状況を監視しているようだ。
チームは、この修正がMedallaテストネットが回復する希望になることを期待していると述べる一方で、テストネットを軌道に乗せるには、あらゆる支援が必要で、健全なノードが回復し、バリデータがネットワークに復帰することの重要性を強調した。
マルチクライアントの重要性
イーサリアム創始者のヴィタリック・ブテリンは、セキュリティを維持するためにマルチクライアントは重要なシステムだとの主張を貫いている。今回のネットワーク全体を揺るがした事件は、まさにその主張を裏付けることとなった。
Medallaテストネットでは、Prysm以外にもTeku、Nimbus、 Lodestar、 Lighthouseの4つのクライアントが使用できるが、Prysmへの依存度が非常に高かったため、ネットワークで大きな障害を生む結果となった。メインクライアントで問題が発生した際、他のクライアントに切り替えられるように、ノードが複数のクライアントを持つことが重要だと、Prysm開発者は述べている。同時にネットワークの安定性のためにも、よりバランスの取れたクライアントの利用が望まれる。
また、このような深刻なバグを発見し、ネットワークを強化することがテストネットの意義でもある。Prysmチームの迅速な対応は、ETH2.0の将来に賭けるコミュニティの熱意と献身の表れではないだろうか。