BitcoinCashの2018年ハードフォークまでの経緯をまとめてみた

2018-11-27

BitcoinCash(以下、BCH)は 2017/08/01 にBitcoin(以下、BTC)からハードフォークにより誕生し、その15ヶ月後の2018/11/15 にBitcoinABCとBitcoinSVによってさらに分裂した。

僕は初めて暗号通貨を購入したのが2017/10/18 で、それから一ヶ月後くらい、ちょうど1年前ぐらいに暗号通貨に興味が出て色々調べ始めた。

その時にこんな記事を書いていた…らしいw

なので、BCHができた頃はまだ暗号通貨なんか知らなくて、1年間市場をみてきて色々な情報を調べた結果を、超個人的な観点だけどBCHがなんで今みたいな状況になっているのかをまとめておく。

BTCのスケーリング問題とBCHの誕生

BCHの現状を理解するのであれば、BCHが誕生した2017年…よりもさらに前、BTCが誕生したところまで遡らなければならなかった。

BTCが誕生した時はブロックサイズの制限はなかった

当初、BTCにはサイズの制限がされていなかった。2010年にSatoshiによってこっそりと1MBの制限が付けられた。ソースコードの変更にはコメントがなく、理由は明かされていないようだが、かつてSatoshiは以下のようなことを言っていたため、DoS攻撃への対策をしたのではないかと言われている。

「私はP2PネットワークやウェブサイトのほとんどがDoS攻撃に無防備であると思っている。現実的にできる事は最悪の場合に対して制限をかけること。」

とそんなような事が、以下のRedditで theymos というユーザが語っている。

Citation needed: Satoshi’s reason for blocksize limit implementation.

このユーザの発言が全て正しいとは思っていないが、大量に情報出してもまとまらないので、とりあえずこの発言を軸にしていく。

ブロックサイズの制限をすぐに外さない理由は?

もともと制限が入っていない状態で動いていて、2010年当時のネットワーク状況の懸念からつけられたのであれば、その制限を外すか現状に合わせて制限をゆるめればいいじゃない。

と、思うんだけど、上記のReddit内で theymos というユーザはこう続けている。

私とおそらくSatoshiの主な誤解は次のとおりです。

  • 誰もプールマイニングを予期していなかったので、すべてのマイナーはフルノードを所有しており、フルノードを所有しているという事はマイナーであると考えていた。
  • あまりにも多くのマイニングの集中化を引き起こすASICの登場は予期していなかった。
  • SPVは思ったよりも弱い。現実には、Bitcoin経済の大部分がフルノードを走らせる事なく、マイナーはネットワークのルールを破るために結託するインセンティブがある。
  • 私が説明したように、そしてSatoshiが意図していたいくつかのパラグラフを取る経済的な理由は、実際の手数料市場では機能しません。

続く議論で、現在(2015年当時)のハードウェアの性能であればブロックサイズは引き上げても処理が可能だろうという意見。また、ブロックサイズの制限を入れた2010年当時の1ブロックあたりに含まれていたトランザクションの合計サイズは平均が0.02MBで、1MBのブロックサイズは50倍近い制限だったが、2015年当時では0.5MBまで膨らんでいて、2倍程度の余裕しかないという意見がある。

これに対してブロックサイズの引き上げが簡単には行えないと考える理由を以下のように説明している。

  • 建設的なノードとなるには8人以上の peer と接続する必要がある
  • ブロックサイズが8MBだったとして (8 MB * 8 bits * 7 peers) / 30秒 = 15 Mbit/s 
  • P2Pで最低でも7peer に15Mbit/sでのデータ転送は現実的ではない
  • これ以外にも問題はある。部分的には技術で解決はできるが現時点では存在していない。

30秒という基準はマイナー同士が、10分間隔のマイニング作業への参加が公平に行える基準だと思う。これよりも時間がかかると、ブロックを採掘したマイナーに偏っていく(有利になる)という予測だろう。

「普通の家庭で使用している光回線なら15Mbit/sぐらい余裕では?」と思うかもしれないが、P2Pの場合は相手側の環境にも影響される。よくある回線速度を計測するようなツールは、ちゃんとしたサーバとのやりとりなので、光回線なら簡単に50Mbit/sぐらいは出せるが、P2Pで自分と接続しているpeerに対して速度が出せるかは微妙。通常の光回線の家庭では日本国内同士で1M〜10Mbit/sぐらいだと思う。また、7peerは最低限の見積もりであり、現実には制限しなければ20〜30は接続される。

