villagerHの日記

勉強したことや苦労した事などを書き綴ります

ブロックチェーンフォーク

ブロックのマイニングを完了して各ノードに伝える場合に複数のブロックが同時に認証され
同様の親ブロックを参照しているフォーク状態が発生することがある。

その場合は各ノードは一旦先に到着した方をメインとし後から到着した方をセカンダリチェーンとして記録する。

その後のブロックを積み重ねた結果、高さの大きくなった方を今後のメインとして使用していく。
これにより各ノードのズレに関しては修正されていく。


ブロックXを親とするブロックAとブロックBが到着

ブロックAが先に来たためブロックAを一旦メインとし、ブロックB側をセカンダリチェーンとして所持

X-A(メイン)
L  B(セカンダリ)

次に来たCブロックがブロックAを親ブロックとして参照していた場合そのままA側チェーンをメインとして扱う

X-A-C(メイン)
L  B(セカンダリ)

CブロックがブロックBを親ブロックとして参照していた場合B側チェーンの方がチェーンとしての長さが長くなるため、B側をメインに変更し以降はB側チェーンをメインとして扱う

X-A(セカンダリ)
L  B-C(メイン)