Glossary

Descriptor Wallet

A descriptor wallet uses output descriptors to precisely define which Bitcoin scripts and derivation paths a wallet can spend, replacing legacy key imports.

Key Takeaways

  • A descriptor wallet stores output descriptors that explicitly define every script type, key, and derivation path the wallet can spend, eliminating the guesswork that plagued legacy wallets.
  • Descriptor wallets became the default in Bitcoin Core v23.0 (April 2022), and legacy wallet support was fully removed in v30.0 (late 2025), making descriptors the standard for Bitcoin key management.
  • A single descriptor string can back up an entire wallet configuration, including multisig co-signer keys and complex spending policies: something a seed phrase alone cannot capture.

What Is a Descriptor Wallet?

A descriptor wallet is a Bitcoin wallet that uses output descriptors to define exactly which scripts it can generate and spend. Each descriptor is a human-readable string that encodes the script type (such as P2WPKH or P2TR), the key material, the full derivation path, and an error-detecting checksum. Together, these parameters form a complete, self-describing recipe for reconstructing a wallet's addresses and spending conditions.

Before descriptor wallets, legacy wallets in Bitcoin Core stored a flat collection of private keys and relied on implicit assumptions about how those keys mapped to addresses. A wallet following BIP-44 derivation paths might generate different addresses than one following BIP-84, but nothing in the wallet file recorded which convention was being used. This ambiguity made backup, recovery, and interoperability between wallet software unreliable.

Descriptor wallets solve this by making every parameter explicit. There is no implicit state: the descriptor itself contains everything needed to reconstruct the wallet.

How It Works

An output descriptor follows a function-based syntax where the outer function specifies the script type and the arguments provide the key material and derivation information.

Descriptor Syntax

The general format is SCRIPT_TYPE(KEY_EXPRESSION)#CHECKSUM. The key expression includes a master fingerprint, the hardened derivation origin, an extended public key, and the child derivation path:

