ビットコインの情報サイトの運営者ブログ

サイトには掲載していない仮想通貨に関する時事的な情報や個人的な感想など。中級者以上向け。

Segwit/フォーク問題の簡単なまとめと私見

もう何か月も前から盛り上がってるタイトルの話題。非常に多くの日本語記事がでているため、このブログでは完全スルーしようか迷いましたが、他に今月書ける記事のネタもなさそうなので今更な話も含めて書いていきます。

記事自体はなるべく網羅的に書きますが、すべて説明すると1記事には収まらないので概要/詳細・最新情報等、内容の理解には他のブログ・サイトも参照してもらえればと思います(取り上げる人が増えたのと同時に、雰囲気だけで書いていそうな怪しい記事も多く見られるようになりましたが・・・。)。

問題の背景:スケーラビリティ問題とsegwit

現在のビットコインは1ブロックのサイズに最大1MBという制限があるため、取引可能処理量に限界があり、送金データがすぐにブロックに取り込まれず、設定手数料が低いと送金完了に何日もかかってしまうことがある状況になっています。理論上の現在のビットコインの処理能力は7tps(取引/秒)であり、実際の処理能力はわずか最大2,3tps程度と言われています。

※理論上の数字はすべての取引データのサイズが最小であるという仮定。

このため、現在進行形で発生している送金完了の遅延も影響して、1MB制限を撤廃・引き上げをしようという動きがあります。ただし、この制限を撤廃するにはハードフォークというビットコインネットワークへの参加者への多大な負担やリスクを伴う方法が必要で、ブロックチェーン全体のサイズ上昇というデメリットも存在するため、気軽に行えるものではなくコミュニティが分裂しています。

そんな中出てきた一つの対応策で2016年の11月頃から採用プロセスがスタートしながらいまだに有効化されていないのがsegwitです。詳細は過去の記事参照。実際にはスケーラビリティ問題への対策が主目的ではなく、あくまでも副次的効果とも言えるものですが、segwitにより実質的に2MBまでブロックサイズが上昇することになります。

segwitの有効化にはそもそもマイナーの95%が準備完了のシグナルを出す必要がありますが、今日にいたるまで最大でも5,60%程度しかないので、未だに有効化されていません。segwitに反対する理由には、マイナーの手数料収入も含めたsegwitの技術そのものに対する反対、開発者・開発者グループに対する政治的反対、ブロックサイズ制限上昇要求のための取引材料、ASICBOOSTなどの陰謀論がかった話も含めて様々な情報が出てきており、はっきり言って正確なことは分かりません。

いずれにしてもsegwitがなかなか有効化されないことから、ブロックサイズ制限の上昇も含めてコミュニティの様々な方面からいろいろな動きが今年に入って出てくるようになりました。

BIP91(Segwit2x)

採用プロセスを現行のBIP9(閾値95%)そのままではなく、80%まで閾値を下げてオリジナルのSegwit(BIP141)を実装しようという提案がBIP91です。時系列的には最新の動きで、多くのビットコイン企業が5月23日に賛同を示した協定であるsegwit2xがこのBIP91を利用することから話題に上がるようになりました。segwit2xには前半の「segwit」部分であるBIP91とは全く別に、後半の「2x」でsegwitの有効化の半年以内にブロックサイズを2MBに引き上げるハードフォークを実施する協定が含まれています(あくまで政治的協定というだけで、BIP91と2MBハードフォークの間に技術的な関連性は全くありません)。

segwit2xの賛同者には非常に多くのビットコイン関連の大企業が含まれていますが、開発体制、従来のビットコインの参照クライアントと比較してコードのレビュー・テスト期間が非常に短いことや、2MBハードフォークに対する反対論からコア開発コミュニティの賛同者は皆無でその他ユーザーからも賛同を得られているとは全く言えない状況となっています。

BIP91の仕様は、336ブロック(2,3日)のうちの80%がブロックの中のversionbitsという欄のbit4にシグナルを出した後、bit1(BIP9によるsegwit採用プロセス)にシグナルを出していないブロックを拒絶するというもので、BIP91チェーンとして100%(つまりBIP9の閾値95%以上)のシグナルを達成することでsegwitを有効化しようとするものです。

昨日あたりから既にbit4へのシグナルを出すマイナーが多数出てきており、もう1週間以内ないし少なくとも今月内にはBIP91が発動してsegwitが有効化される可能性が最も高くなってきました。コミュニティでは8月1日というワードがやたら強調されていますが、このBIP91はUASF(BIP148)の仕様と本質的には変わらないものであり、BIP91が発動すれば7月中にも断続的にBIP148によるものと同様のブロックチェーンの再構成(reorg)が発生する可能性があるので、少なくとも送金完了とみなすまで1確認だけではなく6確認程度待つなどの対応をおすすめします。

とはいえ、BIP91は80%のハッシュレートという点が「保証」されているので、BIP148で考えられる混乱の可能性よりはずっと小さいものです。ただし、bit4へのシグナルを出すのは簡単で、シグナルを出しているマイナーが実際に「BIP91発動時に非segwitブロックを拒否するソフト(segwit2xまたはCoreにBIP91を導入したパッチ)」を導入しているかはわからず、80%のハッシュレートは偽で実際は50%以下しかBIP91を適用していませんでした、なんてこともあり得るので実際にその時になってみないとはっきりとしたことは言えません。

また、BIP91はわずか336ブロックという非常に短い期間であるため、ハッシュレートの偏りがある可能性があり、10000ブロックぐらい平均すると60%ぐらいのハッシュレートしかないのに、336ブロックでは80%を超えてしまった・・・となるリスクもあります。

その他テスト期間があまりにも短いためバグ等が発生せず本当にちゃんと動くの?といった不安も囁かれています。

BIP148(UASF)

時系列的には最初で、shaolinfryという匿名の人が提案し、一部の開発者やユーザーが支持しているのがBIP148です。数か月経ってもsegwitのシグナル率が全く上昇しないことから、特定の日にbit1にシグナルを出していないブロックはマイナーのハッシュレートに関係なく拒絶してしまおうというもので、その日が8月1日に設定されています。根本の仕組みとしては、BIP91から80%の閾値を取り除いたものとも言えます。

特定の日にソフトフォークを実行する方式(flag-day activation)は初期のビットコインでも実施されていたもので、「UASFは元々のビットコインのフォーク方式だ」と主張する人もいますが、BIP148は単純なUASFではなく非bit1シグナルのブロックを拒絶するという過激な仕様を含んでいるため、正確には全く同一とは言えません。

BIP148は必ずしもハッシュレートによらない代わりに、economic majorityと呼ばれる取引所・決済サービス・ウォレットなどの経済的に重要なノードの大多数の賛成が安全な実行には必要不可欠であり、支援者と思われる人が作成したUASFのサイトでもそうでない限りはBIP148のノードを止めるように推奨しています。ただし、segwit2xの発表によりeconomic majorityからの支持を得る可能性は絶望的となった状況下でもBIP148の支持者は強行する姿勢を崩しておらず、BIP148が発動した場合は、一時的にしてもブロックチェーンの分岐が発生する危険性がかなり高くなっています。

BIP91が失敗に終わり、BIP148が発動するような状況になった場合は、上のようなリスクに加え次の次で書くBitcoin ABCによるハードフォークの可能性、さらにはそれによるBIP148チェーンのPoWアルゴリズム変更のハードフォークなど、もはや訳の分からない複雑な話も出てきています。

なお、UASF(User Activated Soft Fork)という言葉の下に「ユーザーこそが正義」というユーザーにとってはある種惹かれやすいBIP148支持の運動がRedditやtwitterなどで一部広がっていますが、主要なCore開発者たちの多くは冷静な見方をしており、ネットワークの混乱の可能性が高く危険な提案であることから、メーリングリストではBIP148を支持しないという意見(gmaxwellsdaftuar)を表明しているほか、開発チームのIRCの定例ミーティングでもeconomic majorityの支持がない限りは支持しないという意見が大勢を占めていて、強行派のluke-jrが議論では孤立していました。

