オン ザ・ブロックチェーン

ブロックチェーンがフォーク(枝分かれ)するってどういうこと?

calendar

 ブロックチェーンを伸ばすマイニングの仕組みで説明したように、ブロックチェーンはマイナーの作業によってどんどん伸ばされていきます。

 が、時として、ブロックチェーンは枝分かれすることがあります。

 ブロックチェーンが枝分かれすることをフォークと言います。

 ブロックチェーンのフォークはどういった時に起こりうるのか?またフォークが起きたらどうなるのか?について説明します。

スポンサーリンク

ブロックチェーンがフォークするのはどんな時?

 例えば、ブロック1、ブロック2、ブロック3と順調にブロックチェーンが伸びているとしましょう。

 ここで、マイナーAさんがマイニングに成功し、「ブロック4が出来たよー。」と他のマイナーに送信します。

 普通はそれでブロック4のマイニング競争は終わりなのですが、マイナーBさんが、そのAさんからの知らせを受け取るよりも前に(ほぼ同時に)、マイニングに成功してしまうことがあります。

 当然、マイナーBさんも「新しいブロック4が出来たよー。」と他のマイナーに送信します。

 先にAさんからのブロックを受け取って繋いでしまったマイナーCさんの元に、もう一つのブロック4がBさんから送られてくるわけです。

 当然、それぞれのブロックに含まれるトランザクションリストは全然違うものです。

 こういった場合、後から来た方もとりあえずブロックチェーンに繋いでしまいます。Previous Block Hash(親ブロック)は両方ともブロック3を指定しているので、ここで枝分かれすることになります。フォークの発生です。

 フォークした場合、どうなるかと言うと、先に繋いだほうがとりあえずメインブロックになり、後から繋いだ方は補欠です。ブロック3にとっては本妻と愛人みたいな感じですね。

 この愛人ブロック、つまり後から来た方のブロックのことをオーファンブロックと呼びます。

 オーファンブロックは一応データとして維持しますが、正式なブロックとは認められません。つまりオーファンブロックの中にあるトランザクション(送金)は全く認められていない状態です。認証はせずに仮の状態でデータだけ維持しておこうというのがオーファンブロックです。

 ちなみにオーファンブロックに含まれるトランザクションは認められないので、この時点でCさんのブロックチェーン上ではマイナーBさんへの報酬は支払われていないことになります。

 マイナーはブロックを作る際、新品のビットコインを自分のアドレス宛に送るトランザクションを含めることができます。そのトランザクションが承認されることで報酬を受け取れることになります。

 この新品のビットコインというのは、言わばシステム側より発行されたものです。ビットコインが新しく発行されるのはマイニングに成功した際のみで、その額については初めから決められています。

参考ビットコインの発行限度額と半減期について

 また、Cさんが持つブロックチェーンではAさん作のブロックがメインブロックとして扱われていますが、他のマイナー(ノード)が持つブロックチェーンに関してはどうなっているか分かりません。少なくともBさんのブロックチェーンではBさん作のブロックがメインになっているはずです。Aさん作のブロックが到着する前に自分で繋げたブロックなんですから。
※Bさんのブロックチェーン上では自分への支払いが承認されている状態です。

 それぞれのマイナーは他のノードのブロックチェーンがどうなっているかは一切考慮しません。自分の持つブロックチェーンだけを見て判断しています。つまり、この時点ではAさんのブロックをメインブロックとするのか、Bさんのブロックをメインブロックとするのか、ノードごとに意見が割れてしまっているような状態です。 

 ブロックチェーンの内容がノードごとに違うというのは大問題です。

 どっちが本物なのかハッキリさせないと共通の台帳として使えません。

