Skip to content

Conversation

@mariocynicys
Copy link
Collaborator

This PR adds support for swaps v2 (TPU) via WalletConnect for UTxO.

The only difference in transaction signing between v1 and v2 swaps are just the co-operative signing step in:

  • funding spend (aka taker payment)
  • taker payment spend (aka finalizing tx)

In these two, each side performs pretty much the same P2SH signing call as before but only stores (and sends) the bare signature returned from WalletConnect. This is analogous to calling calc_and_sign_sighash using a KeyPair.

And then the same process as before goes on: signatures are later combined to create the complete script_sig, etc...

A manual test is added for this feat: test_walletconnect_swap_v2, and this: #2566 (comment) is how to run it.

mariocynicys and others added 30 commits July 31, 2025 14:25
this method will be needed in swaps as we can't use sendTransfer for unlocking HTLCs (i.e. needed for swaps v1 and v2)
which forces us to return Public instead of &Public from this function, and a whole wave of ripple effects all over
the caller needs to provide a map of utxo transactions for the p2pkh inputs, otherwise signing will fail
soley contained in geenrate_and_send_tx
…s in utxo_common

so kdf won't panic cuz we don't have walletconnect
we better remove these panics tho

note that not all these methods are needed for swap v1. but i did them
nontheless
requires manual testing with walletconnect capable wallets by the test step by step
idk why we sent the watcher message one time then moved to the next step and created a handle to keep sending it periodically.
this commit makes it so we don't do the initial send but only create the handler to keep sending it periodically as before (this part didin't change, but the log message was put in the appropriate place)
this is to be handled in a different PR since it seems it might be complext.
we need to sign the watcher msg with the htlc privkey which means we will ask walletconnect for one more signature. this might get entangled with p2p crate code
via reverting back to use derive_htlc_key_pair using the unique swap data
we don't need the custom error message given we already have the error trace using MmError
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR adds support for swaps v2 (TPU) via WalletConnect for UTxO-based cryptocurrencies. It refactors the existing WalletConnect swap functionality to handle both v1 and v2 swap protocols by introducing a new P2SHSigner abstraction that enables cooperative signing for funding and payment spend transactions.

  • Introduces P2SHSigner enum to abstract between KeyPair and WalletConnect signing methods
  • Adds new WalletConnect signing functions for v2 swap cooperative signing
  • Updates swap transaction generation and signing functions to use the new signer abstraction

Reviewed Changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 4 comments.

File Description
wallet_connect_tests.rs Parameterizes test function to support both v1 and v2 swap protocols
wallet_connect.rs Adds v2-specific WalletConnect signing functions with bare signature extraction
utxo_standard.rs Updates v2 swap operations to use new P2SHSigner abstraction
utxo_common.rs Refactors signing logic throughout swap functions to support both KeyPair and WalletConnect signers

Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.

Comment on lines 1498 to +1546
) -> Result<UtxoTx, TransactionErr> {
let secret_hash = dhash160(secret);
let redeem_script = swap_proto_v2_scripts::taker_payment_script(
try_tx_s!(gen_args.time_lock.try_into()),
secret_hash.as_slice(),
gen_args.taker_pub,
htlc_keypair.public(),
gen_args.maker_pub,
Copy link

Copilot AI Sep 12, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This line appears to be a bug fix - changing from htlc_keypair.public() to gen_args.maker_pub. This should be verified as it changes the public key being used in the script generation.

Copilot uses AI. Check for mistakes.
@github-actions
Copy link

@dimxy @shamardy @onur-ozkan
Please review it again.

@github-actions github-actions bot added the [] label Nov 30, 2025
@shamardy shamardy removed the [] label Dec 1, 2025
@github-actions
Copy link

github-actions bot commented Dec 3, 2025

@dimxy @shamardy @onur-ozkan
Please review it again.

@github-actions github-actions bot added the [] label Dec 3, 2025
@github-actions
Copy link

github-actions bot commented Dec 5, 2025

@dimxy @shamardy @onur-ozkan
Please review it again.

@shamardy shamardy removed the [] label Dec 9, 2025
@github-actions
Copy link

@dimxy @shamardy @onur-ozkan
Please review it again.

@github-actions github-actions bot added the [] label Dec 11, 2025
@github-actions
Copy link

@dimxy @shamardy @onur-ozkan
Please review it again.

7 similar comments
@github-actions
Copy link

@dimxy @shamardy @onur-ozkan
Please review it again.

@github-actions
Copy link

@dimxy @shamardy @onur-ozkan
Please review it again.

@github-actions
Copy link

@dimxy @shamardy @onur-ozkan
Please review it again.

@github-actions
Copy link

@dimxy @shamardy @onur-ozkan
Please review it again.

@github-actions
Copy link

@dimxy @shamardy @onur-ozkan
Please review it again.

@github-actions
Copy link

@dimxy @shamardy @onur-ozkan
Please review it again.

@github-actions
Copy link

github-actions bot commented Jan 2, 2026

@dimxy @shamardy @onur-ozkan
Please review it again.

@github-actions
Copy link

github-actions bot commented Jan 7, 2026

@shamardy
Please review it again.

1 similar comment
@github-actions
Copy link

github-actions bot commented Jan 9, 2026

@shamardy
Please review it again.

Base automatically changed from btc-walletconnect-for-swaps to dev January 12, 2026 04:36
@github-actions
Copy link

@shamardy
Please review it again.

@github-actions github-actions bot added the [] label Jan 15, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants