プルーフ・オブ・ステーク(PoS)
最終編集者: @ten5235(opens in a new tab), 2024年9月3日
プルーフ・オブ・ステーク(PoS)は、イーサリアムの合意形成のメカニズムの基礎となっています。 イーサリアムは2022年プルーフ・オブ・ステークのメカニズムに移行しました。これまでのプルーフ・オブ・ワークのアーキテクチャと比較して、より安全で、エネルギー消費量が少なく、新たなスケーリングソリューションの導入に適しています。
前提知識
このページをより理解するために、まずは合意メカニズムを読むことをお勧めします。
プルーフ・オブ・ステーク(PoS)とは
プルーフ・オブ・ステークは、バリデータが不正な動作をしてネットワークを破壊する可能性のある値を投入したことを証明する方法です。 イーサリアムにおけるプルーフ・オブ・ステークでは、バリデータがETHでイーサリアム上のスマートコントラクトに明示的に自身の資本をステーキングします。 バリデータはネットワーク上で伝播された新しいブロックが有効であることを確認し、また時折バリデータ自身が新しいブロックを作成し伝播します。 バリデータがネットワークをだまそうとすると(例えば、1つのブロックを送信するべきときに複数のブロックを提案したり、相反するアテステーションを送信する等)、ステーキングされたETHの一部またはすべてが破壊される可能性があります。
バリデータ
バリデータとして参加するには、デポジットコントラクトに32ETHを預け入れ、実行クライアント、 コンセンサスクライアント、バリデータクライアントの3つのソフトウェアを実行する必要があります。 ETHを預け入れたユーザーはアクティベーションキューに参加します。このアクティベーションキューは新規バリデータのネットワークへの参加率を制限するものです。 アクティベートされると、バリデータはイーサリアムネットワーク上の他のバリデータから新しいブロックを受け取ります。 ブロックによって届けられたトランザクションは、提案されたイーサリアムにおける状態の変更が有効であることを確認するために再実行し、ブロックへの署名についても確認します。 その後、バリデータはネットワーク全体に対して、アテステーションと呼ばれる、ブロックを支持する票を投じます。
プルーフ・オブ・ワークでは、ブロックのタイミングはマイニングの難易度によって決まりますが、プルーフ・オブ・ステークでは、間隔は固定されています。 プルーフ・オブ・ステークのイーサリアムにおける時間は、スロット(12秒)とエポック(32スロット)に分かれています。 すべてのスロットで、1つのバリデータがランダムに選択され、ブロックを提案できます。 このバリデータは新しいブロックを作成後、ネットワーク上の他のノードに新しいブロックを送信します。 また、すべてのスロットでバリデータの委員会がランダムに選択され、提案されているブロックの有効性を判断し、投票が行われます。 バリデータセットを委員会に分割することは、ネットワークの負荷を管理可能な状態に維持するために重要です。 委員会は、すべてのアクティブなバリデータが、各スロットではなく各エポックにで証明できるように、バリデータのセットを分割します。
イーサリアムのプルーフ・オブ・ステークでは、トランザクションはどのように実行されるか?
以下では、イーサリアムのプルーフ・オブ・ステークにおいて、トランザクションがどのように実行するかをエンドツーエンドの視点で説明します。
- ユーザーはまず、自分の秘密鍵を使ってトランザクションを作成し、署名します。 この作業は通常、ウォレットや、ether.js(opens in a new tab)、web3js(opens in a new tab)、 web3py(opens in a new tab)といったライブラリにより実行されますが、実際には、作成ユーザーはイーサリアムのJSON-RPC APIを用いてノードへのリクエストを実行しています。 作成ユーザーは、バリデータに支払う意思があるチップとして特定のガス代を提示することで、このトランザクションをブロックに追加してもらえるように促します。 このチップはバリデータに支払われ、ベース報酬はバーンされます。
- 作成されたトランザクションは、イーサリアムの実行クライアントに送信され、実行クライアントにおいてその有効性が検証されます。 この検証では、送信者がトランザクションを実行するために十分なイーサ残高を持っているか、および適切な鍵で署名されているかを確認できます。
- トランザクションが有効であれば、実行クライアントは自分のローカルメムプール(実行待ちのトランザクションリスト)にこのトランザクションを追加し、さらに、実行レイヤーのゴシップネットワークを通じてその他のノードにこのトランザクションを送信します。 このトランザクションについて耳にしたその他のノードも、自分のメムプールにこのトランザクションを追加します。 より高度なユーザーは、トランザクションをブロードキャストすることを避けて、フラッシュボット・オークション(opens in a new tab)などの特化されたブロックビルダーに送信してもよいでしょう。 これにより、今後のブロックにトランザクションを追加する順番を整理することで、利益を最大化することができます(MEV)。
- ネットワーク上のバリデータノードの1つが、RANDAOを使用して疑似ランダムに選ばれ、現在のスロットのブロック提案者となります。 ブロック提案者のノードは、イーサリアムのブロックチェーンに追加される次のブロックを生成、ブロードキャストし、グローバルステートを更新する役割を担います。 このノードは、実行クライアント、コンセンサスクライアント、およびバリデータクライアントの3つの部分で構成されます。 実行クライアントは、ローカルのメムプールに含まれるトランザクションを「実行ペイロード」としてバンドル化した上でローカルに実行し、状態変更を生成します。 状態変更の情報はコンセンサスクライアントに送信され、コンセンサスクライアントにおいて実行ペイロードが「ビーコンブロック」の一部としてラップされます。ビーコンブロックにはその他にも、報酬、ペナルティ、スラッシング、アテステーション等に関する情報が含まれており、チェーンの先頭におけるブロックのシーケンスについてネットワーク全体が合意することが可能になります。 実行クライアントとコンセンサスクライアントとの間のコミュニケーションについては、「コンセンサスクライアントと実行クライアントを接続する」でより詳細に説明されています。
- 他のノードは、コンセンサスレイヤーのゴシップネットワークでこの新しいビーコンブロックを受け取ります。 その上で、このビーコンブロックを実行クライアントに送信し、実行クライアントがローカルでトランザクションを再実行することで、提案された状態変更が有効なものであることを確認します。 次にバリデータクライアントが、当該ブロックが有効であり、自分のチェーンビューにおいて論理的な次のブロックであるとのアテステーションを実行します(つまり、フォーク選択ルールの規定に基づき、最大の重みを持つアテステーションに基づいてチェーンを構築します)。 当該ブロックは、アテステーションを実行した各ノードのローカルデータベースに追加されます。
- トランザクションは、2つのチェックポイント間の「過半数リンク」を持った形でチェーンの一部となった場合に、「ファイナライズ済み」であると見なすことができます。 チェックポイントは、各エポックの開始時に発生します。このチェックポイントは、各スロットではアクティブなバリデータのサブセットが証明を行いますが、各エポック全体では、すべてのアクティブなバリデータが証明を行っていることを示すためのものです。 そのため、「過半数リンク」が実証できるのはエポック間のみです(これは、ネットワーク上でステーキングされたETH全体の66%が2つのチェックポイントに合意した場所)。
ファイナリティに関する詳細については、以下をご覧ください。
ファイナリティ
分散ネットワークにおけるトランザクションのファイナリティとは、ブロックの当該部分を変更するためには大量のイーサをバーンする必要がある場合に達成されます。 イーサリアムのプルーフ・オブ・ステークでは、ファイナリティは「チェックポイント」ブロックを用いて管理されます。 各エポックの最初のブロックがチェックポイントになります。 バリデータは、有効だと見なすチェックポイントのペアに対して投票を行います。 ステーキングされたイーサの合計のうち少なくとも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日目には即時のペナルティ(最大1イーサまで)で科され、18日目にはコリレーション・ペナルティが科され、最終的に36日目にはネットワークからの強制退出が実行されます。そのため、コリレーション・ペナルティは、強制退出に至る期間の中間点で実行されることになります。 バリデータがネットワークに参加していても、投票を実行しない場合、アテステーションに対する軽微なペナルティが毎日科されます。 これらの防御システムはすべて、組織的な攻撃者による攻撃が非常にコスト高になるように設計されています。
フォーク・チョイス
ネットワークが最適化された誠実な方法で実行されている場合、チェーンの先頭には常に新規ブロックが1つだけ存在し、すべてのバリデータがこの新規ブロックに対してアテステーションを実行しています。 しかし、ネットワークが遅延したり、ブロック提案者が曖昧化を実行した場合、各バリデータに対するチェーンの先頭のビューが異なる可能性があります。 このため、コンセンサスクライアントでは、どのフォークを支持すべきかについてのアルゴリズムが必要になります。 イーサリアムのプルーフ・オブ・ステークで採用されているアルゴリズムはLMD-GHOST(opens in a new tab)と呼ばれ、履歴においてアテステーションの重みが最大であるフォークを特定する方式です。
プルーフ・オブ・ステークとセキュリティ
プルーフ・オブ・ワークと同様、プルーフ・オブ・ステークにおいても51%攻撃(opens in a new tab)の脅威は存在しますが、プルーフ・オブ・ステークでは攻撃者のリスクがさらに高まります。 攻撃者は、ステーキングされたイーサ総量の51%を保有する必要があるからです。 必要なイーサを確保できれば、攻撃者は自分のアテステーションを用いて、希望するフォークでのアテステーションの蓄積量を最大にすることができます。 蓄積されたアテステーションの「重み」は、コンセンサスクライアントが正規チェーンを決定する際に参照する基準となるため、攻撃者は、この「重み」を操作することで、希望するフォークを正規チェーンにすることができます。 しかし、プルーフ・オブ・ワークと比較した場合、プルーフ・オブ・ステークは攻撃者に対する反撃をより柔軟に行えるという利点があります。 例えば、誠実なバリデータは、マイノリティのチェーン構築を継続することで、攻撃者のフォークを無視し、アプリや取引所、プールにも同様の対応を促すことができます。 さらに、攻撃者をネットワークから強制的に排除し、攻撃者がステーキングしたイーサを破壊するように決定することもできます。 これらの手段は、51%攻撃に対する強力な経済的防御メカニズムと言えます。
51%攻撃以外にも、悪意のある者は次のような悪質な行動を企てる可能性があります。
- ロングレンジ攻撃(ただし、ファイナリティのガジェットがこの攻撃ベクトルを無効化します)
- ショートレンジの「再編成」(ただし、提案者へのブースティングおよびアテステーションの期限がこれを軽減します)
- バウンシングおよびバランシング攻撃 (これも提案者へのブースティングが軽減し、そもそもこの種の攻撃は理想的なネットワーク環境においてのみ実行可能です)
- アバランチ攻撃 (最新のメッセージのみを参照するというフォーク選択アルゴリズムの規則により無効化されます)
総合的に見ると、イーサリアムに実装されたプルーフ・オブ・ステークのシステムは、プルーフ・オブ・ワークよりも優れた経済的安全性を備えていることが実証されています。
メリットとデメリット
メリット | デメリット |
---|---|
ステーキングにより個人がネットワークの安全性に参画しやすくなり、分散化を促進。 バリデータノードは通常のラップトップで実行可能。 ステーキングプールを利用すると、32 ETH未満でもステーキング可能。 | プルーフ・オブ・ステークは若く、プルーフ・オブ・ワークと比較して実環境でのテストが少ない |
ステーキングはより分散型であり、 規模の経済がプルーフ・オブ・ワークのマイニングの場合と同じようには適用されない。 | プルーフ・オブ・ステークは、プルーフ・オブ・ワークよりも実装が複雑 |
プルーフ・オブ・ワークと比較して、プルーフ・オブ・ステークでは暗号経済的なセキュリティが向上 | イーサリアムのプルーフ・オブ・ステークに参加するには、3つのソフトウェアの実行が必要 |
ネットワーク参加者へのインセンティブに、新規ETHの発行が少なくて済む |
プルーフ・オブ・ワークとの比較
イーサリアムは元々プルーフ・オブ・ワークを使用していましたが、2022年9月にプルーフ・オブ・ステークに移行しました。 PoSは、PoWに比べていくつかの利点があります。例えば:
- エネルギー効率の向上 - プルーフ・オブ・ワークの計算に多くのエネルギーを必要としない
- ハードウェア要件の低減 - 新しいブロックを作成するのに高性能なハードウェアが不要
- 中央集権化リスクの減少 - プルーフ・オブ・ステークでは、より多くのノードの参加を促進し、ネットワークの保護につながる
- エネルギー消費量が減るため、インセンティブに必要なETHの発行が減る
- 不正に対する経済制裁により、プルーフ・オブ・ワークと比較して51%攻撃のコストが高くなる
- 51%攻撃が暗号経済の防御を乗り越えた場合でも、正当なチェーンの社会的な回復が可能
参考文献
- プルーフ・オブ・ステークFAQ(opens in a new tab) ビタリック・ブテリン
- プルーフ・オブ・ステークとは(opens in a new tab) ConsenSys
- プルーフ・オブ・ステークとは何か、またその重要性(opens in a new tab) Vitalik Buterin
- なぜプルーフ・オブ・ステークなのか (2020年11月)(opens in a new tab) ビタリック・ブテリン
- プルーフ・オブ・ステーク: 弱い主観性の利点(opens in a new tab) ヴィタリック・ブテリン
- プルーフ・オブ・ステークのイーサリアム対する攻撃と防御(opens in a new tab)
- プルーフ・オブ・ステークの設計思想(opens in a new tab) ヴィタリック・ブテリン
- ヴィタリック・ブテリンがLex Fridmanにプルーフ・オブ・ステークについて解説するビデオ(opens in a new tab)