fix: F-2026-18826 | [Dual Defense] Receipt RPC Error Treated as Not-Found Can Remint After Destination Already Paid - #313
Merged
Conversation
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.
F-2026-18826 Receipt RPC error treated as not-found
Issue
VerifyBroadcastedTxreturnedfound=false, err=nilon any receipt RPC error, so a transient failure was indistinguishable from "the tx is not there".Approach taken
receipt == nilas a verdict. The RPC client already returned(nil, nil)for not-found and(nil, err)for failures, so the distinction only had to stop being discarded a layer up.ErrNotFound, so that maps to a verdict and everything else propagates. Propagating uniformly would turn every missing tx into an unbounded retry.TxBuilderinterface. Its absence is why the implementations drifted from the resolver's expectation.vErr != nilit already fell through tocheckNonceAndMarkBroadcasted.Tests
ErrNotFoundstay verdicts.ErrNotFoundbranch fails the SVM test.Out of scope
Ballot keying on
Successand the remint viahandleFailedOutboundare inx/uexecutor.