No Fianto fee during the beta. Any fee comes with at least 30 days notice. See pricing
Solana7 min read

Why a Solana payment says "blockhash not found", and what to do next.

"Blockhash not found" means the transaction names a recent block that the network no longer accepts, or does not know yet, so it will never be processed. Solana only takes a blockhash up to 151 blocks old, which makes every signed transaction a short-lived object: wait too long in the wallet and it expires unsent. Nothing moves and no fee is charged; the fix is to build a fresh transaction and sign it promptly.

On this page
What does "blockhash not found" mean?How long is a Solana blockhash valid?Why do Solana payments expire while you wait to sign?What should you do if a payment expired before you signed?How does Fianto keep a blockhash from expiring mid-payment?Why can't a checkout change while a payment might still land?SourcesQuestions
TL;DR
  • Every Solana transaction includes a recent blockhash; once that blockhash is more than 151 blocks old, the transaction can never land.
  • An expired transaction moves no tokens and pays no fee. Build a new one; do not re-sign the old bytes.
  • Fianto builds each payment with a fresh blockhash, refuses to start one on a link with under two minutes left, and keeps rebroadcasting until the blockhash is past its last valid block.

What does "blockhash not found" mean?

"Blockhash not found" means the node checking your transaction cannot match its blockhash to a block it considers recent. A blockhash is the fingerprint of a recent block; every transaction carries one, and it does two jobs: it proves the transaction was made recently, and it lets the network spot the same transaction sent twice.

Two situations produce the message:

  • The blockhash is too old. Solana's confirmation and expiration guide says: "Currently, Solana clusters require that transactions use blockhashes that are no more than 151 blocks old." A transaction with an older one is not processed.
  • The blockhash is too new for the node. The same guide notes that a simulation run against an older block than the one the blockhash came from fails with this same error. This happens when an app takes its blockhash from one RPC node and checks the transaction on a node that is behind.

In a wallet or a payment page, the first case is the usual one: the transaction was built, then sat waiting for a signature.

How long is a Solana blockhash valid?

A Solana blockhash is valid for 151 blocks, which is the figure to rely on. The confirmation guide, read on 15 October 2026, converts that to "about 60 to 90 seconds", but it was written for the slot length Solana had before October 2026. The Alpenglow upgrade page says block time was cut separately, through shorter slots, in four stages that completed in October 2026, so the same 151 blocks now pass faster than that guide says.

Alpenglow itself, scheduled to activate on mainnet on 21 October 2026, replaces the voting that makes blocks final. On transactions the page says: "Execution is untouched: the SVM, transactions, programs, and fees stay the same." It gives no new figure for the blockhash window; what changes for finality is in confirmed vs finalized Solana payments. Until Solana's docs state a new figure, treat the expiry as a block count and track it with lastValidBlockHeight, the block height that getLatestBlockhash returns beside every blockhash. Once the chain passes that height, the transaction is dead.

Why do Solana payments expire while you wait to sign?

Solana payments expire while you wait because the blockhash is fixed when the transaction is built, before your wallet ever shows it to you. The clock starts at the build, not at your signature. Reading the amounts, switching wallet accounts or stepping away all spend blocks.

Solana's guide names the ideal: "The ideal scenario is that a recent blockhash is fetched right before a user signs their transaction." Payment pages differ in how close they get. On Fianto's checkout the transaction is built only when you press Pay or Subscribe with a wallet connected (if yours is missing from the list, see why a wallet does not show at checkout). A one-off payment opens the wallet straight after the build; a subscription first shows its rent and fees for you to approve, so the time you spend in the wallet is most of the blockhash's life.

What should you do if a payment expired before you signed?

If a payment expired before you signed, start again from a fresh transaction. On a Fianto checkout:

  1. Look at your wallet's recent activity. If no USDC left your account, nothing happened.
  2. Press Pay (or Subscribe) again. That builds a new transaction with a new blockhash.
  3. Approve it in the wallet without leaving the prompt open.
  4. If the page says the link itself has expired, ask the merchant for a new one. A checkout link has its own expiry, separate from the blockhash.

If you did sign and the page then reports a failure, the checkout 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." Follow it in that order. Other reasons a payment stops are in why a Solana payment failed.

How does Fianto keep a blockhash from expiring mid-payment?

Fianto keeps a blockhash from expiring mid-payment by building late, refusing to build when there is too little time, and resending a signed transaction until its blockhash is certainly dead. These are the rules in Fianto's code, with the timings Fianto sets itself:

