On this page
- SPL tokens are Solana's tokens: data accounts owned by a shared Token program, not separate contracts per token.
- A token is identified by its mint address. USDC's mint, EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v, belongs to the original Token program and has 6 decimals.
- With Fianto, a one-off payment is one transfer of that mint straight into the merchant's USDC account; Fianto never holds the tokens.
What is an SPL token?
An SPL token is any fungible or non-fungible token on Solana that is managed by a Solana token program. Solana's token documentation puts it in one line: "Tokens on Solana are referred to as SPL (Solana Program Library) Tokens." SPL is the name of the collection of standard programs Solana developers maintain, and the token programs are part of it.
The same page says what that means mechanically: "All tokens on Solana are effectively data accounts owned by a Token Program." A program is Solana's word for on-chain code. Nobody writes new code to launch a token; they ask an existing token program to create a new set of accounts.
What is an SPL token made of?
An SPL token is made of three kinds of account, and knowing which is which explains most of what you see in a wallet or an explorer.
The mint account
The mint account defines the token. It records the total supply, the number of decimals, the mint authority that can create new units and an optional freeze authority. The Solana terminology page adds the rule that matters most for payments: "Different tokens are distinguished by their unique token mint addresses."
The token accounts
A token account holds one token for one owner. The docs define it as an account that "tracks individual ownership of tokens for a specific mint account for a specific owner." Your wallet address owns token accounts but holds no tokens itself; the default one for each token is the associated token account.
The token program
The token program owns all of those accounts and holds the rules for minting, transferring, delegating, freezing and burning. Solana has two: the original Token program, which the Token program documentation says "defines a common implementation for Fungible and Non Fungible tokens", and Token-2022, a superset with optional extensions. The difference between them is the subject of Token-2022 vs the original Token program.
Is USDC an SPL token?
Yes. USDC on Solana is an SPL token on the original Token program. We read Circle's mint on mainnet on 15 October 2026, at 10:26 UTC, with the RPC method getAccountInfo; this is what the account said:
| Field | Value on 15 October 2026 | What it means for a payment |
|---|---|---|
| Owner program | TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA | The original Token program, so no Token-2022 extensions apply |
| Size | 82 bytes | A plain mint with nothing added after the standard fields |
| Decimals | 6 | 1 USDC is 1,000,000 base units |
| Supply | 7,761,626,022,601,143 base units | About 7.76 billion USDC on Solana at that moment; it changes with every mint and burn |
| Mint authority | Set | Whoever holds it can issue new USDC |
| Freeze authority | Set | Whoever holds it can freeze a USDC token account |
The freeze authority deserves a sentence of its own: it means a holder's USDC account can be frozen by whoever holds that authority, which the sibling post can USDC be frozen answers in full. The unit maths behind the 6 decimals is in USDC decimals and Solana units.
How is an SPL token different from an ERC-20 token?
An ERC-20 token is its own smart contract that follows a shared interface, while an SPL token is data handled by a shared program. EIP-20 describes itself as a standard "for the implementation of a standard API for tokens within smart contracts", so every ERC-20 token ships its own code. On Solana, the code is shared and only the accounts differ.
| SPL token (Solana) | ERC-20 token (Ethereum and EVM chains) | |
|---|---|---|
| Where the logic lives | One shared token program for every token | A separate contract per token |
| Where a balance is kept | A token account per owner and token | A mapping inside the token's contract |
| Decimals | A required field on the mint | An optional method; the standard says callers "MUST NOT expect" it |
| How a token is identified | Its mint address | Its contract address |
| Fees to move it | Paid in SOL | Paid in the chain's native coin |
Shared code has a practical upside for anyone taking payments: a wallet or a checkout that handles one SPL token correctly handles the transfer rules of all of them on that program.
What does a merchant receive when a customer pays in USDC?
A merchant receives USDC base units in the USDC token account of its own wallet, moved there by the Token program in the customer's transaction. With Fianto, the transaction a customer signs for a one-off payment contains a Token program transferChecked instruction: an instruction that names the amount, the mint and the mint's decimals, so the program refuses it if the mint or the decimals do not match. Fianto builds it for exactly one mint, USDC, and checks the signed bytes against it before sending.
- The price moves from the customer's USDC account straight to the merchant's. Fianto never holds the tokens: there is no Fianto balance and no payout.
- When a fee is above zero, a second transfer in the same transaction sends it to Fianto's treasury. During the beta there is no Fianto fee; subscription charges carry a flat network fee of 0.01 USDC each today, on plans created since 6 October 2026.
- For a subscription, the customer approves once and later charges go through the Subscriptions program, which acts as a capped delegate on the customer's USDC account. Solana token delegation explained covers how that cap works.
The merchant's wallet needs its USDC token account before the first sale; without it, Fianto answers merchant_. The full first-payment setup is in accept USDC on Solana.
One USDC mint, straight to your wallet. Open a hosted checkout and see the transfer the customer signs.
See the checkoutCan anyone create an SPL token called USDC?
Anyone can create an SPL token and give it any name, including USDC, because creating a mint takes one CLI command, as Solana's own quickstart shows, and a little SOL. Names and logos are metadata a wallet displays; the mint address is the only identity the chain enforces. That is why Fianto's checkout accepts the one mint Circle publishes and nothing else, whatever a token calls itself.
If you hold a token that looks like USDC and are unsure, compare its mint with Circle's list, as checking real USDC on Solana shows step by step.