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

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

最終編集者: , Invalid DateTime

プルーフ・オブ・ステーク(PoS)は、イーサリアムの合意形成のメカニズムの基礎となっています。 イーサリアムは 2022 年プルーフ・オブ・ステークのメカニズムに移行しました。これまでのプルーフ・オブ・ワークのアーキテクチャと比較して、より安全で、エネルギー消費量が少なく、新たなスケーリングソリューションの導入に適しています。

前提知識

このページをより理解するために、まずは合意メカニズムを読むことをお勧めします。

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

プルーフ・オブ・ステークとは、分散型コンセンサスを実現するためにブロックチェーンが使用する合意メカニズムのことです。 プルーフ・オブ・ワークでは、マイナーがエネルギーを消費することにより自分の資本を費やします。 プルーフ・オブ・ステークでは、バリデータが ETH でイーサリアム上のスマートコントラクトに明示的に自身の資本をステーキングします。 このステーキングされた ETH は、バリデータが不正行為を行ったり、怠慢な場合は失われるため、担保として機能します。 バリデータはネットワーク上で伝播された新しいブロックが有効であることを確認し、また時折バリデータ自身が新しいブロックを作成し伝播します。

プルーフ・オブ・ステークは、現在は廃止されたプルーフ・オブ・ワークシステムに比べて、数多くの利点があります。

  • エネルギー効率の向上 - プルーフ・オブ・ワークの計算に多くのエネルギーを必要としない
  • ハードウェア要件の低減 - 新しいブロックを作成するのに高性能なハードウェアが不要
  • 中央集権化リスクの減少 - プルーフ・オブ・ステークでは、より多くのノードの参加を促進し、ネットワークの保護につながる
  • エネルギー消費量が減るため、インセンティブに必要な ETH の発行が減る
  • 不正に対する経済制裁により、プルーフ・オブ・ワークと比較して 51%攻撃のコストが指数関数的に高くなる
  • 51%攻撃が暗号経済の防御を乗り越えた場合でも、正当なチェーンの社会的な回復が可能

バリデータ

バリデータとして参加するには、デポジットコントラクトに 32 ETH を預け入れ、実行クライアント、 コンセンサスクライアント、バリデータの 3 つのソフトウェアを実行する必要があります。 ETH を預け入れたユーザーはアクティベーションキューに参加します。このアクティベーションキューは新規バリデータのネットワークへの参加率を制限するものです。 アクティベートされると、バリデータはイーサリアムネットワーク上の他のバリデータから新しいブロックを受け取ります。 ブロック内で配信されたトランザクションが再実行され、ブロックの署名が確認され、ブロックの有効性が検証されます。 その後、バリデータはネットワーク全体に対して、アテステーションと呼ばれる、ブロックを支持する票を投じます。

プルーフ・オブ・ワークの下では、ブロックのタイミングはマイニングの難易度によって決まりますが、プルーフ・オブ・ステークでは間隔は固定されています。 プルーフ・オブ・ステークのイーサリアムにおける時間は、スロット(12 秒)とエポック(32 スロット)に分かれています。 すべてのスロットで 1 つのバリデータがランダムに選択され、ブロックを提案できます。 このバリデータは新しいブロックを作成後、ネットワーク上の他のノードに新しいブロックを送信します。 また、すべてのスロットでバリデータの委員会がランダムに選択され、提案されているブロックの有効性を判断し、投票が行われます。

イーサリアムのプルーフ・オブ・ステークでは、トランザクションはどのように実行されるか?

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

  1. ユーザーはまず、自分の秘密鍵を使ってトランザクションを作成し、署名します。 この作業は通常、ウォレットや、ether.js(opens in a new tab)web3js(opens in a new tab)web3py(opens in a new tab) といったライブラリにより実行されますが、実際には、作成ユーザーはイーサリアムのJSON-RPC APIを用いてノードへのリクエストを実行しているのです。 作成ユーザーは、バリデータに支払う意思があるチップとして特定のガス代を提示することで、このトランザクションをブロックに追加してもらえるように促します。 このチップはバリデータに支払われ、ベース報酬はバーンされます。
  2. 作成されたトランザクションはイーサリアムの実行クライアントに送信され、実行クライアントにおいてその有効性が検証されます。 これにより、送信者が当該トランザクションを実行するために十分なイーサ残高を持つか、および適切な鍵により署名済みであるかを確認できます。
  3. トランザクションが有効であれば、実行クライアントは自分のローカルメムプール(実行待ちのトランザクションリスト)にこのトランザクションを追加し、さらに、実行レイヤーのゴシップネットワークを通じてその他のノードにこのトランザクションを送信します。 このトランザクションについて耳にしたその他のノードも、自分のメムプールにこのトランザクションを追加します。 より高度なユーザーは、トランザクションをブロードキャストすることを避けて、フラッシュボット・オークション(opens in a new tab)などの特化されたブロックビルダーに送信してもよいでしょう。 これにより、今後のブロックにトランザクションを追加する順番を整理することで、利益を最大化することができます(MEV)。
  4. ネットワーク上のノードのうち 1 名は現行スロットにおけるブロック提案者となりますが、これは事前に RANDAO によって疑似的な無作為性に基づき選定されています。 ブロック提案者のノードは、イーサリアムのブロックチェーンに追加される次のブロックを生成、ブロードキャストし、グローバルステートを更新する役割を担います。 このノードは、実行クライアント、コンセンサス・クライアント、およびバリデータ・クライアントの 3 つの部分で構成されます。 実行クライアントは、ローカルのメムプールに含まれるトランザクションを「実行ペイロード」としてバンドル化した上でローカルに実行し、状態変更を生成します。 状態変更の情報はコンセンサス・クライアントに送信され、コンセンサス・クライアントにおいて実行ペイロードが「ビーコンブロック」の一部としてラップされます。ビーコン・ブロックにはその他にも、報酬、ペナルティ、スラッシング、アテステーション等に関する情報が含まれており、チェーンの先頭におけるブロックのシーケンスについてネットワーク全体が合意することが可能になります。 実行クライアントとコンセンサス・クライアントとの間のコミュニケーションについては、「コンセンサス・クライアントと実行クライアントを接続する」でより詳細に説明されています。
  5. 他のノードは、コンセンサスレイヤーのゴシップネットワークでこの新しいビーコンブロックを受け取ります。 その上で、このビーコンブロックを実行クライアントに送信し、実行クライアントがローカルでトランザクションを再実行することで、提案された状態変更が有効なものであることを確認します。 次にバリデータ・クライアントが、当該ブロックが有効であり、自分のチェーンビューにおいて論理的な次のブロックであるとのアテステーションを実行します(つまり、フォーク選択ルールの規定に基づき、最大の重みを持つアテステーションに基づいてチェーンを構築します)。 当該ブロックは、アテステーションを実行した各ノードのローカルデータベースに追加されます。
  6. トランザクションは、2 つのチェックポイント間の「過半数リンク」を持った形でチェーンの一部となった場合に、「確定済み」(つまり、取消不能)であると見なすことができます。 チェックポイントは、各エポックの開始時に実行され、ネットワークにステーキングされたイーサの総量の 66%によってアテステーションが実行された場合に過半数リンクを持つことができます。

ファイナリティに関する詳細については、以下をご覧ください。

ファイナリティ

分散ネットワークにおけるトランザクションのファイナリティとは、ブロックにおける当該部分が相当な量のイーサをバーンしなければ変更できない場合に達成されます。 イーサリアムのプルーフ・オブ・ステークでは、ファイナリティは「チェックポイント」ブロックを用いて管理されます。 各エポックの最初のブロックがチェックポイントになります。 バリデータは、有効だと見なすチェックポイントのペアに対して投票を行います。 ステーキングされたイーサの合計のうち少なくとも 3 分の 2 が当該のチェックポイントのペアに対して投票した場合、これらのチェックポイントは更新されます。 2 つの(ターゲットである)チェックポイントのうち、より新しいチェックポイントの方が「正当化」されます。 チェックポイントのペアにおけるより古いチェックポイントは、1 つ前のエポックにおいて「ターゲット」のチェックポイントとしてすでに正当化されています。 こうして正当化されたチェックポイントは、「ファイナライズ済み」にアップグレードされます。 攻撃者は、ステーキングされたイーサの総供給量のうち少なくとも 3 分の 1 を犠牲にすれば、ファイナライズされたブロックを以前の状態に戻すことが可能になります。 このように設定されている具体的な理由については、こちらのイーサリアム・ファウンデーションによるブログ投稿(opens in a new tab)をご覧ください。 ファイナリティを達成するには 3 分の 2 以上の投票が必要であるため、攻撃者は、ステーキングされたイーサ合計の 3 分の 1 を投じることで、ネットワークのファイナリティ実現を阻止することが可能です。 ただしこの攻撃を防ぐために、インアクティブ・リーク(opens in a new tab)という防御メカニズムが導入されています。 インアクティブ・リークは、チェーンが 4 エポック以上にわたりファイナライズに失敗した場合に発動します。 インアクティブ・リークが実行されると、多数派に対抗して投票したバリデータがステーキングしたイーサが没収されるため、多数派のユーザーが 3 分の 2 の過半数を取り戻し、チェーンのファイナライズを完了できるようになります。

暗号経済におけるセキュリティとは

