A user prepares to swap tokens on Solana, reviews what appears to be a reasonable transaction, and hits approve. Seconds later, the transaction fails. The gas fee is gone. The token remains unmoved. Phantom displays a brief error message that may not clarify whether the problem was insufficient liquidity, a contract revert, network congestion, or something else entirely. Understanding why transactions fail in a self-custody wallet like Phantom is not merely about frustration reduction. It is about distinguishing between preventable errors and genuine network conditions, and learning which failures cost fees and which do not.

Phantom’s multichain architecture across Solana, Ethereum, Bitcoin, Base, and Sui means that failure modes differ significantly. A transaction that would fail on Ethereum for one reason might succeed on Solana under the same logical conditions, or fail for an entirely different reason on Base. The wallet provides transaction previews and scam detection to catch obvious problems before they happen, yet some failures occur only when the transaction reaches the network and interacts with live contract state or liquidity pools. The key distinction is understanding what happens at each stage: when the wallet rejects the transaction before broadcasting, when the network accepts it but the contract reverts, and when fees are spent regardless of outcome.

Phantom wallet interface showing transaction preview, network selection, and fee estimation across multiple blockchain networks

Insufficient balance errors: Why they happen before fees are charged

The most straightforward transaction failure is insufficient balance, and Phantom’s design prevents it from costing a fee in most cases. When you initiate a transaction, the wallet checks whether your account holds both the amount you intend to send and the network fees required to broadcast it. On Solana, this verification happens locally before the transaction is signed. On Ethereum and other EVM chains, the same logic applies: if your ETH balance cannot cover the token transfer plus gas, the wallet should block the transaction at the preview stage.

The word “should” matters because edge cases exist. A transaction preview is calculated based on network conditions at the moment you review it. By the time you sign and broadcast, those conditions may have changed slightly. On Ethereum, if base fees have risen sharply during the few seconds between preview and broadcast, and your transaction included a gas limit that was sufficient at preview time but insufficient now, the transaction can be submitted to the network and fail after consuming gas. You can protect yourself by intentionally setting a higher gas limit than the preview suggests, accepting a slightly higher maximum cost in exchange for a higher probability that execution will succeed without requiring a retry.

On Solana, where transaction fees are deterministic based on the account state at submission time and not an auction, this particular risk is lower. However, Solana has a different concern: if you are the target of a dust attack or spam transaction, your account balance may have been topped with a small amount of a worthless token. This does not reduce your SOL balance, but it can create confusion if you are trying to track your actual liquid holdings. Phantom’s spam filtering helps reduce this noise, yet the underlying SOL balance remains unaffected.

Stablecoins and wrapped assets add another layer. If you hold USDC on Ethereum but intend to send it as Wrapped USDC on Base, you must first bridge or swap it. Phantom supports multiple chains, but it does not automatically bridge tokens between them. Attempting to send USDC.e (Ethereum USDC) from a Base wallet will fail because that specific asset does not exist on Base. The error message may say “insufficient balance” if the wallet is checking for the presence of the correct token version rather than clarifying the chain mismatch.

Network congestion and gas price spikes: Timing and estimation

Ethereum and Base can experience periods where demand for block space exceeds supply, driving gas prices upward. If you preview a transaction when gas is reasonable, then wait five minutes while the network becomes congested before broadcasting, your original gas limit may be too low. The transaction enters the memory pool but may not be included in a block for a long time, or it may be evicted entirely if the network’s transaction backlog becomes severe. In either case, the fee was spent without executing the transaction.

Phantom’s transaction preview calculates gas estimates based on real-time network conditions. For Ethereum transactions, the wallet shows base fees, priority fees, and total estimated cost. Understanding the difference is important. The base fee is burned and is outside any user’s control; it reflects current network demand. The priority fee (or “miner tip”) is what you can adjust to increase the likelihood of faster inclusion. During high congestion, increasing the priority fee often succeeds in getting a transaction mined promptly. Increasing only the gas limit does not help; that parameter controls the maximum computation your transaction can consume, not how quickly it is processed.

