Skip to content

Conversation

@OttoAllmendinger
Copy link
Contributor

@OttoAllmendinger OttoAllmendinger commented Nov 5, 2025

Implements half-signing for script types

  • p2sh
  • p2shP2wsh
  • p2wsh
  • p2tr (legacy) script path
  • p2trMusig2 script path

For bitcoin-like networks (bitcoin, litecoin, dogecoin, dash)

Missing:

  • p2trMusig2 key path
  • Bcash/Ecash/BitcoinGold

This PR enhances the WASM UTXO module with improved PSBT handling, key
management, and testing utilities:

  • Add BitGoPsbt.sign() method for direct transaction signing
  • Create XprvTriple struct for type-safe wallet key management
  • Implement PsbtStages and PsbtInputStages for structured test fixtures
  • Improve script type naming for better clarity:
    • P2trP2trLegacyScriptPath
    • P2trMusig2P2trMusig2ScriptPath
    • TaprootKeypathP2trMusig2TaprootKeypath
  • Add half-signing test infrastructure for unsigned PSBTs
  • Refactor test utilities to use the new XprvTriple directly

These changes provide a more robust and type-safe implementation for PSBT
handling while improving the developer experience with better naming and
more structured test fixtures.

Issue: BTC-2652

OttoAllmendinger and others added 7 commits November 5, 2025 12:00
Introduces PsbtStages and PsbtInputStages types to simplify testing across
different signing stages (unsigned, halfsigned, fullsigned). Refactors test
helpers to use these new types for more structured testing.

Issue: BTC-2652

Co-authored-by: llm-git <llm-git@ttll.de>
Implement a helper function for testing that a user signature can be
applied to an unsigned PSBT. Sets up the test framework but leaves the
implementation as a todo for later.

Issue: BTC-2652

Co-authored-by: llm-git <llm-git@ttll.de>
Improves wallet key management by adding XprvTriple struct to replace
loose vector handling of extended private keys. This provides:

- Type safety with fixed array instead of Vec
- Named accessor methods for keys (user, backup, bitgo)
- Conversion utility to RootWalletKeys
- Simplifies test fixtures with direct key access

Issue: BTC-2652

Co-authored-by: llm-git <llm-git@ttll.de>
Use fixtures::XprvTriple instead of RootWalletKeys in test utils to
simplify signature testing with wallets.

Issue: BTC-2652

Co-authored-by: llm-git <llm-git@ttll.de>
Implement a sign method for the BitGoPsbt struct that wraps the underlying
miniscript PSBT signing capability. This allows direct signing of transactions
with keys that implement the GetKey trait and is tested with existing fixtures.

Issue: BTC-2652

Co-authored-by: llm-git <llm-git@ttll.de>
Update ScriptType enum variants to have more consistent and descriptive
naming that better reflects their purpose:
- P2tr -> P2trLegacyScriptPath
- P2trMusig2 -> P2trMusig2ScriptPath
- TaprootKeypath -> P2trMusig2TaprootKeypath

Rename test functions to use more concise and consistent naming pattern.
Functions now use "suite" suffix instead of verbose "generation_from_fixture"
descriptions.

Issue: BTC-2652

Co-authored-by: llm-git <llm-git@ttll.de>
Remove unused expected_pubkey variable in the singlesig wallet script tests
since it's not being used in the test assertions.

Issue: BTC-2652

Co-authored-by: llm-git <llm-git@ttll.de>
@OttoAllmendinger OttoAllmendinger changed the title feat(wasm-utxo): implement PSBT signing and improve test infrastructure feat(wasm-utxo): implement partial PSBT signing and improve test infrastructure Nov 5, 2025
@OttoAllmendinger OttoAllmendinger marked this pull request as ready for review November 5, 2025 13:06
@OttoAllmendinger OttoAllmendinger requested a review from a team as a code owner November 5, 2025 13:06
Support adding user signatures to P2TR script path inputs using the
tap_script_sigs field for both legacy script path and Musig2 script path
formats.

Issue: BTC-2652

Co-authored-by: llm-git <llm-git@ttll.de>
@OttoAllmendinger OttoAllmendinger merged commit 329906c into master Nov 6, 2025
1 check passed
@OttoAllmendinger OttoAllmendinger deleted the BTC-2652.cosign-btc branch November 6, 2025 08:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants