ビットコインのアップグレード「Taproot」で何が変わった?
ビットコインプロトコルのソフトアップグレードである「タップルート(Taproot)」が11月14日に実行された。
タップルートは2017年のSegregated Witness(SegWit)以来の大型アップグレードで、プライバシーの強化やスケーラビリティの改善などが見込まれる。ちなみにSegWitは署名のデータ領域を分離してトランザクションIDの展性問題(malleability)を修正することが目的だった。
「タップルート(Taproot)」では、ビットコイン技術の発展のためのに作成および公開されている草案群である「Bitcoin Improvement Proposals:BIP」のうちBIP340 (bip-schnorr)、BIP341 (bip-taproot)、BIP342 (bip-tapscript)の3つが導入された。
スマートコントラクト機能の強化やプライバシー機能およびスケーラビリティ向上のために、具体的にシュノア署名(Schnorr Signatures)やトランザクションデータを要約する方法の一つであるマークルド・オルタナティブ・スクリプト・ツリー(Merklized Alternative Script Trees:MAST)が導入された。またスクリプト言語「タップスクリプト(Tapscript)」も導入された。
chaintope取締役CTOの安土茂亨氏へ取材
あたらしい経済編集部はchaintope取締役CTOの安土茂亨氏へ取材、「Taproot」について訊いた。
−「Taproot」導入前後で何が変わるのでしょうか?
1つめは、プライバシーの向上が見込めます。
Bitcoinを送金する際は、主に2つのアドレスの種類があります。1つは、特定の誰かに送る際に受信者の公開鍵から作られたアドレス宛。もう1つは、特定の条件も持つスクリプト(マルチシグや、Lightning Networkで使われるコントラクトなど)から作られたアドレス宛。
ブロックチェーン上のトランザクションを見ると、これらはアドレスのタイプが異なるので判別が可能です。
しかし、Taprootではこれらが同じアドレスタイプになります。具体的にはTaprootのアドレスは公開鍵とコントラクトを組み合わせて作られます。
Taprootのアドレス=公開鍵+コントラクト
(コントラクトを持たない場合は、コントラクト部分を省略可能です)
単純な送金もコントラクトへの送金もこのように1つの形で表現するようになるので、ブロックチェーン上のトランザクションを見ても、それが公開鍵宛の送金なのか、コントラクト宛の送金なのか判断できません。
ただ、このアドレスのコインを使用する際に、コントラクトを使ってアンロックすると、その時初めて、コントラクトを持っていたことが分かります。
また、コントラクトの部分についても、プライバシーを向上する機能が含まれています。コントラクトが複数の条件を持っている場合、実際にはそのうちのいずれかの条件を使ってコインを使用しますが、これまではそのコントラクトのすべてを公開する必要がありました。これはEthereumなどの他のブロックチェーンのコントラクトでも大体一緒ですね。
Taprootを利用すると、コントラクトの複数の条件をMASTと呼ばれるツリー構造にエンコードします。そしてこのツリーを使って、コントラクトの全条件を公開することなく、実際に使用する条件のみを公開できます。
そのため、実際にどのような条件を持つコントラクトにロックされていたのかということがブロックチェーン上では分からなくなります。また、コントラクトすべてが公開されないため、ブロックチェーン上のデータサイズも節約できます。
もう1つ大きな特徴はSchnorr署名のサポートです。
これまでBitcoinのデジタル署名にはECDSAという署名スキームが採用されていましたが、TaprootではこれがSchnorr署名に切り替わります。
Schnorr署名にはECDSAと違って安全性が正式に証明されているという利点もありますが、利用者にとってのメリットは署名データを集約することができる点です。これは特にマルチシグにとっての利点になります。
これまでマルチシグは、その参加者の数分の公開鍵と署名が必要でした。例えば2-of-2であれば2つの公開鍵と2つの署名が、2-of-3では3つの公開鍵と2つの署名が必要です。これは参加者が増えるにつれ、データも比例して増えていきます。
しかしSchnorr署名には署名の集約特性があるため、2-of-2であれば、まず2人の公開鍵を足し合わせて1つの集約公開鍵を作ります。そして署名は2人がそれぞれ独立して作成した2つの署名を、これもまた加算すると集約公開鍵に対して有効な集約署名になります。
つまり、n-of-nのマルチシグであれば、nがいくら増えても単一の公開鍵と署名だけで済みます。
このため、マルチシグのデータサイズや署名検証のコストを削減することができます。※ k-of-nで同様のことを行う場合は、別途閾値署名スキームを導入が必要。
他にも細かいところでは、将来のソフトフォークでスクリプトの追加がより簡単になったり、ハードウェアウォレットがより安全にコインの送金をできるようにするなどの改善も含まれています。
安土氏の「Taproot」への評価
−安土さんはどのように「Taproot」を評価していますでしょうか?
MASTの提案自体はSegwitが実際にアクティベートされる前、2016年頃からSegwitの次のソフトフォークとして提案されていました。
また2017年にSegwitがアクティベートされた後は次のターゲットはSchnorr署名の導入だとも言われていました。
それが2018年にGregory MaxwellによってTaproot/Graftrooなどが提案され、そこにMASTが組み込まれて2019年にBIPドラフトが登場し、2020年にBitcoin Coreに実装され、デプロイ方法についてさまざまな議論を経てSpeedy Trialを使って2021年にデプロイが試行されました。
時間はかかりましたが、当初提案されたMASTのみでなく、今回のような形でTaprootとして統合されたことでより洗練された機能になったように思います。
Taprootの恩恵を一番受けるのは、Lightning Network(P2TRチャネルやPTLCの採用など)やDLC、Vaultなど複数の関係者と複数の条件を持つマルチパーティ・コントラクトでしょう。
Taprootがアクティベートされたことで、これらのプロトコルでTaprootを利用したインテグレーションが今後加速していくと思われます。
これらのアップデートやソフトウェアへの適用がリリースされるとよりTaprootが身近で利用されるようになると思います。
また、Bitcoinのプロトコル自体も、Schnorr署名がサポートされたことで今後トランザクションの複数のインプットをまたいだ署名の集約や、インプットのリバインドを可能にするanyprevout、コントラクトの条件を後から追加可能にするGraftrootのサポート、Covenantsを実現するための新しいopcodeの提案、より高度なコントラクトを可能にするために無効化された旧opcodeの復活など、さまざまな提案がされており、今後の進化も楽しみです。
参考:BIP340、MAST、Kraken Blog
デザイン:一本寿和
images:iStocks/LongQuattro・SiberianArt