コンテンツにスキップ

コンセンサス⚓︎

コンセンサス
ネットワーク内のすべての ノード がブロックチェーンの現在の状態に 合意するためのプロセスです。

コンセンサスによって、ネットワークは ブロック とその トランザクション の単一で一貫した時系列を維持し、 各 アカウント に紐づく残高やデータの整合性を保ちます。

コンセンサスは次の 2 つの形で合意を提供します。

  • 封印の合意(Sealing agreement): 各ブロックが正しく前のブロックにリンクし、チェーンの履歴の不変性を保証します。

  • 内容の合意(Content agreement): 各ブロック内のすべてのトランザクションがネットワークのルールに従っていることを確認します。 たとえば、トークンを送信するには有効な秘密キーによる署名と十分な残高が必要です。

どちらの合意にも違反するブロックは「無効」とみなされ、 正常に動作するノードからは無視されます。 そのようなブロックはネットワーク上に伝搬されません。

コンフリクト(競合)⚓︎

Symbol のような分散ネットワークでは、ノード が一時的に切断されることがあります。 これは遅延、通信障害、またはネットワーク構成の変化によって発生する可能性があります。

こうした ネットワーク分断 の間、切り離されたノード群は それぞれ異なる最新ブロックを持つ場合があり、 一時的に複数の有効なブロックチェーンが存在することになります。 この状態を フォーク と呼びます。

フォーク
共通の履歴を共有しながらも、最新のブロックが異なる複数の競合チェーンが 同時に存在している状態です。

フォーク発生中は、同じアカウントでも接続先ノードによって 表示される残高が異なることがあります。 これは、ノードがアカウントに影響する全トランザクションを まだ受け取っていないためです。

接続が回復すると、ノードは同じ高さにある複数のブロックを検出し、 競合が発生します。 また、2 つのノードが同時に新しいブロックを生成した場合にも自然にフォークが起こります。

競合の解決⚓︎

ノードがフォークを検知すると、Symbol は決定的なルールを用いて解決します。 累積難易度に基づく チェーンスコア が最も高いチェーンが 「正しい」ものと見なされます。

低スコア側のフォーク上にあるノードは、 メインチェーンに含まれなくなったブロックを ロールバック(巻き戻し)して より良いチェーンへ切り替えます。

ロールバック
フォーク解消後にノードがより良いチェーンへ切り替える際、 最近追加された 1 つまたは複数のブロックを破棄する処理のことです。

破棄されたブロックに含まれていたトランザクションのうち、 メインチェーンに存在しないものは 未承認トランザクションプール に戻され、 再度検証を受けてから再びブロックに含まれます。

Symbol におけるロールバックは通常浅く、発生頻度も低く、 直近の数ブロックに限られます。 しかし、このリスクを完全に排除するために Symbol では ファイナライズ を採用しています。

ファイナライズ⚓︎

ファイナライズ
ロールバック のリスクを取り除き、 ブロックおよびその中のトランザクションを不可逆にするプロセスです。

一度ファイナライズされたブロックは、ネットワーク分断や フォーク が発生してもチェーン上から削除されることはありません。

ファイナライズは、資格を持つ 投票ノード によって行われます。 各ノードはアカウントの重要度に応じた重み付き投票を定期的に行い、 ファイナライズ可能な最も高いブロックを決定します。 重み付き投票の 3 分の 2 以上を獲得したブロックがファイナライズ済みと見なされます。

その結果、ブロックチェーン上に全ノードが同意する ファイナライズポイント(チェックポイント)が形成されます。

ファイナライズにより、アプリケーションは信頼できる確定基盤を得ます。 たとえば、ウォレットはファイナライズされたブロックに含まれる トランザクションを「完全に確定した」とみなすことができます。

投票は シビル攻撃 を防ぐため、 アカウントの残高に基づいて重み付けされます。 参加には 3,000,000 XYM 以上の保有が必要です。

ネットワーク分断がない場合、 ブロックは通常 10~20 分以内にファイナライズされます。 所要時間は直近のファイナライズポイントからの経過時間によって変動します。