バリデータを務めることは、ひとつのコミットメントです。 バリデータは、ブロックの検証/提案を行うのに必要な水準のハードウェアとネット接続を維持することが要求されます。 バリデータはその代償として、イーサを受け取ります(ステーキングした残高が増加します)。 一方で、バリデータとしてネットワークに参加することで、ユーザーは個人的な利益や迷惑行為を目的としてネットワークを攻撃できる手段が得られることも事実です。 これを防止する手段として、呼び出し時に参加しなかったバリデータはイーサ報酬を受け取ることができず、不正行為を行った場合には既存のステークが没収されます。 バリデータにおける不正行為とは主に、1 つのスロットで複数のブロックを提案する場合(曖昧化)と、相互に矛盾するアテステーションを提出する場合の 2 種類があります。 スラッシングされるイーサの額は、ほぼ同時にスラッシング対象となるバリデータの数に応じて異なります。 これは相関性ペナルティ(opens in a new tab)と呼ばれており、スラッシングされる額がわずかである場合(1 名のバリデータにおけるスラッシング額がステーキングした全体の 1%未満である場合)から、ステーキング残高の 100%が没収される場合(大規模なスラッシングイベント)まで様々です。 スラッシングは、1 日目における即時のペナルティ(最大 0.5 イーサまで)で開始され、18 日目にはコリレーション・ペナルティが実行され、最終的に 36 日目においてネットワークからの強制退出が実行されるため、コリレーション・ペナルティはこの強制退出に至る期間の中間点で実行されます。 バリデータがネットワークに参加していても、投票を実行しない場合、アテステーションに対する軽微なペナルティが毎日実行されます。 これらの防御システムはすべて、組織的な攻撃者による攻撃が非常にコストが高くなるように設計されています。

フォーク・チョイス

ネットワークが最適化された誠実な方法で実行されている場合、チェーンの先頭には常に新規ブロックが 1 つだけ存在し、すべてのバリデータがこの新規ブロックに対してアテステーションを実行しています。 しかし、ネットワークが遅延したり、ブロック提案者が曖昧化を実行した場合には、チェーンの先頭に対して各バリデータのビューが異なる可能性があります。 このため、コンセンサス・クライアントではどのフォークを支持すべきかについてのアルゴリズムが必要になります。 イーサリアムのプルーフ・オブ・ステークで採用されているアルゴリズムはLMD-GHOST(opens in a new tab)と呼ばれ、履歴においてアテステーションの加重が最大であるフォークを特定する方式です。

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

プルーフ・オブ・ワークの場合と同様に、プルーフ・オブ・ステークにおいても51%攻撃(opens in a new tab)の脅威が存在しますが、プルーフ・オブ・ステークでは攻撃者が負担するリスクがさらに大きくなっています。 攻撃者は、ステーキングされたイーサ合計の 51%が必要だからです。 必要なイーサを確保できた場合、攻撃者は自分のアテステーションを用いることで、希望するフォークにおけるアテステーションの蓄積量を最大にすることができます。 蓄積したアテステーションの「重み」は、コンセンサス・クライアントが適切なチェーンを決定するために参照するものであるため、攻撃者はこれにより希望するフォークを正規チェーンにすることが可能になります。 しかし、プルーフ・オブ・ワークと比較した場合、プルーフ・オブ・ステークは攻撃者に対する反撃をより柔軟に行えるという優位性を持っています。 例えば、誠実なバリデータは、引き続きマイノリティのチェーン構築を継続することを選択して、攻撃者のフォークを無視し、アプリ、取引所、およびプールにも同様の対応を促すことが可能です。 さらに、攻撃者をネットワークから強制的に排除し、攻撃者がステーキングしたイーサを破壊するように決定することができます。 これらの手段は、51%攻撃に対する強力な経済的防御メカニズムだと言えます。

51%攻撃は、様々な悪意の行為の一例に過ぎません。 その他にも、ロングレンジ攻撃(ただし、ファイナリティのガジェットによりこの攻撃ベクトルは無効化できます)、ショートレンジの「再編成」攻撃(ただし、提案者へのブースティングおよびアテステーションの期限によりリスクを軽減できます)、バウンシング/バランシング攻撃(これも、提案者へのブースティングにより軽減できる他、この種の攻撃は理想的なネットワーク環境においてのみ実行可能です)、あるいはアバランチ攻撃(最新のメッセージのみを参照するというフォーク選択アルゴリズムの規則により無効化できます)などの手段が想定されます。

全体的に見ると、イーサリアムに実装されたプルーフ・オブ・ステークのシステムは、プルーフ・オブ・ワークよりも優れた経済的な安全性を提供することが実証されています。

メリットとデメリット

メリットデメリット
ステーキングにより個人がネットワークの安全性に参画しやすくなり、分散化を促進。 バリデータノードは通常のラップトップで実行可能。 ステーキングプールを利用すると、32 ETH 未満でもステーキング可能。プルーフ・オブ・ステークは若く、プルーフ・オブ・ワークと比較して実環境でのテストが少ない
ステーキングはより分散型であり、 規模の経済がプルーフ・オブ・ワークのマイニングの場合と同じようには適用されない。プルーフ・オブ・ステークは、プルーフ・オブ・ワークよりも実装が複雑
プルーフ・オブ・ワークと比較して、プルーフ・オブ・ステークでは暗号経済的なセキュリティが向上イーサリアムのプルーフ・オブ・ステークに参加するには、3 つのソフトウェアの実行が必要
ネットワーク参加者へのインセンティブに、新規 ETH の発行が少なくて済む

映像で学びたい方は、

参考文献

この記事は役に立ちましたか?