Federated Byzantine Agreement
概要
Federated Byzantine Agreement (FBA; 連合ビザンチン合意) は合意に参加する参加者それぞれの信頼に基づくクォーラム (quorum) と呼ばれる部分ネットワークを形成する P2P 向けのコンセンサス機構である。従来のビザンチン合意 (BA; Byzantine Agreement) 機構と比べてノードの参加が自由である (permissionless) という点が大きな特徴となっている。
その柔軟性の副作用として全体の効率や障害耐性がネットワーク構造に大きく依存することから、完全なランダムグラフ型 P2P ではなく、ある程度の範囲まで管理されたネットワーク構成とよく考慮された設計を必要とする。実際には SCP (Stellar Consensus Protocol) のようなより上位のレイヤーの基本的な設計方針として導入されている。
Table of Contents
- 概要
- アルゴリズム
- 従来のビザンチン合意との違い
- References
FBA の基本的な発想はネットワークをクォーラムスライス (quorum slice) と呼ばれる適切な規模のコンセンサス単位に分割することである。スライスは相互にリンクしており、複数のスライスに属しているノードがスライス間のゲートウェイの役割を持つことでコンセンサスをネットワークに波及させるクォーラムを形成する構造になっている。
ネットワークのスライス化は従来の BFT などで生じていた高いトラフィックを最小限のネットワークに閉じ込める効果を持つことから、ネットワークリソースの消費量を大きく削減することができる。このためスライス化によって大規模ネットワークで FBA を展開することを可能にするが、一方で合意の速度が遅くなるというトレードオフが発生する。
FBA に参加するノードは FBA ネットワーク上のすべてのノードを事前に認識する必要はなく、代わりに、自分がどのノードを信頼するかを選択してクォーラムスライスを作成する。自身のスライスから波及した少なくとも一つのクォーラム内のすべてのノードでステートメントが受理されれば、そのステートメントは合意されたとみなしている。
FBA は最初 Ripple によって実装され、その後 Stellar [1] によって形式化されたと言われている。その他にも Flare で導入されている。
アルゴリズム
スロット
FBA ではそれぞれの更新処理にスロット (slot) と呼ばれる識別子を割り当てて識別する。具体的には、更新処理とはメッセージやログ、またはトランザクションといったデータであり、スロットはそれらの更新処理を線形化 (linearize) したり因果一貫性を追跡するためのインデックスや ID に相当する。
ノード
クォーラムとスライス
FBA はノードの参加と離脱が自由であることから固定的なコンセンサスグループを想定することができない。その代わり、各ノードは FBA ネットワーク上で自分が信頼できる (自分と合意形成が可能と考える) 別のノードを指定する。この信頼先の単位をクォーラムスライス (quorum slice) または単にスライスと言う。
ノード
Fig 1 の例はノード
この例では
ここでノード
Fig 2 は
ここで Fig 2 において
- Federated Byzantine Agreement System (FBAS) はノード集合
と、各ノードに対して 1 つ以上のクォーラムスライスを特定するクォーラム関数 からなるペア である ( は の冪集合)。ここでノードは自身のすべてのクォーラムスライスに暗に属している。つまり , , である。
compounding
- FBAS
のノード集合 は、 かつ に含まれる各ノードのスライスが に含まれている場合、つまり , で であればクォーラムである。
クォーラムは交差 (quorum intersection) によって結合しより大きなクォーラムを形成することができる。ネットワークのある部分が交差していない場合、つまり (すべてのノードは正常だがスライスの構成により) 非連結グラフとなっている場合はそれぞれのクォーラムが独立して合意を形成するため競合や矛盾が発生する。
FBA ネットワークに存在する故障ノードの集合を
クォーラムによる構成は柔軟性が高く、十分に考慮して設計すれば障害耐性の高いネットワークを構築することができる。一方で、クォーラム交差が脆弱化しやすく、無配慮に構築するとノード故障や悪意的ノードが交差を専有して合意が達成できなくなったり (liveness の欠落) 矛盾したステートメントに合意する (safety の欠落) 可能性がある。
階層化システムの例
FBA のクォーラムとスライスによる構造は Fig 3 は階層構造で構成した FBA システムの例である。上位層は 4 つのノードで構成されており (ビザンチン障害かどうかに関わらず)
下位層に属するノードは (下位層のノードに依存するのではなく) 上位層のノードを選るためには、依存先の異なる 2 つのスライスを持てば十分である。
同様に直上の層と接続して層を重ねてゆくことで多階層の構造を構築することができる。
従来のビザンチン合意との違い
前述の通り、従来の BFT (Byzantine Fault-Tolerant) 機構と FBA との最も大きな違いは合意を形成するノード集合の構成が動的に変化するという点である。
BFT は
また Fig 3 の上位層は
References
- MAZIERES, David. The stellar consensus protocol: A federated model for internet-level consensus. Stellar Development Foundation, 2015, 32.
- Aspasia Zoi. Study of consensus protocols and improvement of the Federated Byzantine Agreement (FBA) algorithm, UPCommons, 2019