Descriptor はアドレス、seed、wallet ファイルではありません。wpkh(...) などが scriptPubKey の型、鍵の由来、derivation、任意の range を指定します。最終使用 index や scan birthday は別途保存が必要です。
Output Descriptor は scriptPubKey の集合と、導出または支出に必要な情報を記述します。wpkh(KEY) はその鍵の native SegWit 出力です。Bitcoin アドレス、seed、完全な wallet backup そのものではありません。
pk()、pkh()、wpkh()、sh()、wsh()、addr()、raw() は正確な出力スクリプトを定めます。sh(wpkh(KEY)) のような入れ子は scriptPubKey とアドレスを変え、同じ xpub でも別の wallet になります。
鍵には [fingerprint/path] の origin、xpub、追加 derivation を記せます。Key origin は signer の経路照合を助けますが、fingerprint は暗号学的な身元や端末認証ではありません。信頼できる経路で export を確認します。
Wildcard /* は ranged descriptor を作り、導出時に range が必要です。multipath <0;1> は receive と change の分岐をまとめられます。next index、使用済みアドレス、gap limit、scan birthday は descriptor 単体に残りません。
# の後の8文字は BIP 380 descriptor checksum です。多くの入力ミスや転置を検出しますが、署名、暗号化、出所証明ではありません。式を変更した者も有効な checksum を再計算できます。
xpub を含む公開 descriptor は署名なしで監視と導出ができます。xprv、WIF など秘密情報を含めば支出可能なので seed 同様に保護します。getdescriptorinfo は正規公開形式と hasprivatekeys を返します。
multi(k,...) は記載順を保持し、並べ替えるとスクリプトとアドレスが変わります。sortedmulti(k,...) は導出ごとに辞書順で整列します。backup には threshold、全 cosigners、key origins、wrapper が必要で、seed 一つでは不足です。
tr(KEY) は Taproot key path、tr(KEY,TREE) はさらに script path tree を記述します。木の形は Merkle root とアドレスを変えるため、順序のない一覧では不十分です。Miniscript や multi_a も完全な descriptor の代替ではありません。
importdescriptors は checksum 付き descriptor と timestamp、active、internal、range、next_index の metadata を受け取ります。timestamp が scan 開始を決め、遅い birthday は正しい rescan まで過去を隠します。全状態が式内にあるわけではありません。
受取前に getdescriptorinfo を実行し、checksum、isrange、issolvable、hasprivatekeys を確認します。deriveaddresses で複数の外部・change アドレスを導出し、元 wallet または hardware wallet 画面と比較します。完全復元も事前に試します。 出典: BIP 380 — Generic Output Script Descriptors; BIP 383 — multi() and sortedmulti() Descriptors; BIP 386 — tr() Output Script Descriptors; Bitcoin Core — Output Descriptors; Bitcoin Core RPC — importdescriptors.
理解を深めるには、この項目とあわせて次もお読みください ウォレット, Watch-only Wallet, Multisig, PSBT, Miniscript, Bitcoin. 次の項目からも参照されています Watch-only Wallet, Extended Public Key (xpub), PSBT, Miniscript.