まあ、これは1人の技術者の意見であり、全体の意見ではない。マイニング事業をしている業者はそれなりの回線速度は持っているだろう。僕もフルノード を作っているが、そういう個人で作っちゃっているようなノードとは接続せずに、マイナー同士でのみ繋がることは2015年当時も今もできる。ただ、それはそれで一部のマイナーで結託しやすいという懸念も生まれる。

当然、同じような技術者からの反論もある。Gavin Andresenという元Bitcoinの開発者が書いたもの。

Time to roll out bigger blocks

要約すると「テクノロジーは進歩しているんだからそんなに影響ないだろう」という感じ。

開発者以外のマイナーやユーザはどうだったの?

一方で、Bitcoinを決済や送金目的で利用するユーザや、マイナーの立場からするとこんな意見がある。(まとまったソースないので僕の記憶ベースです。間違っていたらすみません。)

  • 送金の手数料が平均1000円は高い(今はそうでもないけど)
  • 送金に時間がかかりすぎる(6conf待つとだいたい1時間)
  • フルノードはマイニングプールが持っていれば十分。利用する人達はマイニングプールのフルノードに接続すればいい。
  • 実際に事業として費用をかけてハッシュパワーをかけているのはマイナーなのだからマイナーの意見を尊重するべき
  • 今のBitcoin(Core)はSatoshiの論文から逸脱している

他にも色々あったと思うけど、こんな感じだったと思う。そしてこれも企業相手にシステム開発した経験があればよくあるやつ。

スモールブロック派とビックブロック派それぞれの主張

色々と意見が入り乱れていたので、僕の理解している部分のみを記述すると

スモールブロック派

  • 現在のブロックサイズを引き上げるのは、技術的には難しくないが様々な影響が考えられるため危険
  • 今のチェーンはそのままの運用で、チェーンの外(オフチェーン)でスケールの問題を解決するならBitcoin自体に影響がないので良い

ビッグブロック派

  • BTCはそれ自体が通貨であり、署名部分の分離(segwit)といった通貨としての機能を削るのは邪道である。
  • Satoshiは今後のテクノロジーの進化に合わせてブロックサイズを拡張すればいいと言っている。(ソースはこれこれかな?)
  • ブロックサイズを引き上げることで発生する懸念は試してみないとわからない。(どんどんアップデートすべき)

僕は途中から経緯を知った立場だけど、どっちの意見もわかるかな。

個人的にはスモールブロック寄りだけど、ビックブロックも捨てがたい。捨てがたいというか、試してみたい気にはなる。まあ、だから揉めるんだろうけど…

そこそこ開発・運用の経験を詰んでしまうと最悪の事態を想定してしまうので、一時的とはいえ致命的な問題が起こり解決するまでの間に、後戻りできない状況が発生する可能性があるなら、回避したいと考えてしまう。僕が想像している後戻りできない状況というのは、BTCのチェーン自体だけでなく、それを取り巻く経済に関わっている人達も含めたもの。

ただ、一方で変化を恐れて萎縮し古い技術のまま埋もれてしまうリスクもある。そういう意味では失敗を恐れずチャレンジして、目の前の問題を解決して、新たな問題が発生するならその都度、解決していけばいい。というのもある。

そんな風に見ると、日々成長し続け規模が大きくなり続けているBTCのエコシステム全体をリスクに晒すよりも、ハードフォークによりBTCに影響が及ばない(BTCと比較したら)小規模な経済圏を新たに創り、そこで試して行くという流れも全体で見ればスケールアウトとして、自然だと思う。

後からみた人間からするとそんな感想だけど、実際のBTCのスケーリング問題は、政治的な行動やFUDが多かったみたいだし、物理的な活動(?)としてUASF帽子NO2X帽子というのが産み出されたりしている(笑)

そして複数のBitcoinクライアントがリリースされる

BCH自体は2017/8/1にBitcoinABCリリースによるハードフォークで誕生したけど、急にできたわけじゃくて上記に書いたような議論とそれに伴って、もともとのBitcoinCoreとは別のアプリケーションが2015年ごろからリリースされ始めた。

