ビットコイン専門会社として、エンジニア視点からなるべく正確にBCHのハードフォークについて解説してみる③

こんにちは、ゆいき(@yuikijp)です。

2018年11月15日に発生する予定のBCHハードフォーク解説記事第3弾です。

この最終回では、「ビットコインの主要なフォークやスプリット」について解説します。

これまでのおさらい

今回のハードフォークの概要をおさらいしましょう。

  • Bitcoin ABCがハードフォーク
  • Bitcoin SVがハードフォーク
  • リプレイプロテクションなし
  • ブロックチェーンの分岐は高確率で起きる
  • コインの分裂も恐らく起きる

というものでした。

なお、この記事は、第1回や第2回の知識を前提として書いています。

「フォークとスプリット」「ハードフォークとソフトフォーク」については第1回を、

「コインの分裂と分離」、「トランザクションリプレイとリプレイプロテクション」については第2回を参照してください。

では早速、直近のフォークから過去に遡りつつ解説していきます。

BCHアップデート(2018/11/15)/Bitcoin SVの登場

SF / HF 恒久的なチェーンの分岐
ABCとSVによる異なるHF ある可能性が高い

f:id:Yuiki0627:20181109214809p:plain
ABCとSVにチェーンが分岐してしまった場合

概要

これは現に迫ってきているハードフォークのことです。

実は今回2種類のハードフォークが発生する予定です。

1つ目はBitcoin ABCという従来から使われていたソフトウェア(クライアント)のアップデートによって行われるハードフォークのことです。

OP_CHECKDATASIG 等のオペコードを有効化するなどのいくつかのコンセンサスに変更が加えられます。

2つ目は最近登場したBitcoin SVというクライアントによって行われるハードフォークのことです。

こちらはOP_MUL等のオペコードが有効化するなどのいくつかのコンセンサスに変更が加えられます。

なぜハードフォークなのか

オペコードの追加は基本的には *1ハードフォークです。

なぜなら、旧クライアントではそのオペコードは存在していない、もしくは無効となっているからです。

なぜ恒久的な分岐が起きるかもしれないのか

今回はこのままでは前述した2つのハードフォークが起きた後、恒久的なチェーンの分岐が発生する可能性があります。

なぜなら、以下の表に示すようなオペコードを用いたトランザクションを作ることができるからです。

クライアント OP_CHECKDATASIG OP_MUL
Bitcoin ABC X
Bitcoin SV X

そういったトランザクションが一度、それを有効とみなしたチェーンのブロックに入ってしまいブロックチェーンが更新されると、チェーンが分岐してしまいます。

そのブロックはもう一方のチェーンでは無効となるため、ブロックチェーンに相違が発生してしまうのです。

BTCとBCHの分岐と違うところ

今回の分岐では、リプレイプロテクションがどちらにも入っておらず、双方で有効なトランザクションというのも作れてしまいます。

ここがBitcoinとBitcoin Cashが分かれたハードフォークと大きく違うところです。

BCHアップデート(2017/11/13, 2018/05/15)

SF / HF 恒久的なチェーンの分岐
HF なし

f:id:Yuiki0627:20181110133758p:plain
恒久的なチェーンの分岐がないハードフォーク

概要

BCHでは2017年11月や2018年5月にもハードフォークが行われました。

主に、前者は採掘難易度調整アルゴリズム(DAA)の変更、後者ではブロックの最大サイズを32MBに変更し、 OP_CAT 等のオペコードが有効化されました。

なぜハードフォークなのか

前者はDAAの変更という過去のクライアントと互換性がない変更が加わり、後者はオペコードの追加であるため前述したようにハードフォークと言えます。

なぜ恒久的な分岐が起きなかったか

このプロトコルの変更に関して意義を唱える勢力は特段現れず、殆どのマイナーやユーザがアップデートしたため恒久的なチェーンの分岐はありませんでした。

つまり、これらは単なるBCHのプロトコルアップデートと言えます。

UAHF(User Activated Hard Fork)

SF / HF 恒久的なチェーンの分岐
HF あり

f:id:Yuiki0627:20181109215210p:plain
BTCとBCHのチェーンが分岐した図

概要

ユーザやマイナーがBitcoin ABCを用いたことで2017年8月1日に発生したハードフォークです。

所謂BCHが生まれたハードフォークのことです。

Bitcoin ABCではブロックの最大サイズを1MB超にするというプロトコルの変更を行いました。

なぜハードフォークなのか

1MB超のブロックは、Bitcoin側では無効なブロックとしてみなされるため、これはハードフォークと言えます。

更に、リプレイプロテクションがBCHのトランザクションでは必須であるため、トランザクションもお互い互換性がありません。

なぜ恒久的な分岐が起きたか

BCHを定常的に掘るマイナーが現れ、多くの取引所がサポートしたため、恒久的に分岐したと言えます。

BIP91/SegWit

SF / HF 恒久的なチェーンの分岐
SF なし

概要

SegWitの導入を促進するためのBIP91によるソフトフォークが行われました。

SegWitについてここでは詳しく説明しませんが、一言で言うとトランザクションの形式の変更のことです。

BIP91とは、ある期間で承認された連続336ブロックの80%以上に"あるフラグ"が立った場合、それ以降はSegWit採用を表明していないブロックは不正としてみなすという提案のことです。

"あるフラグ"とはBIP91の内容に賛成するかどうかの値と言えますね。

f:id:Yuiki0627:20181109233443p:plain

実際に2017年7月21日にこの割合が80%を超え、2日後にSegWit採用を表明していないブロックは不正とみなすソフトフォークが発生しました。

更に、連続的にSegWitの有効化をするソフトフォークが起きたわけです。

なぜソフトフォークなのか

SegWit採用を表明していないブロックを拒否することは今までのルールに沿ったままできる新しい制限と言えるため、ソフトフォークです。

また、SegWitは旧バージョンでもトランザクションが不正にならないような変更であるため、これもソフトフォークと言えます。

f:id:Yuiki0627:20181110133817p:plain
SegWitトランザクションは旧バージョンでも有効となる

なぜ恒久的な分岐が起きなかったのか

これらの変更に関してはマイナーの大多数が賛成していたため、恒久的なチェーンの分岐は発生しませんでした。

もちろんこの時点での話であり、その後Bitcoin Cashが誕生しました。

終わりに

最終回はここまでです。

この連載で今回のハードフォークについてや、それを理解するために必要な事項をできるだけわかりやすく解説しました。

しばらくは目を離せない状況が続きそうです。

参考文献

*1: OP_CHECKLOCKTIMEVERIFY などは既存のオペコードを置換することで、ソフトフォークで導入されました。詳しく知りたい方はこちらをどうぞ。