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

みなさんこんにちは。@usatieです。

Yenomは「ビットコインで世界を遊ぶ」をミッションに掲げている、世界でも珍しいビットコイン専門のテックカンパニーです。

私たちも完全に理解できているとは言えませんが、今話題のBCHのハードフォークについて、ビットコイン専門のテックカンパニーとして僕たちができる限りわかりやすく正確に現在の状況をお伝えしなければと思い、この記事を書くことにしました。

11/10、今週土曜日19:00からはビットコイナー反省会にてハードフォークに関しての解説や質疑応答などを行いますので、そちらも是非よろしくお願いします!

解説する内容について

今日から3日間かけて、YenomのメンバーでBCHのハードフォークについて解説します。

1日目は、まずは11/15のハードフォークの概要と、それを理解するために必要な要素を基本からわかりやすく紹介したいと思います。

これから三日間で、以下のような項目について解説する予定です。他にも、知りたい項目があれば、ぜひ@usatieまでご連絡ください。

  • ハードフォーク / ソフトフォークとは
  • ブロックチェーンの分岐とは
    • チェーンの正統性は何で決まる?
    • 複数の正統なチェーンが存在する
  • ハッシュウォーとは
  • コインの分離とは
  • コインの分裂とは
  • リプレイプロテクションとは
  • Bitcoin ABCとBitcoin SVの違いとは
    • Bitcoin ABCのハードフォーク内容
      • OP_CDS,OP_DSVとは(OP_CHECKDATASIG, OP_CHECKDATASIGVERIFY)
      • CTORとは
    • Bitcoin SVのハードフォーク内容
      • OP_MUL, OP_INVERT, OP_LSHIFT, OP_RSHIFTとは
      • OP_CODE上限の拡大
      • ブロックサイズの拡大
  • ABCコインとSVコインは別のものになるのか?
  • ABCコインとSVコインの分離方法
  • コインを分離すべきなのか、しないべきなのか
  • これまでの主要なフォークについて
    • 2018 May ハードフォークとは
    • 2017 Nov. ハードフォークとは
    • 2017 Aug. ハードフォークとは
    • Segwit2Xとは
    • UASFとは

今回のハードフォークの概要

まず、今回のハードフォークの概要は以下となります。

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

フォーク、スプリット、コインの分裂

ビットコインのハードフォーク、コインの分裂に関する話を理解する上で、誤解を招きやすい用語がいくつかありますので、最初にその辺りを整理するのが良いでしょう。

「ハードフォーク / ソフトフォーク」「ブロックチェーンの分岐」「コインの分裂」これらはよく混同されて話されていますが、全て別のものです。 例えば、BCHが誕生した2017年8月1日のハードフォークと、今回のハードフォークは以下のように比較分類が可能です。

1.Aug.2017 15.Nov.2018
フォークの種類 ハードフォーク(BitcoinABC) ハードフォーク1(BitcoinABC)
ハードフォーク2(Bitcoin SV)
ブロックチェーンの分岐 アリ 高確率でアリ
コインの分裂 アリ(BTC / BCH) 恐らくアリ(BCH / BSV)

状況は似ていますが、2017年8月のハードフォークはBTCからBCHを分裂させることが目的だったのに対し、今回のハードフォークは必ずしも分裂を目的とするものではない(と少なくとも主張されている)ことからいくつかの仕様が異なります。

まず本日は「ハードフォーク / ソフトフォークの違い」「ブロックチェーンの分岐」「ハッシュウォー」について解説します。

ソフトフォーク / ハードフォークの違い

フォークとは「ソフトウェアのアップデート」

f:id:usatie:20181108214345p:plain ハードフォーク、ソフトフォークというのはソフトウェアのアップデートのことです。しかし、ただのアップデートではありません。他のソフトウェアと通信する時の決まりごと(プロトコル)に変更があるようなアップデートです。ハードとソフトそれぞれの違いを簡単に言ってしまえば、ハードフォークは今までのルールからははみ出てしまうような新しい形式を導入するアップデート、ソフトフォークは今までのルールに沿ったままできる新しい形式を導入するアップデート、と言えます。