BitcoinXTのリリース

2015/06/22に BIP101 が提案された。これは2016年にブロックサイズを8MBに引き上げ、その後は約2年経過するごとにブロックサイズを倍にしていくという提案。

この内容をもとにしたクライアントである BitcoinXT (GitHub)がリリースされ、マイナーへアップデートが促された。Bitcoinのコミュニティが分裂して新バージョンがリリースされたのはBitcoinXTが史上初めてだったらしい。2018年時点では、BitcoinXTはBCHクライアントの一つになっている。

ただ、現在のBitcoinXTのページを見ると、「BIP100を実装している」と記載されているので、もともとのBitcoinXTとは別物なのかもしれない。BIP100はブロックが2016個(難易度調整のブロック数)採掘されるごとに動的にブロックサイズを変更する提案であり、ブロックサイズの決定はマイナーによる投票によって調整するという内容。

BitcoinUnlimitedのリリース

BitcoinXTに続いて2015/12/19に BitcoinUnlimitedGitHub)がリリースされた。BitcoinUnlimited も2018年時点では、BCHのクライアントの一つになっている。

BitcoinClassicのリリース

BitcoinUnlimitedに続いて2016/02/10に BitcoinClassic (GitHub)がリリースされた。が、BitcoinClassic については2017/11/10に予定していたハードフォーク(segwit2x)で支持が得られなかったことと、その時点ですでにブロックサイズを引き上げたBCHがハードフォークにより存在していたことから、「自らの目標はBCHで達成された」ということで、開発を停止している。

その一方で、BitcoinCoreでは…

BitcoinCoreはBTCのブロックサイズに関する議論のFAQを出している。 
Bitcoin Capacity Increases FAQ

FAQに記載されているのは概ね今まで記載したことと変わらない。開発者の立場から慎重にことを進めたい意思が記載されている。

そして2016/10/26に、BIP141(segwit)が含まれたBitcoinCore 0.13.1がリリースされた。このBIP141(segwit)によってそれまではトランザクションに含まれた「署名」が分離されトランザクションに含まれなくなるため、1トランザクションあたりのサイズが従来の半分程度に圧縮されるため、1ブロックに入るトランザクション量が増えた上で、トランザクションのサイズに応じて支払う手数料も減ることになる。(segwitについては、理論的なことは理解しているが実際にどうなっているかは自分で検証していないので、間違いあるかも)

そして上記のリリースのアクティベート方式には、BIP9というソフトフォークの方式が取られており、リリースされてもすぐに全員がアップデートしないといけないわけではなく、アクティベート(有効化)されるまで猶予期間が設けられている。期間といっても「○日になったらアクティベート」というのではなく、「アップデートを済ませた」というシグナルを “95%” のブロックが発して初めてアクティベートするというもの。

