Skip to content

feat(bob): concurrent swaps#971

Draft
binarybaron wants to merge 11 commits into
masterfrom
feat/bob-concurrent-swaps
Draft

feat(bob): concurrent swaps#971
binarybaron wants to merge 11 commits into
masterfrom
feat/bob-concurrent-swaps

Conversation

@binarybaron
Copy link
Copy Markdown

@binarybaron binarybaron commented Apr 28, 2026

No description provided.

@binarybaron
Copy link
Copy Markdown
Author

We should display the final state of the swap until the user acknowledges it.

@binarybaron
Copy link
Copy Markdown
Author

We should move the "cancel timeline" from the "history" page to the "swaps" page and hide it somewhat (make it expandable).

@binarybaron
Copy link
Copy Markdown
Author

Issue:

run_exclusive_initiation releases the initiation lock at swap_manager.rs:642 before the lock-tx is broadcast. UTXO selection happens inside the spawned task (TxLock::new → wallet.send_to_address); the wallet mutex is method-level, so two concurrent buy_xmr calls can build PSBTs from the same UTXOs.

@Einliterflasche
Copy link
Copy Markdown

Einliterflasche commented May 18, 2026

The interaction with the Watcher needs to be updated. The watcher still does in-line cancel_and_refund but should use the swap manager now. At least prevent the swap manager from spawning another state machine while the watcher is refunding

@binarybaron
Copy link
Copy Markdown
Author

The interaction with the Watcher needs to be updated. The watcher still does in-line cancel_and_refund but should use the swap manager now. At least prevent the swap manager from spawning another state machine while the watcher is refunding

Yes you are right but the whole watcher should become redundant anyway... It should not be required if the state machine is properly working. The watcher should be abolished at some point.

@Einliterflasche
Copy link
Copy Markdown

Einliterflasche commented May 18, 2026

I have 2 swaps where I had to do the XMR redeem manually which are now always automatically resumed - and keep failing. There needs to be a solution to this. Some kind of manually marking swaps as "do not resume" which is persisted across restarts.

Apart from that, I think we should change "Suspend" in the GUI to something like "Stop" or "Halt".

@binarybaron
Copy link
Copy Markdown
Author

I have 2 swaps where I had to do the XMR redeem manually which are now always automatically resumed - and keep failing. There needs to be a solution to this. Some kind of manully marking swaps as "do not resume" which is persisted across restarts.

Apart from that, I think we should change "Suspend" in the GUI to something like "Stop" or "Halt".

"Stop" or "Halt" seems like this actually stop the timelocks from counting down or does something on a protocol level. I dont see them being clearer than "suspend".

@Einliterflasche
Copy link
Copy Markdown

"Stop" or "Halt" seems like this actually stop the timelocks from counting down or does something on a protocol level. I dont see them being clearer than "suspend".

Suspend has the same issue, except I have a much harder time imagining what "suspend" means. It's technical jargon.
We need to warn anyway that this doesn't stop the swap / refund window from progressing.

@Einliterflasche
Copy link
Copy Markdown

I'll remove the watcher.

What do you propose for the manually-finished-swap problem? We could just add a new db table with columns like swap_id, should_not_resume.

@binarybaron
Copy link
Copy Markdown
Author

I'll remove the watcher.

What do you propose for the manually-finished-swap problem? We could just add a new db table with columns like swap_id, should_not_resume.

We could also bundle it with #932

@binarybaron
Copy link
Copy Markdown
Author

Not sure if removing the watcher is the move yet... its a reasonable safety fallback mechanism.

@Einliterflasche
Copy link
Copy Markdown

Einliterflasche commented May 18, 2026

It also turns out we use the watcher for balance and timelock updates. I'll keep the watcher and make it interact with the swap manager.

We could also bundle it with #932

Yes. Although there still should be an option to stop a swap from resuming without fully deleting it. It needs to be done as part of this PR though. Otherwise it gets really annoying for people in this situation of which there are a few.

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.

2 participants