メインコンテンツへスキップ
Change page

プルーフ・オブ・ステーク (PoS)

プルーフ・オブ・ステーク (PoS) は、イーサリアムのコンセンサス・メカニズムの基盤となっています。イーサリアムは2022年にプルーフ・オブ・ステークのメカニズムに移行しました。これは、以前のプルーフ・オブ・ワーク (PoW)アーキテクチャと比較して、より安全で、エネルギー消費が少なく、新しいスケーリング・ソリューションの実装に適しているためです。

前提知識

このページをより深く理解するために、まずはコンセンサス・メカニズムについて読むことをお勧めします。

プルーフ・オブ・ステーク (PoS) とは?

プルーフ・オブ・ステークは、バリデータがネットワークに価値あるものを預け入れており、不正に機能した場合にはそれが破棄される可能性があることを証明する方法です。イーサリアムのプルーフ・オブ・ステークでは、バリデータはイーサリアム上のスマート・コントラクトにETHという形で資本を明示的にステークします。その後、バリデータはネットワーク上で伝播された新しいブロックが有効であることを確認し、時には自ら新しいブロックを作成して伝播する責任を負います。ネットワークを欺こうとした場合(例えば、1つのブロックを送信すべき時に複数のブロックを提案したり、矛盾するアテステーションを送信したりした場合)、ステークしたETHの一部またはすべてが破棄される可能性があります。

バリデータ

バリデータとして参加するには、ユーザーはデポジット・コントラクトに32 ETHを預け入れ、実行クライアント、コンセンサス・クライアント、バリデータ・クライアントという3つの独立したソフトウェアを実行する必要があります。ETHを預け入れると、ユーザーはネットワークに参加する新しいバリデータの割合を制限する有効化キューに加わります。有効化されると、バリデータはイーサリアム・ネットワーク上のピアから新しいブロックを受け取ります。ブロック内で配信されたトランザクションは再実行され、提案されたイーサリアムの状態への変更が有効であるかが確認され、ブロックの署名がチェックされます。その後、バリデータはそのブロックを支持する投票(アテステーションと呼ばれます)をネットワーク全体に送信します。

プルーフ・オブ・ワークではブロックのタイミングがマイニングの難易度によって決定されるのに対し、プルーフ・オブ・ステークではテンポが固定されています。プルーフ・オブ・ステークのイーサリアムにおける時間は、スロット(12秒)とエポック(32スロット)に分割されます。各スロットで1つのバリデータがランダムに選ばれ、ブロック・プロポーザーとなります。このバリデータは新しいブロックを作成し、ネットワーク上の他のノードに送信する責任があります。また、各スロットではバリデータのコミッティがランダムに選ばれ、その投票が提案されているブロックの有効性を判断するために使用されます。バリデータ・セットをコミッティに分割することは、ネットワークの負荷を管理可能な状態に保つために重要です。コミッティはバリデータ・セットを分割し、すべてのアクティブなバリデータが各エポックでアテステーションを行うようにしますが、各スロットで行うわけではありません。

イーサリアムのPoSでトランザクションが実行される仕組み

以下は、イーサリアムのプルーフ・オブ・ステークにおいてトランザクションがどのように実行されるかについての、エンドツーエンドの説明です。

  1. ユーザーは秘密鍵を使用してトランザクションを作成し、署名します。これは通常、ウォレットやEthers.js (opens in a new tab)web3js (opens in a new tab)web3py (opens in a new tab)などのライブラリによって処理されますが、内部的には、ユーザーはイーサリアムのJSON-RPC APIを使用してノードにリクエストを行っています。ユーザーは、トランザクションをブロックに含めるよう促すために、バリデータへのチップとして支払う用意があるガスの量を定義します。チップはバリデータに支払われ、基本料金はバーン(焼却)されます。
  2. トランザクションはイーサリアムの実行クライアントに送信され、その有効性が検証されます。これは、送信者がトランザクションを実行するのに十分なETHを持っていること、および正しい鍵で署名していることを確認することを意味します。
  3. トランザクションが有効な場合、実行クライアントはそれをローカルのメンプール(保留中のトランザクションのリスト)に追加し、実行レイヤーのゴシップ・ネットワークを介して他のノードにもブロードキャストします。他のノードはトランザクションについて知ると、それを自身のローカルのメンプールにも追加します。上級ユーザーは、トランザクションをブロードキャストするのを控え、代わりにFlashbots Auction (opens in a new tab)などの専門のブロック・ビルダーに転送する場合があります。これにより、最大の利益(MEV)を得るために、今後のブロック内のトランザクションを整理することができます。
  4. ネットワーク上のバリデータ・ノードの1つは、事前にRANDAOを使用して疑似ランダムに選択された、現在のスロットのブロック・プロポーザーです。このノードは、イーサリアムのブロックチェーンに追加される次のブロックを構築してブロードキャストし、グローバルな状態を更新する責任があります。ノードは、実行クライアント、コンセンサス・クライアント、バリデータ・クライアントの3つの部分で構成されています。実行クライアントは、ローカルのメンプールからのトランザクションを「実行ペイロード」にバンドルし、それらをローカルで実行して状態の変更を生成します。この情報はコンセンサス・クライアントに渡され、そこで実行ペイロードは「ビーコン・ブロック」の一部としてラップされます。ビーコン・ブロックには、ネットワークがチェーンの先頭にあるブロックのシーケンスに合意できるようにするための、報酬、ペナルティ、スラッシング、アテステーションなどに関する情報も含まれています。実行クライアントとコンセンサス・クライアント間の通信については、コンセンサス・クライアントと実行クライアントの接続で詳しく説明されています。
  5. 他のノードは、コンセンサス・レイヤーのゴシップ・ネットワーク上で新しいビーコン・ブロックを受け取ります。それらは実行クライアントに渡され、そこでトランザクションがローカルで再実行されて、提案された状態の変更が有効であることが確認されます。その後、バリデータ・クライアントは、ブロックが有効であり、自身のチェーンのビューにおいて論理的な次のブロックである(つまり、フォーク選択ルールで定義されているように、アテステーションの重みが最も大きいチェーン上に構築されている)ことをアテステーションします。ブロックは、それをアテステーションする各ノードのローカル・データベースに追加されます。
  6. トランザクションは、2つのチェックポイント間に「スーパーマジョリティ・リンク」を持つチェーンの一部になった場合、「ファイナライズ済み」と見なすことができます。チェックポイントは各エポックの開始時に発生し、各スロットではアクティブなバリデータのサブセットのみがアテステーションを行うのに対し、各エポック全体ではすべてのアクティブなバリデータがアテステーションを行うという事実を考慮するために存在します。したがって、「スーパーマジョリティ・リンク」を証明できるのはエポック間のみです(ここで、ネットワーク上のステークされた総ETHの66%が2つのチェックポイントに合意します)。

