EIP-2982: Serenity Phase 0 のまとめ

ついにSerenity(別名、Ethereum 2.0)のPhase 0のEIPが公開されました。

概要

Ethereum 2.0 (Eth2) は、Proof-of-Stake (PoS)とシャーディングを導入するプロジェクトです。このプロジェクト自体は2015年に開始されました。Ethereum 2.0は段階的にローンチすることが計画されており、Phase 0ではビーコンチェーンと呼ばれるPoSチェーンが導入されます。

今後シャーディングが導入されれば、64個のシャードチェーンがビーコンチェーンに接続され、スループットが向上します。そのシャードの1つに、現在のEthereumメインネットが組み込まれます。

ビーコンチェーンは、Casper the Friendly Finality Gadget (Casper FFG) と呼ばれるPoSを用いたコンセンサスアルゴリズムと、Latest Message Driven Greedy Heaviest Observed Sub-Tree (LMD GHOST) と呼ばれるフォークチョイスルールから成り立ちます。Casper FFGのSafetyとLivenessの証明は、Combining GHOST and Casperにあるようです。

モチベーション

Eth2は、安全性と分散性を維持しつつ、スケーリングを行うのが目的です。過去5年間でEthereumのアプリケーション利用は大幅に増加しました。ガスプライスも上昇し続けています。スケーリングの手段として、ガスリミットを単純に増やしては駄目で、ガスリミットを増やすとノードのリソース負荷(帯域幅、計算、ストレージ)が上がってしまいます。そうなると、参加するノードが限られて中央集権化が進んでしまいます。Eth2では、シャーディングにより分散性を損なわずにスケーリングを実現します。

また、PoSにより、PoWのリソースの制限が取り払われるためコンセンサスの分散化が促進されます。また、不正行為に対してプロトコルでペナルティを与える仕組みとEconomic finalityにより、セキュリティが強化されます。

PoSはシャーディングと相乗効果があります。シャーディングでは、バリデータのランダムサンプリングをすることで安全性を保証しますが、PoWだとこのランダムサンプリングが困難です。PoSだとアクティブなバリデータセットを管理しているので、ランダムサンプリングが簡単にできます。

仕様

Phase 0のローンチは、現在のEthereumメインネットのコンセンサスアルゴリズムに変更を与えません。

ビーコンチェーンのバリデータになるには、Ethereumメインネット上に配置されたデポジットコントラクトに32ETHを預けます。このデポジットは不可逆であり、一度デポジットすれば当分は自由にできません。

バリデータの仕事は、主にバリデータのレジストリの管理ですが、コンセンサスへの参加自体が重要です。Phase 0には、ETHの送金やシャーディング、スマートコントラクト機能は含まれていません。これらはPhase 1以降で行われます。

バリデータとしてコンセンサスに参加すると報酬が得られます。その報酬は、Eth2の総ステーク量の平方根に応じて決定されます。例えば、総ステーク量が2,000,000ETH (現在の価格で約700億円)であれば、バリデータの年率は11.75%です。

画像1

参照: https://github.com/djrtwo/EIPs/blob/phase0/EIPS/eip-X.md

バリデータになれば必ず上記の報酬が得られるとは限りません。ペナルティを受ければ報酬は減少し、最悪ステークしたETHを失うことになります。

ペナルティには、Inactivity leakとSlashingの2つがあります。

Inactivity leakは、エポックごとにオフラインであるバリデータに与えられるペナルティです。なぜInactivity leakが必要なのでしょうか。例えばチェーンにネットワークパーティションなど起きると、バリデータの3分の1以上がオフラインになり、ファイナリティが確保できなくなりますが、Inactivity leakによりオフラインのノードを罰すれば、オフラインのバリデータのステークは徐々に減っていき、ファイナリティに必要な3分の2以上の承認という条件をクリアできるためです。

Slashingは、2つの矛盾する行動へのペナルティです。例えば、AかBかどちらかに投票しないといけないのに、どちらにも賛成するといった行動です。このペナルティは、同時に罰則を与えれるバリデータの数に比例して大きくなります。比例して罰則を与える理由は、ある一つのバリデータが矛盾する行動をとってもチェーンには影響はありませんが、大勢のバリデータが矛盾する行動を取ると、チェーンの安全性が脅かされるためです。

実装

Eth2クライアントは複数の言語で実装されています。Cortex (.NET), Lighthouse (Rust), Lodestar (JavaScript), Nimbus (Nim), Prysm (Go), Teku (Java), Trinity (Python)です。この中でもPrysmの利用者が最も多く、Lighthouseが次点です。複数の言語で実装することで、ある言語のクライアントにバグがあったり、そのクライアントが攻撃を受けたりしても、他のクライアントが動くので安全性が向上するというメリットがあります。

セキュリティ

Eth2は大型のアップデートなので、セキュリティが重要です。今まで多くの監査や形式検証が行われ、今も進行中です。最近では、Phase 0の仕様へのバグバウンティや、攻撃に成功することで報酬が貰えるアタックネットも実施しています。近日、Eth2クライアントのバグバウンティも開始するようです。

おわりに

Phase 0のローンチが11月に予定されているようです。延期せずローンチできると良いですね。

この記事が気に入ったらサポートをしてみませんか?