Why Did My Solana Transaction Fail?
Paste a signature to see whether it worked, what it actually did, and why it failed if it did.
How to find out why a Solana transaction failed
- Copy the transaction signature. Your wallet shows it after you approve something, and it is also the last part of an explorer link.
- Check the top bar is on the right network. A testnet transaction does not exist on mainnet, and looking on the wrong one gives a not-found rather than an answer.
- Paste it and press Explain. Nothing is signed and no wallet is connected.
- Read the verdict first: succeeded, or failed and therefore changed nothing.
- If it failed, read the reason. Where we can name the cause we say it plainly; where we cannot, the raw error is shown because that is the string worth searching for.
- Read what it did underneath. Each instruction is described in order, so you can see exactly which step got as far as it did.
Common questions
My transaction failed. Did I lose the money I was sending?
No. A failed transaction changes nothing at all: no tokens moved, no SOL moved, no account was created. The one thing you did pay is the network fee, a fraction of a cent, because Solana charges for the work of processing it either way. Whatever you were sending is still in your wallet.
What does blockhash not found mean?
Your transaction took too long to reach the network and expired before it landed. Solana transactions are only valid for about a minute. Nothing happened and nothing was charged. Simply try again, and if it keeps happening the network is likely congested.
What is a custom program error?
A number raised by whichever program the instruction was aimed at. The same number means different things in different programs, so it is only meaningful once you know who raised it. We translate the SPL Token program's codes because that is what this site uses; for anything else we tell you the number and the program rather than guessing.
Why does it say it cannot name the error?
Because it genuinely cannot, and saying otherwise would be worse than useless. A confident wrong explanation sends you debugging the wrong thing, while the raw error at least looks like something you can search for. When that happens the raw error is shown in full so you can look it up or paste it to whoever is helping you.
It says the transaction was not found. What now?
Almost always the wrong network: switch the top bar between Mainnet and Testnet and try again. Failing that, very old transactions can be dropped by public RPC endpoints, which does not mean they did not happen. An explorer will usually still have it.
Some instructions say they could not be read. Is that a problem?
No. Solana's RPC parses instructions for a standard set of programs and returns raw data for everything else. When that happens we name the program that ran the instruction and stop, rather than guessing at what it did. It is normal on transactions involving DEXes and other third-party programs.
My deploy stopped halfway. Which step failed?
This will show you. A deploy on this site is several transactions in a row, so check the signature of the one that failed: the list of instructions shows exactly how far it got. If the token exists but the authorities were not revoked, the deploy console can retry just that step without charging you again.
The failure that is not a failure
The most common thing this tool tells people is that nothing went wrong with their money. A failed Solana transaction is atomic: either every instruction in it took effect or none of them did. There is no halfway state where half your tokens moved.
So if a transfer failed, the tokens are still where they were. The only cost is the network fee, which is a fraction of a cent and is charged because the network did the work of trying. That is worth knowing before you panic and send it again.
Why Solana's own error messages are so unhelpful
A typical one looks like InstructionError: [2, {"Custom": 1}]. That is precise and complete: instruction three failed, and the program handling it raised its own error number one. It is also meaningless unless you know which program that was and what its numbering means.
This page fills in both halves where it can. It knows which program handled which instruction, and it translates the SPL Token program's codes because those are the ones this site produces.
Where it stops
Deliberately, at the edge of what it actually knows. If a program we do not recognise raises code 6001, you get the number, the program, and a plain statement that we have no name for it. We do not guess.
The reason is not modesty. A confident wrong explanation is worse than the raw error, because it sends you off debugging something that was never the problem, and you stop looking at the thing that was. The raw error is always shown, even when we did name the cause, because it is the string that a search engine or another developer can act on.
The three failures you will actually hit
- Blockhash expired. Took too long to land. Nothing happened. Retry.
- Not enough SOL for rent. Creating an account requires a small refundable deposit, and the wallet was below it. Top up a little and retry.
- Account frozen. The token has a freeze authority and it has been used on that account, so it cannot send or receive. Our Rug Checker reports whether a token can do this before you buy it.
Related tools
- Check where you are sending before you sign: Address Check.
- Check a token before you trust it: Rug Checker.
- Everything outstanding before a launch: Launch Checklist.