BIP149(UASF)

BIP148の支持者の中にはsegwitを有効化させるにはBIP148しかない!とずっと主張している人も多く見られましたが、代替案となる第二のUASFとも言えるのがBIP149です。3ヶ月ぐらい前にも本ブログではBIP149の方法が最も安全で可能性も高い(残念ながら可能性はかなり低くなってしまいました)と書いており、個人的には最も良いと思う提案です。

BIP149では、現在のBIP9によるsegwitの採用プロセスが切れる11月以降に再度採用プロセスを実施し、その間に95%の閾値を超えない限りはハッシュレートに関係なく特定の日付でsegwitを有効化しようとするものです。BIP148とは違い、非bit1シグナルのブロックを拒絶する仕様は含まれていないので、ネットワークの分裂が発生する可能性が低いと考えられます。

コードを書いたりレビュー・テストの期間も含めると、BIP149が発動しsegwitが有効化されるのは実質的に来年末あるいは2年後になってしまう可能性もありますが、それでも構わないと思っています(コア開発者でBIP148支持のluke-jrは現在2018/7/4に有効化が設定されているBIP149は期間が短すぎて逆に危険と指摘していますが、まだあくまでも提案段階なので、必要であれば期間を変更して長くとれば問題ないと思います。)。

Bitcoin ABC(UAHF)

BIP148を阻止するとしてマイニング企業のBitmain主導?で立ち上げられたのがBitcoin ABCです。ただし、Bitmainはsegwit2xにも賛同しており、BIP91が失敗しBIP148が発動した場合のみ8月1日に立ち上げるとされています。

ABCの略語はAdjustable Blocksize Cap、つまり調整可能なブロックサイズ上限ということで、可変的なブロックサイズを実現するBitcoin Unlimitedの流れを汲んでいます。当然変更はハードフォークとなり、さらにSegwitは一切採用しないという特徴もあります。

segwitを支持するsegwit2xにも賛成しているBitmainは、完全に矛盾しており理由が謎ですし、ASICBOOSTがsegwit反対の根拠だと考えている人はcovert ASICBOOST非対応のsegwit2x(BIP91→BIP141)を賛成するはずがないという考えの下、実は直前までsegwit2xに賛成している振りをしていて最終的には反対に寝返ってBIP148を発動させてBitcoin ABCによるハードフォークを8月1日に実行するのでは?という話も出ています。

素直に現在の状況を読み取れば、BIP91が成功して8月1日には何も起こらないということになるのですが、最新ではBitcoin CashというBitcoin ABCと同様の8月1日ハードフォークの動きが出てきており、BIP91がどうなろうとその時になるまでどうなるか断言できなくなってしまっています。

追記:Bitcoin Cashはreplay protection付きの平和的ハードフォーク?情報が出たばっかりで詳細は全然調べられていないので、ここらへんの最新のことは他のサイト・ブログにお任せします。

ユーザーはどうすればいい?

この話もいろんなサイト・ブログで書かれていますが、重要なので改めて。ハードフォークが起きてもブロックチェーンの再構成(reorg)が起きる状況になっても、とりあえずユーザーとしては送金を控えたり、いつもより確認数を長くとることなどが重要です。実際にいつまで控えるかとかどうしても送金したい場合はどうすればいいかとかは、その時になってみないとわからないので、情報を集めてくださいとしか言えません。

保管場所は、ハードウェアウォレットを推している記事をやたら多く見ますが、取引所以外の秘密鍵を保管しているウォレットであれば、フォークによるリスクは全く変わりません(正確に言えばウォレットソフトごとの仕様や接続先のノードによって変わってきますが、実際にフォークが発生してみないと具体的にどのウォレットが良いとかいうのは難しいです。送金非推奨のウォレットでも秘密鍵ないしパスフレーズがあれば他の対応ウォレットから送金できます。)。