On Solana, congestion is more sporadic and takes a different form. Network load can spike when a popular program receives sudden traffic, or during times of network instability. Solana transactions can fail with a “Transaction simulation failed” error, which typically indicates that the simulation of your transaction against the current chain state revealed a problem. This is actually preferable to the Ethereum pattern because Solana’s pre-flight checks often prevent fee expenditure on obviously failing transactions. However, if your transaction passed pre-flight and later failed due to a race condition—someone else interacted with the smart contract in between your simulation and your broadcast—you may have paid a fee for nothing.

Smart contract reverts: When the transaction broadcasts successfully but the contract rejects it

A revert is the most expensive failure in cryptocurrency transactions. The transaction reaches the blockchain, consumes gas or network fees, and the smart contract executing your code finds a condition that makes continuing impossible. The contract stops execution mid-way through, reverting any state changes it made, but the fees are not refunded. On Ethereum, this means your ETH is lost even though the token transfer never happened. On Solana, you lose SOL even though no state changed. This is by design: the network still performed work to validate the transaction, and that work must be compensated.

Common revert reasons include insufficient output in a swap, insufficient liquidity in a liquidity pool, price slippage beyond your tolerance, or a missing approval. If you are swapping 1 ETH for USDC on Uniswap, but the price has moved since you calculated it, the contract may revert if the actual output is less than your specified minimum. Phantom’s transaction preview can help catch this by showing you the expected output and the slippage tolerance. Yet the preview is calculated against the contract state at preview time. By the time your transaction executes, that state may have changed, the token’s price may have shifted, or another transaction ahead of yours in the queue may have consumed liquidity you were counting on.

Approval failures represent a specific category of revert. On EVM chains, moving an ERC-20 token typically requires two transactions: first, an approval transaction that allows the contract to transfer tokens on your behalf, and second, the actual transfer. If you skipped the approval or the approval failed, the transfer will revert. Phantom handles this workflow in its token interaction UI, but if you are interacting with a contract directly or through a dapp that Phantom does not explicitly support, the approval step may not be obvious. Some contracts attempt to perform both operations atomically, which can create confusing error messages if the approval fails but the error message only mentions the main operation.

Scam detection and security blocks: Preventing fees before they happen

Phantom includes scam detection that analyzes transactions before they broadcast, looking for patterns that suggest fraud. If a dapp is attempting to steal your tokens, drain your wallet, or interact with a malicious contract, Phantom’s security layer can block the transaction entirely. This is one of the few failure modes where you definitively do not pay a fee: the transaction never reaches the blockchain because Phantom prevented it from being signed.

The scam detector looks at contract addresses, token transfers, and interaction patterns. It cross-references them against known exploits and flagged contracts. However, it is not perfectly accurate. Occasionally, legitimate contracts receive flags or recent exploits are not yet in the database. Phantom allows users to proceed anyway, with a clear warning. If you choose to override the warning and proceed with a transaction that is genuinely a scam, you will pay the fee and lose your funds. The wallet is designed to be beginner-friendly, which includes protecting newer users from obvious risks, but it ultimately respects user intent.

Transaction previews serve a similar but slightly different function. They show you what a transaction will do before you sign it. On a smart wallet or dapp that Phantom supports directly, the preview may be detailed and clear. On an unfamiliar contract, the preview may show only basic details like “Contract interaction” or “Unknown contract method” because Phantom does not have the contract’s ABI and cannot decode what it is doing. In that case, you are responsible for understanding the contract yourself. If the preview shows something unexpected—like a transfer of tokens you did not authorize—you should cancel and investigate before proceeding.

Nonce conflicts and transaction ordering: Solana vs. EVM chains

Ethereum and EVM chains like Base use a nonce system: each transaction from your address must have a number one higher than the last. If you broadcast two transactions with the same nonce simultaneously, the network will accept the first one to be mined and reject the second. If you broadcast transaction A with nonce 5 and transaction B with nonce 6, and then try to broadcast transaction C with nonce 5, transaction C will fail because nonce 5 is already used. This creates a common problem: if a transaction gets stuck and you want to cancel it by sending a zero-ETH transaction with the same nonce, you must ensure that the replacement actually reaches the network and is mined. If you miscalculate the gas price, the replacement may also get stuck, and now both transactions are pending.