# Native SegWit single-key wallet (BIP-84)
wpkh([d34db33f/84'/0'/0']xpub6ERApfZ.../0/*)#checksum

# Taproot single-key wallet (BIP-86)
tr([d34db33f/86'/0'/0']xpub6ERApfZ.../0/*)#checksum

# 2-of-3 multisig wrapped in P2SH
sh(sortedmulti(2,xpub1.../0/*,xpub2.../0/*,xpub3.../0/*))

# Nested SegWit (P2SH-P2WPKH)
sh(wpkh([fingerprint/49'/0'/0']xpub.../0/*))

The [d34db33f/84'/0'/0'] portion is the key origin information: d34db33f is the 4-byte master key fingerprint, and 84'/0'/0' is the hardened derivation path from root to the extended key. The trailing /0/* indicates the unhardened receive chain with a wildcard for generating sequential child keys.

Common Descriptor Functions

The descriptor language defined by BIPs 380 through 386 provides these core functions:

FunctionScript TypeUsage
pkh(KEY)P2PKHLegacy pay-to-pubkey-hash
wpkh(KEY)P2WPKHNative SegWit v0
sh(SCRIPT)P2SHScript-hash wrapper
wsh(SCRIPT)P2WSHWitness script-hash wrapper
tr(KEY)P2TRTaproot key-path spend
multi(k,...)k-of-n multisigKeys in specified order
sortedmulti(k,...)k-of-n multisigKeys sorted lexicographically

Checksum Verification

Every descriptor includes an 8-character BCH checksum appended after a # character. This checksum detects all single-character errors, all errors up to three characters in descriptors under 49,154 characters, and has a random-error detection probability of approximately 1 in 240. When importing or sharing descriptors, wallet software validates the checksum and rejects any corrupted string before attempting to use it.

How Bitcoin Core Uses Descriptors

When Bitcoin Core creates a new descriptor wallet, it generates a set of descriptors covering common script types:

  1. A tr() descriptor for Taproot receiving addresses (default since v23.0)
  2. A wpkh() descriptor for native SegWit addresses
  3. Separate descriptors for the internal (change) keychain
  4. Optionally, descriptors for P2SH-wrapped SegWit and legacy address types

Each descriptor includes the key origin information that ties it back to the wallet's HD wallet seed, making it possible to reconstruct all addresses from the descriptor alone. The wallet stores these descriptors in a SQLite database, replacing the legacy Berkeley DB format.

Descriptor Backups vs. Seed Phrase Backups

A seed phrase (defined by BIP-39) encodes the root entropy from which an HD wallet derives keys. However, it does not encode the script type, derivation path, or multi-party signing configuration. This creates real recovery failures:

AspectSeed Phrase OnlyDescriptor Backup
Script typeNot encoded: wallet must guessExplicitly specified
Derivation pathNot encoded: varies by wallet softwareFully specified with origin info
Multisig co-signersNot includedAll N extended public keys embedded
Watch-only addressesCannot be restoredTracked as separate descriptors
Recovery guaranteeMay show zero balance if assumptions differExact reconstruction of all tracked scripts

A user who backs up only a seed phrase and later imports it into different wallet software may find a zero balance: not because their bitcoin is gone, but because the new wallet scans different derivation paths or address types. Descriptor backups eliminate this problem entirely.

Bitcoin Core Migration Timeline

The transition from legacy to descriptor wallets in Bitcoin Core spanned several years:

  • v0.17 (October 2018): first implementation of output descriptors in the scantxoutset RPC
  • v0.21 (January 2021): experimental descriptor wallet support with a SQLite backend
  • v23.0 (April 2022): descriptor wallets became the default for newly created wallets, with auto-generated Taproot descriptors
  • v26.0 (December 2023): deprecation warnings when loading legacy wallets; miniscript support extended to P2TR descriptors
  • v30.0 (late 2025): complete removal of legacy Berkeley DB wallet support; 11 legacy-only RPCs removed (including importprivkey, dumpprivkey, and importwallet)

Miniscript Integration

Miniscript is a structured subset of Bitcoin Script that can be analyzed, composed, and optimized programmatically. It integrates directly into the descriptor language: miniscript expressions can be embedded inside wsh() and tr() descriptors to represent complex spending policies.

For example, a policy requiring 2-of-3 signers with a timelock decay to 1-of-3 after 90 days can be compiled to a miniscript expression, then wrapped in a descriptor. The resulting string captures the entire spending policy in a single, portable backup. This is particularly valuable for institutional cold storage setups and key management configurations where spending policies go beyond simple single-key or threshold schemes.

Use Cases

Reliable Wallet Recovery

The primary benefit of descriptor wallets is deterministic recovery. A user can export their descriptors, store them alongside (or instead of) a seed phrase backup, and be confident that any compatible wallet software will reconstruct the exact same set of addresses and spending conditions. For self-custody users managing their own keys, this eliminates a common class of recovery failures.

Multisig Coordination

In a multisig wallet, all participants' extended public keys and the signing threshold must be known to reconstruct the wallet. A single sortedmulti() descriptor encodes all of this information. Any co-signer can share the descriptor, and any compatible wallet can derive the correct multisig addresses. This works with both on-chain multisig and MuSig2 Schnorr key aggregation in Taproot descriptors.

Watch-Only Monitoring

A watch-only wallet can import descriptors containing only extended public keys (no private key material). This allows monitoring balances and generating receiving addresses without exposing spending capability: useful for accounting systems, auditors, and cold storage monitoring setups.

Hardware Wallet Interoperability

BIP 388 defines a simplified "wallet policy" format designed specifically for hardware signing devices with limited displays. Wallet policies map to descriptors but use a compact syntax that hardware wallets can register and verify. This enables hardware devices to participate in complex descriptor-based configurations without needing to parse the full descriptor language.

Why It Matters

Descriptor wallets represent a fundamental shift in how Bitcoin wallets handle key management. By making spending policies explicit and self-describing, they reduce the risk of losing access to funds due to software incompatibilities or incorrect recovery assumptions. For the broader Bitcoin ecosystem, descriptors provide a universal language that different wallet implementations can agree on: from Bitcoin Core to hardware wallets to mobile applications.

Layer-2 protocols like Spark also benefit from the precision that descriptors bring to key management. When wallet infrastructure can unambiguously define which keys control which outputs, it simplifies the integration between on-chain and off-chain systems. For a deeper technical exploration, see the output descriptor wallet portability research article, or learn more about how miniscript enables flexible spending policies.

Risks and Considerations

Backup Complexity

While descriptors are more complete than seed phrases, they are also harder to write down on paper. A BIP-39 seed phrase is 12 or 24 common words; a descriptor is a long string with special characters, brackets, and a checksum. For non-technical users, this may introduce usability challenges. QR codes and digital backups help, but physical backup of descriptors requires careful handling.

Migration Risks

Bitcoin Core's migratewallet RPC converts legacy wallets to the descriptor format. While the process is well-tested, edge cases have caused data loss in some versions. Users should always create a complete backup of their wallet files before running migration.

Software Support

Not all wallet software fully supports the descriptor language. Some wallets understand only a subset of descriptor functions, and complex constructions (nested miniscript, Taproot script trees, multipath expressions) may not import correctly into every tool. Users should verify that their target wallet software supports their specific descriptor configuration before relying on it for recovery.

Privacy Implications

A descriptor containing an extended public key (xpub) can derive all addresses in the wallet. Sharing a descriptor with a third party gives them visibility into all past and future transactions associated with that key chain. Descriptors should be treated with the same sensitivity as extended public keys: share only when necessary, and prefer per-purpose descriptors to limit exposure.

This glossary entry is for informational purposes only and does not constitute financial or investment advice. Always do your own research before using any protocol or technology.