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

Confirmed or finalized: when a Solana payment is really final.

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.

On this page
What do processed, confirmed and finalized mean on Solana?How long does a Solana payment take to finalize?Can a confirmed Solana payment be rolled back?Which commitment does Fianto wait for before a payment counts?Why show the receipt at confirmed but send webhooks at finalized?Which commitment should your own code use?What does Alpenglow change for Solana payments?SourcesQuestions
TL;DR
  • Solana has three commitment levels: processed (executed, can still be rolled back), confirmed (voted on by more than two-thirds of stake) and finalized (cannot be rolled back).
  • Fianto's checkout shows the customer success at confirmed. The order turns PAID, and order.paid, checkout.session.completed and the subscription events are sent, only at finalized.
  • Until Alpenglow activates (scheduled for 21 October 2026), finality takes about 12.8 seconds. After activation, Solana targets roughly 150 ms.

What do processed, confirmed and finalized mean on Solana?

Commitment is how settled a block must be before a Solana node reports it, and there are three levels: processed, confirmed and finalized. Many RPC calls take a commitment parameter, which Solana's RPC documentation describes as how finalized a block must be "before the node returns data or sends a notification." A slot is the short window in which one validator, the leader, may produce a block. Other terms on this page are defined in the crypto payment glossary.

LevelSolana's definitionCan it still be undone?
processed"The node's most recent processed block. This is the newest view, but it can still be rolled back."Yes. Solana's confirmation guide says roughly 5% of blocks never end up finalized
confirmed"A block directly voted on by a supermajority of stake, meaning more than two-thirds of the network's active stake."In principle yes; in practice it has not happened (see below)
finalized"A block the cluster recognizes as finalized with maximum lockout, meaning it has reached the strongest confirmation state used by the network."No

If a call leaves the parameter out, the docs say the default is "typically finalized." A payment climbs the levels in order. Its transaction executes in a block (processed), validators vote on that block (confirmed), and enough later votes pile up on top of it that no competing block can replace it (finalized).

How long does a Solana payment take to finalize?

Until Alpenglow activates (scheduled for 21 October 2026), a Solana block takes about 12.8 seconds to finalize, while confirmation arrives in about one slot; after activation, solana.com targets roughly 150 milliseconds to finality. The figures come from the Alpenglow upgrade page on solana.com, which explains that under TowerBFT, the consensus Solana runs until Alpenglow replaces it, validators vote by sending transactions and "a block is final once enough of those votes have stacked up over 32 slots."

For developers the gap shows up in a second place: transaction expiry. Every Solana transaction carries a recent blockhash and lapses once that blockhash is more than 151 blocks old (why a Solana payment expires). Solana's confirmation guide notes "typically at least a 32 slot difference between the most recent confirmed block and the most recent finalized block" (true under TowerBFT), so a blockhash fetched at finalized is already old when you use it. The guide says the confirmed level "should almost always be used for RPC requests."

Fianto's backend follows that advice for building transactions. It fetches blockhashes, checks block height and sends with preflightCommitment: 'confirmed' (in platform/solana/rpc-solana-gateway.service.ts). Only the decision about money waits for finalized.

Can a confirmed Solana payment be rolled back?

A confirmed Solana payment can in principle still be rolled back, but the record says it has never happened. The Alpenglow page puts both halves in two sentences:

In production almost everyone reads at confirmed, which lands in about one slot, and there has never been a confirmed block that did not finalize. The guarantee was weaker than that record: a confirmed block could in principle still be dropped, and ruling that out meant waiting the 12.8 seconds TowerBFT needed to finalize.

Alpenglow upgrade page, solana.com, updated October 2026

So the answer depends on who is asking. For a customer watching a checkout, confirmed is as good as done. For a business that ships goods, opens an account or books revenue on the event, confirmed is a very strong signal and finalized is a guarantee. Processed is weaker than both: a processed block can sit on a fork the cluster abandons, and Fianto treats even an error reported at processed as undecided, because a later vote can supersede it.

