musig() was previously specified as only usable under tr(), but the BIP-390 test vectors already include valid rawtr(musig(...)) descriptors and Bitcoin Core’s descriptor implementation accepts musig() as a generic KEY under both tr() and rawtr(). This change updates the wording to explicitly allow musig() inside rawtr(), aligning the specification with the existing test vectors and Core semantics without changing any behavior.
BIP-390: allow musig() under rawtr() #2050
pull yyhrnk wants to merge 1 commits into bitcoin:master from yyhrnk:fix/bip390-musig-rawtr-usage changing 1 files +2 −2-
yyhrnk commented at 4:15 PM on December 8, 2025: contributor
-
BIP-390: allow musig() under rawtr() 7e8facb479
-
apoelstra commented at 7:00 PM on December 8, 2025: contributor
concept ACK
-
achow101 commented at 7:02 PM on December 8, 2025: member
ACK 7e8facb4793ea8baafc07a5f4e9b28283d7c86d7
- murchandamus added the label Proposed BIP modification on Dec 8, 2025
- murchandamus merged this on Dec 8, 2025
- murchandamus closed this on Dec 8, 2025
-
sipa commented at 6:46 PM on March 2, 2026: member
Just FYI:
rawtritself is not specified in any BIP. -
jeanpablojp commented at 12:07 AM on August 5, 2026: none
Nobody seems to have picked this up since your note, so I'm writing it.
It'll be its own BIP with a row in BIP 380's Appendix B: the appendix has been one BIP per expression group so far, and both
musig()andsp()got their own numbers this year. You wroterawtrin Core and co-authored 386, so if you think it belongs in 386 instead, I'd rather hear it now than at the PR.What makes it awkward today is that BIP 390 already leans on it:
musig()can only appear insidetr(),rawtr()orsp(), and two of its test vectors arerawtr()descriptors. A published BIP depends on an expression the BIPs never define. Outside the repo people fill the blank by guessing, and bdk-ffi's test coverage listsrawtras BIP-386.My plan is test vectors first, generated against master with
getdescriptorinfoandderiveaddresses, then the text following 384 and 385, then a post to the list before opening anything here. I'd keep it torawtr(KEY)and leaverawnode()/rawleaf()where they are in #1721. -
johnnylee850116-lgtm commented at 8:20 AM on August 7, 2026: none
This is not correct