イスタンブールBFTコンセンサスアルゴリズムの解釈

イスタンブールBFTコンセンサスアルゴリズム詳細なドキュメント

イスタンブールBFTクラスBFTアルゴリズムとしては、エーテル広場で行われてきました。イスタンブールがまだそこにいくつかの潜在的な問題ですが、アルゴリズムのアイデアと実装はまだ価値がある学習とリファレンスです。

用語

  • バリ:ブロック検証。
  • 提案者:ブロックの意志。
  • ラウンド:コン​​センサスのいくつかのラウンド。ラウンド数を(ラウンド数が原因でエラーまたはブロック更新変更してもよい)をブロックまたは変更する提出を終了ブロックによってラウンドブロックから開始する提案を行いました。
  • 提案:提案されたプロセスで新しいブロック。
  • シーケンス:提案の高さ。そして、シーケンスが高いブロックに対応します。
  • Blocklog:将来的にはバックログに記録された情報の内部。core.backlogs
  • ラウンド状態:RoundSequence、一緒に結合しview
  • コンセンサス証明:ブロック署名提出。それぞれをvalidator検証した後、それをブロックします署名されています。
  • スナップショット:国家の投票バリ。

コンセンサスアルゴリズムの説明

PBFTアルゴリズムから変更イスタンブールBFTは、次の3つのフェーズで構成されていますPRE-PREPAREPREPARECOMMITNネットワークノード、アルゴリズムは、最大許容することができるF、請求項つのエラー・ノードN=3F+1各ラウンドの開始前に、validatorとしてそれらのいずれかを選択しますproposer(スティッキーな方法に加えて、検索デフォルトのラウンドロビン方式のstickyProposer方法は、詳細を確認します)。その後、提案者は前方に置く提案をブロックし、ブロードキャストするPRE-PREPARE情報を。バリデータの受信時にPRE-PREPAREフラグを記載する旨されPRE-PREPARED、次いでブロードキャストPREPARE情報。このステップは、バリデータのすべてに同じseqnenceコンセンサス及びラウンド(ビューのコード)で検証することを保証することです。受信するとメッセージ、バリデータは入力と放送のステータス情報。このステップは、ピア・ノードは、提案されたブロックを受信した通知することであり、ブロックが鎖に挿入されます。最後に、Validatorは待つこと数ヶ月に行き、その後、ブロックは、チェーンに挿入された状態。イスタンブールBFTアルゴリズムブロックが決定され、法的分岐は、鎖は、必ずしも鎖にブロックしないことを意味します。悪意のあるノードが別の鎖を生成しないようにするために、ブロックは鎖内に挿入される前に、バリの各々は、必要とするヘッダの領域に署名をフィールド。したがって、ブロックは、(なぜなら、署名の)自己検証することができ、光のクライアントもサポートされています。ただし、動的2F+ 1PREPAREPREPAREDCOMMIT2F + 1COMMITCOMMITTED
2F + 1COMMITextraDataextraDataまた、ブロックのハッシュ計算を引き起こす可能性があります。ブロックは異なるバリデータを検証することができるので、異なるシグネチャが存在することになるので、異なるハッシュ同一のブロックが存在することになるからです。ソリューションは、ときブロックのハッシュを計算することでCOMMIT署名を除きます。したがって、我々は一貫性を検証すると同時にブロックハッシュコンセンサスで行わ任意のコースを保証することができます。

コンセンサス状態

  • New Round:提案者は、新しいブロックの提案が送信されます。待っているバリPRE-PREPAREの情報。
  • PRE-PREPARED:バリデータは受信したPRE-PREPARE情報及び放送PREPARE情報を。次に待つ2F + 12 PREPARECOMMIT情報を。
  • PREPARED:バリデータは、受信されたメッセージおよびブロードキャスト情報を。次に待つのメッセージ2F + 1PREPARECOMMIT2F + 1COMMIT
  • COMMITTED:バリデータは、受信したメッセージをこの時点で提案されたブロック鎖に挿入することができます。2F + 1COMMIT
  • FINAL COMMITTED:バリデータが正常にブロック鎖に挿入され、次のラウンドのために待機されています。
  • ROUND CHANGE:同じの次のラウンドで待機しているバリデータ2F + 1数のROUND CHANGE情報。

状態遷移

  • NEW ROUND - > PRE-PREPARED:
    • 中txpoolで提案コレクター取引。
    • 提案者は、バリへの提案とブロックの放送を楽しみに置きます。そして、入力PRE-PREPARED状態を。
    • それぞれのバリデータPRE-PREPAREDを受信すると状態、PRE-PREPARED以下を伴う情報:
      • ブロックの提案は、提案者から効果的です。
      • 有効なヘッダ領域。
      • シーケンスおよび状態バリラウンドとブロックマッチングの提案。
    • Validatorは、ブロードキャストPREPARE、他のバリデータに情報を。
  • PRE-PREPARED - > PREPARED:
    • Validatorは受信2F + 1有効なPREPARE情報を、および入力PREPARED状態を。効果的な情報は、以下の基準を満たす必要があります:
      • シーケンスおよび回戦。
      • 取引ハッシュが一致。
      • バリデータからの情報が知られています。
    • 一度にPREPARED状態、Validatorは報知情報をCOMMIT。
  • PREPARED - > COMMITTED:
    • Validatorは受信2F + 1・有効なCOMMIT入力するために情報をCOMMITTED状態。効果的な情報は、以下の基準を満たす必要があります:
      • シーケンスおよび回戦。
      • ブロックハッシュが一致
      • バリデータからの情報が知られています。
  • COMMITTED - > FINAL COMMITTED:
    • バリ2F + 1ヘッダ領域への署名のコミットメントextraDataとブロック鎖にブロックを挿入しようとします。
    • あなたはにブロック成功、バリデータを挿入するFINAL COMMITTED状態。
  • COMMITTED FINAL - > NEW ROUND:
    バリデータは、新しい提案が新ラウンドの開始]を選択します。

潜在的な問題

おすすめ

転載: www.cnblogs.com/zhoujunjie/p/11231030.html