#35443 tests: add functional test for tr musig2 miniscript decaying multisig

ReviewabilityReviewsAgreementSize
#35443 mjdietzx tests: add functional test for tr musig2 miniscript decaying multisigAuthor silent 151d1Positive13 + 177 tests
  • Add end-to-end tests for wallet PSBT flows combining MuSig2 aggregate keys with Miniscript timelocks
  • Provide documentation and regression coverage for decaying multisig setups across signer wallets
  • Author has been silent for 146 days, so reviews may wait a long time for a response
  • Approval without stated reasons (rkrux)
  • Unaddressed suggestion to avoid mentioning halvening timelocks in the doc description (rkrux)
  • 13 lines added or modified outside tests
  • 177 lines added or modified in tests
  • 0 lines removed in total
  • 3 files, 1 commits
Wallet#77 of 92
P3 · test coverage
  • P3 because it provides end-to-end integration tests for complex multi-party descriptor workflows
  • Guards against regressions in wallet PSBT handling across watch-only and single-key signer wallets
Reviewability: ReadyStalePaused
Agreement: StrongPositivePositive w/ caveatsNeutralMildDisputedBlockedCrickets
Reviews: current code-review ACKs, then (+stale ACKs) and -NACKs; greener = more ACKs.
Size: lines added or modified outside tests, then in tests; greener = smaller.

Goal

Adds a new functional test, wallet_taproot_decaying_multisig_descriptor_psbt.py, exercising a 4-of-4 decaying multisig descriptor that uses MuSig2 for the Taproot key path and Miniscript for timelocked script-path fallbacks. It also adds an example of this descriptor pattern to doc/descriptors.md.

Problem: While Bitcoin Core supports MuSig2 and Miniscript descriptors, there was no end-to-end integration test or clear documentation demonstrating how wallet PSBT workflows handle combining a MuSig2 aggregate key path with timelocked Miniscript script paths across watch-only and single-key signer wallets.

Reviewability

Stale · Author silent 151d

No author activity for 151 days; a review may wait a long time for a response.

Waiting on (from the thread read):

  • author: response to doc description suggestion 2026-10-27

Agreement

Positive

support without stated reasons, no open objection (rkrux, rkrux)

Thread notes: rkrux dropped their question about the assert placement (rc:4249018181) and gave an ACK (r:5668461708), while suggesting in rc:4389724651 that halvening timelocks be omitted from the doc description.

Objections, suggestions, and questions:

ReviewerTypeHarm, request, or questionStatusMust beAuthor repliedQuote
rkrux (member)suggestion, maintenancemerging the two test files into one to avoid code and method duplicationanswered · author explained preference for keeping tests separate for documentation clarityansweredyes2026-06-03: 'Consider merging these two files into one while getting rid of the duplication?'
Status from: 2026-06-03: mjdietzx: 'my preference is keeping these tests separate to prioritize them being maximally simple and easy to follow.'
rkrux (member)question, correctnesswhether the assert needs to be inside the loopaccepted · reviewer dropped the question after realizing the assert is fine outside the loopansweredno2026-10-12: 'Doesn't this assert need to be in the loop?'
Status from: 2026-10-27: rkrux: 'Nvm, this seems fine outside the loop to check the final completeness of the PSBT post both the rounds.'
rkrux (member)suggestion, maintenanceavoid mentioning halvening-related timelocks in the doc description since the example does not contain themopenansweredno2026-10-27: 'This particular example doesn't contain any halvening related timelocks. It can be avoided in the description as well.'

Support:

  • rkrux (member) (Concept ACK, 2026-06-03): Concept ACK e588094 [not substantive]
  • rkrux (member) (ACK, 2026-10-27): lgtm ACK e5880944cba298c04ad5fe4acd2c6208784554cc [not substantive]

Participants:

  • rkrux (member, support, 7 statements 2026-06-03 to 2026-10-27): ACK; suggested avoiding halvening timelocks in doc description, dropped question on assert location, previously suggested combining tests

Files

177 lines under test/bench/ci.

  • test/functional/wallet_taproot_decaying_multisig_descriptor_psbt.py +176/-0
  • doc/descriptors.md +13/-0
  • test/functional/test_runner.py +1/-0

Card

The short text the ranking pass compares across PRs.

Adds a functional test and documentation example for a Taproot decaying multisig wallet combining MuSig2 key-path spends with Miniscript timelocked script-path fallbacks. It verifies that single-key signer wallets can coordinate key-path and script-path spends using standard PSBT workflows without importing the multisig descriptor. The PR is clean and received a Concept ACK from rkrux, but the author has been silent for 105 days.

Data

dossier JSON · extract JSON · model ledger, generated 2026-10-28T01:22, confidence high, input hash 401adf62d37be15d
thread read through 2026-10-27 (8 statements), head e5880944cb
labels: Tests

Categories

Wallet

P3 · test coverage

Adds functional test coverage for wallet PSBT workflows combining MuSig2 aggregate key paths with timelocked Miniscript script paths across watch-only and single-key signer wallets. While Bitcoin Core already supported these primitives, this provides useful end-to-end integration verification against regressions in complex multi-party descriptor workflows.

Membership: Adds wallet_taproot_decaying_multisig_descriptor_psbt.py to test wallet PSBT workflows and descriptor management.

Factors: security/stability 0, bug 0, performance 0, user value 1, leverage 0