イーサリアムの大規模障害:その技術的原因と学びを考察する

記事の要点

■DeFi(分散型金融)エコシステムの大半は11月11日早朝、イーサリアムのコードに潜んでいたバグが取引履歴を2つに分裂させた後、ダウンした。

■この分裂はノード運用ソフトウエア「Geth」の前回のアップデートに密かに仕込まれ、11日に有効化されたプログラム変更がもたらした。一部のイーサリアム・ノード・オペレーターはこのアップデートを無視した。皮肉にもそれが今回発生した分裂を回避することにつながった。

■アップデートを無視したノードは、アップデートは小規模なものと考え、イーサリアムブロックチェーンの根幹に関わるコンセンサスシステムの変更が含まれていることを知らなかった。

■Gethが11日に発表した分析報告によると、この分裂、いわゆるハードフォークは11日、意図的に引き起こされた。これはおそらく、2016年のDAOフォーク以来、イーサリアムにとって最大の難題であり、イーサリアム2.0のスタートが迫るなか、しばしばアピールされているイーサリアムの分散化メリットと開発者間の協調の効率性に疑問を投げかけた。


当初、障害はイーサリアムのインフラプロバイダー「Infura」が原因と思われた。Infuraは大半のDeFi(分散型金融)プロジェクトの運用に関係している。

Infuraは協定世界時11月11日8時(日本時間11日17時)頃にダウンし、同時にメタマスク(Metamask)、メーカーダオ(MakerDAO)、ユニスワップ(Uniswap)、コンパウンド(Compound)、マイクリプト(MyCryto)などのイーサリアムで最も人気のアプリケーションもダウンした。

その後すぐ、バイナンス(Binance)は自社ノード上でのトランザクションの矛盾に気づき、イーサリアムの取引を停止した。そして他の取引所も取引を停止するなか、本当の問題が明らかになった。イーサリアムアプリケーションの80%を支えるクライアントソフト「Geth(Go Ethereum)」のバグがイーサリアムブロックチェーンを2つに分裂させていた。

DAOハッキング以来の難題

2つの矛盾した取引履歴は、ユーザーが一時的にイーサリアムブロックチェーンの別のバージョンとやり取りしていたことを意味した。遅延を引き起こすのみならず、DeFiアプリケーションの大半を数時間にわたってダウンさせたことで、ユーザーの資金はリスクにさらされた。

だが、Infuraと影響を受けたサービスプロバイダーはノードをアップデートすることで問題を解決した。Infuraとサービスプロバイダーは、Gethの旧バージョンで運用されていた。旧バージョンには、最近のアップデートで開発者が密かに修正したバグが含まれていたが、Infuraやブロックチェア(Blockchair)などのサービスプロバイダーはこのアップデートを無視していた。

Infuraやブロックチェアの他、イーサリアムユーザーやウォレットプロバイダーもアップデートしなかったために影響を受けたと開発者らは、CoinDeskの取材で答えている。

1つのクライアントソフトウエアのバグが大規模な障害を引き起こしたことで、批評家はイーサリアムが持つとされた分散化のメリットに疑問を呈し、イーサリアム関係者はハードフォークがGethと他の開発チームとの間で調整されることなく、なぜ秘密裏に行われたのかと疑問に思っている。

一部の人たちにとって、今回の分裂は2016年の悪名高い「DAOハッキング」以来、イーサリアムにとって最も差し迫った難題となった。

DAOハッキング:分散型アプリの「The DAO」がハッキングを受けて6000万ドルが流出。その処理をめぐってコミュニティの意見は2つに割れ、イーサリアムからイーサリアムクラッシックが分岐(ハードフォーク)する結果となった。

詳しくは関連記事「イーサリアムについて知っておくべき5つのこと」を参照。

チェーン分裂:どのように起きたのか?

公表されたばかりの事後分析の中で、イーサリアム開発者のリーダーの1人、ピーター・シラギ(Peter Szilágyi)氏は、ハードフォークは「(意図的に)イーサリアムネットワーク上で引き起こされた」と述べた。

イーサリアムのスケーリングプロジェクト、オプティミズム(Optimism)の代表者は先日、同プロジェクトはバグを意図的に引き起こし、ハードフォークを発生させたとツイートした。

ハードフォークが起きた時に、2つのバージョンの取引台帳が生まれた。1つはアップデートされたGethクライアントから、もう1つは、Infuraのような古いGethクライアントからの取引台帳だ。

「修正は数カ月前に展開され、今日になって初めて、分裂を引き起こしたトランザクションが入ってきた」とハードフォークの影響を受けたブロックチェアの主任開発者、ニキティア・ザボロンコフ(Nikitia Zhavoronkov)氏は話す。

アップデートは「コードへの小さな変更」と考えたブロックチェアは、アップデートを実行しなかった。サービスを停止させるほどのものではないと考えたからだ。しかし小さいどころではなく、開発者はアップデートでGethのコンセンサスメカニズムにかなりの変更を加えたようだ。

「Gethチームは確かに、v1.9.17のリリースでコンセンサスの実装を変更した。だがイーサリアムコミュニティが知らなかったり、同意していない新しいルールを作り出してはいない」とシラギ氏はツイートし、これらのルールは3年前のイーサリアム改善提案(EIP)で説明されていたと述べた。

「誤ってバグを取り入れてしまうことを『コンセンサスアップデート(合意の上でのアップデート)』と捉えないのなら、数カ月後にそのバグを修正することも『コンセンサスアップデート』と呼ぶべきではない」とシラギ氏は主張した。