Once a payment is finalized, nothing in the network can pull it back, and there is no card network to file a dispute with either. Chargebacks vs crypto refunds covers what replaces the dispute.

Which commitment does Fianto wait for before a payment counts?

Fianto waits for finalized before it treats any payment as paid. The rule lives in the backend's chain transaction tracker, backend/src/modules/checkout/services/chain-transaction-tracker.ts, which looks at every payment in flight every two seconds and acts on the status Solana reports:

Solana statusFianto payment statusWhat the customer seesWhat your server gets
Not seen yet, or processedPROCESSING: "sent, waiting for the network"A wait on the checkoutNothing. A processed result, even an error, decides nothing
confirmedCONFIRMED: "on chain, waiting for finality""Payment received", or "You are subscribed" for a subscriptionNothing yet. The order is not PAID and no webhook is sent
finalizedSUCCEEDED: "final; the money is in your wallet"The same receiptThe order turns PAID and order.paid is sent, plus checkout.session.completed if the session was still open; for subscriptions, subscription.created or subscription.renewed

The quoted descriptions are the dashboard's own status card on the Payments page. On Fianto's hosted checkout the customer's wallet broadcasts nothing: it signs, and Fianto sends the transaction to Solana, rebroadcasts it while its blockhash is still valid, and follows it until it finalizes or fails.

At finalized the tracker makes one more check before settling. It reads the finalized transaction and compares the balance changes with what Fianto built: the amount to the merchant, any fee to Fianto's treasury, and the USDC mint. A mismatch fails the payment, but only at finalized. Below that level a mismatch may be one RPC provider's partial answer, so the tracker waits for a finalized read rather than fail a good payment for ever.

Renewals follow the same rule. The customer signs nothing at renewal: Fianto's charging key signs the charge, and subscription.renewed is sent only once that charge finalizes.

A webhook delivery log for one subscription: subscription.created, subscription.renewed a month later, then subscription.past_due, each delivered. Fianto sends subscription.created and subscription.renewed only after the transaction behind each one has finalized.

Why show the receipt at confirmed but send webhooks at finalized?

Fianto splits the two because the customer and the merchant need different things from the same transaction. The customer needs to know the payment went through, so they stop waiting and do not pay twice. A receipt about a slot after the block lands does that, and no confirmed block has ever failed to finalize.

You need a fact you can act on and never undo, such as sending a licence key or recording revenue. Waiting for finality costs about 12.8 seconds until Alpenglow activates, and solana.com expects a fraction of a second after it. Either way it is cheap. How that compares with card settlement is in how long a USDC payment takes to settle.

The cost of the split is a short window in which the customer's screen says paid and your system does not know yet. If your success page reads your own database, the customer can land there before order.paid does. Plan for it: show "Payment received, setting things up" and refresh when the webhook arrives, instead of an error.

Deduplicating events and granting access from them is covered in the guide to webhooks for access. How to tell that a payment arrived when you are not using a processor at all is in how a merchant knows a crypto payment arrived.

Take USDC on a hosted checkout that tells your server only about finalized payments. No Fianto fee during the beta.

See the checkout

Which commitment should your own code use?

Until Alpenglow activates, use confirmed for anything you can redo and finalized for anything you cannot. In practice:

  • Building and sending a transaction: confirmed for the blockhash, and the same level as preflightCommitment when you send or simulate, as Solana's guide recommends.
  • Showing a customer progress: confirmed.
  • Showing a balance on a screen: confirmed is fine.
  • Granting access, shipping, crediting an account or reconciling your books: finalized. On Fianto, the webhooks already wait for it.

If you read the chain yourself, add one rule: never decide that a payment failed because it is missing. A transaction that has not landed can still land until its blockhash expires. Fianto's tracker keeps rebroadcasting until then, never marks a payment dropped while it could still land, and never drops on its own a transaction that any RPC provider ever reported as confirmed. A person on the support side decides those.