ファイナリティの詳細については、以下で説明します。

ファイナリティ

分散型ネットワークにおいて、トランザクションが大量のETHをバーンすることなく変更できないブロックの一部である場合、そのトランザクションは「ファイナリティ」を持ちます。プルーフ・オブ・ステークのイーサリアムでは、これは「チェックポイント」ブロックを使用して管理されます。各エポックの最初のブロックがチェックポイントです。バリデータは、有効であると見なすチェックポイントのペアに投票します。チェックポイントのペアが、ステークされた総ETHの少なくとも3分の2を代表する投票を集めた場合、チェックポイントはアップグレードされます。2つのうち新しい方(ターゲット)は「ジャスティファイド」になります。2つのうち古い方は、前のエポックで「ターゲット」であったため、すでにジャスティファイドされています。そして今回、「ファイナライズ済み」にアップグレードされます。このチェックポイントをアップグレードするプロセスは、キャスパー・FFG (Casper the Friendly Finality Gadget) (opens in a new tab) によって処理されます。キャスパー・FFGは、コンセンサスのためのブロック・ファイナリティ・ツールです。ブロックがファイナライズされると、ステーカーの過半数がスラッシングされない限り、リバートや変更を行うことはできず、経済的に実行不可能になります。

ファイナライズ済みのブロックをリバートするには、攻撃者はステークされたETHの総供給量の少なくとも3分の1を失うコミットメントをする必要があります。この正確な理由は、このイーサリアム財団のブログ記事 (opens in a new tab)で説明されています。ファイナリティには3分の2の多数決が必要であるため、攻撃者は総ステークの3分の1で投票することにより、ネットワークがファイナリティに達するのを防ぐことができます。これを防ぐためのメカニズムとして、インアクティビティ・リーク (opens in a new tab)があります。これは、チェーンが4エポックを超えてファイナライズに失敗するたびに有効化されます。インアクティビティ・リークは、多数派に反対して投票しているバリデータからステークされたETHを徐々に失わせることで、多数派が3分の2の多数決を取り戻し、チェーンをファイナライズできるようにします。

暗号経済的セキュリティ

バリデータを実行することはコミットメントです。バリデータは、ブロック検証と提案に参加するために十分なハードウェアと接続性を維持することが期待されます。その見返りとして、バリデータにはETHが支払われます(ステークされた残高が増加します)。一方で、バリデータとして参加することは、ユーザーが個人的な利益や妨害のためにネットワークを攻撃する新たな手段を開くことにもなります。これを防ぐため、バリデータは呼び出されたときに参加を怠るとETHの報酬を逃し、不正な行動をとると既存のステークが破棄される可能性があります。主に2つの行動が不正と見なされます。1つのスロットで複数のブロックを提案すること(Equivocation:二重提案)と、矛盾するアテステーションを送信することです。

スラッシングされるETHの量は、ほぼ同時期にどれだけのバリデータがスラッシングされているかによって異なります。これは「相関ペナルティ」 (opens in a new tab)として知られており、軽微なもの(単独でスラッシングされたバリデータの場合はステークの約1%)から、バリデータのステークの100%が破棄されるもの(大規模なスラッシング・イベント)まであります。これは、1日目の即時ペナルティ(最大1 ETH)、18日目の相関ペナルティ、そして最終的に36日目のネットワークからの追放で始まる強制エグジット期間の途中で課せられます。彼らはネットワーク上に存在しているにもかかわらず投票を送信していないため、毎日軽微なアテステーション・ペナルティを受けます。これらはすべて、組織的な攻撃が攻撃者にとって非常に高くつくことを意味します。

フォーク選択

ネットワークが最適かつ誠実に機能している場合、チェーンの先頭には常に1つの新しいブロックしか存在せず、すべてのバリデータがそれにアテステーションを行います。しかし、ネットワークの遅延やブロック・プロポーザーの二重提案により、バリデータがチェーンの先頭について異なるビューを持つ可能性があります。したがって、コンセンサス・クライアントはどちらを優先するかを決定するアルゴリズムを必要とします。プルーフ・オブ・ステークのイーサリアムで使用されるアルゴリズムはLMD-GHOST (opens in a new tab)と呼ばれ、その履歴においてアテステーションの重みが最も大きいフォークを特定することによって機能します。

プルーフ・オブ・ステークとセキュリティ

51%攻撃 (opens in a new tab)の脅威は、プルーフ・オブ・ワークと同様にプルーフ・オブ・ステークにも存在しますが、攻撃者にとってはさらにリスクが高くなります。攻撃者はステークされたETHの51%を必要とします。その後、自身のアテステーションを使用して、好みのフォークが最も多くのアテステーションを蓄積したフォークになるようにすることができます。蓄積されたアテステーションの「重み」は、コンセンサス・クライアントが正しいチェーンを決定するために使用するものであるため、この攻撃者は自身のフォークを正規のものにすることができます。しかし、プルーフ・オブ・ワークに対するプルーフ・オブ・ステークの強みは、コミュニティが反撃を仕掛ける柔軟性を持っていることです。例えば、誠実なバリデータは、マイノリティ・チェーン上で構築を続け、攻撃者のフォークを無視することを決定し、アプリ、取引所、プールにも同じことをするように促すことができます。また、攻撃者をネットワークから強制的に排除し、ステークされたETHを破棄することを決定することもできます。これらは51%攻撃に対する強力な経済的防御です。

51%攻撃以外にも、悪意のあるアクターは次のような他の種類の悪意のある活動を試みる可能性があります。

  • 長距離攻撃(ただし、ファイナリティ・ガジェットがこの攻撃ベクトルを無効化します)
  • 短距離の「再編成(reorgs)」(ただし、プロポーザー・ブースティングとアテステーションの期限がこれを軽減します)
  • バウンシング攻撃およびバランシング攻撃(これもプロポーザー・ブースティングによって軽減され、いずれにせよこれらの攻撃は理想的なネットワーク条件下でのみ実証されています)
  • アバランチ攻撃(最新のメッセージのみを考慮するというフォーク選択アルゴリズムのルールによって無効化されます)

全体として、イーサリアムに実装されているプルーフ・オブ・ステークは、プルーフ・オブ・ワークよりも経済的に安全であることが実証されています。

メリットとデメリット

メリットデメリット
ステーキングにより、個人がネットワークの保護に参加しやすくなり、分散化が促進されます。バリデータ・ノードは通常のノートパソコンで実行できます。ステーキング・プールを利用すれば、32 ETHを持っていなくてもステーキングが可能です。プルーフ・オブ・ステークはプルーフ・オブ・ワークに比べて歴史が浅く、実戦でのテストが少ないです。
ステーキングはより分散化されています。PoWマイニングのように規模の経済が適用されません。プルーフ・オブ・ステークはプルーフ・オブ・ワークよりも実装が複雑です。
プルーフ・オブ・ステークは、プルーフ・オブ・ワークよりも優れた暗号経済的セキュリティを提供します。イーサリアムのプルーフ・オブ・ステークに参加するには、ユーザーは3つのソフトウェアを実行する必要があります。
ネットワーク参加者にインセンティブを与えるために必要な新しいETHの発行が少なくて済みます。

プルーフ・オブ・ワークとの比較

イーサリアムは当初プルーフ・オブ・ワークを使用していましたが、2022年9月にプルーフ・オブ・ステークに移行しました。PoSはPoWに比べて、次のような利点があります。

  • エネルギー効率の向上 – プルーフ・オブ・ワークの計算に大量のエネルギーを使用する必要がありません。
  • 参入障壁の低下、ハードウェア要件の軽減 – 新しいブロックを作成する機会を得るために、エリートクラスのハードウェアは必要ありません。
  • 中央集権化リスクの軽減 – プルーフ・オブ・ステークにより、より多くのノードがネットワークを保護するようになります。
  • エネルギー要件が低いため、参加を促すために必要なETHの発行が少なくて済みます。
  • 不正行為に対する経済的ペナルティにより、プルーフ・オブ・ワークと比較して、攻撃者にとって51%攻撃のような攻撃のコストが高くなります。
  • 51%攻撃が暗号経済的防御を突破した場合でも、コミュニティは誠実なチェーンのソーシャル・リカバリーに頼ることができます。

参考文献