FREE EXPERT TABLETOP · WORKS OFFLINE

Same signature or new authorization?

Six fictional incidents. Use the original signature, blockhash lifetime, execution result, and business receipt to decide whether to rebroadcast, keep waiting, or prepare a new action.

Practice only; no live transaction. This casebook makes no wallet prompt or RPC request, and it does not store answers.

A REPEATABLE RECOVERY PATH

Preserve identity, then follow evidence

  1. 01 · IDENTIFYWhich exact message?

    Keep the cluster, signature, serialized bytes, and blockhash lifetime together.

  2. 02 · OBSERVEWhat actually happened?

    Distinguish wallet cancellation, delivery acknowledgement, status, execution error, and committed state.

  3. 03 · RECOVERIs this the same action?

    Rebroadcast identical bytes while valid. After expiry, reconcile history and business state before new signatures.

A timeout is not an execution result. A new signature may be a new business action, even when the screen says “retry.”

Preserve the original signature and last valid block height. While the recent blockhash remains valid, rebroadcast only identical signed bytes and keep checking that signature. After expiry, search history and reconcile account or receipt state before building a new message and collecting fresh signatures. A failed instruction can still charge network fees, and a fresh signature for the same intent requires durable idempotency protection.
Transaction delivery, blockhash expiry, chain evidence, and business-level uniqueness are separate recovery checks.

FORMATIVE · UNSCORED · NOT SAVED

Work the incidents

Choose the safest next action, then read the evidence boundary.

01

RPC TIMEOUT · STILL VALID

The RPC call times out after the wallet returns a signature. The current block height is below the stored last-valid height.

Signed message
Fully signed and unchanged
Original signature
Known and retained
Lifetime
Current height 840100 · last valid 840140
What should delivery recovery do?
02

COMMITMENT · WAITING FOR FINALITY

A provider reports the withdrawal as confirmed. The application records completion only after finalized state.

Observed status
Confirmed
Required evidence
Finalized at the selected cluster
Business action
One withdrawal, already submitted
What should the learner-facing status say?
03

EXPIRED MESSAGE · INCOMPLETE LOOKUP

The stored last-valid height has passed. One RPC returns null from its recent status cache and a confirmed getTransaction lookup returns null.

Original signature
Still available
Status lookup
Recent cache only; no history search
Application receipt
Not yet reconciled
What evidence should come before a new authorization?
04

INSTRUCTION ERROR · FEE EVIDENCE

Finalized transaction metadata contains an InstructionError. The transfer state is unchanged, and the fee payer's balance fell by the network fee.

Execution result
Finalized with an instruction error
Program accounts
Instruction state rolled back
Fee payer
Network fee may still be charged
What is the accurate recovery report?
05

WALLET REJECTION · BEFORE SUBMISSION

The wallet rejects a signature request. The application confirms that its sendTransaction method was never called.

Wallet response
User rejected before signing
Submission call
Never made
Chain evidence
No transaction signature was submitted by this client
How should the application record this?
06

TWO TABS · SAME BUSINESS INTENT

Two tabs sign a withdrawal for the same order using different recent blockhashes. Both transactions have different signatures.

Transaction identities
Distinct messages and signatures
Application intent
One order and one withdrawal
Weak guard
A browser-only disabled button
Which control prevents paying twice?