bitcoin-descriptors

v2026.09.24

Output descriptors: BIP380-385 family. Descriptor language for declaring scriptPubKey templates with key origin info, ranges, checksums. Functions: pkh, wpkh, sh, wsh, tr, multi, sortedmulti, multi_a, addr, raw, combo, rawtr. USE WHEN: importing watch-only wallets, defining multisig, declaring scan ranges, exchanging key info between wallets.

GitHub
安装命令
npx skhub add claude-dev-suite/bitcoin-descriptors
Markdown
SKILL.md

Output Descriptors

Descriptor language: a way to describe a set of scriptPubKey templates (addresses) with all metadata needed to derive, scan, and sign them.

Why descriptors

Pre-descriptors, "import this xpub at BIP44 paths" required convention. Different wallets used different paths, making coordination fragile. Descriptors make the script type, derivation, and key origin explicit.

Core syntax

function(args)#checksum

Functions:

FuncOutput type
pk(KEY)P2PK
pkh(KEY)P2PKH
wpkh(KEY)P2WPKH (native segwit single-sig)
sh(SCRIPT)P2SH wrapper
wsh(SCRIPT)P2WSH wrapper (segwit script)
tr(KEY) or tr(KEY, TREE)P2TR (Taproot)
rawtr(KEY)P2TR with raw output key (no tweak) — rare, only when key already includes a commitment
multi(k, KEY1, KEY2, ...)unsorted k-of-n multisig (legacy ordering)
sortedmulti(k, KEY1, KEY2, ...)k-of-n with keys lexicographically sorted at runtime
multi_a(k, KEY1, KEY2, ...)k-of-n multisig in Tapscript (uses CHECKSIGADD)
addr(ADDRESS)hard-coded address
raw(HEX)hard-coded scriptPubKey (advanced/debug)
combo(KEY)shorthand for pk + pkh + wpkh + sh-wpkh (legacy compat)

Keys

A KEY is one of:

  • Hex pubkey (66 char compressed or 130 uncompressed).
  • WIF privkey (signing-capable descriptor).
  • xpub / xprv (extended key).
  • xpub with derivation: xpub.../84h/0h/0h/0/* or xpub.../<0;1>/* (multipath BIP389).

Key origin

Prefix [fingerprint/path] declares where this key came from in a master tree:

[d34db33f/84h/0h/0h]xpub.../<0;1>/*
  • d34db33f = fingerprint of master key (4-byte hex).
  • 84h/0h/0h = path used to reach this xpub from master.
  • <0;1>/* = multipath: receive (0) and change (1) derivation chains.

Key origin is mandatory for any cross-wallet coordination (multisig, hardware signing). Without it, signers can't tell which device should sign.

Checksums

Every descriptor ends with #XXXXXXXX (8 chars, BCH code over the character set). Wallet APIs typically auto-compute via getdescriptorinfo.

Ranges

A descriptor with * in derivation is a ranged descriptor. Import specifies a range:

{
  "desc": "wpkh([d34db33f/84h/0h/0h]xpub.../<0;1>/*)#abcd1234",
  "active": true,
  "range": [0, 999],
  "next_index": 0,
  "timestamp": "now"
}

Range = inclusive integer range of indices to scan.

Examples

Single-sig watch-only

wpkh([d34db33f/84h/0h/0h]xpub.../<0;1>/*)#chk

2-of-3 multisig (P2WSH)

wsh(sortedmulti(2,
  [d34db33f/48h/0h/0h/2h]xpub.../<0;1>/*,
  [b15ec0de/48h/0h/0h/2h]xpub.../<0;1>/*,
  [c0ffee00/48h/0h/0h/2h]xpub.../<0;1>/*
))#chk

Taproot single-sig with key-only

tr([d34db33f/86h/0h/0h]xpub.../<0;1>/*)#chk

Taproot key-path + 2-of-3 script-path (Tapscript multisig)

tr([fp/86h/0h/0h]xpub.../<0;1>/*,
   multi_a(2,
     [a/86h/0h/0h]xpub1.../<0;1>/*,
     [b/86h/0h/0h]xpub2.../<0;1>/*,
     [c/86h/0h/0h]xpub3.../<0;1>/*))#chk

RPC integration

RPCPurpose
getdescriptorinfo "desc"Compute checksum, validate syntax
deriveaddresses "desc" rangeGenerate addresses for a range
importdescriptorsAdd to descriptors wallet (watch-only or signing)
listdescriptorsList descriptors in current wallet

Common bugs

  • Missing key-origin → can't be used in multisig coordination.
  • Hardened path component without an xprv → derivation fails (you can't derive hardened from xpub).
  • Forgetting checksum on import in some implementations → rejection.
  • Mixing multi (unsorted, key order matters for multisig signing) vs sortedmulti — multi requires same exact order on every signer.

See also

发现
标签

此技能尚未发布标签。

版本
最新版本元数据

版本

v2026.09.24

发布时间

2026年9月24日

分类

未分类

许可证

MIT

源路径

skills/bitcoin/protocol/descriptors

默认分支

main

最新提交

9496306

Tree SHA

fe4e2f1