RuleWhat it doesWhat the payer sees
Fresh blockhash per buildEach build asks the network for the latest blockhash; two builds within one second share itNothing; the wallet opens with a current transaction
Two-minute floorA checkout link with under 120 seconds left will not build a transaction"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."
30-second review on subscriptionsA subscription build whose review screen is not approved within 30 seconds is withdrawn before the wallet opens"The prepared subscription was not approved in time, so nothing was sent. Press Subscribe to prepare it again."
90-second limit in the portalA cancel, rent reclaim or re-authorise built more than 90 seconds earlier is refused at submitThe action has to be started again
Rebroadcast until expiryFianto sends the signed transaction itself, then resends it every tracker pass while it is unseenA payment that lands late still counts

The first send runs with preflight on, so the network simulates the transaction before accepting it. Fianto keeps resending without preflight until the chain is 150 blocks past the transaction's lastValidBlockHeight; only then, and only if every RPC provider it uses says it has never seen the signature, does it mark the payment as dropped and let the customer pay again. A dropped payment costs the customer no fee at all; what each Fianto transaction costs when it does land is in how much a Solana transaction costs.

A hosted checkout that builds, sends and tracks the transaction for you.

See how the checkout works

Why can't a checkout change while a payment might still land?

A checkout cannot change while a payment might still land because a signed transaction stays valid until its blockhash expires, whatever the page shows. Fianto records the lastValidBlockHeight of the latest build on each checkout session and never lowers it. Two actions wait for that height to pass:

  • A merchant reissuing a session's link through the API, which gives the session a new URL. It answers payment_in_progress until the last build's blockhash is dead.
  • A customer applying or removing a discount code on the checkout, which changes the amount. A transaction signed at the old amount must not be able to land after the price moved.

Solana's retry guide gives the same rule to anyone resending payments: "Before re-signing any transaction, it is very important to ensure that the initial transaction's blockhash has expired." Re-signing earlier risks two transactions landing for one purchase. If you build your own Solana payment flow, compare the current block height with lastValidBlockHeight before you ever ask the customer to sign again. With Fianto that check is done for you; the payment lifecycle page in the docs follows a payment from build to settlement.

Sources
Questions

Questions about expired Solana transactions.

Does a "blockhash not found" error cost a fee?

No. A transaction with an expired blockhash is never processed, so no fee is taken and no tokens move.

Can I re-sign the same transaction after the blockhash expires?

Not usefully: the old blockhash stays in it. The transaction has to be rebuilt with a new blockhash and signed again, which is what pressing Pay again does on a Fianto checkout.

Why did my wallet show a blockhash error after I took a while to approve?

The transaction was built with a blockhash that expired while the wallet prompt was open. Close the prompt, build the payment again and approve it straight away.

Does Alpenglow change how long a blockhash lasts?

Solana's Alpenglow page, updated October 2026, says transactions, programs and fees stay the same and does not mention the blockhash window. Count expiry in blocks, using lastValidBlockHeight.

Why did my payment link say it expires in under 2 minutes?

Fianto will not start a payment on a checkout link with less than two minutes left, because the payment could expire while you sign. Ask the merchant for a new link.

Read next.

Solana7 min read

Dropped vs failed Solana transactions: what is the difference, and who pays?

A dropped Solana transaction never made it into a block: no validator processed it, so nothing moved and no fee was charged, and once its blockhash expires it never will. A failed transaction did make it into a block, but an instruction refused, so every change was reverted except the fee, which Solana still charges. A dropped transaction can still land until that expiry, so wait for it before you pay again.

Solana8 min read

Why did my Solana payment fail? Common errors in plain English

The usual reasons a Solana payment fails sit in the wallet: too little of the token being sent, too little SOL for the network fee and the minimum balance, no account for that token yet, or a transaction signed too late, after its blockhash expired. A Solana transaction is all or nothing, so a failed one moves no tokens, though one that reached the network and failed still costs its small SOL fee. On a Fianto checkout most of these are caught before your wallet even opens, and the page names the one that stopped you.

Solana9 min read

Solana confirmed vs finalized: when a payment is final, and what Fianto waits for

A Solana payment is confirmed once validators holding more than two-thirds of the stake have voted on its block, usually about one slot after it lands, and finalized once that block can no longer be rolled back, which takes about 12.8 seconds until the Alpenglow upgrade activates (scheduled for 21 October 2026). Fianto shows the customer a receipt at confirmed, but marks the order PAID and sends order.paid only at finalized. Once Alpenglow is live, solana.com expects finality in roughly 150 milliseconds, and confirmed and finalized become the same state.

Press Pay, then approve.

A fresh blockhash is one click away.

New posts are announced on X and Discord.