The Tool Desk
Outbyte PC Repair FREERepair Windows errors before they cause bigger problemsFix Now →Outbyte Driver Updater FREEFix the driver behind crashes, sound loss and screen glitchesFind Drivers →A Solana transaction can report an execution error, charge a fee, and still remain valid for submission until its recent blockhash expires. “Failed” describes what happened during execution; it does not necessarily describe whether the signed message can still be accepted by the cluster. Keep the original signature, track its blockhash lifetime, and do not ask the user to sign a replacement until the first transaction is confirmed or has demonstrably expired.
What “failed” means on Solana
Solana separates transaction execution from transaction lifetime. Once a transaction passes basic validation and reaches the execution stage, its instructions run in order. If an instruction returns an error, the state changes made by the transaction’s instructions are rolled back. The transaction fee is not rolled back: the fee payer is still charged for processing the transaction.
As an Amazon Associate I earn from qualifying purchases.
That execution error does not instantly erase the signed message from the network’s processing window. A transaction carries a recent blockhash, and validators use that blockhash to determine whether the message is still recent enough to process. The message can therefore be within its validity window even after an execution failure has been reported.
This distinction explains a common user experience: a wallet or application displays an error, yet a later submission or status lookup shows the same signature being processed. The error may have come from one instruction, while the blockhash remains current. Treating the error as automatic permission to create and sign a second transaction can produce duplicate actions, confusing balances, or a second fee.
#1 Best Overall
- Effortlessly build your crypto portfolio via the all in one Ledger Wallet app: buy, sell, send, receive, swap, stake and more across popular blockchains. 15,000+ coins & tokens in a single dashboard. Keep a close eye on the market. Compare service providers. Track performance. Get timely alerts. Build your portfolio with confidence.
- Enjoy Bluetooth connectivity, iOS access, and hours of battery use with this mobile-first, secure backup signer. Freedom you can depend on.
- Genuine Check: confirm your signer is authentic during setup with the Ledger Wallet app.
- Protect your signer: keep it in mint condition at all times with a bespoke Pod or Case to avoid scratches and everyday wear and tear.
Recent blockhashes give transactions a finite lifetime
An ordinary Solana transaction uses a recent blockhash. Solana’s transaction reference describes a processing-age limit of 150 slots for recent blockhashes. A slot is a unit of validator scheduling, not a fixed number of seconds, so 150 slots must not be converted into a universal timer.
When your application fetches a blockhash, the response includes both the blockhash and a lastValidBlockHeight. Save both values with the transaction you build. The blockhash identifies the signed message, while the last-valid block height gives you the protocol-based expiry boundary for that particular transaction.
Block height is the reliable expiry signal. Wall-clock rules such as “retry after 30 seconds” are unsafe because slot production can vary, an RPC node can lag, and network conditions can change. A transaction that appears quiet for a short period may still be accepted before its last valid block height.
Do these 3 things before closing this tab:
1Repair Windows errors before they cause bigger problems2Scan for outdated or missing drivers - takes under a minute3Clear out junk files and repair common Windows errorsWhy a missing status is not proof of expiry
A signature-status query answers what the cluster currently reports for that signature. It does not by itself prove that a transaction can no longer land. A status may be temporarily absent because the transaction has not reached the node you queried, the node’s history is limited, or propagation is still in progress.
Use getSignatureStatuses with the same confirmation commitment your application uses elsewhere. Record the returned signature and continue checking that same signature. Do not create a new user-facing signing request merely because one status request returns null.
Confirmation commitment matters because “processed,” “confirmed,” and “finalized” represent different levels of cluster observation. Pick a policy that fits the action—for example, an exchange withdrawal may require finalized status—then apply it consistently to status checks and block-height checks. A temporary lack of the chosen commitment is not equivalent to expiry.
Rank #2
- Proven security at scale: Over 9 years and millions of cards issued with no known remote hacks, while military‑grade EAL6+ security keeps your private keys locked inside the chip. Your cryptocurrencies stay strongly protected from online attackers.
- Tap once to manage your entire crypto wallet across 90 blockchains - no USB cables or Bluetooth, no batteries, no setup. Access 14,100+ coins & tokens, DeFi, NFTs, and staking instantly from your phone
- Smart backup: Use your second Tangem Wallet as your Backup keys with end‑to‑end encryption; no more papers, pictures. If one card is lost, the remaining can still restore full access, with an optional seed phrase available for advanced users.
- Engineered to last up to 25 years: Waterproof (IP69K), shockproof and tested for extreme temperatures from −25°C to 50°C. A durable cold wallet with long‑term protection and independently audited security.
- Trusted by 6 million users worldwide (4.9 App Store, 4.8 Google Play) - buy, sell, swap, stake, and spend cryptocurrency directly. The secure offline storage wallet designed for how people actually use crypto wallets
A safe retry sequence for an ordinary transaction
The following sequence prevents a replacement from racing the original message.
Windows Errors? Fix Them Before They Spread
Repair common Windows errors and clear accumulated junk for a smoother, more stable PC - no reinstall needed.Free scan · no reinstallCrashes, No Sound, or Screen Glitches?
Random freezes, missing sound and display glitches usually trace back to one bad driver. Find and replace yours safely.Free scan · under a minute- Fetch and retain the lifetime data. Request a recent blockhash, then store the returned blockhash and
lastValidBlockHeightalongside the user action and the transaction’s serialized message. - Build and sign once. Construct the transaction with its fee payer, instructions, account list, and blockhash. Collect every required signature and retain the resulting transaction bytes. Keep the user’s action linked to the resulting signature.
- Submit once and record the signature. Send the signed transaction and persist the signature returned by the RPC endpoint. If your infrastructure retries transport delivery, retry delivery of the same signed bytes rather than asking the user to sign a different message.
- Poll the original signature. Call
getSignatureStatusesfor that signature. If the status reports an execution error, show the error and explain that the fee was charged, but continue tracking the transaction’s lifetime until it is settled or expires. - Check block height for expiry. Poll
getBlockHeightat the selected commitment. The transaction’s recent-blockhash window has expired when the observed block height exceeds the savedlastValidBlockHeight. - Decide only after settlement. If the signature reaches the required commitment, stop. If the blockhash expires without the required confirmation, mark the original attempt as expired and begin a new transaction flow.
- Rebuild after expiry. Fetch a fresh blockhash and create a new message. A changed blockhash creates different signed bytes, so collect all required signatures again before submitting the replacement.
For asynchronous transfers, Solana’s exchange-integration guidance specifically advises waiting for blockhash expiry before retrying a withdrawal that has not appeared confirmed or finalized. The same principle is useful for wallets and payment services: settle the original attempt or prove expiry before creating a second one.
Why changing a transaction requires new signatures
Signatures authorize a specific message, not an abstract intention such as “send 1 SOL.” The signed message includes the fee payer, recent blockhash, instruction order, account list, and instruction data. Changing any of those fields changes the message bytes.
Changing the blockhash alone is enough to invalidate every signature already collected. The same is true if you change the destination account, amount, fee payer, account metadata, instruction order, or instruction data. A replacement transaction is therefore a new authorization event, even when it represents the same business action.
Solana’s partial-signing documentation states: “Changing the fee payer, blockhash, instruction order, account list, or any instruction data produces a different message and invalidates every signature already collected.” In practice, never copy old signatures onto a rebuilt transaction and assume they remain valid. Re-run the complete signing flow with every required signer.
Quick wins for a faster PC:
Repair Windows errors before they cause bigger problemsFix Now →Scan for outdated or missing drivers - takes under a minuteDriver Scan →Recent-blockhash and durable-nonce transactions compared
| Property | Recent-blockhash transaction | Durable-nonce transaction |
|---|---|---|
| Lifetime | Limited by the recent-blockhash processing-age window; track the transaction’s lastValidBlockHeight. |
Uses a stored nonce, allowing delayed or offline signing outside the ordinary recent-blockhash window. |
| Execution failure | Instruction state changes roll back and the fee remains charged. | The nonce advancement and fee remain committed even when a later instruction fails. |
| Next attempt | Wait for confirmation or expiry, then fetch a fresh blockhash and gather signatures on a new message. | Refetch the advanced nonce and create a fresh message and signing flow. |
| Main risk | A missing or late status is mistaken for expiry, causing a premature replacement. | An old signed transaction is reused even though its nonce has already been consumed; nonce validation and execution failure are also confused. |
Durable nonces are an on-chain account-and-instruction mechanism, not merely a longer timer. Solana’s current durable-nonce documentation warns that the feature may be deprecated in a future release, so confirm its status before designing a new system around it.
Rank #3
- Seedless by design, nothing to steal: Your private key is generated inside the EAL6+ chip and never leaves it. No seed phrase is shown or typed at setup, so a tampered device, keylogger, or phishing site has nothing to capture. 9+ years, millions of card.
- Tap once to manage your entire crypto wallet across 90 blockchains - no USB cables or Bluetooth, no batteries, no setup. Access 16,100+ coins & tokens, DeFi, NFTs, and staking instantly from your phone
- Backup without a seed phrase: Your wallet is copied to 2 backup cards with end-to-end encryption, so there are no words on paper to lose or leak. Keep them in separate places; if one card is lost, the others restore full access. Optional seed phrase for advanced users.
- Engineered to last up to 25 years: Waterproof (IP69K), shockproof and tested for extreme temperatures from −25°C to 50°C. A durable cold wallet with long‑term protection and independently audited security.
- Trusted by 6 million users worldwide - buy, sell, swap, stake, and spend cryptocurrency directly. The secure offline storage wallet designed for how people actually use crypto wallets
Durable nonce failures need a different recovery path
A durable-nonce transaction advances the nonce before the transaction’s other instructions execute. If the transaction passes nonce validation and then an instruction fails, the nonce advancement is still committed and the fee is still charged. The old signed transaction cannot be treated as an unused attempt.
After processing, read the nonce account again. If another attempt is required, use the updated nonce value to build a completely new message and collect signatures again. Reusing the consumed nonce produces a different failure mode from an instruction error.
Nonce validation can fail before execution. Examples include an already-used nonce, an invalid or missing nonce account, or a missing nonce-authority signature. In that pre-execution validation case, the documented behavior is that no fee or instruction state change is committed. Do not apply that rule to a transaction that passed validation and later failed an instruction; those transactions have different fee and state outcomes.
Common errors and what they tell you
| Observed condition | What it generally means | What your application should do |
|---|---|---|
| Instruction execution error | The transaction reached execution; instruction state changes were reverted and the fee was charged. | Show the failure, retain the signature, and do not assume the blockhash has expired. |
AlreadyProcessed |
The pipeline recognized a message already present in its status cache. | Treat it as a duplicate-message signal, not as proof that your retry design is safe. Reconcile the original signature and user action. |
BlockhashNotFound |
The blockhash is no longer in the recent queue, and the transaction is not a valid durable-nonce transaction. | Fetch a new blockhash, rebuild the message, and obtain all required signatures again. |
| Nonce validation failure | The nonce was already used, the nonce account or authority data was invalid, or the required authority signature was missing; execution did not begin. | Correct the nonce account or authority data and start a new signing flow. |
| Status temporarily missing | The queried node has not reported the signature at the requested commitment. | Continue checking the same signature and monitor block height; do not infer expiry from one missing response. |
Implementation pattern for an RPC client
The essential state machine is small. Store transaction metadata durably enough that a process restart does not cause a second signing prompt.
const { blockhash, lastValidBlockHeight } = await connection.getLatestBlockhash(commitment);
transaction.recentBlockhash = blockhash;
transaction.feePayer = feePayer;
const signed = await signWithAllRequiredSigners(transaction);
const signature = await connection.sendRawTransaction(signed.serialize());
for (;;) {
const status = await connection.getSignatureStatuses([signature]);
const value = status.value[0];
if (value?.err) {
recordExecutionFailure(signature, value.err);
// Keep tracking lifetime; do not sign a replacement here.
}
if (value?.confirmationStatus === requiredCommitment) {
return { outcome: "confirmed", signature };
}
const height = await connection.getBlockHeight(commitment);
if (height > lastValidBlockHeight) {
return { outcome: "expired", signature };
}
await delay(pollInterval);
}
The exact SDK calls and commitment names can vary by client library, but the invariants do not: retain the original signature, compare block height with the saved boundary, and rebuild only after expiry. If an execution error is terminal for the business action—for example, an account has insufficient funds—your application can stop polling for success while still recording the signature and its fee consequence. It should not silently create a second signed transfer.
Designing the user experience so users do not sign twice
Separate “submitted,” “failed,” and “expired” states
Use labels that reflect protocol state. “Submitted—awaiting confirmation” means the signature is being tracked. “Execution failed” means the cluster reported an error and the fee was charged. “Expired without confirmation” means the recent-blockhash lifetime ended before the required commitment was observed. These are not interchangeable messages.
Rank #4
- EAL5+ CERTIFIED SECURE ELEMENT + FINGERPRINT PROTECTION — Your private keys stay encrypted offline on a certified EAL5+ chip, the same security tier used in EMV bank cards. Built by DCENT, securing crypto since 2018. Fingerprint authentication adds a second layer no PIN-only wallet can match.
- 10,000+ ASSETS NATIVE ON 100+ BLOCKCHAINS — Hold Bitcoin, Ethereum, XRP, Solana, Cardano, popular stablecoins (USDT, USDC), and NFTs in one wallet. No third-party apps, no fragmented setup — every supported asset works straight out of the box.
- TAP-TO-SIGN MOBILE EXPERIENCE — Pair your wallet with the DCENT mobile app over Bluetooth. Manage tokens, review transactions, and access in-app swap features directly from your phone — no cables, no desktop required.
- WEB3 & dAPP ACCESS VIA METAMASK — Connect to MetaMask and other browser extension wallets to manage NFTs, claim airdrops, and access dApps. A large screen and intuitive 4-button interface keep every transaction clearly visible before you sign.
- SEAMLESS FIRMWARE UPDATES & 30-DAY MONEY-BACK GUARANTEE — Apply security updates without resetting your wallet or migrating funds. Backed by Amazon's 30-day money-back guarantee — your purchase is risk-free.
Disable duplicate signing prompts
Associate one application action with one active signature attempt. If the interface receives a second click while the first attempt is unresolved, show the existing transaction status instead of opening another wallet approval dialog. Persist an idempotency key for the business action so a page refresh cannot create an unrelated replacement.
Make replacement authorization explicit
After expiry, tell the user that the original message is no longer valid and that a new transaction must be authorized. Display any changed amount, recipient, fee payer, or instruction data before requesting signatures. A new blockhash alone technically changes the message, even when all visible payment details remain the same.
Keep an audit record
Store the signature, serialized message or message hash, blockhash, last-valid block height, commitment policy, returned error, and timestamps. This record lets support staff distinguish an execution failure from an expired transaction, a duplicate submission, or a nonce validation problem.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Practical troubleshooting scenarios
The wallet says “failed,” but the recipient later received funds
Look up the original signature rather than sending another payment. The wallet may have displayed an instruction-level error from one attempt while a separate submission or prior attempt succeeded, or it may have shown a temporary RPC problem. Reconcile the signature at the chosen commitment and inspect the account history before taking action.
The signature is still missing after several polls
Query the same signature through a healthy RPC endpoint, verify that your commitment setting is consistent, and compare the current block height with the saved lastValidBlockHeight. Until the height passes that boundary, absence from one status response is not proof that the signed transaction cannot land.
Free tools Windows power users keep installed
One-click scans. No signup required.
The blockhash expired
Mark the original attempt expired, fetch a fresh blockhash, rebuild the transaction, and collect every required signature. Do not alter only the blockhash in a serialized transaction and reuse the old signatures.
Best Value
- Dual-chip architecture for maximum protection: The next-gen, fully auditable TROPIC01 chip works alongside a certified EAL6+ Secure Element—completely NDA-free—to deliver radically transparent, industry-leading defense against physical attacks.
- Quantum-ready security: Get protection against future threats with the first-ever hardware wallet designed with quantum-ready architecture.
- See every detail with confidence: Our largest high-resolution color touchscreen makes it easy to navigate your assets, review transactions and manage your coins with clarity.
- Wireless freedom with encrypted Bluetooth control: Manage, buy, swap and stake securely using Trezor Suite on desktop or mobile. Qi2-compatible wireless charging keeps your Trezor powered up. No cables required—security meets convenience.
- Works seamlessly with Android, iOS and desktop: Connect wirelessly or via USB-C to your phone or computer. Manage your crypto anywhere with our companion Trezor Suite app.
An instruction failed and the user wants to try again immediately
First determine whether the failed transaction’s business effect is safely repeatable. Keep tracking the original signature until it is settled or expired. If a new attempt is appropriate after settlement, build a new message and use an application-level idempotency key to prevent two successful attempts from creating an unintended duplicate.
A durable-nonce transaction failed
Read the nonce account. If the transaction passed nonce validation, the nonce has advanced even though an instruction failed, so the old signed transaction cannot be reused. Build and sign with the newly fetched nonce. If validation failed before execution, correct the nonce or authority configuration and start over.
Fees and financial reconciliation
An execution failure still consumes the transaction fee. Your ledger should record the fee whenever the cluster accepted and processed the transaction, even if every instruction’s state change was rolled back. Do not refund or retry solely because the user saw an error message; first determine whether the original signature was processed, confirmed, finalized, or expired.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
Solana’s transaction reference lists a 5,000-lamport base fee per signature, but fee schedules can change. Treat that figure as documentation context rather than a permanent price, and obtain the current fee information from the network when calculating a live charge.
Bottom line
A failed execution is not automatically an expired transaction. Keep the original signature and its lastValidBlockHeight, query status consistently, and wait until the transaction reaches the required commitment or the block height proves expiry. Only then build a replacement, and always collect signatures again because a changed blockhash creates a new message. Durable-nonce transactions follow the same principle of one message per signing flow, but a failed attempt also consumes the nonce, so the updated nonce must be fetched before another attempt.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.




