LINEで送る
Pocket

bitcoin-ko

前編ではビットコインが抱える二つの脆弱性とSegWitの概要、ソフトフォークによる実装の試みなど説明した。後編となる本記事ではビットコインコミュニティならびにビットコインネットワークの分裂の危機を乗り越えて、SegWitがアクティベートされるまでの道のりを紹介する。

2015年12月、二回目のビットコインスケーリング会合が香港にて開かれた。Pieter WuilleによるSegWitのプレゼンが行われ聴衆には概ね歓迎された。会合後、Gregory Maxwellによってロードマップが提案され、SegWitは正式にビットコイン開発の中心に据え置かれた。

SegWitに対する批判と開発者の離脱

全ての開発者がSegWitに賛成したわけではない。元コア開発者のJeff GarzikはSegWitをスケーリング問題に対する解決策として効率的なものとは見なさなかった。Bitcoin XTのリード開発者であったMike HearnはSegWitを「数字の操作に過ぎない」として吐き捨て、ビットコインの開発そのものから離脱してしまった。ソフトフォークではなくハードフォークとして実装するべきだという声もあった。またPeter Toddは特にマイニングに関する懸念を示した。とはいえ、SegWitに対する批判や提起された問題点は、ビットコイン開発者たちにとっては解決可能なもの、もしくは改善のためのトレードオフとして考えられたため、SegWitのソフトフォークとしての実装に向けた本格的な開発が始まった。

SegWit開発

SegWitのプロトコルはBIP141としてPieter Wuille, Eric Lombrozo, Dr. Johnson Lauによって提案された。2016年1月上旬にはプロトコルアップデートのためのテストネットワーク(SegNet)が立ち上げられ、3月末にはSegNetはライトニングネットワークのテストバージョンをサポートできるようアップグレードされた。

6月までに、SegWitのコードはテストコードも含め4743行に達し、ビットコインコアコード554行の削除と修正が提案された。同月末には複数の開発者のコードレビューを経て、Wladimir van der LaanがSegWitのコードをビットコインコアのマスターブランチにマージした。

ブロックサイズ紛争

SegWitの開発が進む中、ブロックサイズに関する論争が再び激化していた。Bitcoin Classicが先陣を切る形で、一部のビットコイン関連会社やマイナーが、ブロックサイズを2MBまで引き上げるためのハードフォークを計画していたのだ。

2016年2月、再び緊急会合が香港にて開かれ、多くのビットコイン開発者やマイニングプールの運営者、ビットコイン関連事業者がスケーリングに関する議論を行った。ここではブロックサイズの引き上げとSegWitの採用という折衷案が合意され、危機は回避されたかのように見えた。8月にはカリフォルニアで同様の会合が行われたが、この時点でビットコイン開発者たちはSegWitがマイナー達によって採用されると信じていた。

Bitcoin Core0.13.1リリース

2016年10月、待望のSegWitアップグレードを含むBitcoin Core0.13.1がリリースされた。リリース即ちアクティベーションではないことに注意されたい。ビットコインではversionbitsと呼ばれる投票方式を用い、直近2016ブロックのうち一定以上のサポート(この時点では95%)が表明されるとロック期間に入り、さらに2016ブロックを経てアクティベーションが行われる。SegWitはビットコインが抱える二つの脆弱性に対して一定の効果を発揮する上に、大きなデメリットも抱えていなかったため、SegWitは年内にもアクティベーションされるのではないかという期待が高まっていた。

再びスケーリング論争

しかしSegWitのアクティベーションは順調には進まなかった。前述の香港合意の出席者のうち一部が合意内容に対して意義を唱え、Bitmainの共同CEOであるJihan Wuはビットコインコア開発者がブロックサイズを引き上げるためにハードフォークを行った場合に限り、SegWitを支持すると表明。F2PoolやHaoBTC、Bitcoin.comに加え、Bitmainと近い関係にあり、単独でSegWitアクティベーションを阻止できるハッシュパワーを持つViaBTCもSegWitに断固反対の姿勢を取った。有力なマイナーの反対により、SegWitアクティベーションは暗礁に乗り上げた形となった。

UASF

転機となったのは2017年2月、ライトコインの元匿名開発者であるShaolinfryによって提案されたUASFである。UASFは議決権をハッシュパワーを持つマイナーではなく、ノード(ユーザー)に移行させることで、ユーザーの支持を集めるSegWitをアクティベートさせようというものだ。UASF chainはSegWitシグナルを出していないブロックを拒否する一方で、non-UASF chainは、従来どおり最も長いチェーンを正しいチェーンとして採用するという非対称性を抱える。

それゆえUASF chainが短期間で最も長いチェーンを生成できれば大きな問題は発生しないものの、non-UASF chainがUASF chainよりも長いチェーンを生成し続けた場合には、ビットコインのネットワークが分裂するという大きなリスクがあった。さらに一定期間を経てUASF chainが最も長いチェーンとなった場合には、non-UASF chainもそのチェーンを正当なチェーンとして認めるため、non-UASF chainで認証されたトランザクションが、UASF chainにおいては無効化されるという事態もありえた(※参照)。このようなことが起こりうる以上ユーザーや事業者が、non-UASF chain上で取引を行うことが難しくなる。投票権をユーザーに移行させるといえば聞こえは良いが、UASFはビットコインの根幹であるPOW(プルーフオブワーク)に基づくハッシュパワーを無視した危険な賭けであったと表現しても差し支えないだろう。

