まずはこの短い動画をご覧ください。

0:00
/1:51

これはLightningウォレット開発者のHampus氏が運営するサイトに掲載された動画で、Taprootのロックイン(アクティベートが確定)を記念して作られました。

動画でも示唆されている通り、2021年6月12日(本稿投稿日のちょうど5年前)にロックインされたTaprootですが実際に有効化されたのは約5か月後の11月14日、ブロック高でいうと709632となります。

Segwit以来の大型アップデートと言われ、技術的な要件で大きな対立もなく実装されたTaprootですが実際どのような改善があったのでしょうか。

本稿では、アクティベートに至るまでの経緯に加えTaprootとはそもそも何なのか、またどのようなメリットがあるのかを詳しく解説していきます。

Taprootのアクティベーション方式「Speedy Trial」

Taprootのアップデートに関して当時大多数の人々が賛成をしている状況の中、アクティベーション(有効化)の目途が立っていませんでした。そこで約3か月という短い期間の中で有効化できるか、それとも失敗するかを試してみようと提案されたのが「Speedy Trial」という方式です。

💡
仮にアクティベーションに失敗したとしても短い期間で議論に戻ることができるため、技術的な反発はないのだから試してみようという動向であったようです。

Speedy Trialとは、マイナー自身がアップデートの準備完了をシグナリング(合図)して、シグナリングしたマイナーが2016ブロック(約2週間)のうち90%以上(1815)のブロックでマイニングを行うとロックインするという仕組みです。

仮に2016ブロックの間で90%に達しなくても、次の2016ブロックで再度集計を行い、このサイクルを8月11日までの約3か月間続けて行われます。

具体的なSpeedy Trialの期間については次の通りです。

  • 開始:2021年4月24日 00:00(UTC)
  • 終了:2021年8月11日 00:00(UTC)

実はSpeedy Trialが開始される直前に書かれた記事がビットコイン研究所にございますのでぜひ参考にご覧ください。

Taprootのアクティベーション方法がSpeedy Trialに決定か
本日、Taprootのアクティベーション方法の1つとして提案されている「Speedy Trial (BIP341)」のコードを含むプルリクエストがBitcoin Coreにマージされました。 (=将来リリースされるコードに組み込まれた)3月4日にこちらでTaprootのアクティベーション方法としてBIP8を利用することで概ね合意が取れていると紹介した時点では話題になっていなかったSpeedy Trialは、かなりのスピードで多くの開発者の支持を取り付けたということになります。ただし、今なお反対している開発者も少数います。 今回の記事ではSpeedy Trialとはなにか、どのようなスケジュールでアクティベーションを目指すものか、見ていきたいと思います。 SPEEDY TRIALとは Taprootのアクティベーション方法に関して、マイナーの準備が整うことを条件にすることでマイナーに事実上の拒否権を与えてしまうBIP9を使うか、期限切れ時にアクティベーションを強制すること(LOT=true)もできるBIP8を使うかで揉めてきました。 Speedy Trialは、約3ヶ月間の期間

実際には次の様な流れでシグナリングが行われました。

開始時刻 (UTC) 対象期間 (ブロック) シグナリング数 割合 注記
2021/4/15 19:41:43 679,392 〜 681,407 0 / 2016 0.00%
2021/5/1 20:27:02 681,408 〜 683,423 823 / 2016 40.82%
2021/5/13 08:58:58 683,424 〜 685,439 1690 / 2016 83.83%
2021/5/30 01:18:41 685,440 〜 687,455 1983 / 2016 98.36% 90%以上に達した期間(ブロック高687,284で90%突破)
2021/6/13 20:07:16 687,456 〜 689,471 2011 / 2016 99.75% 先頭687,456で正式にLOCKED_INへ遷移
2021/7/3 06:34:06 689,472 〜 691,487 2010 / 2016 99.70%
2021/7/17 23:32:17 691,488 〜 693,503 2013 / 2016 99.85%
2021/7/31 04:35:26 693,504 〜 695,519 1990 / 2016 98.71%
2021/8/13 05:53:47 695,520 〜 697,535 1957 / 2016 97.07%