ハードフォークとは

f:id:usatie:20181108214310p:plain ハードフォークとは、新バージョンで追加・修正された部分(★)を旧バージョンから見ると無効に見えるような変更のことです。

例えば、BTCからBCHがハードフォークしたときには、ブロックサイズの上限1MBが引き上げられました。新バージョン(BCH)で採掘された8MBのブロックは旧バージョン(BTC)から見ると無効に見えます。

ソフトフォークとは

f:id:usatie:20181108214313p:plain ソフトフォークとは、旧バージョンでは有効だった部分が、新バージョンでは無効になるような変更のことです。

例えば、BTCにSegwitがソフトフォークで追加されましたが、新バージョンで作成されたSegwit transactionは旧バージョンから見ても有効です。ただし旧バージョンがそれを使用しようとしても、新バージョンから見るとそれは無効になります。1

ブロックチェーンの分岐(スプリット)とは

スプリットとは「複数の正統なチェーン」の存在

ブロックチェーンのスプリットというのは、複数の正統なチェーンが恒久的に生まれてしまうことです。

通常であれば、ビットコインでは複数の正統なチェーンが生まれることは稀です。また、一時的に生まれたとしてもすぐに一つのチェーンに収束します。

では、どういった場合に正統なブロックチェーンが同時に複数生まれるのでしょうか。

それは、それぞれのチェーンが互換性のないプロトコルで動いている場合です。

正統性がチェーンの長短で決まるのは同じプロトコル同士の時

ビットコインでは複数の正統なチェーンが一時的に生まれたとしてもすぐに一つのチェーンに収束します。なぜなら「複数のチェーンが存在する場合、長いチェーン(よりハッシュをつぎ込んだチェーン)を正統なチェーンとする」というシンプルなルール2が存在するからです。

しかし、実はこのルールは同じプロトコルで動くチェーン同士でしか成り立ちません。

例えば、イーサリアム(ETH)にも同じルールが存在します3。しかし、当たり前ですがETHとビットコイン(BTC)は、どちらも独立に正統なチェーンとして存在し続けています。それは、ETHのプロトコルとBTCのプロトコルに互換性がないからです。

ETHとBTCくらい全然違うものなら当たり前、と思うかもしれませんが、例えばBTCとBCHが分裂したときには差分はそこまで大きくありませんでした。むしろ9割のプロトコルは一緒だったと言っても良いでしょう。しかし、どこか一部でも互換性がないプロトコルに変わるのであれば、BTCとBCHのようにチェーンがスプリットして、それぞれが正統なチェーンとして存続する可能性があるのです。

ハッシュウォーとは

今回のハードフォークでは、ABCはもともと予定されていたハードフォークを実行し、SVはこれとは全く別にハードフォークを実行します。

ABCとSVのプロトコルは9割以上が同じですが、一部違うプロトコルということになります。以上のことから、かなり高い確率でBTCとBCHのようにチェーンがスプリットすると予想されます。

一般にハッシュウォーと言えば、上述したビットコインのルールに則り、ハッシュレートの大小でチェーンの正統性を争うことだと考えられます。

今回のハードフォーク騒動をハッシュウォーと捉える向きもありますが、以上の前提を踏まえればそれは適切ではない表現だと私は考えています。それぞれが異なるプロトコルである以上、どちらも正統なチェーンとして存続し続けることが可能であり、ハッシュパワーによりチェーンに正統性を与えるビットコインのルールが適用できないからです。

終わりに

本日はここまでです。

  • ハードフォーク / ソフトフォークとは
  • ブロックチェーンの分岐とは
  • ハッシュウォーとは

を解説しました。

明日以降で、残りの項目について解説していきたいと思います。


  1. 厳密にSegwitの仕様を知りたい方はBIP-141を読むといいです

  2. Bitcoinのホワイトペーパー を参照

  3. 厳密にはそのチェーンに注ぎ込まれたハッシュの量を計算する方法が少し違います