Crypto Life

Tech in X

ブロックチェーンを中心にテクノロジーや東南アジアのスタートアップ情報を提供

UASFによるSegwit導入の考察 - ブロックチェーン分岐の永続化を許容するか -

現在Bitcoin界には2種類の派閥があり、分裂危機が取りざたされています。


純化すると、ひとつはマイナーの利益を代表するBitcoin Unlimited、もうひとつは多くのユーザ(ノード)の指示を集めるBitcoin Coreです。分派のきっかけは、Bitcoin脆弱性(Malleability)に対応するSegwitの導入に関する意見の相違です。Segwitの導入はトランザクション手数料を低下させることにつながり、マイナー利益を損なうことになるため、Segwitを推進するBitcoin Coreに反対する形でBitcoin Unlimitedが生まれました。


Segwitの導入には、マイナー(正確に言うと、過去2016ブロック)の95%以上がSegwit導入賛成シグナルを送っているという条件があり、現在のシグナリング(30%程度)を勘案すると、いつまでたってもSegwitの導入は実現されない状況です。そのような状況で、ある匿名ユーザが「Segwitが導入されない場合にはユーザ主導でのSegwit導入 (UASF、User Activated Soft Fork)を実施する」という提案を行い、BIP148として審議中の状態になっています。

Bitcoinのバージョンアップ方法

Bitcoinのバージョンアップ方法は、大きく分けて2種類あります。ひとつは旧バージョンと新バージョンの互換性が完全になくなるハードフォーク、もうひとつは旧バージョンから見ても、新バージョンで採掘されたブロックが有効に見えるソフトフォークです。今回は、ソフトフォークに的を絞って話を進めます。


従来、Bitcoinのソフトフォークの際には、BIP9で定義されている方法を利用してきました。


BIP9とは、マイナーがブロックを採掘する際に、ブロック中のversion bitと呼ばれる領域に指定されたbit値をたてることで、そのソフトフォークの賛成を表明する方法です。逆にbit値をたてないことで、そのソフトフォークに対して反対を表明できるわけです。以下の図で言うと、Versionと書かれている部分の一番下の桁がSegwit導入への賛成/反対を示しています。

導入賛成/反対状況
2 (16進数) =Segwit導入賛成
0 (16進数) =Segwit導入反対(or 未準備)。

f:id:steinith310:20170409182430p:plain


BIP9で定められている通り、過去2016ブロック(約2週間)のうち95%のブロックがSegwit賛成を表明している状態になった時、Segwit導入がロックインされます。そして、さらに2016ブロック経過したタイミングで、Segwitが正式に導入されることになります。つまり、投票期間と実際の導入期間には、ずれがあるということになります。

f:id:steinith310:20170409170715p:plain
Bitcoin Core :: Version bits FAQ for miners

UASF

これに対して、UASFとはマイナーの投票によらずにSegwitをソフトフォークで実現する方法です。具体的には、ノードが利用するクライアントソフトウェアに、「Segwitが導入されていないブロックを無効なブロックと判定するコード」を組み込むことで、もしマイナーがSegwit未導入のブロックを採掘したとしてもノード側がそのブロックの受け入れを拒否するというアプローチです。


現在提案されているBIP148の実装では、2017年10月1日以降Segwit導入がロックインされていない場合には、Segwit未導入のブロックを拒否するという実装になっています。
bips/bip-0148.mediawiki at master · bitcoin/bips · GitHub


ちなみに、「ブロックチェーン分岐の永続化」を許容するかしないかで、UASFのハードルは大きく変わってきます。

ブロックチェーン分岐の永続化を許容しない場合

まず、ブロックチェーンの分岐の永続化を許容しない場合は、UASFを実施するにあたって、「マイナー」の少なくとも50%がSegwit導入マイナーである必要があります(ただし、必ずしもSegwit導入時点で50%を満たしている必要はなく、UASFによってSegwit側に鞍替えするマイナーがいる可能性も考慮する必要はあるかと思います)。


理由を簡単に見てみましょう。
Segwit導入ノードの比率に関わらず、Segwit未導入マイナーがSegwit未導入のトランザクションを含むブロックを採掘した場合には、当該ブロックがSegwit導入ノードで承認されることはありません。


一方、Segwit導入マイナーはSegwit導入済みトランザクションのみを採掘するので、必然的にブロックチェーンは分岐することになります。注意が必要なのは、ブロックチェーンの分岐はブロックチェーンの設計思想から許容されていることであり、重要なのはブロックチェーンの分岐が永続化するかどうかです。


さて状況を改めて考えてみると、旧バージョンを利用しているノードは新バージョンのトランザクションも正当なものとみなしますので、単純にBitcoinのルールに従い、「長さの長いブロックチェーンを正」とみなします。一方、新バージョンを利用しているノードは旧バージョンブロックチェーンを無効とみなすので、「新バージョン側のブロックチェーンを正」とみなすことになります。ブロックチェーンの分岐が永続化しない条件は、「長さの長いブロックチェーン」が「新バージョン側のブロックチェーン」と同一であることです。結局のところ、50%以上のマイナーがSegwit賛成側に最低限存在しないと、ブロックチェーンの分岐は永続化することになります。


ということで、ブロックチェーン分岐の永続化を防ぐためには、少なくとも半数のマイナーの協力を得ないと実現できないということになります。もちろん、この割合はBIP9型のソフトフォークに必要な95%という要件からはかなり緩和されていますが、Segwit賛成マイナー率は30%台をうろうろしていることを考えるといまだに厳しい比率だと言えます。

Segwit賛成票投票状況
Percentage of blocks signalling SegWit support - Blockchain

ブロックチェーン分岐の永続化を許容する場合

ブロックチェーン分岐の永続化を許容する場合には、無条件でUASFを発動できます。しかし、ブロックチェーンが完全に分岐するため、Ethereumのハードフォークのように2種類のコインが出来上がることになります。Ethereumの例で分かる通り、ブロックチェーンの完全分岐はコイン価格を下落させ、Bitcoinへの支持を弱めることにつながりかねません。


結局、ブロックチェーン分岐の永続化を許容するUASFの効果は、Bitcoin Unlimited側がブロックサイズの上限を1Mバイト以上に設定するハードフォークを行うのと同じになります(=完全にチェーンが分岐)。


6月10日追記
以下の動画で紹介されている通り、Re-Organaize (BIP148未導入チェーンが最初は長かったのが、BIP148チェーンの長さが途中で上回ると、BIP148未導入チェーンが無効になる)される可能性もあるので、ハードフォークの効果と同じとは言い切れないですね。ただ、Re-Organaizeされるまでは、2つのコインが発生している状態になるので、一時的でもコイン価格の下落は避けられません。

UASF/BIP148特別収録 with 大石哲之さん


最近の動き

3月27日にBitfuryがUASFによるSegwit導入支持を表明したブロックを採掘したことで話題になりました。

Bitfury Mines a Block Signaling UASF Mandatory Segwit Deployment - Bitcoin News


実際にブロックを見てみると、Bitfuryが採掘したブロックのCoinbase (マイナーが採掘報酬を埋め込むトランザクション) に「Segwit」、「BIP148」という文字が刻まれていることが分かるかと思います。

f:id:steinith310:20170409181148p:plain
Transaction 82fcb9de58956b125256b9fe6a9af731f8aa2386a20180fbdc9a908522416c67 - chainFlyer


ただ、ここまで見てきた通り、UASFは特定日以降Segwit未導入ブロックを無効とみなすことでソフトフォークする手法ですので、今回のBitfuryによる採掘ブロックはUASFに対する支持表明をしたに留まります。