Why a Solana transaction failed, and how to fix it
Most Solana transactions fail for one of five reasons. It took too long and expired (block height exceeded), the price moved during a swap (slippage), the wallet was short of SOL for fees or rent, it ran out of compute, or the wallet’s test run showed it would fail (simulation failed). Each one has a simple fix, and a failure never sends your coins anywhere.
First: your coins are safe
A failed transaction does not move your coins. OpenSea’s help page for Solana puts it plainly: when a transaction fails, your item and your funds stay where they were, but the small network fee is spent. Solana transactions cannot be reversed, but there is nothing to reverse here: whatever the transaction was meant to do simply did not happen.
There are two kinds of failure:
- It never landed. It expired, was dropped, or your wallet stopped it before sending. This costs nothing.
- It landed and then failed. The network did the work, found a problem and rejected it. Phantom’s help centre says that in this case the network fee still applies and is not refunded. That fee is a tiny amount of SOL, explained in Solana fees explained.
The common messages and what they mean
| What you see | What happened | What to do |
|---|---|---|
| Block height exceeded, blockhash expired, blockhash not found | It was not picked up in time and expired | Send it again, with a higher priority fee if the network is busy |
| Timed out, or still pending | Your wallet stopped waiting, but the transaction may still land | Wait about two minutes and check an explorer before you send it again |
| Slippage tolerance exceeded, error 6001 or 0x1771 | The price moved more than you allowed before the swap landed | Get a fresh quote and retry, or allow a little more slippage |
| Insufficient funds, insufficient funds for fee or rent | Not enough SOL for the fee, the amount, or a new account’s rent | Add a little SOL to the wallet that pays |
| Computational budget exceeded | It needed more work than it asked for | Retry; the app should ask for a higher compute limit |
| Simulation failed, or a “could be malicious” warning | Your wallet’s test run said it would fail, or could not tell | Read the reason first; do not force it on a site you do not trust |
Block height exceeded: it took too long
Every Solana transaction carries a recent blockhash, a stamp that says roughly when it was made. That stamp only stays good for 150 blocks, which is about 60 to 90 seconds: Helius estimates about a minute, and Chainstack’s docs put it at about 80 to 90 seconds. Once the network passes that point, the transaction can no longer land and is dropped. Developers see this as TransactionExpiredBlockheightExceededError; wallets usually say the transaction expired or timed out.
Why it happens:
- The network was busy. When lots of people are sending at once, validators pick the transactions that pay more first. A transaction with no priority fee can sit in line until it expires.
- You waited too long to sign. If a swap or checkout screen sat open for a minute or two, its stamp may already be stale. OpenSea notes that a Solana transaction “is only valid for about a minute”.
- The app’s connection to the network lagged. A slow or overloaded RPC (the server your wallet talks to) can hand out an old blockhash or pass your transaction on late.
What to do: if your wallet says the blockhash expired or the block height was exceeded, send it again. Your wallet will fetch a fresh blockhash. If it keeps expiring, pick the faster priority fee option if your wallet offers one. An expired transaction cost you nothing and can never land later.
Be careful with a transaction that only timed out or is still spinning. Solana usually confirms in about a second, OpenSea says, so a long wait often means something went wrong, but until its blockhash expires the first transaction can still land. If you send a new copy before then, both can go through and you pay twice. Helius and Chainstack both say to resend only once the original blockhash is no longer valid. So wait about two minutes from when you signed, then look the signature up on an explorer (see below). If it succeeded, do not send it again. If it is not there, it expired and you can safely retry.
Slippage: the price moved
A swap quote is only true for a moment. You set a slippage tolerance, the most the price may move against you. If the price moves further before the swap lands, the swap program refuses to finish it rather than give you a worse deal. On Jupiter, which most Solana wallets swap through, this is error 6001, SlippageToleranceExceeded, which appears in hex as 0x1771. Jupiter’s own advice is to try a higher fixed slippage or its dynamic slippage setting.
What to do: refresh the quote and try again. If the coin is small, new or moving fast, allow a little more slippage. Keep it modest: a wide setting means you agree to accept a worse price.
Not enough SOL
Every transaction needs SOL for its fee, even when you are moving a different coin. Jupiter’s error list words it as insufficient funds “for either swap amount, transaction fees or rent fees”.
Rent is the part people miss. The first time a wallet receives a coin, it needs a token account for it, and that account holds a small SOL deposit. If the wallet has only the coin and no SOL, the transaction cannot pay for that account. The deposit comes back when the account is closed; see Solana rent explained.
What to do: send a little SOL to the wallet that pays the fee, then retry. If you are trying to send all your SOL, use the wallet’s max button so it leaves room for the fee.
Out of compute
Every transaction asks for a set amount of work, measured in compute units. A swap through several pools needs far more than a plain send. If the app asks for too little, the transaction runs out partway and fails with ComputationalBudgetExceeded. Because it landed, the fee is spent.
What to do: retry. Helius advises apps to test-run each transaction, read how much compute it used and ask for a little more than that, so a fresh attempt often asks for enough. If one app keeps failing this way, the fix is on their side, so try a different route or report it to them.
Simulation failed: your wallet stopped it
Before you sign, your wallet runs the transaction as a test against the current state of the network. Phantom’s developer docs say Phantom “performs its own simulation and safety checks”. If that test fails, you see “transaction simulation failed” or a warning, and nothing has been sent yet. A failed test costs nothing.
The test fails for the same reasons as above: not enough SOL, a stale quote, a coin you no longer hold, or a program that would reject it. Phantom also shows a “could be malicious” warning when it cannot reliably predict what a transaction will do, which is not the same as a failure.
What to do:
- Read the reason your wallet gives, if any.
- Check the wallet holds SOL for fees and the coins the transaction needs.
- Refresh the page or quote and try again.
- If the warning comes from a site you found through a link, an airdrop or a direct message, stop. Drainers are built to get you to sign past warnings. See how Solana wallet drainers work.
Only sign past a warning when you know exactly what the transaction does and you trust the site you typed in yourself.
Look it up on an explorer
If a transaction landed, its signature (the long transaction ID your wallet shows) can be looked up on a block explorer such as Solscan or Solana Explorer. You only paste the signature or your wallet address; there is no need to connect a wallet. The page shows whether it succeeded and, if not, the error the program gave. If an explorer or any page asks for your recovery phrase to “fix” a transaction, it is a scam.
If the explorer cannot find the signature about two minutes after you signed, the blockhash has expired and the transaction never landed, so it cost nothing. Checking sooner than that can mislead you, because it may still land.
Fewer failed moves across many wallets
If you run many wallets, one wallet without SOL can make a whole batch stall. Raven has a gas wallet: one wallet pays the network fees for the others. Every move gets one review before anything is signed, with each fee on its own line. Raven is invite only for now; join the waitlist and we will email you when it is your turn. See about Raven.
Questions
Did I lose money on a failed Solana transaction?
Only the network fee, and only if it landed before failing. Your coins did not move. A transaction that expired or was stopped by your wallet cost nothing.
What does block height exceeded mean?
The transaction was not picked up within 150 blocks, about 60 to 90 seconds, and expired. Send it again, with a higher priority fee if the network is busy.
Is it safe to retry a failed transaction?
Yes, once you know the first one is finished. If the wallet says it expired, or an explorer shows it failed, retrying will not make you pay twice. If it only timed out or is still pending, wait about two minutes and check an explorer first, because until its blockhash expires the first one can still land, and a retry could send the money twice.
Why does my wallet say simulation failed?
Its test run before signing showed the transaction would fail, often for lack of SOL or a stale swap quote. Nothing was sent and nothing was charged.
Sources
- Chainstack docs: Handle the transaction expiry error
- Helius docs: Optimizing transactions
- Jupiter developer docs: Common errors
- Phantom help: Understand network fees
- Phantom docs: Resolve transaction simulation warnings
- OpenSea help: What if my Solana transaction fails?
- QuickNode: Handling dropped Solana transactions
- RPC Fast: Solana transaction error codes
A failed transaction moves nothing, so read the reason, make sure the first one is finished, fix that one thing and send it again.
Join the waitlistSee how Raven does it: How Raven works, Earn.