用語集 / アドレスと鍵
P2TR
別名はTaprootアドレス、Pay-to-Taproot、bc1pアドレス、タップルートです。
- P2TRとは?
- P2TRは、調整された32バイトの公開鍵1つへの支払いであり、鍵パスによる支払いは、1人が署名した場合でも複雑なコントラクトが協調的に決済された場合でも、オンチェーンでは同じに見えます。
BIP-341で規定されています。
Pay to taprootはウィットネスバージョン1であり、2021年11月14日のブロック709,632から稼働しており、bc1pで始まる62文字のアドレスとして表現されます。協調的な支払いは64バイトのSchnorr署名を1つ公開し、入力あたり約57.5vbyteのコストがかかり、ビットコインで最も安い入力です。出力に組み込まれた代替のルールは、誰かが実際にそれを使用しない限り見えません。
仕組み
P2TR出力はOP_1に32バイトのプッシュが続く形で、合計34バイトであり、そのバイト列はx-only公開鍵です。x-onlyとはy座標を省略して推測することを意味し、他のあらゆる場面で使われる33バイトの圧縮鍵と比べて1バイト節約できます。
表示される鍵は、誰かが保有する鍵ではありません。それは、自分自身と代替スクリプトのツリーのマークルルートのハッシュによって調整された内部鍵であり、公開される値は協調パスとすべてのフォールバックの両方に一度にコミットします。支払いはその後、2つの経路のいずれかを取ります。鍵パスは調整された鍵に対する署名を1つ生成し、それ以外は何も明かしません。スクリプトパスはツリーのリーフを1つ明かし、そのリーフが属することを証明するブランチのハッシュも明かし、ツリーの残りは永遠に秘密のままにします。
BIP-340のSchnorr署名により、鍵パスは安価でプライバシーが保たれます。DERエンコードされたECDSA署名の71または72バイトに対して64バイトであり、線形に加算されるため、複数の署名者が鍵を結合してMuSig2で署名を1つ生成できます。協調する2-of-2の構成は、1人が請求書を支払う場合と区別がつきません。
ウィットネスバージョン1はbech32mを要求するため、bc1pアドレスは元のbech32の定数ではなくBIP-350のチェックサム定数を使用します。
使われる場面
Taprootを既定とするウォレットは、m/86'/0'/0'のBIP-86ブランチから派生します。Bitcoin Coreはバージョン22.0でこのエンコーディングを追加し、バージョン23.0で新しいディスクリプタウォレット向けにtr()ディスクリプタを生成し始めました。
インスクリプションは任意のデータをTaprootのスクリプトパスのウィットネスに入れます。そのためbc1pの活動の大部分は支払いとは無関係です。これはウィットネスデータの割引の副産物であり、アドレスの種類の性質ではありません。
摩擦は周辺部にあります。一部の取引所は今もbc1pの出金先を拒否し、一部の古い決済端末も同様です。ウォレット内に回避策はありません。同じシードからbc1qアドレスを使用し、すべてをTaprootの下にまとめたい場合は後で統合してください。
P2TR vs Taproot
Taprootはアップグレードであり、P2TRはそれが生み出した出力の種類です。ソフトフォークは3つの仕様をまとめました。BIP-340はSchnorr署名を定義し、BIP-341は出力形式とその支払いルールを定義し、BIP-342はツリー内で使われる調整済みスクリプト言語であるtapscriptを定義しました。P2TRは利用者が接する部分であり、bc1pで始まるアドレスです。「私はTaprootを使っている」と言うことは、ほとんどの場合「私のウォレットはP2TRアドレスを発行する」という意味ですが、このアップグレードは、利用者が決して触れないかもしれないスクリプト内での署名の検証方法も変えました。