注意: この記事はLLMによって英語から翻訳されたものです。正確性については保証いたしかねますので、あらかじめご了承ください。英語の原文はこちら。
Taprootソフトフォークは、11月14日(日曜日)にブロック709,634でついに有効化されました。これは2017年のSegWit以来、Bitcoinにとって初の大型アップデートです。その実装は今年6月(ブロック687,284)に決定されました。2週間の期間中にマイニングされたブロックの90%がアップデートへの支持を表明したためです(正確には、2,016ブロック中1,815ブロックがアップデートを支持することが要件でした。)
Taprootは、Schnorr署名、MAST、Tapscriptを含む3つのBitcoin改善提案(BIP340、BIP341、BIP342)を搭載しています。この記事では、それぞれの仕組みとBitcoinにもたらすものについて解説します。なお、これらの変更は後方互換性があります(つまり、旧来のアドレスタイプも引き続き使用できます。)
Schnorr署名#
これまでBitcoinはトランザクションの認証にECDSA署名(secp256k1曲線)とSHA256ハッシュを使用してきました。BIP 340は、Schnorrを用いた新しい署名方式を導入します。この新しい仕組みも楕円曲線暗号を使用しますが、主な利点はネイティブなマルチシグのサポートです。
現在の仕組みでは、マルチシグアドレスからのトランザクションには複数の署名が付与されます。しかし、Schnorrは線形性を持つため、複数の署名を1つに集約すること(「鍵集約」)が可能です。これにより以下の利点が得られます:
- マルチシグトランザクションは、参加者の数に関係なく常に同じサイズの単一署名となり、パフォーマンスが向上します(複数ではなく1つの署名のみを検証すればよく、SchnorrはECDSAより高速です。)また、サイズが小さくなるため、ネットワーク容量の面でも有利です。
- Schnorrでは、全員がトランザクションに署名する限り、アドレスがマルチシグかどうか、また何人の参加者が関与したかを知ることができません。
レガシーな3/3 P2SHアドレスの場合、実際の条件でどのように動作するか詳しく見てみましょう。スキーマの左側はアドレスの作成プロセスを、右側はこのアドレスに送金された資金の使用方法を示しています。

Bitcoinに詳しい方にとって、前述のスキーマは驚くものではないでしょう。資金が使用される際、スクリプトが署名A、B、Cを要求していたことが確認できます(アドレスが2/3マルチシグであっても、3つの期待される鍵がすべて公開されます。)
次に、Taprootアドレスでの動作を見てみましょう。前と同様に、スキーマの左側はアドレスの作成を、右側は資金の使用方法を示しています。

この場合、ブロックチェーン上に存在するのは、最初のステップで生成された公開鍵に対応する集約署名のみです。そのため、トランザクションを見ただけでは資金がマルチシグアドレスに保管されていたことを知ることはできません。アドレスが2/3署名を許可している場合は若干異なりますが、これについても後で詳しく説明します。
Merkleブランチ#
BIP 341は、pay to scriptトランザクションの方式としてMAST(Merkelized Abstract Syntax Tree)を導入します。従来は、P2SHアドレスに送金された資金を使用するために、完成したスクリプト全体を共有する必要がありました。新しいアプローチでは、実際に使用されたスクリプトの部分のみが公開されます。これには2つの利点があります:ブロックチェーン上の必要スペースが削減されること、そしてトランザクションに参加するエンティティのプライバシーが向上することです。以下のスキーマを例として見てみましょう。これは4つの公開鍵(1、2、3、4)を含むスクリプトを示しており、鍵1、2、3のうち2つの署名で送金するか、現在のブロックがx以上の場合に鍵4の単一署名で送金することを可能にしています。

鍵1と2を使って資金を送金したいとしましょう。この場合、秘密鍵1と2でトランザクションに署名し、スクリプト1と緑色の要素を公開します。これにより、スクリプト1の条件が満たされ、ルートハッシュ(アドレス作成時に使用されたもの)を再計算できるため、スクリプト1が資金の使用に許可されていることが証明されます。
P2TR (Pay-To-Taproot)#
前述の変更をサポートするために、BIP341はSegWitバージョン1の支出ルール(2017年のSegWitはバージョン0でした)と、新しいPay-To-Taprootアドレスタイプ(P2TR)を導入します。これらのアドレスはbc1qではなくbc1qで始まります。
P2TRの利点の1つは、スクリプトへの支払いにも公開鍵への支払いにも使用でき、資金が使用されるまでアドレスがどちらであるか判別できないことです。実際には、資金が使用された後でも、スマートコントラクトに関与するすべての当事者がスクリプトのルールに従うのではなくトランザクションに署名するオプションがあるため、スクリプトが存在していたかどうかを知ることができない場合があります。
Tapscript#
BIP342によって有効化されるTapscriptは、Taprootアップデートの最後の部分であり、他の変更に対応するためのスクリプト構造の改善を含んでいます。特に、BIP342は以下を行います:
OP_CHECKSIGとOP_CHECKSIGVERIFYをSchnorr署名で使用可能に変更OP_CHECKMULTISIGとOP_CHECKMULTISIGVERIFYを無効化し、OP_CHECKSIGADDで置き換え- スクリプトの最大サイズ10,000バイトの制限を撤廃し、ブロックウェイト制限のみに制限
さらに、将来のスクリプト改善を容易にするために、Tapscriptには機能追加に使用できる新しいオペコード(トランザクション命令)が含まれています。コードの番号は80、98、126-129、131-134、137-138、141-142、149-153、187-254で、現時点ではこれらのいずれかが検出されると、検証は成功し他のルールは無視されます。オペコードはOP_SUCCESSxと名付けられています(例:OP_SUCCCESS80、OP_SUCCESS98、…、OP_SUCCESS254)
P2TRのサポート#
Bitcoin.itには、主要なBitcoinウォレットやサービスの一覧と、それらが受金に対応しているアドレスタイプが掲載されています。現時点では、ほとんどがP2TRアドレスの実装に関する具体的な計画を公表していないようです。注目すべきは、Trezorが今年12月までの実装を計画していることです。
出典#
- BIP 0340 (Bitcoin GitHub)
- BIP 0341 (Bitcoin GitHub)
- BIP 0342 (Bitcoin GitHub)
- Technology roadmap - Schnorr signatures and signature aggregation (Bitcoin Core)
- [bitcoin-dev] Taproot: Privacy preserving switchable scripting (Bitcoin Mailling List)
- MAST, Taproot, Graftroot (MIT OpenSourceWare - Youtube)
- Create Raw Multi-Sig P2SH Bitcoin Transaction in Golang (Mahdi Darabi)
- Locked In: Bitcoin’s Taproot Upgrade Gets Its 90% Mandate (CoinDesk)