シグナリング数が90%以上を達したのは、2021年6月12日のブロック高687,284での採掘であり、ロックインが確実化した瞬間でもあります。注意点として、ロックインの集計ロジックはBIP9の仕組みを踏襲しており、次の2週間の最初のブロックが採掘された時点での集計となるため、プロトコル的な正式なロックインは2021年6月13日のブロック高687,456となります。

Taprootの概要

Taprootの大まかな歴史

最初の提案は2018年1月にメーリングリストに投稿されたGregory Maxwell氏による「Taproot: Privacy preserving switchable scripting」(Taproot:プライバシーを保つ切り替え可能なスクリプト)というスレッドから始まりました。

スレッドの内容は、複雑な条件を付けたトランザクション(例えばマルチシグやタイムロックなど)をブロックチェーン上で「ごく普通の1人への送金」として見せる方法のアイディアとして提案され、送金上のプライバシーに主眼をおいています。

Taprootが出てくる前というのは、スクリプトにより条件付けをした送金について、そのビットコインを再度使用する際に「全て条件を公開する」必要がある上、条件が増えるほどデータ量が増えていき手数料が高くなってしまうというプライバシーと費用に関する問題がありました。この問題の改善として提案されたのがTaprootです。

メーリングリストの投稿に対する議論などを得て、2020年にPieter Wuille氏などが技術仕様をBIPとしてまとめて公開しています。

💡
メーリングリストとは、複数人が参加するグループメールの事で重要な技術提案の多くがここで議論されていました。

Taprootでの3つの改善点

Taprootにおける主な改善点を3つ紹介します。

その1:Schnorr署名(シュノア署名)

ビットコインではもともとECDSAと呼ばれる楕円曲線を用いた署名アルゴリズムを用いていました。Taprootの導入に際してより効率的に署名を行うために取り入れたのが「Schnorr署名」です。

細かい仕組みは割愛しますが、複数の公開鍵や署名をそれぞれ1つに集約することが可能になり、署名領域のデータ量の削減に貢献しています。

その2:MAST(Merkelized Alternative Script Trees)

MAST(Merkelized Alternative Script Trees)はビットコインのトランザクションのスクリプトをマークルツリーと呼ばれるデータ構造に落とし込んだものです。

専門用語だらけで難しいので簡単に図で説明していきます。

まずはビットコインを送金する際に条件A~Dがあるとします。

条件A~D

これらの条件A~Dにそれぞれハッシュ関数を渡してツリー構造を作成すると以下のような図になります。

マークルツリー

上図のような構造をマークルツリーと呼び、各条件(スクリプト)に対してハッシュ化したものを「リーフ」、個々のリーフを2つ用いて再度ハッシュしたものを「ブランチ」と言います。そしてブランチ間でこの処理を続けると1つの識別子が残り、これを「マークルルート」と呼んでいます。(マークルルートはリーフがいくつ増えようが32バイトに集約できます)

さてこのマークルツリー構造にすることで何が嬉しいかと言いますと、ある要素(例えば条件A)がツリーに入っているかどうかを第三者がツリーの詳しい構造を知らずとも検証できる点にあります。

具体的には、条件Aを使用して送金を行う場合、ツリーの構造上条件AにプラスしてHash(条件B)とHash(条件C, D)を提示することでマークルルートが計算可能になります。つまり詳細な条件B, C, Dを提示せずとも検証可能(=ツリーのマークルルートの値を計算可能)になるため、全ての条件を公開するときと比べてデータのサイズが削減され、プライバシーの保護にも繋がるという事です。

💡
豆知識:MASTに格納できるスクリプト(リーフ)の理論上限は 2の128乗です。

その3:Tapscript

アップデートでは、MASTを有効化する上で既存のスクリプト言語を用いることができないため、新たなバージョンを導入しました。この新バージョンの言語をTapscriptと呼びます。

旧バージョンのスクリプト言語では使用不能であったオペコードの再定義やSchnorr署名を導入する上でのマルチシグの再実装などがされています。

Taprootのアドレス「P2TR」

ここからはTaprootのアドレスであるP2TR(Pay-to-Taproot)について解説していきます。

アドレスとは、ビットコインをロックしておく保管庫のようなものです。送金するには保管庫に合う鍵を使ってアンロック(解除)し、別の保管庫へ移します。