The status table and every webhook are in the Finality page of the Fianto docs.

What does Alpenglow change for Solana payments?

Alpenglow is a new consensus protocol for Solana, and once it is active, confirmed and finalized describe the same state. The Alpenglow page says it activates on mainnet in epoch 1064, scheduled to start on 21 October 2026 at about 15:00 UTC, and targets finality of roughly 150 milliseconds, down from the 12.8 seconds TowerBFT needs.

The page adds that the 150 ms "is an expectation, not a constant": it depends on how stake is spread across validators and on whether a block finalizes in one round of voting or two. Its advice to developers is to point new code at finalized only once Alpenglow is live, because "on TowerBFT, finalized still means waiting 12.8 seconds", and it says confirmed "will be deprecated and removed in a later release."

For a Fianto merchant nothing needs to change. Fianto already waits for finalized, so if Alpenglow performs as targeted, order.paid should trail the customer's receipt by about the tracker's two-second interval plus delivery time, instead of twelve seconds or more. That follows from how the tracker works; it is not yet a measurement.

Execution does not change either. The page says transactions, programs and fees stay the same, so a USDC payment looks and costs the same after activation as before it.

Sources
Questions

Questions about Solana finality.

How long does a Solana transaction take to finalize?

About 12.8 seconds under TowerBFT, according to the Alpenglow page on solana.com. Once the Alpenglow upgrade is live (activation is scheduled for 21 October 2026), Solana targets roughly 150 milliseconds.

Can a confirmed Solana transaction be reversed?

In principle a confirmed block can still be dropped, but solana.com says there has never been a confirmed block that did not finalize. A finalized transaction cannot be rolled back.

When does Fianto send order.paid?

Only when the payment's transaction is finalized on Solana. The customer's checkout shows success earlier, at confirmed, but the order turns PAID and the webhook is sent at finalized.

Can a finalized USDC payment be refunded?

Finalized means the network cannot roll the transfer back. A refund is a new transfer: on Fianto the merchant sends USDC back from its own wallet, as there is no refund API.

Should I use confirmed or finalized in my RPC calls?

Use confirmed for building transactions and showing progress, as Solana's documentation recommends, and finalized for any decision you cannot undo, such as granting access or booking revenue. After Alpenglow activates, solana.com advises moving new code to finalized.

Read next.

GuidesSolana9 min read

Stablecoin subscriptions on Solana: how automatic renewals work

A stablecoin subscription on Solana is a recurring payment in a stablecoin such as USDC that the customer approves once in their wallet; after that, each renewal is collected automatically, with no card and no monthly signature. The Solana Foundation's Subscriptions program enforces the cap per period and the wallets the money may go to on chain, so a collection above what the customer approved is refused. With Fianto the merchant pays nothing, and the customer pays a flat 0.01 USDC network fee per charge today plus a little SOL as account rent.

Payments7 min read

How a merchant knows a crypto payment arrived: references, memos and order matching

To know a crypto payment really arrived, you need three answers: which transfer belongs to which order, whether it moved the right token and amount into your wallet, and whether the network has made it final. On Solana the first is solved with a reference key added to the transfer, the second by reading the transfer itself, and the third by waiting for the finalized commitment level. Fianto does all three and sends your server a signed order.paid webhook only once the payment is finalized.

Compare8 min read

Chargebacks versus crypto refunds: what a merchant needs to know

No: a USDC payment on Solana cannot be reversed by the payer. There is no card issuer to file a dispute with, so there are no chargebacks. Once Solana has finalized the transfer, the money stays in the merchant's wallet unless the merchant sends it back. That makes refunds the merchant's job, and a clear refund policy the merchant's responsibility.

Count the money at finality.

Let the customer see the receipt at confirmed; fulfil from the webhook.

New posts are announced on X and Discord.