Un descriptor n’est ni une adresse, ni une seed, ni un fichier wallet. Une expression comme wpkh(...) fixe le type de scriptPubKey, la source des clés, la dérivation et une range éventuelle ; l’index utilisé et le scan birthday doivent être sauvegardés séparément.
Un Output Descriptor décrit un ensemble de scriptPubKeys et les données permettant de les dériver ou dépenser. wpkh(KEY) désigne des sorties SegWit natives. Ce n’est pas une adresse Bitcoin, une seed ni une sauvegarde complète du wallet.
pk(), pkh(), wpkh(), sh(), wsh(), addr() et raw() déterminent le script exact. Une imbrication comme sh(wpkh(KEY)) change scriptPubKey et adresse ; le même xpub dans une autre enveloppe définit donc un autre wallet.
Une clé peut porter l’origine [fingerprint/path], suivie d’un xpub et d’une dérivation. Key origin aide le signer à retrouver le chemin, mais le fingerprint n’est ni identité cryptographique ni authentification de l’appareil ; vérifiez l’export par un canal fiable.
Le wildcard /* crée un ranged descriptor et exige une range pour dériver. La notation multipath <0;1> peut réunir branches receive et change. Le descriptor seul ne mémorise pas next index, adresses utilisées, gap limit ou scan birthday.
Les huit caractères après # sont le descriptor checksum de BIP 380. Ils détectent de nombreuses fautes et permutations, mais ne sont ni signature, ni chiffrement, ni preuve d’origine ; après modification, un nouveau checksum valide peut être calculé.
Un descriptor public avec xpub permet observation et dérivation sans signature. Avec xprv, WIF ou autre secret, il peut autoriser la dépense et doit être protégé comme une seed. getdescriptorinfo fournit la forme publique canonique et hasprivatekeys.
multi(k,...) conserve l’ordre indiqué : le modifier change script et adresses. sortedmulti(k,...) trie les clés lexicalement à chaque dérivation. La sauvegarde doit garder threshold, tous les cosigners, key origins et l’enveloppe ; une seed ne suffit pas.
tr(KEY) décrit le key path Taproot ; tr(KEY,TREE) ajoute l’arbre script path. La forme de l’arbre change Merkle root et adresse, donc une liste non ordonnée ne suffit pas. Miniscript ou multi_a expriment des conditions sans remplacer le descriptor complet.
importdescriptors accepte le descriptor avec checksum et les métadonnées timestamp, active, internal, range et next_index. timestamp fixe le début du scan ; un birthday tardif masque l’historique jusqu’au bon rescan. Tout cet état n’est pas dans l’expression.
Avant de recevoir, lancez getdescriptorinfo et contrôlez checksum, isrange, issolvable et hasprivatekeys. Avec deriveaddresses, dérivez plusieurs adresses externes et change puis comparez-les au wallet source ou à l’écran du hardware wallet. Testez une restauration complète. Sources: 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.
Pour une vision complète, lisez aussi Portefeuille, Watch-only Wallet, Multisig, PSBT, Miniscript, Bitcoin. Cette entrée est également citée par Watch-only Wallet, Extended Public Key (xpub), PSBT, Miniscript.