P2TRはこの保管庫に特殊な仕組みがあり、アンロック方法が2種類用意されています。

  1. Key Path Spend
  • 公開鍵に対する署名を提供してアンロック
  1. Script Path Spend
  • 複数の条件(スクリプト)のうち1つを使ってアンロック

1つ目の「Key Path Spend」は通常の支払いと同様に公開鍵に対して必要なSchnorr署名を提供することでアンロックし送金を行います。仮にMASTに複雑な条件が存在していたとしても公開する必要はなく、通常のビットコインの送金と見分けがつかないのが嬉しいところです。

また、Schnorr署名について先ほども少しご説明した通り複数の公開鍵や署名を1つに集約することが可能です。つまり提供した署名は実はマルチシグになっている可能性もありますが、外から見たら1対1のシングルシグのように見えるという事です。

2つ目の「Script Path Spend」とはMASTのところで触れたように条件(スクリプト)とマークルルートを計算するためのハッシュ値を提供することでアンロックする方法です。こちらは複数の条件が存在する中で開示する必要があるのはたった1つの条件という点がメリットです。

P2TRの構造:2種類のアンロック方法の融合

P2TRの構造について解説します。2種類のアンロック方法があるとだけ知っていれば使う上では困りませんが、「どのように1つのアドレスに2つのアンロック方法を実現しているのか」が気になる方への補足です。

結論を先に言うと、P2TRのアドレスは「鍵」と「マークルツリー」を1つに混ぜ合わせて作られているからです。両方が1つに溶け込んでいるからこそ、鍵でアンロックすることも、条件でアンロックすることもできます。

以下の図をご覧ください。

P2TRの構造

図の右側に関しては、ごく普通の鍵ペアで、秘密鍵(Private Key)から公開鍵(Internal Public Key=内部公開鍵)が作られています。これがKey Path Spend(鍵でアンロック)で使う鍵の元となります。

次に図の左から下に広がるツリーは前節で登場したマークルツリー(MAST)です。条件A〜Dをハッシュ化しながらまとめていくと、最終的に1つのマークルルート(図の「Hash(条件A, B, C, D)」)に集約されます。これがScript Path Spend(条件でアンロック)に利用されます。

そして右の内部公開鍵と左のマークルルートを中央のtweakで混ぜ合わせ、新しい公開鍵Tweaked Public Keyを作ります。tweakとは「調整値」のことで、内部公開鍵とマークルルートを足し合わせ、楕円曲線の性質を利用して計算を行うことで新しい公開鍵が合成されるイメージです。

この合成により鍵の情報と条件(スクリプト)の情報が両方ともTweaked Public Keyの中に埋め込まれます。だからこそ1つのアドレスで2通りのアンロックが成立するという事です。

最後に、このTweaked Public KeyをBech32mという規格で変換すると、「bc1p〜」で始まるP2TRアドレスが完成します(この変換ステップは図には描かれていません)。

P2TRの主なメリット

ここまで説明してきたP2TRの特徴をメリットとして整理すると、以下の3点にまとめられます。

  • 柔軟性:1つのアドレスで複数の支出条件を設定できる
  • プライバシー:Key Pathを使えば通常の支払いと区別がつかない。Script Pathでも使ったスクリプト以外は非公開
  • 効率性:全条件が32バイトのマークルルートに集約される

加えて、Taprootには将来的にアップデートに容易に対応できるよう一見冗長に見えるいくつかのフィールドが含まれています。この「拡張性」もメリットの1つと言えます。

P2TRの2つのデメリット

一方で、P2TRにはいくつかの課題も存在します。

公開鍵の露出

P2TRのアドレスはTweaked Public KeyをBech32mの規格を用いて変換することで「bc1p~」が作成されます。(細かいアドレスの仕様は以下の過去記事を合わせてご覧ください)

ビットコインアドレスの種類まとめ|レガシー・SegWit・Taprootの違いと選び方
ビットコインアドレスの種類を総まとめ。レガシー(1/3)・SegWit(bc1q)・Taproot(bc1p)の違いを、プレフィックスや文字数、手数料、互換性の観点から比較表つきでわかりやすく解説します。

普通アドレスというのは公開鍵に2回ハッシュ関数をかけてから変換することで作られます。ハッシュ関数をかけることでセキュリティ的な強度を上げていますが、P2TRは生の公開鍵をそのままアドレスに変換しています。(つまり公開鍵がそのまま露出している)

