LINEで送る
Pocket

2017年8月24日、Segregated Witness(以下SegWit)がビットコインネットワークにおいてアクティベートされた。SegWitのアクティベーションまでの道程は実に長かった。しかしSegWitが切り開いた道の先には、Lightning NetworkやMAST(Merkelized Abstract Syntax Trees = マークル化抽象構文木)、シュノア署名(Schnorr Signanture)などビットコインの発展に大きく寄与するであろう新技術の実装が控えている。ビットコインのプロトコルアップデートの中でも一際目を引くSegWitは、どのような経緯を経てアクティベーションに至ったのだろうか。

BitcoinMagazine: The Long Road to SegWit: How Bitcoin’s Biggest Protocol Upgrade Became Reality

bitcoin-ko

ビットコインが抱える脆弱性

本記事はSegWitアクティベーションまでの経緯を説明することが目的なので、技術的な領域までは深く掘り下げないが、SegWitの意味を理解するためにビットコインのトランザクションデータについて軽く触れておこう。ビットコインのトランザクションデータは主に取引データと署名データの二つから構成されており、各トランザクションを識別するためのトランザクションID(txid)にはトランザクションデータ全体のハッシュ値が使用される。

トランザクションデータの中には秘密鍵の保有者や第三者によって変更されうるデータが含まれているため、それらのデータが少しでも変更されるとハッシュ値が全く別の値になってしまう。

先述の通りハッシュ値は各トランザクションを識別するためのtxidとして使用されるので、txidだけを見てビットコインの送受信を行っている場合、同じ取引のtxidが変更されると二重支払い等の問題が発生しえる。これはトランザクション展性(Transaction Malleability)と呼ばれるビットコインの脆弱性だ。取引データの改竄を可能にするものではないため、これによってビットコインが盗まれたりすることはないが、先に上げた二重払いの問題や、新技術の実装が難しくなるという点で問題視されていた。署名データをtxidの生成とは無関係の場所に格納することによって、この脆弱性を回避しようというのがSegWitのアイディアである。

SegWitのアイディア

トランザクション展性は2012年には既にRussell O’ConnorやMatt Corallo等のビットコインコア開発者に認識されており、IRC上で議論が交わされている。翌年8月~9月には同じくコア開発者のPeter ToddとGregory Maxwellに、POW(プルーフオブワーク)を利用したアンチスパムシステムHashcashの発明者である暗号学者のAdam Backを加えて、署名データを分離してtxidを算出するアイディアが発案された。ただし当時はこのアイディアをビットコインに導入するためには、ハードフォークが避けられないと考えられていた。

SegWitの誕生

2014年8月にはAdam BackやGregory Maxwell等によってBlockstream社が設立され、ビットコインにペッグされたサイドチェーンの開発が進められた。2015年6月には、取引データと署名データを分離することによりトランザクション展性を解決できる技術が導入されたサイドチェーンElementsが同社により発表され、この技術はSegregated Witnessと名付けられた。

スケーリングビットコイン論争

SegWitについては、トランザクション展性の問題よりもむしろスケーリング問題の文脈で目にしたひとのほうが多いのではないだろうか。ブロックサイズ引き上げの議論は最近になって始まったものではなく、古くは2010年から認識されており、2013年にはコア開発者のPeter Toddや、Mike Hearn、Gavin AndresenらがBitcointalk上で議論を交わしている。Mike HearnやGavin Andresenはブロックサイズの引き上げを主張、2015年8月にはBitcoin XTをリリースした。Bitcoin XTには互換性がないためハードフォークによるビットコインの分裂が危惧された。

※Bitcoin XT以後のスケーラビリティに関するタイムラインは以下の記事を参照
【図解】Bitcoin Scalabilityに関する議論のタイムライン ~Bitcoin XTからUnlimited、Segwit2xまで~

この騒動を受けて、二つのスケーリングビットコイン会合がそれぞれ9月と12月にモントリオールと香港で開かれた。モントリオールではセカンドレイヤーでのソリューションとして現在でも大きく期待されているLightning Networkが披露された。Lightning Networkが実装されればブロックサイズを引き上げなくても良いというわけではないものの、ビットコインのトランザクション性能を引き上げる可能性のある技術として注目を集めた。しかしLightning Network実装のために解決しなければならない問題がトランザクション展性であった。

※スケーリングビットコイン会合の様子は以下のリンクを参照。動画やトランスクリプト等が公開されており、開発者の生の声を聞くことができる。
Scaling Bitcoin Workshop

ハードフォークからソフトフォークへ

2015年10月の時点で、Eric LombrozoやPieter Wuille等のコア開発者の間でソフトフォークの可能性が議論されたが、まだSegWitをハードフォークなしでビットコインに導入する具体的な構想はなかった。コア開発者たちがハードフォークではなくソフトフォークにこだわるのは、ハードフォークに伴うネットワークの分裂を避けるためだ。ハードフォークはプロトコルの幅(ルール)を広げることによって行われるため、新しいプロトコルに則って生成されたトランザクションが、プロトコルのアップデートを行っていないノードからみて許容範囲外になるケースが生じ、その場合は無効なトランザクションとして拒否される。一方でソフトフォークは、プロトコルの幅を狭める形で行われるため、既存のノードから無効なトランザクションとして拒否されることはない。

SegWitをソフトフォークによって導入するためには、署名データをブロックの別の場所に格納しなければならない。開発者の案は、署名データをwitnessデータとしてまとめCoinbaseという領域に格納するというものだった(※米国企業のCoinbaseとは別)。署名データの分離はトランザクション展性に対する対応策として考案されたが、ブロックサイズの実質的引き上げという思わぬ収穫があった。署名データの分離によってブロックサイズが引き上げられるように見えるのは、SegWitでは署名データ以外のサイズが4ユニットとしてカウントされるのに対して、署名データのサイズは1ユニットとしてカウントされるからである。理論上、トランザクションデータの全てが署名データの場合は、4MB分のデータをブロックに格納できる。

こうしてトランザクション展性とスケーリングというビットコインが抱えてきた大きな二つの問題に対して、SegWitという一筋の光明が差し込んだのであった。


Bitcoin Core :: Segregated Witness Costs and Risks
Is SegWit a block size increase? – SegWit Resources

  • ビットコインニュースを毎日お届け!

    BTCNの最新ニュースを毎日お昼ごろお届けします!

  • BTCN公式アカウントをフォロー

    follow us in feedly
シェアする