そもそも分散型のシステムなので、ネットワーク全体がアップデートされなければ完全にアップデートされたとは見なせないが、そんなのは(ヾノ・∀・`)ムリムリ
なので、既にクライアントをアップデート済みの人達もすぐには新機能は使えない。この状態から、新しい機能が使えるようになるのが「アクティベート」したという状態。

ただ、このソフトフォークは残念なことに、すぐにはアクティベートされなかった。これに反対するマイナーがアップデートを実施しなかったためで…んー、まあ、それから色々あって9ヶ月後の 2017/7/22 にアクティベートされることが確実となり、実際にアクティベートされたのは 2017/8/24 ブロック番号 #481824 だった。

BitcoinABCがリリースされハードフォークによりBTCからBCHがチェーン分岐

色々と議論が重ねられたけれども、全員一致のコンセンサスは得られず、BIP141(segwit)のアクティベートが確実視され始めた頃に、 BitcoinXT や BitcoinUnlimited などの技術者と、Roger Ver(ロジャー・バー)、Jihan Wu(ジハン・ウー)の支持を得て、BitcoinABC(Bitcoin が開発され 2017/8/1 に BTC からハードフォークによりBCHが誕生する。

この時のハードフォークでは、BCHがリプレイプロテクションを組み込んでいたため、同一チェーン内での分岐ではなく、ブロック番号 #478558 を起点にBTCとは別チェーンとしてBCHが誕生した。(BCH最初のブロックは #478559 )

細かいことを省略すると大体こんな感じ

BTCとBCHの違いは?

どちらも結局は、”Bitcoin: A Peer-to-Peer Electronic Cash System” をもとにしていることに違いはない。

現状では、

Bitcoin(BTC)と呼ばれているもの
BitcoinCoreの開発したクライアントで運用されているもの

BitcoinCash(BCH)と呼ばれているもの
BitcoinABC、BitcoinXT、BitcoinUnlimitedなど複数のクライアントで運用されているもの

ではあるものの、どちらもBitcoin。違うのは目指している思想の違いで、現状では 、”スモールブロック”のままスケールアウトさせるか 、”ビックブロック”を伴ってスケールアウトさせるかの違い。

そしてこれは僕の勝手な解釈だけど、

“スモールブロック”のままスケールアウトさせるというのは、ブロックサイズが固定のまま今後の半減期を迎えるため、将来的には今現在の大規模なマイニング事業をスケールダウンさせることに繋がる反面、マイニング作業がより小規模で一般的になって分散化が進んで行くんじゃないかと思う。

“ビックブロック”を伴ったスケールアウトは、ブロックサイズの増加により手数料収入が見込めるため、現在のマイニング事業は変化するものの継続され、更に周辺技術を盛り上げることで取引の活性化をはかり、技術者、マイナー、ユーザによるエコシステムが出来るんじゃないかと思う。

どちらにしろ未来のことはわからないし、必ずしもPoWで成功するのがBTCとBCHだけだとも思えない。BitcoinGoldだってまだまだ動いているし、LitecoinやMonaCoinなんかが盛り上がるかもしれない。もしかしたらBitcoinCoreが致命的なバグを発生させて、Bitcoinが使い物にならない状態になってしまうかもしれない。

BCHのコミュニティ内で意見が相違

ということで、BTCとBCHは別々の道を歩むことになったんだけど、それから15ヶ月後の2018/11/15のハードフォークで更に分岐することになった。

BCHはクライアントソフトのアップデートが必要だと判断された場合は積極的にハードフォークを行う方針で、2018/11/15よりも前に2017/11/15と2018/5/15の2度ハードフォークをしている。過去2回のハードフォークは、コンセンサスが取れていたため、全体的にバージョンアップが行われチェーン分岐は起こらなかった。

ただ、今回(2018/11/15)のハードフォークでは残念ながらコミュニティ内での意見の不一致により、BCHABCとBCHSVへの分岐が発生した。

実際にアップデートのアナウンスまでどんな議論があったかは知らないけど、2018/11/15のハードフォークに向けて 2018/8/16 に nChain からBitcoinSVクライアントの開発とリリースのアナウンスがあった。

Bitcoin SV Full Node Implementation Launched to Fully Restore Original Bitcoin Protocol

続いてBitcoinABCからver0.18.0リリースのアナウンスがあった。BitcoinABCのアナウンスが後だったと言っても、BitcoinABCはもともとロードマップを公開しているので、予定通りのアップデートですね。

Announcing Bitcoin ABC 0.18.0

細かい内容はリンク先を見てもらうとして大体の両陣営の主張は次のような感じ。

BitcoinSVの方針

  • Bitcoinプロトコルに手を加えるのは不要であり元に戻すべきである
  • その上でテラバイトブロックまでオンチェーンスケーリングを目標とする

BitcoinABCの方針

  • ブロックサイズ拡大を基本方針とし、ブロックサイズ拡大に耐えられるようにネットワーク周りの改善も行っていく
  • 将来的にはブロック生成時間も短くする(1分、2分で生成など)

※BitcoinABCとしてしまったけど、BitcoinUnlimitedなどのBitcoinSV “以外の”クライアントは同じ方針です。この後のBitcoinABCと書いたものも同様。

こんなところだと思う。BitcoinCoreとの違いは、BitcoinCoreは現時点のチェーンやブロックには積極的な変更は加えず、2ndレイヤーなどのオフチェーンによるスケールアウトを進めているという違いがある。

今回はブロックサイズ拡張しチェーン上でスケーリング(on chainスケーリング)していくことで意見が一致していた陣営が、より詳細なアプローチで意見が相違した。BitcoinSVの方が元々のSatoshiがホワイトペーパーに記載したプロトコルには一切手を加えず、逆にこれまで必要に応じて施した制限を元に戻し原点回帰によりスケールアウトをしようというもの。

僕の中では、それぞれの違いを下のような形でイメージしている。

BitcoinCoreBitcoinABCBitcoinSV
on chainスケーリング
off chainスケーリング
Bitcoinプログラムの変更原点回帰

一応、BitcoinCoreもブロックサイズの拡張を全く考えていない訳ではないと思う。先日行われた Scaling Bitcoin 2018 “Kaizen”Forward Blocks という一発切替ではないハードフォークの提案もあったので、安全に実施可能なのであればハードフォークも検討対象とするだろうし、必要であればブロックサイズの拡張も行う可能性はある。(拡張予定はないです)

そして2018/11/15のハードフォークで更にチェーン分岐した

外野からしたら「どっちでもいいじゃない」と思える内容でも、当事者からしたら重大なことであり、意見が相違してしまえば別々の道を歩むのはしょうがないこと。

ということで、nChain開発のBitcoinSVと、それ以外のBitcoinABCに代表されるBCHクライアントは、お互い別々の仕様を盛り込み2018/11/15にチェーン分岐が発生した。ブロック番号 #556766 が最終的な共通ブロックで、 #556767以降は BitcoinABC と BitcoinSV で別々のチェーンになっている。

ただ、今回は2017年にBTCからBCHが分岐した時と違って、リプレイプロテクションがどちらのクライアントにも付いていない。その上、一部では「hash war」と言われていたように、どちらが正統なチェーンかを分岐後にどれだけのhashを注ぎ込んだかで決めるようなことをしている。(いた?)

これの何が問題かというと、今の現状が長引くとBCHを使ってトレードをするユーザや、決済手段として利用したいユーザにとっては、送金することができない状態が続いてしまう。正確には、送金はしたければできるんだけど、何も対策していない場合は、どちらのチェーンもコインが送金されてしまう。

「僕はABCしか今後も利用しないから問題ない」というのはそれはそうで、ABCの送金に対応したウォレットやSVに対応したウォレットへの送金は可能なので自由に送金すればいい。ただ、取引所はコインが消失するリスクがあるので、ほぼ入出金には対応しないんじゃないかな。(BitcoinABCに決め打ちで入金に対応している取引所は出てきているが、送金するとBitcoinSVのコインは消失ですね)

CoinDanceなんかでは今でも両方のチェーンを並べているけど、長引けば長引くほど、ただ消耗するだけの結果が残りそう…

個人的にはBitcoinSVのやろうとしている、「Bitcoinのプログラムはそのままで、ブロックサイズを際限なく引き上げる」というのが、どういう結果を産むのかが興味あるので定期的に見ているよ!

正直な感想で言えば「今のペースだとBitcoinSVは絶対失敗する」なんだけど、それを乗り越えることができるのだとしたら、どういう方法で乗り越えていくんだろうというのは、注目に値するよ。

ハッシュ戦争の集結

2018年11月26日にCoinGeekから下記のツイートがあった。

要約すると「Bitcoin は Bitcoin SV(BSV)となって復活:BCHハッシュ戦争の集結」というような題名で、記事に書いてあるのは以下のような内容。

ABCは直前で大量のハッシュレートをレンタルしたり、チェックポイントの追加といった純粋なハッシュレートによる合意を放棄した。現在のABC(BCHのこと)はsegwitコイン(BTCのこと)よりもアルトコインで有り、もはやそのようなティッカーに興味はなく、Bitcoin SVが本来のBitcoinです。Bitcoin SVはすでに活気のあるエコシステムが構築されており、我々はチェーン戦ではなく競合する市場としてBCHと戦えるのを楽しみにしている。

ということで、BCHSV側がリプレイプロテクションを付ける方針を取るみたいです。

というか、CoinGeekも明らかに直前にハッシュレートを急激に増やしていたのに、よく言えるとは思ったw

「ハッシュ戦争だー」とか騒ぐ前までは大体 800PH/s だったのが…


ハードフォークの直前には 1,800PH/sまで急激に増やしている。別にこれがダメとは思わないけど、自分を棚に上げて相手を責めるのはどうなのかと思う。

ハッシュで競争することの意味

今回のBCHはABCとSVでコンセンサスが相違したことによって、どちらがより正しいかをSV側からの一方的な提案とはいえ、ハッシュによりチェーンが長い方を正とすることで始まった。

確かに、ホワイトペーパーには「CPUパワーによる投票で、有効ブロックの拡張に取り組み、無効ブロックを拒否することによって、有効ブロックの受け入れを表明します」と記載がある。ただこれは、複数のコンセンサスの違いによる政治的な投票行為ではなく、悪意のある第3者がチェーンを乗っ取ろうとした時に何が正しいかを決定することを指していると思う。

なので、お互いの主張が対立しているような場面では、素直にチェーンを分岐してそれぞれの正しさを競う方が正解なのだと思うし、どこまでいっても平行線を辿るので、ハッシュ戦争といって仕掛けることの意味は市場を混乱と弱体化させるだけの意味しかないのかもしれない。

SV陣営が何故ハッシュ戦争にこだわったのか?

これは想像でしかないけど、nChain は既存の金融機関と提携している。また、Bitcoinは300GBまでブロックサイズを拡張できるというシミュレーションを行った論文を発表している。そして、今回はテラバイトブロック(10分ごとに追加)で40億のビットコイン取引(1秒に700万取引)を可能にするような計画をしている。

目指している方向としては、既存の送金の仕組み(VISAやPayPal)の置き換えなのかなと思う。論文を見てもらえばわかる通り、確かにシミュレーションでは300GBの伝播が可能だが、おそらくそのシミュレーション通りの機材や環境を整えることができるのは、巨大な資本を持った事業団体になると思う。

元々のBitcoinが持っていた分散型の思想では、個人だろうが企業だろうが巨大資本だろうが、(効率性を考えなければ)ノードを建ててマイニングするのも、ネットワークから離れるのも自由であり、健全なネットワークが構築されているのであれば、特定の第三者(中央銀行のような)は必要ない。

ただ、BCHSVの目指している方向性は、そうとは明示していないものの、理想としている設備を用意できるだけの巨大資本を持っていることが前提となり、そういった資本家が納得できるだけの材料がないと困る。

となると、2018年に入ってから相次ぐハッキングによって、各国の規制による締め付けが強くなった状態では、素直にハードフォークをして分裂してもそういった資本家がいる国の取引所に上場できるかはわからない。

であれば、ハッシュ戦争を仕掛けてティッカーをゲットするか、ゲットできなくても話題を提供することで、認知が広まり一定以上の価格がつけば何らかの対応をしなければならない状況に持っていけるという考えなのかなと思う。

まあ、上手くいったんじゃないかな(笑)巨大資本に頼ってスケーリングする方向を目指すのも悪くないと思います。その方が今の経済では合理性は高いからね。

勝手な想像だけど。

結局のところBTC、BCHABC、BCHSVはどれが進化しているのか?

今になって思い出したが、この記事書き始めたのはこれを考えたかったからだった。

BCHができた頃から「ホワイトペーパーには○○と書かれている」とか、「その機能の実装はSatoshiの提唱した考えから逸脱している」というのをよく聞くのだけど、そのホワイトペーパーってもう10年近く前のテクノロジーを元に、未来を予測して書かれたものなんだよね。

日本の年金システムだって発案された当時は「このまま人口が増加し続ければ…」みたいな予測を元に作られていて、今はそれを愚直に守って延命しようとして「少子化が問題だ」ってなっているけど、本来は途中で少子化が目に見えた時点で仕組みの見直しが必要だった。

そういう視点で見ると、「ホワイトペーパーに記述された元の状態に戻すのだ!」と言っているのが進化しているのか?退化しているのか?正直わからない。むしろ退化しているんじゃないかと思わないこともない。

ただ、年金システムみたいに1つの世界線しか選べないのと比べると、BTC、BCHABC、BCHSVそれぞれがパラレルで平行世界を試せるというのは面白いところだと思う。どれが上手くいくかはわからないし、全部のチェーンがそれぞれの領域で成功するかもしれないけど、楽しみではあるね(。・ω・)ノ゙