Output Descriptor は、どの鍵をどのルールで使って Bitcoin の出力を作るかを示すテキストです。出力とは、金額と、その資金を後で使うための条件を持つ記録のことです。正しいアドレスを再現し、対応する支払いを見つけるのに役立ちます。トランザクションでも完全なバックアップでもなく、公開情報だけの場合も、秘密鍵を含む場合もあります。
アンナは、ハードウェアウォレットを確認するアプリを変えようとしています。復元用の単語をパソコンに入力せず、資金を見る機能だけを移したいのです。この復元用の単語の列は Seed Phrase と呼ばれ、ウォレットの鍵を復元するためのバックアップです。公開 descriptor があれば、新しいアプリは、どの公開鍵を使って同じアドレスを作るかを把握できます。新しいパスワードではなく、アドレスを組み立てる正確な手順書だと考えてください。一般的なウォレットなら、ソフトウェアが標準設定を自動で判断できることも多くあります。しかし、特殊な構成や Multisig(複数の署名鍵を使うウォレットの構成) では推測に頼れません。Descriptor 自体は送金せず、受け取り済みの支払いも変えません。復元時に守るべきルールを記述するものです。 [1] [8]
秘密鍵は、資金の使用を承認するデジタル署名を作れます。公開鍵はその署名を検証できますが、作ることはできません。公開 descriptor には、署名はできなくても追加の公開鍵を導出できるデータ、xpub が含まれることがあります。これは支払いを確認するだけで、自力では送金できない Watch-only Wallet に適しています。ただし、公開だからといって扱いが自由とは限りません。多くのアドレスと履歴を結び付けられるため、プライバシーの面では保護が必要です。一方、descriptor に拡張秘密鍵の xprv や、単独の秘密鍵を表す WIF が含まれる場合もあります。それは、条件がそろえば資金を使えるようにする秘密情報です。オンラインの確認サイトに送ったり、無害なメモのつもりで保存したりしないでください。公開構成は、署名に必要なバックアップの代わりにはなりません。 [1] [8]
インポート後、アンナは複数の受取アドレスを元のウォレットと比較します。ハードウェアウォレットでは、メーカーの手順に従い、信頼できる機器の画面で確認します。支払い時に使い残した分を戻す、お釣り用の枝の設定も確認します。口座名が同じだけでは十分ではありません。新しいバックアップに頼る前に、秘密鍵を不必要にさらさず、そのウォレットに合った方法で復元手順全体を確かめます。アプリが descriptor に対応していない、または異なるアドレスを表示するなら、まず互換性、ネットワーク、設定を調べます。理解していない式を勘で書き換えるのは、安全な修正ではありません。 [5] [8]
三つの鍵のうち二つの署名を求めるウォレットでは、復元用の単語を二組持ち、「三つのうち二つだった」と覚えているだけでは足りません。正しい支出条件を再現するには、三つすべての鍵の公開情報、導出ルール、正確なスクリプトの種類が必要です。スクリプトは、資金を使うために満たすべき条件を記述したものです。技術表記 multi(k,...) は、記載された鍵の順番を使います。k は必要な署名数です。sortedmulti(k,...) は、スクリプトを作るたびに、導出された公開鍵をバイト順に並べます。二つは異なるルールであり、名前を置き換えればよいわけではありません。署名に必要な鍵のバックアップは別に保護しつつ、完全な構成エクスポートも残してください。機器の名前の一覧だけでは不十分です。 [2] [8]
# の後ろに、BIP380 で定める checksum、つまりチェックサムの八文字が付くことがあります。ソフトウェアはこれを使って、多くのコピー間違いを検出します。ただし、作者の署名でも暗号化でもなく、その descriptor が自分のものだという証明にもなりません。意図的に自分の鍵へ差し替える人は、新しい正しいチェックサムも計算できます。そのため、文字列の確認と、アドレスや構成の入手元の確認を組み合わせる必要があります。チェックサムのエラーが出たら、まず元のエクスポートを取り直します。新しいチェックサムを作るだけでは、壊れた内容に整合する値を付けるだけになりかねません。 [1]
鍵の前には [fingerprint/path] という key origin、鍵の由来の情報が付くことがあります。Fingerprint は起点の鍵を示す短い識別子、path はその後に書かれた鍵までの導出経路です。署名機器が正しい鍵を探すのを助けます。xpub の後ろには、個々のアドレスへ進む別の経路が付くこともあります。この二つの部分は役割が異なり、単なる口座ラベルではありません。異なる鍵が偶然同じ fingerprint を持つこともあるので、機器の身元を証明するものでもありません。また、公開エクスポートだけでは、秘密のデータを必要とする Hardened Derivation の段階を自由に越えられません。エクスポートするアプリが適切な階層の鍵を選ぶ必要があります。 [1]
/* の星印は、0、1、2 のように番号を順に当てはめることを表します。この ranged descriptor は一つのアドレスだけを記述するものではなく、実際の操作ではソフトウェアが処理するインデックスの範囲を決めます。アプリが対応していれば、BIP389 の <0;1> は通常、受取とお釣りの二つの枝をまとめて表せます。しかし、descriptor 自体は使用済みアドレスの一覧や、次の未使用番号を記録しません。一度も使われていないアドレスが何個続いたら検索を止めるかという gap limit も、自動的に式へ含まれるわけではありません。未使用とは取引履歴がないことです。一度入金され、その資金を後から使い切ったアドレスは、未使用には数えません。復元時にはウォレットの状態も引き継ぎ、十分に広い範囲を探す必要がある場合があります。 [5] [6] [9]
トランザクションの出力には、後で使うための条件を定める scriptPubKey というスクリプトが入っています。Descriptor はその作り方を記述します。wpkh(KEY) は一つの鍵を使う Native SegWit を表し、ここでの KEY は実際の鍵ではなく、仮の記号です。これを sh(wpkh(KEY)) で包むと、鍵が同じでも出力形式とアドレスが変わります。ほかに pk()、pkh()、wsh()、addr()、raw() などがありますが、互いに置き換えられる選択肢ではありません。たとえば addr() は既知のアドレスを表すだけで、支出に不足している情報を補うわけではありません。この節は設定用の参考資料であり、初心者に descriptor の手書きを求めるものではありません。 [1] [8]
Taproot の出力は鍵の署名で使えます。スクリプトの条件が組み込まれていれば、その条件によって使うこともできます。tr(KEY) は、支出に使えるスクリプトの枝を持たない内部鍵を指定し、tr(KEY,TREE) はスクリプトの木を加えます。つまり、保存するものは鍵の一覧だけではありません。木の中でスクリプトをどうまとめたかも重要です。まとめ方を変えると、個々の条件が同じでも、全体のハッシュである Merkle root と最終的なアドレスが変わることがあります。ただし、枝を入れ替えるたびに必ず変わるわけではありません。Miniscript は条件の記述と分析を助け、multi_a は Taproot のスクリプト言語 Tapscript で複数の署名を表します。どちらも単独では完全な構成エクスポートの代わりにはなりません。 [3] [8]
RPC は、別のプログラムやコマンドラインからソフトウェアに指示を送るためのインターフェースです。Bitcoin Core 29 の RPC コマンド getdescriptorinfo は記述を解析し、秘密鍵を含まない公開形式と、checksum、isrange、issolvable、hasprivatekeys を返します。最後の項目は入力に秘密鍵が含まれていたかを示します。issolvable は、署名に必要な秘密鍵を自分が持っているという意味ではありません。deriveaddresses では導出したアドレスを比較できます。インポートする importdescriptors には、timestamp、active、internal、range、next_index も渡します。順に履歴検索の開始時刻、構成を有効にするか、内部のお釣り用か、範囲、次のアドレス番号を表します。Rescan はチェーン上のトランザクションをもう一度探すことです。timestamp が遅すぎると昔の入金を見落とすことがありますが、descriptor の変更だけで入金が移動したり消えたりするわけではありません。インポート後は新しいウォレットのバックアップが必要です。これらのコマンドは、自分の信頼できる環境で使うものであり、他人のウェブフォームに入力するものではありません。 [5] [7] [8]
理解を深めるには、この項目とあわせて次もお読みください ウォレット, Watch-only Wallet, Multisig, PSBT, Miniscript, Bitcoin. 次の項目からも参照されています Watch-only Wallet, Extended Public Key (xpub), PSBT, セルフカストディ.