ここで問題視されるのは量子耐性です。将来、量子コンピュータによる公開鍵から秘密鍵を逆算されるリスクがあるため、ブロックチェーン上に生の公開鍵が残るのは危険ではないかという懸念があります。

しかしP2TRの開発者はこの懸念を認識した上で、あえて公開鍵をそのまま利用しています。効率性を優先しつつ、量子コンピュータへの対応は将来の技術革新に委ね、Taprootはセキュリティモデルを変えない範囲の改善に焦点を当てています。実際にTaprootのBIP341に記載されているのでご参照ください。

また公開鍵が露出することを改善しようとしたBIP360(P2MR)も提案されているのでご興味がある方は以下の記事をご覧ください。

BIP360で提案されているP2MRとは?本質的な量子耐性獲得ではない理由
BIP360のP2MRとは何か?P2TRとの違いやトレードオフ、量子コンピュータの攻撃シナリオを整理し、本質的な量子耐性と言えない理由と真の意義である拡張性を解説します。

P2TRの使用率が現状まだ高くない

もう一つ欠点としてはP2TRの使用率が低いことと大手取引所が入金や出金に対応していないことです。取引所は厳重なセキュリティ対策を講じるため新しいアドレス形式の対応が遅くなってしまう点は致し方ないのかもしれません。

その上、「Taprootとは何か?」が知られていないために使用率が低いと筆者は考えています。各個人がTaprootの特性を理解することで、皆さんのプライバシー改善の手段の一つとして全体に普及していくのではないかと考えています。

また個人的には、Script Path Spendを利用したフォールバックとしての量子耐性署名の導入という使われ方がされそうだと考えていますが詳しくは別記事にて書こうと思います。

Taprootのユースケース

Taprootのユースケース

実は知らず知らずのうちに私たちはTaprootを利用しています。比較的身近なところでいうと「Phoenix Wallet」と呼ばれるACINQ社の提供するウォレットのビットコインアドレスはP2TR形式となっています。

またライトニングとオンチェーンをアトミックにスワップするサブマリンスワップでもTaprootは利用されており、主要なサービスの「Boltz」などでアドレスを見ることができます。

Boltzは本当にトラストレスなのか?Submarine Swapの仕組みから解説
BoltzはSubmarine Swapを用いて、オンチェーンBTCとLightning残高をアトミックに交換できるサービスです。本記事では、その仕組みとWeb appの役割から、Boltzがどこまでトラストレスと言えるのかを技術的観点で解説します。

またプライバシー強化を目的にTaprootを使ってみるという事であればデスクトップで使用できる「Sparrow」という上級向けのウォレットもおすすめです。

もう一つユースケースを上げておくとするとライトニングのチャネルの開設にTaprootを使おうという試みもあり、通常のチャネル開設と比べるとライトニング関連のトランザクションであることがブロックチェーン上でわかりづらいというメリットがあります。

まとめ

本稿ではTaprootの有効化に至る経緯から、その仕組みとメリットまでを解説してきました。

Taprootは「プライバシー」と「効率性」を同時に改善するアップデートであり、その中心にあるのがSchnorr署名・MAST・Tapscriptという3つの要素です。これらによって、マルチシグやタイムロックといった複雑な条件付き送金を「ごく普通の1対1の送金」として見せられるようになりました。その成果がP2TR(bc1p〜)というアドレス形式であり、Key PathとScript Pathという2種類の解錠方法を1つのアドレスに併せ持つ点が大きな特徴です。

技術的な対立がほとんどないまま、Speedy Trialという短期決戦の方式でスムーズに有効化されたことは、Taprootが広く支持されていた証と言えるでしょう。生の公開鍵が露出することによる将来の量子コンピュータへの懸念や、取引所対応の遅れといった課題は残るものの、ロックインから5年が経った今、Phoenixやサブマリンスワップなど、私たちの身近なところでTaprootは使われ始めています。使用率が伸び悩む最大の理由は「Taprootが何かを知られていないこと」だと筆者は考えています。本稿をきっかけにその特性を理解し、一人ひとりが実際に使ってみることが、普及への確かな一歩になるはずです。