どうも墨汁うまい(@bokujyuumai)です。イーサリアム2.0(ETH2)の初期段階、ビーコンチェーン(Beacon Chain)のローンチに必要なデポジットコントラクトを安全にデプロイするための形式的検証(Formal Verification)が終了したとソフトウェア監査のRuntime Verification社が発表。今年2020年にローンチが予定されているイーサリアム2.0(ETH2)のローンチにまた一歩前進したことになります。
本稿では今回の監査内容と、改善点について詳しく解説を行います。
関連記事:【墨汁速報】イーサリアム2.0(ETH2)のローンチ可能な仕様 2020年1月初旬に公開予定
ETH2デポジットコントラクトとは?
ETH2のデポジットコントラクトとは、現在のイーサリアムレガシーチェーン上にデプロイ(コントラクトを使用できるように設置すること)されるイーサリアム2.0との架け橋となります。Beacon Chain上で32ETHを保有しバリデータノードを建てることでETH保有者はバリデータ報酬を得ることができるという利点が生まれるます。Beacon ChainはETH2のPoSチェーンであり、現時点では片道とはなるがデポジットコントラクトを介して、イーサリアムコミュニティはマイニングとは別の方法でETHを報酬として得ることができ、最終的にETH2ネットワークをセキュアに保つことに貢献することができます。
このデポジットコントラクトは、イーサリアムのプログラミング言語バイパー(Vyper)で書かれており、デポジットされた各バリデータの32ETHをマークルツリーのデータ構造を採用することで保管します。このマークルツリーではバリデータがデポジットコントラクトで新規に登録される毎に動的にアップデートされるます。
つまり、デポジットコントラクトのサイズは非常に大きくなり、最大で2の32乗のデポジットされたETHを記録することができる仕様となっています。
Vyperとデポジットコントラクトのバグ<
Runtime Verification社によると、何点かのVyperコンパイラーのバグを発見したが、今回の検証ではコンパイラーを信じる必要ない正しいデポジットコントラクトのバイトコードを目的として監査したとしています。
またデポジットコントラクトのIssue 26, 1341, 1357のバグを発見し、1月初旬にリリースされたETH2スペックですでに修正が完了。またリファクタリング(内部構造の整理)指摘のあったIssue 27, 28,38も同様に改善し、コントラクトのガスコスト削減にも成功しているのです。
その他のバグとしてVyperコンパイラーに起因するものがIssue 1563, 1599, 1610, 1761などが挙げられており、これらもプロダクションレディとなるv0.10.0ですべて報告され修正されています。
出典:Ethereum
これまでのバグとコントラクトの修正
v0.10.0以前のデポジットコントラクトは、デベロッパーが期待した動作を得られない可能性があり、もし正しかったとしてもハードフォークによるEVMのガス手数料変更に伴うアップデートにより影響が出る可能性があったとされています。
形式的検証前のデポジットコントラクトでは、今後ハードフォークでガス手数料を調整した際、最初に使用されたガスの値に関係なく、常にガス不足となりコントラクトの実行に失敗。これによりあらたなバリデータ登録の32ETHデポジットを受付ない可能性があったものの、これらのバグもすべてv0.10.0では修正されています。
イーサリアムはローンチから2019年7月で4年が経過。分散型金融(DeFi)による圧倒的な需要と安定したコントラクトプラットフォームとして利用が進む一方、EVMと各コントラクトの調整を慎重に行う必要があります。
ブロックチェーン開発においてこれらの慎重な検証が軽視される一方、イーサリアムはETH2という新たな”イーサリアムキラー”への移行を目前に、発明者のヴィタリック(Vitalik)氏率いる最強のリサーチャーとデベロッパーとともに2020年にETH2ローンチに漕ぎ着けることになるでしょう。
参考
・End-to-End Formal Verification of Ethereum 2.0 Deposit Smart Contract
【こんな記事も読まれています】
・イーサリアム2.0(ETH2)は何がすごいのか?
・イーサリアムをプロモーションするDAO(自立分散組織)とは?
・イーサリアムから離れるプロジェクトも?独自ブロックチェーン開発という新しいトレンド
▼墨汁サロンではイーサリアム2.0の最新開発動向や構造、価格に影響する技術についての相場影響などの考え方などをどこよりも詳しく解説しています。