フォークが発生した後に起こること

 フォークが発生したそのブロックについては、上述したように早いもの勝ちでメインブロックが決まります。そして、困ったことにどちらが早いかはマイナーごとに違う可能性があります。

 各ノードごとにブロックチェーンの内容がバラバラになってしまっている状態です。

 そのバラバラ状態を収束させる為の仕組みが、フォークした場合は、最も長く伸びた枝がメインチェーン(メインブロック)と認められるというルールです。

 このルールによって、どうなるのか具体的に見てみましょう。

 ブロック4でフォークが発生した後も、ブロック5を生成する為にまた世界中のマイナーたちがしのぎを削ります。

 ここでマイナーたちはどちらの枝に繋げるブロックを作るのか選択を迫られることになります。Previous Block Hash(親ブロック)は一つしか指定できないですから。

 普通は、その時点でメインブロックとなっているブロックの後ろに繋げようとします。というのもせっかくマイニングに成功してもそのブロックがメインブロックとして認証されなければ、自分への報酬ももらえないからです。オーファンブロックをいくら繋げてもビットコインはもらえません。勝ち馬に乗らなければマイニングをする意味がありません。

 ただし、この時点では自分の持つブロックチェーン上のメインブロックが多数派かどうかは分かりません。もしかしたら自分だけメインとオーファンブロックが逆ということもありえます。

 上述したように、マイナーはあくまで自分のブロックチェーンだけを見て判断しており、データを交換して同期しようとしたりはしませんし、中央管理しているノードは無いのでどちらのブロックが勝ちそうか判断のしようがありません。

 なので、それぞれのマイナーはひたすら自分のブロックチェーンのメインブロックを伸ばそうとするわけです。

 そうすることで結果的に、多数決が行われることになります。これが非常に面白い仕組みです。

 例えばマイナーが100人いたとして、そのうち97人はAさんのブロックをメインとして繋ぎ、3人だけがBさんのブロックをメインとして繋いでいたとしたら、次のブロック5はどちらが伸びることになるでしょう?

 非常に高い確率でAさんブロックの列が伸びることになるのが分かりますよね。

 結果的に、Aさんブロックの後ろにブロック5が繋げられ、Aさんブロックの枝が伸びることになります。

 ここで重要なのは、Bさんのブロックをメインブロックとしていた人も少ないながらも居たと言うことです(例では3人)。

 ここまでの動きをマイナーBさんの視点で見てみましょう。

 Bさんのブロックチェーンでは自分の作ったブロックがメインブロックになっています。なのでBさんは自分のブロックの続きを伸ばそうとします。

 しかし実際は多勢に無勢です。

 Bさんがブロック5を頑張って作っている最中に、まず間違いなく誰かがAさんブロックに繋がるブロック5を完成させます。そしてそのブロック5AがBさんの元に送られてきます。

 そのブロック5Aを(Bさんにとっての)オーファンブロックであるブロック4Aにつないだ途端、そちらの方が長くなるので、メインチェーンが入れ替わることになります。

 これでBさんのブロックチェーンでも、Aさんが作ったブロック4がメインブロックに格上げされ、Bさんが自分で作ったブロック4がオーファンブロックに格下げされるわけです。

 Bさんは自分への報酬トランザクションが含まれるブロック4Bをメインブロックにしたかったのですが、オーファンブロックに格下げされたことにより、その報酬は無かったことになります。

 いくらBさんがブロック4Bの自分の報酬を取り戻す為に一人で頑張っても、まず逆転することはありえません。オーファンブロックを無理に伸ばそうとするよりも、さっさと諦めてメインブロックの作成に加わった方が報酬をもらえる可能性は高いと言えます。

 こうして、マイニングの同時成功によって枝分かれしたブロックチェーンは、必ずどちらか一本に収束していきます。枝分かれが続くのは長くとも2、3ブロック程と言われています。

 愛人とは結局、長続きしないんです。

ブロックチェーンは自動的に同期される

 枝分かれするということは、各ノードごとにどちらをメインブロックとするかが一時的にバラバラになってしった状態です。各ノードがうまく同期ができていない状態と言えます。

 しかし、上記のように誰が調整するわけでもなく、自然と各ノードが持つブロックチェーンは全く同じ状態に収束していきます。

 ブロックチェーンの枝分かれの問題も、各ノードごとの同期が取れていないという問題も、フォークした場合は、最も長く伸びた枝がメインチェーン(メインブロック)と認められるというルールによって一挙に解決してしまうわけです。

 定期的にデータを交換して同期するような仕組みではなく、それぞれがただ自分の報酬のためにマイニングを行うことが、結果的に全てのノードのブロックチェーンを同期させる原動力になっているというのが、ブロックチェーンの設計の凄いところです。

トランザクションが無かったことになる?

 上記のBさんの例のように、一度メインブロックとして承認したブロックが、後からオーファンブロックに格下げされるということが実際にありえます。

 メインブロックとして認証されるということは、そのブロック内に存在するトランザクションが承認されるということです。つまり利用者側から言うと、送金が完了したことになります。

 しかし、そのトランザクションを含むブロックがオーファンブロックに格下げになるということは、承認が取り消されるということです。さっき送ったはずのビットコインが戻ってきてる!なんてことになります。

 そのブロックに含まれていたトランザクションは一体どうなるのでしょうか?

 実は大したことにはなりません。

 オーファンブロックに取り込まれているトランザクションは、完全に未承認扱いになるので、数ブロック以内には必ずメインブロック側に取り込まれます。オーファンブロックに閉じ込められるわけではありません。

 一時的にちょっと混乱するかも知れませんが、あくまで一時的なものです。
※もしフォークした際のそれぞれの勢力が均衡し、数ブロックに渡って枝分かれしたまま進んでしまった場合は、さすがにしばらく混乱が続くと思います。まあしかし数ブロックも均衡を保つというのはほとんどありえないようです。

 本当に無かったことになるのは、マイナーBさんへのビットコインの発行(報酬)だけです。それは自分で作ったブロックに自分だけが入れられる特別なトランザクションなので、そのブロックが承認されない限り消えて失くなることになります。

この記事をシェアする

コメント

  • Bさんの自身への報酬のトランザクションを含むオーファンブロックが仮に承認され、2、3ブロック後にメインブロックに大差をつけられなくなった場合、一度承認されたBさんへの報酬はどうなるのでしょうか?ちなみに自身への報酬のトランザクションには手数料は必要ですか?その手数料に従って、そのトランザクションがいつのブロックに含まれるか決まりますか?他のトランザクションと同じように。

    by YuHa 2018年4月21日 6:22 AM

down コメントを残す




管理人

Nobuo

Nobuo

仮想通貨に興味があるただの人です。モナコインが好きなのでMonazon.jpを作りました。よろしくです。