Phantom simplifies this for users of its browser extension by managing nonces automatically in most cases. However, if you are using Phantom on mobile or have multiple windows open, or if you are broadcasting transactions from other wallets simultaneously, nonce conflicts can occur. The symptom is a transaction that remains in “pending” state indefinitely, or a new transaction that fails with a “nonce too low” error. Neither the stuck transaction nor the failed one refunds fees in this scenario because both reached the network.

Solana does not use nonces. Instead, it requires a recent blockhash to be included in each transaction. This means Solana transactions cannot get stuck in the same way, but they can become invalid if the blockhash expires (typically within two minutes). If you sign a transaction and then wait too long to broadcast it, you will get a “blockhash not found” error. Phantom should warn you before this happens, but if you deliberately delay or if network latency causes a long lag between signing and broadcasting, the transaction fails without spending fees in most cases because the network rejected it without executing it.

Bridge and cross-chain failures: When Phantom spans multiple networks

Phantom supports Solana, Ethereum, Bitcoin, Base, and Sui, but moving assets between chains is not seamless. When you want to move USDC from Ethereum to Base, you are not moving it directly. Instead, you are locking it on Ethereum through a bridge contract and receiving it on Base from another bridge contract. If either leg of that process fails, you can lose funds in a specific way: the bridge consumes your asset on the source chain but does not deliver it on the destination chain.

This risk is somewhat mitigated by major bridges like the official Ethereum-Base bridge operated by Optimism, which have undergone security audits and have insurance mechanisms. However, third-party bridges and less-established routes carry higher risk. Phantom’s transaction preview should show you which bridge is being used and what the expected output is. Before approving a bridge transaction, confirm the bridge name and verify that you trust it. If a bridge fails, you may need to contact the bridge operator or use their recovery interface to resolve the stuck funds.

For simpler cases, Phantom’s built-in token swap interface can sometimes bridge assets as part of a swap. If you are converting USDC on Ethereum to USDC on Base as part of a single swap transaction, Phantom may be routing that through a bridge and a dex in a single operation. In that case, if the entire sequence fails, the transaction is reverted on-chain and the only cost is fees. If the bridge succeeds but the subsequent dex operation fails, you may receive bridged USDC on Base but not the final token you intended. Understanding the exact sequence—which you can do by reading the transaction preview carefully—is essential before approving.

Prevention strategies: How to avoid failures and minimize fee loss

The most reliable strategy is to start small and test. If you are using a new dapp, a new token, or a new bridge, move a small amount first. Confirm that the transaction succeeds, the output arrives where expected, and no unexpected fees were charged. Once you have verified the process, you can move larger amounts. This costs small fees on test transactions, but those are far cheaper than recovering from a mistake that drains a large balance.

Use Phantom’s transaction preview every time. Before you sign, read what the preview shows. If it says “Unknown contract method,” be especially careful; you are responsible for understanding what you are signing. If the preview shows something you do not recognize or did not intend, cancel and investigate. Never approve a token allowance larger than you intend to use with a single contract, because a compromised contract can drain your entire approval amount. Phantom will often prompt you to set a reasonable limit rather than unlimited approval, but if you see an option for unlimited, set a specific cap instead.

Understand the fee structure for each chain. On Solana, fees are low and predictable. On Ethereum and Base, fees can spike during congestion. Use Phantom’s gas estimation but be aware that it is a prediction, not a guarantee. During high congestion, consider waiting for quieter hours or accepting a higher gas cost to ensure your transaction executes. For swaps, set a reasonable slippage tolerance. 1% is conservative for stable pairs; 2-5% is typical for volatile tokens. Do not set slippage higher than your comfort level with the final output, because the contract will execute the swap at any output within your tolerance range.

If a transaction fails, do not immediately retry. First, understand why it failed by reading the error message and checking the network explorer. If it is a nonce conflict on Ethereum, you may need to wait or replace the stuck transaction. If it is a contract revert, retrying immediately is unlikely to help unless the underlying condition has changed (like waiting for a liquidity pool to receive more of the token you are trying to buy). If it is a network congestion issue, waiting for quieter hours may help, or you may choose to accept the higher fee cost and proceed during current conditions. You can verify your understanding by downloading Phantom from the official source here and testing transactions in a controlled way.

