feat: implement optimistic mutation queue with automatic rollback and… - #34
Merged
elizabetheonoja-art merged 1 commit intoJun 20, 2026
Conversation
… retry in useEscrow
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.
closes #21
Description
This pull request implements an optimistic mutation queue for Stellar/Soroban contract interactions to prevent the UI from remaining stuck during block confirmations (which usually take 3–5 seconds) or when transactions are dropped/fail.
Key Changes
Optimistic State Queue: Modified useEscrow hook to support a history stack of mutations in states: idle | pending | confirmed | failed.
History Cap: Configured state history to keep at most 50 entries, rolling off older mutations.
Timestamps: Added submittedAt and confirmedAt Unix timestamps on all mutation objects.
Automatic Rollback: Intercepts onChainSubmit failure to immediately execute the onRollback(data) hook and update status to failed.
Prevent Duplicate Rollbacks: Implemented useRef<Set> tracking of active pending mutation IDs. If a mutation has already been cancelled or handled, duplicate rollbacks are prevented.
Manual Rollback (rollback): Cancels a pending mutation by clearing it from active tracking, invoking onRollback, and setting status to idle.
Retry Mechanism (retry): Allows re-submission of failed mutations, reviving the mutation state back to pending.