強いて言えばフルノードであれば、混乱時でも使いやすいメリットはありますが、小銭・普段使い用に保管しているモバイルウォレットのBTCをわざわざハードウェアウォレットに移す意味は少ないと思われます。

取引所もハードフォーク時に一方のコインしか受け取れないリスクがあることを十分理解していれば、個人の価値観に基づいて信用してそのままでもいいと思います(複数チェーンのコインに価値が付いた場合、全く配ってくれないという可能性は正直そこまで高くないとは思いますが、配布に時間がかかり他の取引所でハードフォークコインを売るためになかなか送金できない・・・という可能性は十分あり得ると思います。)。

まとめなど

ということでまだまだ混乱の可能性は十分残されていますが、現状を素直に受け取るとBIP91が成功し、何事もなく8月が過ぎ、議論は数か月後に予定されている2MBハードフォークに移っていきそうな雰囲気となっています。

総合して個人的には、強行姿勢を見せるBIP148も拙速なスケジュールでsegwit有効化とハードフォークを目指すsegwit2xも、どちらも我慢や忍耐が足りていないと感じています。Bitcoin ABC系はアルトコインもびっくりの急ごしらえハードフォークスケジュールで、正直理解できません。

まず、segwitでは有効化されれば開発者も含めてCore側からは実質的にブロックサイズが2MBに上昇するという意見がありますが、それには新しいsegwitアドレス形式をユーザーが使う必要があり、フルに2MBを利用するには全送金がsegwitアドレスを利用していなければなりません。短期的に見れば2MBには程遠く達せずあまりスケーリング的には影響はない可能性は十分にあり、2MBに拡張したところで効果がどれだけあるか疑問な上、現状lightning networkも後はsegwitさえ実装すれば後はフル稼働できるといったものではまだないはずなので、ネットワークの混乱を許容してまで急いでsegwitを導入する必要がどこまであるのか分かりません。

2MBハードフォークに関しては目の前に迫ったときに改めて書こうかと思いますが、スケジュールが短すぎるのに加えて、半年以内に2MBという結論に至った根拠が見えず、とりあえず雰囲気でなんとなく決めてしまったようにしか思えません。

そもそも論として、少なくとも現状のビットコインは高いボラティリティ、確認まで最低約10分、一般ユーザーの知識不足と相まって既存の通貨と比較した高い盗難・紛失リスクなど、投機以外の一般ユーザーの利用としては送金遅延や手数料問題が解決したとしても全く準備が整っていないように思われます。企業側がビットコインの普及を推し進めたりユーザー離れを防ぐために、送金遅延の解消のためのブロックサイズ上限上昇のインセンティブを働かせるのは理解できますが、少なくともLightning Networkなどのオフチェーンネットワークの環境が整うまで待ったほうがいいのではないでしょうか。ネットワークの混乱を引き起こすリスクが高いことをやってまで一時しのぎの対策をやる必要がどこまであるのか疑問に思います。

ビットコインは特定の企業が開発しているものではなく開発者に給料も支払われずボランティアで開発されているがゆえに、いろいろとスピードが遅いこともあり、合意形成が困難でこれほどまでのコミュニティの分裂が発生しています。完全な非中央集権は絵に描いた餅であり、分散型のデメリットは多く存在するものの、しかし、別の面からみればそれが一番のビットコインの強みとも考えられます。

一部のベンチャーキャピタルやマイニング企業主導の迅速な開発・決断ができるコインはそれはそれでいいと思いますが、それでもビットコインをそのように扱うのは非常にもったいなく、そうすることにより数多ある単なるアルトコインの一つにビットコインの地位が下がってしまうとしか思えません。実は個人的な経済的思想としては自分はアンチビットコインの立場になるのですが、開発コミュニティの重要性とか分散型とは何かとかビットコインの価値とはとか経済や哲学の話はまたいつか別の機会に。