Multisig SendEnd is not retry-safe when the transaction is already on-chain - #94
Open
dcorral wants to merge 1 commit into
Open
Multisig SendEnd is not retry-safe when the transaction is already on-chain#94dcorral wants to merge 1 commit into
dcorral wants to merge 1 commit into
Conversation
Contributor
Author
|
Proposed fix is an already-broadcast check in the Approved branch before finalizing:
This was already implemented in the UTEXO fork (UTEXO-Protocol#46) |
dcorral
force-pushed
the
repro-multisig-sendend
branch
from
July 27, 2026 19:12
d4bdab7 to
8ff2ae5
Compare
Member
|
Thanks for the PR. This issue falls into a wider fix bucket we've already scheduled: every hub operation should have a deterministic outcome which is the same for all cosigners. E.g., in addition to this, the outcome should not depend on proxy data as it can be wiped, causing inconsistencies between cosigners. We'll tackle that as a whole, this PR can remain open as a reminder. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Completing an approved multisig operation unconditionally finalizes the combined PSBT before executing (
handle_operation,OperationStatus::Approvedbranch). If the operation's transaction is already broadcast, because another cosigner finalized and broadcast it or this party did but lost its local state, a party whose collected response PSBTs don't reach threshold signatures fails withCannotFinalizePsbton everysync_with_hubretry, even though the transaction is already confirmed on-chain and visible in the party's own BDK graph. Since operations are processed sequentially, the stuck operation also blocks every later operation for that party, permanently.A response can end up under-signed because neither the client nor the hub verifies that an ack's response PSBT contains the responder's signature (only
psbt_signature_count > 0is checked), so the hub can approve an operation whose combined files can never finalize.