ブロックチェーン/レベル VI · ビットコインの後/6.3 Ethereumとスマートコントラクト/レッスン 3
The DAOハックとイーサリアムクラシック
チェーンを分裂させ、不変性をめぐる議論を決定づけたリエントランシーのバグ
用意するものブロックエクスプローラーのインターフェース(例:Etherscan)The DAOのスマートコントラクトのソースコード(フォーク前のバージョン)ステート変数の変化を記録するためのノート
問い
- ステートが更新される前に実行される1行のコードによって、攻撃者が資金を繰り返し引き出せてしまうのはなぜでしょうか?
- コミュニティが歴史を保存するのではなく書き換えることを投票で決めたら、何が起こるのでしょうか?
- 最終的な権限を持つのは誰でしょうか。コンセンサスメカニズムでしょうか、それともそれを保守する開発者たちでしょうか?
探究
- The DAOは2016年4月に自律型のベンチャーファンドとして立ち上げられ、11,000人以上の投資家から約1,270万ETHを調達しました。これは当時流通していたイーサ全体の約14%に相当します。プロジェクトは完全にスマートコントラクトを通じて運営され、トークンホルダーは中央集権的な管理や従来の企業統治の仕組みなしに、どのプロジェクトに出資するかを投票で決めることができました。
- 2016年6月17日、攻撃者はThe DAOのsplit関数にあるリエントランシー脆弱性を悪用しました。このバグにより、コントラクト内部の残高が更新される前に、そのコントラクトを再度呼び出すことが可能になっていました。攻撃者は約360万ETHを「チャイルドDAO」に流出させましたが、そこでは28日間の保留期間によって資金が凍結されました。この攻撃は、チューリング完全なマシンが、ビットコインのような単純なシステムには存在しない複雑なステート管理のリスクをもたらすことを示しました。
- イーサリアムコミュニティは、台帳の不変性を尊重するか、重大なコードの欠陥から投資家を守るかという差し迫ったジレンマに直面しました。開発者たちは、このバグは意図された動作ではなく実装上の誤りであり、資金をロックされたままにすればプラットフォームの有用性に対する信頼が損なわれると主張しました。これに対し批判者たちは、チェーンの履歴を改変することは分散型コンセンサスの核心的な約束に反し、将来のガバナンス介入に危険な前例を残すと反論しました。
- 2016年7月20日、イーサリアムは攻撃を巻き戻して資金を返金用コントラクトに移すため、ブロック1,920,000でハードフォークを実施しました。これにより、The DAOのトークンホルダーは返金用コントラクトから自分のイーサを取り戻せるようになりました。一方、少数派はこの介入を拒否し、変更されていない元のチェーンのマイニングを続けました。このグループが、「コードは法である」、そしていかなる主体も歴史を書き換える力を持つべきではないという原則を厳格に守り、イーサリアムクラシック(ETC)を形成しました。
- このフォークにより、1つの台帳から2つの並行する現実が生まれました。イーサリアムが主要なスマートコントラクトプラットフォームへと発展を続ける一方で、イーサリアムクラシックは小規模なネットワークにとどまり、主に分散化に関する思想的な表明としての役割を果たしてきました。この出来事は、その後の暗号資産全体のプロトコル開発に影響を与えました。
- イーサリアムのエクスプローラーとイーサリアムクラシックのエクスプローラーでブロック1,920,000を調べてみましょう。2つのチェーンはブロック1,919,999までは同一で、ブロック1,920,000から異なっています。このフォークは、The DAOのイーサをトランザクションによって移動させたわけではありません。新しいクライアントソフトウェアがそのブロックで変則的なステート変更を適用したのであり、だからこそこの巻き戻しはトランザクションの一覧ではなくコードの中に現れるのです。
重要な事実
- このDAOは約1270万ETHを調達し、これはローンチ時に流通していたエーテルの総量の約14%に相当する。
- 2016年6月17日、リエントランシーのバグにより、攻撃者は約360万ETHをチャイルドDAOに流出させることができました。
- 2016年7月20日、イーサリアムは攻撃を巻き戻して資金を返還するため、ブロック1,920,000でハードフォークしました。
- 少数派は「コードは法である」を掲げて元のチェーンのマイニングを続け、そのチェーンがイーサリアムクラシック(ETC)となりました。
- このフォークの結果、ホルダーは新しいチェーン上のETHと古いチェーン上のETCの両方を保有することになりました。
- この出来事は、不変性、開発者の権限、そしてコンセンサスの定義をめぐって、今なお続く議論を巻き起こしました。
演習 九・六・三・一
9集めるソフトウェアのアップデートやプロトコルの変更によって、既存のユーザーデータや取引履歴が変更された事例を9つ挙げてください。誰が変更を主導し、どのような正当化がなされたかも記載してください。
6まとめる変更がバグ修正、機能追加、セキュリティ上のロールバック、コンセンサスのアップグレード、ハードフォーク、ソフトフォークのいずれであるかに基づいて、9つを6つのカテゴリーに分類してください。
3絞り込む6つを、これらの変更を最終的に決定した3種類の権限に絞り込んでください。
1結晶化する「コードは法である」という考え方が何を約束し、コードが失敗したときに何を犠牲にするのかについて、1文で書いてください。
事実確認
日付、数字、主張は、下記に記載された公表資料と照合して確認しました。
- Ethereum Foundation, 'The DAO hack' blog posts (June-July 2016)
- SEC, Report of Investigation: The DAO (July 2017)
- Post-mortem analyses of the reentrancy exploit (2016)