コンセンサス⚓︎
コンセンサスにより、ネットワークは ブロック とその トランザクション の一貫した単一の時系列を維持し、すべての アカウント に関連する残高とデータを維持します。
コンセンサスは、次の2種類の合意を提供します。
- 連結の合意:各ブロックが前のブロックに正しくリンクし、チェーンの履歴の不変性を保証します。
- 内容の合意:ブロック内のすべてのトランザクションがネットワークのルールに従います。たとえば、アカウントからトークンを送るには、その 秘密鍵 による有効な署名と十分な残高が必要です。
どちらかの合意に違反するブロックは 無効 とされ、正常に動作するノードから無視されます。 そのようなブロックはネットワークに伝播されません。
競合⚓︎
NEM のような分散型ネットワークでは、ノード が一時的に切断されることがあります。 遅延、接続の問題、ネットワーク構成の変化などが原因です。
ネットワーク分断 の間、切断されたノードのグループは、すべて有効であっても、最新のブロックについて一時的に意見が分かれることがあります。
その結果、一時的に複数のブロックチェーンが存在することがあります。これを フォーク と呼びます。
- フォーク
- 2つ以上の競合するチェーンが共通の履歴を持ちながら、最新のブロックが異なる状態です。
フォーク中は、照会したノードがそのアカウントに影響するすべてのトランザクションを認識しているかどうかにより、異なるノードへの照会が同じアカウントに対して異なる残高を返すことがあります。
接続が復旧すると、ノードは同じ高さにある競合するブロックに遭遇し、競合が発生することがあります。
2つのノードが同時に新しいブロックを生成した場合にも、フォークが自然に発生することがあります。
競合の解決⚓︎
ノードがフォークを認識すると、NEM は決定論的なルールで解決します。チェーンスコア が最も高いチェーンを正しいものとみなします。
スコアの低いフォーク上のノードは、メインチェーンの一部ではなくなったブロックを ロールバック し、より良いチェーンに切り替える必要があります。
- ロールバック
- ノードがより良いチェーンに切り替える際、通常はフォークの解決後に、最近追加された1つ以上のブロックを破棄するプロセスです。
破棄されたブロック内にあり、メインチェーンにまだ存在しないトランザクションは 未承認トランザクションプール に戻され、再びブロックに含める前に再検証する必要があります。
NEM のロールバックは通常、最新の数ブロックだけに影響する浅くまれなものです。
非常に深いチェーン再編成を防ぐため、NEM は 書き換え制限 を設けています。
- 書き換え制限
- NEM でロールバックが到達できる最大深度です。360ブロック(約6時間)に設定されています。
書き換え制限より深いブロックは、代替チェーンに置き換えられません。 その結果、新しいブロックが上に追加されるにつれて、トランザクションは徐々に実質的な不可逆状態になります。
書き換え制限には別の影響もあります。 切断中のノードが自分のブロックを追加し続けると、別のチェーンが構築されます。 そのチェーンが書き換え制限を超えて成長すると、戻るには深すぎるロールバックが必要になるため、ノードは自力で再参加できません。 2つのチェーンは 解決不能なフォーク となり、オペレーターはノードをメインチェーンに復元して解消する必要があります。