透明性を求める声

皮肉にも今回のハードフォークそのものが、まさに分裂を引き起こしたコンセンサスの問題を修正するためのものだった。

イーサリアム報奨金プログラムは先日、この問題ともう1つの脆弱性を発見したことに対して、ジョン・ヤン(John Yang)氏の功績を認めた。Geth開発者でイーサリアム・セキュリティの専門家、マーチン・スウェンデ(Martin Swende)氏は、アップデートに含まれた変更は明らかにされた問題を修正したとツイート。今回の大失態は「ノードを最新のものにしておくことを思い出させてくれた」と述べた。

スウェンデ氏は、ツイートのスレッドの中で、開発者たちは欠陥に注目が集まることを避けるために大きな変更を発表しなかったと続けた。シラギ氏もバグを「密かに」修正することで「混乱」は小さくなったと述べた。

だが、他の関係者たちはGeth上で開発を行っている各チームに、なぜバグは内密に知らされなかったのかと疑問視する。

「開発チームが緊密に連絡を取り合っている主要プロジェクトは、スムーズなアップデートを管理、調整するためにセキュリティに関する窓口を持つべきだ。もっと連携を図るべきだ」とThesisの創業者、マット・ルオンゴ(Matt Luongo)氏は言う。

「ハードフォークが突然行われると、我々のようにイーサリアム上で開発を行っている人は皆、損失を出す可能性がある」

Thesisは、トークン化されたビットコイン「tBTC」を発行するキープ・ネットワーク(Keep Network)を構築している。ルオンゴ氏によると、今回のハードフォークはtBTCユーザーの資金をリスクにさらしたが、それはチェーンが分裂したことが原因ではないという。

原因は、サービスが停止された間、キープ・ネットワークにイーサリアムを預け入れていたユーザーがイーサリアムのメインチェーンとやり取りできなかったことだ。なぜなら結果的に、tBTCの発行要件を満たすことができずに、本来発行されるtBTCの一部を「削減される」リスクがあったためだ。

分裂が引き起こした問題にもかかわらず、イーサリアム(ETH)価格は11日、このニュースが報じられた後に4.6%上昇し、トレーダーはこの失態による体系的、あるいは長期的な脅威はほとんどないと考えていることを示した。

事態の収拾に向けて

ザボロンコフ氏は、失敗は悪意のあるものではないが「もしGethがそうしたことが起こる可能性があると知っていたなら、ノード・オペレーター向けのガイドを準備すべきだった」と述べた。ルオンゴ氏も同様の失望を示し、Gethチームは「優れた開発者たち」だが、「インフラを運営する経験」を欠いており「資金不足」と語った。

これらのコメントはすべて、Gethはなぜハードフォークを秘密にしていたのかという疑問を複数の関係者が抱いていることに集約される。さらに、DeFiエコシステムの根幹であるInfuraは、なぜコンセンサスメカニズムを破壊するようなバグを修正のためのハードフォークの前に把握していなかったのだろうか?

「これは少しグレーな領域であり、ケースバイケースの議論が必要となる。我々は皆、透明性がきわめて重要であり、それを目指して可能な限り努力すべきことに同意している。だが話を進める前に、すべての詳細を検討することも重要だ」とシラギ氏は言う。

「イーサリアムの場合、ノード・オペレーターが予定されたハードフォークのアップデートを行うには(数週間から数カ月の)長い時間がかかる。リリースに重要なコンセンサスメカニズム、あるいはサイバー攻撃に対する修正が含まれていることを強調することは、常に誰かが注目を集めるためにネットワークをダウンさせるリスクを伴う。曖昧な状態を通してセキュリティを保つことは、間違いなく目指すべきものではない。だがほとんどのノード・オペレーターが影響を受けないようにすることで、潜在的な攻撃を遅らせることは、透明性に一時的な“打撃”をもたらす価値があるかもしれない」

最終的に、Gethチームは脆弱性を公表することはリスクが大きすぎると考え、アップデートを密かに行うことでリスクを最小限に抑えられると判断した。

「実際にうまくいったと言えるだろう」とシラギ氏は述べた。

正しい判断

アップデートは「ネットワークの分裂によって予期しない展開となった」が、Gethチームはまだ、ハードフォークを秘密にしておいたことは「正しい決断だった」と考えている。

イーサリアムブロックチェーンが過去最大のアップデート「イーサリアム2.0」に近づくなか、今回の事態はイーサリアムエコシステムにとってクライアントとの協調におけるきわめて重要な教訓となったかもしれない。

「ここでの一番大切なことは、私の意見では、今回の判断を行った人たちがその根拠について透明性を持ち、失敗を認め、成長すること。モネロ(Monero)も過去に同様の失敗に対処した。ビットコインやジーキャッシュ(Zcash)も同様だ。多くの事例があり、業界全体で協調することは常に難しいが、いかなる調整も避けることはきわめて危険だ」とルオンゴ氏は語った。

「今回のフォークが、より親密な関係と、イーサリアム上のプロジェクトがクライアントソフトウエア開発とどのようにやり取りするかについての再考につながることを願っている」

翻訳:山口晶子
編集:増田隆幸、佐藤茂
画像:Shutterstock
原文:Ethereum’s ‘Unannounced Hard Fork’ Was Trying to Prevent the Very Disruption It Caused