- Concepts_Overview
- What is Casper?
- Design
- Economics
- アカウントと暗号鍵
- キー(Key)の型への理解
- Transactions(トランザクション)
- トランザクションのライフサイクル
- グローバルステート
- スマートコントラクト
- 認証鍵
- コールスタックへの理解
- Dictionaries(辞書)
- Binary Serialization Standardバイナリシリアライズ規格
- dAppsについて
- Glossary(用語集)
Casper ネットワークにおけるコンセンサス
Casper ネットワークの非中央集権的な性質には、最終化された(finalized)ブロックのチェーンにバリデーターが合意する方法が必要です。バリデータノードはトランザクションの有効性を判断し競合の解決およびチェーンのブロックを確定しなければなりません。ネットワークのコンセンサス・プロトコルは、最終化された各ブロックについてバリデータが合意するためのメカニズムとなっています。
安全性、有効性、ビザンチンフォールトトレランス
Casperネットワークでは、バリデータノードは接続クライアントからトランザクションを通じてさまざまな入力を受け取ります。コンセンサスメカニズムとルールを考えると、すべての誠実なノードは同じ値を出力するはずであり、それがCasperの最終化されたブロックです。トランザクションのライフサイクルは、ブロックが提案され確定された後に何が起こるかを説明しています。確定した各ブロックには、ネットワークが最終的に実行するトランザクションのセットが含まれます。ここで説明しているすべての正直なノードが最終的な値に合意するという性質は「安全性(safety)」と呼ばれています。
コンセンサス・プロトコルは、誠実な検証者が有限時間内に確定ブロックに合意することを保証し、ネットワークが無期限にブロックを生成し続けることを可能にします。このプロトコルの特性を「有効性(liveness)」と呼びます。
誠実なバリデータは、たとえ一部のノードに欠陥があったとしても最終的なブロックに合意します。この性質により、コンセンサス・プロトコルはビザンチン障害(Byzantine fault)に耐性を持ち悪意のある活動に対して安全な状態にできます。
要約すると、コンセンサスメカニズムは、ブロックチェーンが以下の要件をどのように満たすかを決定する:
- 安全性(Safety): すべての正直なノードは最終的に最終値に合意する。コンセンサスメカニズムは、2人の正直な検証者がブロックチェーンの同じ位置(高さ)で2つの異なるブロックを報告しないように設定されている
- 有効性(Liveness): ネットワークは無期限に稼働しチェーンに新しいブロックを追加する
- ビザンチン・フォールト・トレランス(Byzantine Fault Tolerance (BFT)): 一部のノードに欠損があったとしてもすべての誠実なノードは最終的に最終値に合意する
Casperのコンセンサス・プロトコル
各Casperネットワークは、ネットワークのチェーンスペックを使ってコンセンサスプロトコルの選択・設定を行えます。利用可能なプロトコルはZugとHighwayです。HighwayはCasperメインネットのコンセンサスプロトコルとして開始以来使用されています。Zugコンセンサスプロトコルはバージョン2.0で導入され、安全性を損なうことなくコンセンサスプロセスを簡素化し高速化しました。Zugはブロック時間の短縮化、オーバーヘッドの軽減そしてバリデーターセットの増強をMainnetで実現します。Zugは、論文「From Weakly-terminating Binary Agreement and Reliable Broadcast to Atomic Broadcast」のアイデアを実装したものでありZugがどのように安全性、有効性、回復力の要件を満たすかを説明しています。
Casper Mainnet におけるコンセンサス
Casper Mainnetはプルーフ・オブ・ステーク(Proof-of-Stake)ネットワークであり、オンチェーン・オークションコントラクトによってコンセンサスに参加するバリデータが決定されます。プロトコルはCSPR トークンをステークすることでコンセンサスプロセスに参加しているノードの分散型ネットワークを使用します。これらのアクティブなノードはバリデータと呼ばれます。次のera(現在のera +2)のバリデータとして活動する為の入札者がオークションコントラクトによってera毎に上位100人選ばれます。ネットワークの成功により大きな利害関係を持つノードは、合意形成においてより大きなウェイトを持ちます。
Mainnetは、欠陥ノードの総重量が全ノードの総重量の3分の1を超えない限り機能し続けます。欠陥のないノードは正直な(honest)ノードです。ほとんどの場合、ネットワークは全ノードの3分の2以上がコンセンサスを得るために積極的に協力することを想定しています。したがって、すべてのノードが正直に行動している期間には、平均よりも強い最終性の保証が発生します。
注
Zug や Highwayコンセンサスプロトコルは、バリデータを選択するためのProof-of-Stakeの方法を必要としないので、理論的には異なるモデルを持つプライベートネットワークと並行して使用することができます。
動的なラウンドの長さ
ZugやHighwayプロトコルでは、ノードがすべてのメッセージを送信するのに適切な時間を確保するために、ラウンドの長さが動的に決定される。これにより、すべてのメッセージを適切に通信し、ブロックをタイムリーにチェーンに追加することでシステムの有効性が維持されます。
Era
era(1つのeraは複数のラウンドで構成される)というコンセプトは、コンセンサスに参加するノードの全体的な運用上のストレージ要件を削減すると同時に、バリデータをローテーションさせることを可能にします。Mainnetでは、コンセンサスの新しいインスタンスは、現在のネットワーク指標にもよるが、2時間毎または約440ブロック毎に実行される。これにより、2つのメリットが得られる:
- データの削減 – 特定のブロックを確定する際に使用された古い「メタデータ」は、もはや役に立たないため、ブロックチェーンに保存されたデータの不変性を損なうことなく削除することができる
- Equivocatorsの禁止 – 以前のeraにてEquivocating(矛盾するコンセンサスメッセージに署名)した不正なノードは新しいeraに参加不可となる
- バリデーターのローテーション – 各eraにボンドしたノードがバリデーターの入札を行い、入札額の上位者が次のera(現在のera +2)のバリデーターになれる
任意のeraにおいて、ノードオペレータは次のera(現在のera +2)のコンセンサスメカニズムに参加するバリデータになるために入札します。era内の各タイムスロットでは、リードバリデータも決定されます。リードバリデータはチェーンに追加する新しいブロックを提案し、そのブロックは他のノードに伝達されます(コンセンサスプロトコルによって、ブロードキャストまたはゴシッピングによって)。このプロセスがクリティカルマス(臨界量)に達し、メッセージのパターンが十分に相互接続されると、選択されたブロックは最終決定されたとみなされチェーンに追加されます。
あるeraの最終ブロックはスイッチブロックとなり、次のeraの初期状態を形成します。新しいコンセンサス・インスタンスは、スイッチブロックに含まれる情報と新しい潜在的なバリデータセットを使用し新しいeraから始まります。あるeraのバリデータを決定するためのオークションプロセスの詳細については、コンセンサスエコノミクスのページを参照ください。
Finality(最終性)
最終性とは、チェーンへ追加されたブロックが後から改ざん、取り消し、キャンセルされることがないとネットワークが確信できる場合に発生します。これはコンセンサスによって発生し全ての取引(トランザクション)がブロック内で行われるため、取引(トランザクション)が変更されないことを確認することができます。最終確認後、ノード間の不一致を引き起こすには全バリデータの3分の1以上が二重署名をする必要があります。この場合、ネットワークはシャットダウンし手動での再起動が必要となります。
Casperネットワークでは、対象の取引(トランザクション)が含まれるブロックの最終化と同時に取引(トランザクション)も最終化されます。潔白を主張するバリデータは、ネットワークによってバリデータセットから削除され、退去させられるリスクがあります。そのため、正直なノードは参加することで報酬を受け取るが、正当性を主張するノードは悪意を持って行動することで収益を失うリスクがあります。
重要なリンク
- Zug コンセンサス – メインネットとテストネットで使用されている Zug コンセンサスの概要
- Highway コンセンサス – Zug コンセンサスの代替として利用できる Highway コンセンサスの概要