UASFのアイディアはビットコインコミュニティに広く共有され議論の的となった。元BTCCのCOOであり、現在はBlockstreamのCSOを務めるSamson MowによりUASF開発のための報奨金が用意されるなど、UASFは現実的なものになりつつあった。

ASIC BOOST

2017年4月にはまた新たな話題がビットコインコミュニティに提供された。ASIC BOOSTである。ASIC BOOSTはビットコインのマイニングコストを下げるための手法であり、その手法が一部のマイニングチップに組み込まれていたことがGregory Maxwellによって明らかにされた。またASIC BOOSTはSegWitが導入されると使えなくなるため、一部マイナーの優位性が失われてしまう。それ故にマイナーは不可解にもSegWitの導入に反対の立場を取っていたのではないかと指摘された。ASIC BOOSTに対する意見は賛否両論である。効率的なマイニングを行うための最適化を行うのは事業者として当然であり、ASIC BOOSTを使うことそれ自体は問題がないという意見や、ASIC BOOSTを可能にするビットコインの仕様は脆弱性であるので対処すべきという意見などが見られた。いずれにせよ経済合理性で動くマイナーが自身の不利益となるような仕様変更を認めるとは考えにくいため、ASIC BOOST対策としてもUASFによるSegWitのアクティベーションが注目された。

BIP148 SegWit支持は不足

UASF実行のため、当初は取引所やビットコイン関連ビジネスを行う企業の支持を取り付ける予定であった。しかし有力な取引所や企業からの支持を得ることができず、むしろいくつかの企業は反対を表明するほどであった。そのような状況の中で、BIP149が動き出した。BIP149はSegWitのアクティベーションのための期間に猶予を持たせるもので、翌年の7月4日に設定された。期限までに十分な支持が集めた場合や支持が集まらない状態で期限を迎えた場合、いずれの場合でもSegWitがアクティベートされる。

ニューヨーク合意

SegWitの賛否を巡る議論とは同時に、ブロックサイズの引き上げを巡ってもビットコインコミュニティは転換期を迎えていた。主にBitmainのCEOであるJihan Wuの支持を得た大ブロック派のBitcoin Unlimitedがマイニングコミュニティで勢いを増していた。これを受けて2017年5月、DCGの創業者であるBarry Silbertによりニューヨークで会合が開かれた。この会議では、SegWitアクティベーション後の2MBへのブロックサイズ引き上げ(SegWit2x)が提案され、多くの支持を得た。メジャーマイニングプールのみならず、メジャーな取引所からも支持を得たという点で、ニューヨーク合意は大きな成果を生み出したかに見えた。問題になったのはこのニューヨーク合意にコア開発者が参加していなかったことだ。コア開発者はSegWit2xの実装にASIC BOOSTを防ぐための変更が含まれないことを問題視した。

BIP91

BIP148, BIP149によるUASFやニューヨーク合意など、様々な提案がなされたが、いずれも十分な賛成を得るまでには至らなかった。そこでBitmain WarrantyのエンジニアであるJames Hilliardによって提案されたのがBIP91である。BIP91はSegWitのアクティベーションに必要な支持率を95%から80%に引き下げるものの、SegWit支持のシグナルを発していないブロックを拒否する新しいルールが適応される点はBIP144と同様である。

BIP91アクティベーション

BIP91は2017年7月21日にロックインされた。BIP148のアクティベートが8月1日であったので、その10日前にマイナーによりBIP91が採用された形だ。100%に近い支持率でロックインされ、2日後には正式にアクティベートされた。懸念事項であった非SegWitシグナルブロックによるネットワークの分裂も起きなかった。ビットコイン開発のマイルストーンであるSegWitが遂にビットコインのメインネットに実装されたのだ。SegWitを用いたトランザクションは以下のページから確認できるが、日々増加していることが分かる。SegWitを用いたトランザクションの生成には設定が必要なため、ユーザーはウォレットや取引所の対応を待つ必要がある。

SegWit Charts

残る火種

BIP91はSegWit2xをデプロイするための方法として提案されたが、一定期間後ブロックサイズを自動的に2MBに引き上げるような仕様にはなっていない。つまりビットコインのブロックサイズがニューヨーク合意に従って引き上げられるかどうかは不明であり、仮に合意通りに引き上げられなかった場合は、ビットコインキャッシュのようなハードフォークが起こる可能性がある。この点は今後の大きな火種になるだろう。


The Long Road to SegWit: How Bitcoin’s Biggest Protocol Upgrade Became Reality
bips/bip-0148.mediawiki at master · bitcoin/bips
bips/bip-0091.mediawiki at master · bitcoin/bips