On this page
- A failed Solana transaction moves no tokens. One that was processed and failed still pays its SOL fee; one that expired or was refused before sending costs nothing.
- Fianto's checkout checks your USDC, your SOL and your token account before it asks you to sign, so a refusal at that stage cannot have charged you.
- After you sign, a failure means: check your wallet's recent activity first, and do not pay twice.
What makes a Solana transaction fail?
A Solana transaction fails when any one of its instructions cannot run, and then none of it runs. Solana's documentation puts it in one line: "If any instruction fails, the entire transaction fails and all state changes are reverted." An instruction is one step in the transaction, such as "move 25 USDC from this account to that one".
For a payment, the usual causes are these:
- Not enough of the token. The wallet holds less USDC than the transfer asks for.
- Not enough SOL. Every transaction pays a network fee in SOL, and an account must keep a minimum balance. Solana's accounts page says: "Every account must hold a refundable minimum lamport balance proportional to its data size to remain onchain."
- No token account. A token account is the account that holds one token for one wallet. A wallet that has never held USDC has none to send from.
- An expired blockhash. Every transaction names a recent block. Solana's confirmation guide says clusters accept only blockhashes "no more than 151 blocks old"; a transaction signed or sent after that is never processed.
- A refusal by a program. The Token program refuses a transfer from a frozen account, for example.
Whether a failure costs anything depends on where it stopped. A transaction the network processed and then failed still pays its fee: Solana's fee explainer answers "Do failed transactions charge fees?" with "Yes, because validators still process them." The fee pays for that processing, so a transaction no validator processed, because it expired or was never sent, is not charged one. The quote is from Solana's guide to transaction fees.
Which payment errors appear before your wallet opens?
The errors that appear before your wallet opens are Fianto's own checks, run before your wallet is asked to sign anything. None of them can charge you. Here are the ones that concern your wallet or the merchant's, with the code and the wording the Fianto checkout shows when a check fails:
| Code | What the checkout says | What to do |
|---|---|---|
insufficient_ | "You need … USDC to pay this. This wallet has … USDC. Add USDC to this wallet, or pay from a different one, then try again." | Top up USDC on Solana, or switch wallets. |
insufficient_ | "Not enough SOL for the Solana network fee and this wallet's minimum balance. Nothing has been charged. If you add about … SOL to this wallet, try again." | Add the SOL it names, or a little more. |
payer_ | "This wallet does not hold any USDC yet. Add USDC to it, or pay from a different wallet, then try again." | Receive USDC into this wallet first. |
payer_ | "This wallet's USDC account is frozen, so it cannot send USDC. Pay from a different wallet." | Use another wallet. |
wallet_ | "This wallet can only send payments itself, and we need it to sign the payment so that we can send it. Pay with a different Solana wallet." | Pick a wallet that can sign without sending. |
too_ | "This payment link expires in under 2 minutes, which is not enough time to finish paying. Nothing has been charged. Ask [merchant name] for a new payment link." | Ask the merchant for a new link. |
merchant_ | "This shop cannot receive USDC yet, so the payment cannot go through. Nothing has been charged. Contact [merchant name] and try again later." | Tell the merchant; it is on their side. |
The dots stand for figures the page fills in, so the two balance errors tell you how much is missing; the SOL figure is rounded up to four decimals. Where the wording names the merchant, the page uses the merchant's own name, shown here as [merchant name].
Why does a USDC payment need SOL?
A USDC payment needs SOL because the wallet that signs a Solana transaction pays its network fee in SOL, and must keep its own minimum balance afterwards. On a Fianto one-off payment that bar is the wallet's minimum balance, 650,240 lamports as of 15 October 2026 (a lamport is a billionth of a SOL), plus the transaction fee and a small margin in case the wallet raises its priority fee: about 0.00067 SOL in all. Most of it is never spent; it is the minimum your wallet has to keep. The checkout tells you the exact amount.
A subscription asks for more, because it also pays account rent for the accounts it sets up. Why SOL is needed at all, and how to get a little, is in why you need SOL to send USDC.
What if the wallet itself refuses to sign?
A refusal inside the wallet means nothing was signed, so nothing was sent. If you press Reject, the checkout says: "You declined the payment in your wallet, so nothing was sent. Press Pay when you are ready to try again." If the wallet fails on its own, it says: "Your wallet could not sign the payment, so nothing was sent. Try again, or pay from a different wallet."
If your wallet shows a warning, read it before you approve; sign message vs sign transaction explains what each kind of request can do. On a Fianto one-off payment the transaction holds only compute-budget settings and USDC transfers, to the merchant and, when there is a fee, to Fianto. If the wallet disappears mid-payment (an extension reloaded, for example), you get wallet_: "That wallet is no longer available. Pick another wallet below, or reload the page and try again."
What happens if a payment fails after you sign?
A payment that fails after you sign may or may not have moved money, so the first step is always your wallet's recent activity. Fianto, not your wallet, sends the signed transaction to the network, and keeps sending it until it lands or its blockhash has expired. Three things can go wrong at that stage:
- The signed transaction does not match. Fianto checks what your wallet signed against what it built: the blockhash, who pays the fee, and every transfer's token, source, destination and amount. If any of them differ, it never sends it, so that transaction moves nothing. You have signed by then, so the message for
transaction_also covers any earlier approval: "The signed payment did not match what we prepared, so we did not send it. If you already approved a payment for this order, check your wallet's recent activity: if the USDC left your account, do not pay again, and contact [merchant name]. Otherwise, reload this page and pay again."mismatch - It never lands. A transaction whose blockhash expires before any validator includes it is dropped (dropped vs failed Solana transactions compares the two). No validator processed it, so nothing moved and no fee was charged.
- It lands and fails. A program refused it on chain. No USDC moved, and the SOL fee was spent.
For the last two, the checkout cannot always tell which happened, so it says: "This payment did not complete. Check your wallet's recent activity first: if the USDC left your account, do not pay again, and contact [merchant name]. If it did not, press Pay to try again." Pressing Pay builds a fresh transaction with a new blockhash.
Why did my subscription renewal fail?
A failed subscription renewal is a different event from a failed checkout: you sign nothing on renewal day, and Fianto collects within the limit you approved. The reasons, the retry times and the Re-authorise button are covered in why a USDC subscription didn't renew.
Who can fix a failed payment?
The merchant you were paying is the one to contact about a failed payment. Fianto never holds your money, so it has nothing to refund from: a refund is the merchant sending USDC back from its own wallet. When the checkout has a request ID for an error it could not explain, it adds: "If it keeps happening, tell [merchant name] this reference: …" Quote that reference and your transaction signature. Payers can find more on the docs page Get help, and answers to the questions customers ask most are in questions customers ask when paying in USDC.
Merchants: a checkout that names the problem before your customer signs saves you support tickets.
Accept USDC on Solana