ブロックチェーンのフォークについて解説-1

Kazuaki Fujioka
TeamGeekHash
Published in
3 min readJan 5, 2019

今回は、ブロックチェーンの理解をする際に避けては通れない「フォーク」についてまとめていきたいと思います。

フォークには、「ブロックが同時に生成されて起こるもの」と「仕様変更のために起こるもの」の2種類があり、今回は前者についてまとめていきたいと思います。

フォークとは

フォークとは、「チェーンが分岐すること」を意味します。チェーンは基本一つで、そのチェーンの最後のブロックに続く形でマイナーたちが後続のブロックを生成していきます。

通常、ブロックが生成されるとネットワーク全体に同期され、すべてのノードが新しいブロックの存在を確認します。

しかし、時にその同期に間に合わずほぼ同時に二つのブロックが生成された場合、一つのブロックの後ろに2つのブロックが分岐することになってしまいます。これが「フォーク」です。

フォーク発生後について(Bitcoinの場合)

基本的にフォークが発生した後、チェーンが一つに収束するような仕組みを各ブロックチェーンは有しています。前提として、ブロックチェーンは最も長いチェーンを認め、片方は無効なチェーンとします。無効と認められたブロックはOrphan(孤立ブロック)と呼ばれ破棄されます。(Orphan内のトランザクションは、その後メインチェーンの新しいブロックに入ります。)

Bitcoinの場合、ブロックの生成の成功に対し報酬が支払われるようになっていますが、無効なブロックを採掘してもその報酬を受け取れません。

フォークが発生し2つのチェーンに分岐したとき、無効なブロックを生成したマイナーは報酬を受け取ることができません。そのため、どのマイナーもより長いチェーンのブロックを生成しようとし、最終的には一つのチェーンが生成され続いていきます

フォーク発生後について(Ethereumの場合)

Ethereum(Casper実装前)の場合、ブロックの生成速度がBitcoinより早いためフォークがより頻繁に発生します。そこでEthereumでは、Bitcoinとは異なりフォークした後メインチェーンとして認められなかったブロックはUncleと呼ばれ、メインチェーンの新ブロックに参照され取り込まれます。Uncleをメインチェーンに取り込むことで、Uncleの生成者にも報酬を与えるようになっています。

Ethereumはチェーンの長さだけでなく、チェーン内のブロックの総ブロック数もチェーン採用の基準にしています。ブロック高だけでなくブロック数も考慮される(ブロック数が多いほうをメインチェーンにする)のは、Uncleとして無効なチェーンのブロックを取り組む際に効果的だからです。

Ethereumは今後Casperを実装することで段階的にPoSに移行していきます。PoSにはフォークに関連した問題「Nothing at Stake」がありますので、興味のある方はこちらの記事も御覧ください。

まとめ

今回はフォークの中でもブロックが同時生成された際のものに焦点を当ててみました。次回は仕様変更のフォークであるソフトフォークハードフォークについてまとめていきたいと思います。

--

--