Recovering from failed transactions and minimizing future losses

A failed Ethereum or Base transaction leaves a clear trace: the transaction appears on the block explorer in a failed state, showing the revert reason if the contract provided one. You can look up your wallet address on Etherscan or Basescan, find the failed transaction, and see exactly how much you paid in gas. Knowing the reason helps you avoid repeating the mistake. If the reason was slippage, you now know that the token’s price moved faster than expected, and you should either increase your slippage tolerance or try again during a less volatile period. If the reason was insufficient liquidity, the liquidity pool does not have enough of the token you are trying to buy, and you will need to find another pool or wait for liquidity to arrive.

Solana failures are often more cryptic because the error messages are technical. A “Transaction simulation failed” message usually means the contract rejected the operation for a reason that appeared only when the contract was executed against the current state. Unlike Ethereum, where you can often guess what went wrong from the revert reason, Solana may require you to actually examine the contract code or ask in community channels to understand the failure. The upside is that Solana’s pre-flight checks often prevent you from broadcasting and paying fees on transactions that will obviously fail.

Multiple failed attempts add up in fees. A pattern of repeated failures on the same operation should trigger a pause: something is fundamentally wrong, either with your understanding of what you are trying to do or with the contract itself. Rather than retrying the same transaction, consider reaching out to the dapp’s community or support to understand the issue. If the dapp is genuinely broken, no amount of retrying will help, and you will only lose more fees. If the issue is on your side—a missing approval, the wrong token version, or a misunderstanding of the interface—a moment of investigation is worth far more than the fee cost of repeatedly failing.

When to escalate: Contacting support and recovering stuck funds

Phantom provides in-app support through documentation and community links, but there is no direct Phantom customer support team that can reverse transactions or recover failed swaps. This is a necessary consequence of self-custody: Phantom has no access to your private keys and cannot undo what your signature authorized. If your funds are stuck in a bridge or a failed swap, you will need to work with the bridge operator or dapp in question, not with Phantom directly.

Before assuming funds are lost, check every place they might be. If you sent a token to a different address than intended, check that address on the block explorer. If you swapped one token for another and do not see the output, confirm that you are looking at the correct wallet and the correct blockchain. Use Phantom’s chain selector to switch between Solana, Ethereum, Bitcoin, Base, and Sui; funds may have arrived on a different chain than you expected. If you bridged assets, verify that the bridge transaction completed on both sides and that you checked the destination chain for the output.

If funds genuinely appear to be stuck—locked in a bridge contract, pending in a failed swap, or disappeared without a trace—document everything: the transaction hash, the block explorer links, screenshots of what you were trying to do, and the exact error message. Then reach out to the contract operator or bridge provider with this information. Some bridges offer a UI where you can initiate a recovery or unlock if the transaction failed partway through. Some dapps have community members or official support who can help diagnose what happened. Phantom’s role is to ensure you can broadcast transactions safely; what happens after that is in the hands of the blockchain and the contract.

Frequently asked questions

Why did my transaction fail but I still paid the gas fee?

If your transaction reached the blockchain and the contract reverted, you paid the full fee regardless of the outcome. This is true on Ethereum, Base, and other EVM chains. On Solana, most failures are caught before broadcasting, so you do not pay fees. Ethereum fees are lost once a transaction is mined, even if the contract rejects the operation partway through execution. If the transaction was rejected by Phantom before broadcasting—due to insufficient balance or scam detection—you do not pay any fee.

Can Phantom recover my failed transaction or refund my fees?

No. Phantom is a self-custody wallet and has no access to your funds or ability to reverse transactions. Once you sign and broadcast a transaction that reaches the blockchain, neither Phantom nor any other wallet can undo it. If your transaction failed due to a contract revert, the fee is spent and cannot be recovered. You are responsible for verifying transactions before signing.

What does “transaction simulation failed” mean on Solana?

This error means Phantom ran a preview of your transaction against the current network state and discovered it would fail. Common causes are insufficient token balance, missing approval, or a contract condition that rejects the operation. In most cases, you do not pay a fee because the transaction was not broadcast. Before retrying, investigate the root cause: confirm your balance, check that you approved the contract, and verify the contract address is correct.