This is a subset of #21365, to aide review.
This adds support tr(KEY) or tr(KEY,SCRIPT) or tr(KEY,{{S1,{{S2,S3},...}},...}) descriptors, describing Taproot outputs with specified internal key, and optionally any number of scripts, in nested groups of 2 inside {/} if there are more than one. While it permits importing tr(KEY), anything beyond that is just laying foundations for more features later.
Missing:
- Signing support (see #21365)
- Support for more interesting scripts inside the tree (only pk(KEY)is supported for now). In particular, a multisig policy based on the newOP_CHECKSIGADDopcode would be very useful.
- Inferring tr()descriptors from outputs (given sufficient information).
- getaddressinfosupport.
- MuSig support. Standardizing that is still an ongoing effort, and is generally kind of useless without corresponding PSBT support.
- Convenient ways of constructing descriptors without spendable internal key (especially ones that arent’t trivially recognizable as such).