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

Programs, not smart contracts: how Solana runs a subscription payment.

A Solana program is what other chains call a smart contract, with one structural difference: the program account holds only executable code, and every piece of state it works on lives in separate accounts that the program owns. A payment program on Solana is therefore a program plus a set of accounts, usually at program derived addresses. The Subscriptions program behind Fianto shows the pattern: a plan account for each price and its terms, one subscription account per subscriber and plan, and one authority account per wallet and token.

On this page
What is a Solana program?How is a Solana program different from an Ethereum smart contract?Which accounts does the Subscriptions program keep?Why does a payment program use program derived addresses?What happens inside the program when a renewal is collected?Who can change the Subscriptions program?Does a merchant need to deploy a program to take subscriptions?SourcesQuestions
TL;DR
  • Solana's docs define a program as an account holding executable bytecode, and say programs are stateless: their data sits in other accounts.
  • The Subscriptions program at De1egAFMkMWZSN5rYXRj9CAdheBamobVNubTsi9avR44 keeps each plan, subscription and wallet authority in its own program derived address.
  • Its mainnet build was verified against its public source on 10 August 2026, and it is not frozen: its upgrade authority can still deploy a new version.

What is a Solana program?

A Solana program is an account that holds compiled code and is marked executable, so transactions can call it. Solana's programs documentation defines it in one sentence: "A Solana program is an account that contains executable sBPF bytecode and has its executable flag set to true." sBPF is the bytecode format Solana programs are compiled to. The next line on that page is the one that shapes everything else: "Programs are stateless."

Solana's terminology page links the two names directly. An onchain program is "the executable code on Solana blockchain that interprets the instructions sent inside of each transaction to read and modify accounts over which it has control," and the page adds: "These programs are often referred to as "smart contracts" on other blockchains." So "smart contract on Solana" is not wrong. It just hides how the code and the data are split.

How is a Solana program different from an Ethereum smart contract?

A Solana program differs from an Ethereum smart contract in where its data lives: on Ethereum the code and its state sit at one address, while on Solana the code sits in the program account and the state in other accounts. Ethereum's own introduction to smart contracts says a smart contract "is a collection of code (its functions) and data (its state) that resides at a specific address on the Ethereum blockchain."

On Solana the state goes into data accounts, and one rule from the accounts documentation governs them: "Only the account's owner program can modify its data or debit lamports." An account records which program owns it. A subscription account owned by the Subscriptions program can be changed by that program and by nothing else, whatever a transaction asks for.

For a payment system the split means one program can serve any number of independent records without them sharing storage. Each plan, subscription or approval is its own small account, with its own owner check and its own rent.

Which accounts does the Subscriptions program keep?

The Subscriptions program keeps three kinds of account for a subscription, and it moves money between two more that belong to the Token Program. This is the set a Fianto subscription touches, with the seeds each address is derived from, as Fianto's code derives them with the program's own client library:

AccountAddress derived fromWhat it holdsWho funds it
Plan"plan", the plan owner, a plan numberAmount per period (price plus any fees), USDC mint, period of 30 or 365 days, destination wallets, the keys allowed to collectFianto's plan-owner key, once per plan
Subscription"subscription", the plan, the subscriberOne subscriber's terms on one plan; 155 bytesThe customer: about 0.00144 SOL as of 15 October 2026, returned when they reclaim it after the subscription ends
Subscription Authority"SubscriptionAuthority", the wallet, the token mintThe delegate on the wallet's USDC account, shared by all its subscriptions in that token; 106 bytesThe customer: about 0.00119 SOL as of 15 October 2026, once per wallet, not returned
Customer's USDC token accountThe wallet and the USDC mint (associated token account)The USDC being paidAlready exists in the customer's wallet
Merchant's USDC token accountThe merchant wallet and the USDC mintWhere the price landsMust exist before the first sale

The rent figures are what Solana charged on 15 October 2026 for accounts of those sizes. Solana is cutting rent in phases, so the checkout reads the live amount and shows it before the customer signs. The program's README describes the authority this way: "For each `(user, mint)` pair, the program creates a **Subscription Authority (SA)** PDA and sets it as the single delegate on the user's token account with `u64::MAX` approval." Why that approval is safe is the subject of Solana token delegation explained.

Why does a payment program use program derived addresses?

A payment program uses program derived addresses because they give each record a predictable address that no person holds a key for. Solana's PDA documentation says they "are guaranteed to not lie on the Ed25519 curve, which means no private key exists for them," and that "Only the program whose ID was used in the derivation can "sign" for a PDA, and it does so through invoke_signed during cross-program invocations (CPIs)."

Each property does a job in a subscription:

  • Predictable. Fianto derives a plan's address from its own plan number, so it never has to ask the chain where a plan is. The same goes for a subscription, which is derived from the plan and the subscriber, so there is exactly one address per pair.
  • Keyless. Nobody can sign as the Subscription Authority, not the customer, not the merchant, not Fianto. Only the program can, and only when its own checks pass.
  • Scoped. The authority is derived from the wallet and the token mint, so it is one per wallet per token. That is why removing it affects every subscription the wallet pays in USDC through this program, not just one.

How a PDA differs from a wallet address, and which of them you should ever paste anywhere, is covered in what a Solana address is.

What happens inside the program when a renewal is collected?

When a renewal is collected, Fianto's charging key signs a transaction that calls the program with the plan, the subscription, the authority and the token accounts, and the program decides on chain whether any USDC moves. In order:

  1. Fianto builds the transaction and simulates it first, so a charge the program would refuse is not broadcast; how that charge is priced when the network is busy is in payments during Solana congestion.
  2. The program reads the plan and the subscription. It refuses a signer that is not on the plan's list of collectors, a destination the plan does not name, more than the plan amount in one period, a subscription that is cancelled or expired, a plan that is sunset, terms that differ from those bound at subscribe time, and a stale authority.
  3. If everything holds, the program signs for the Subscription Authority, the delegate on the customer's USDC account, and has the Token Program move the price to the merchant's USDC account and any fee to Fianto's treasury.
  4. The subscription account records what was collected for the period, so a second collection in the same period finds the budget spent.

The plan's destinations are wallets, not token accounts: the program checks that the receiving token account is owned by a destination wallet. Fianto measured a renewal with one pull at 6,331 compute units on the mainnet program binary on 5 October 2026, so the program's checks cost little next to Solana's limit of 1,400,000 units per transaction. The step-by-step product view is on the Solana subscriptions page.

Sell a monthly or yearly plan in USDC. The program enforces the terms; you never deploy anything.

See how a plan is billed

Who can change the Subscriptions program?

The Subscriptions program's upgrade authority can change it: the program is upgradeable and not frozen. Solana's programs page explains the mechanism: "Programs deployed with loader-v3 (BPF Loader Upgradeable) can be upgraded when an upgrade authority is set; revoking that authority makes the program immutable."

What you can check is whether the code running today matches its public source. The OtterSec verification record, read on 15 October 2026, reports "On chain program verified" against commit 364a419 of the Solana Foundation repository, last verified on 10 August 2026, with is_frozen false. Solana's verified builds guide is careful about what that proves: "While a verified build should not be considered more secure than an unverified build, the build enables developers to self verify the source code matches what is deployed onchain."

Does a merchant need to deploy a program to take subscriptions?

A merchant does not deploy or own any program to take USDC subscriptions with Fianto. Fianto creates the plan account when the first checkout session for a recurring price is created, and the customer creates their own subscription account by signing once. Ending the price later makes Fianto sunset the plan on chain, and existing subscribers are cancelled at the end of their paid period.

If you are building on the program yourself, for example for AI agents that pay within a budget, the source, client library and audits are in the program repository. If you want the accounts above without writing code, the Subscriptions program page in the Fianto docs lists exactly what a Fianto plan holds and what the program checks.

Sources
Questions

Questions about Solana programs.

Are Solana programs smart contracts?

Yes, in the everyday sense. Solana's own terminology page says programs "are often referred to as "smart contracts" on other blockchains", but on Solana the program holds only code and its data lives in separate accounts.

Where does a Solana program store its data?

In separate data accounts that the program owns. Only the owner program can change an account's data, and each account pays its own rent.

What is the address of the Subscriptions program?

De1egAFMkMWZSN5rYXRj9CAdheBamobVNubTsi9avR44 on Solana mainnet. Fianto subscriptions run on that program.

Can a Solana program be changed after it is deployed?

Yes, if it was deployed as upgradeable and still has an upgrade authority. Revoking the authority makes it immutable; the Subscriptions program had not been frozen as of 15 October 2026.

What is a verified build?

A check that the bytecode deployed on chain matches a build of a stated commit of the public source code. It proves that match, not that the code is safe.

Read next.

Solana8 min read

What is a Solana address? Public keys, PDAs and token accounts in one payment

A Solana address is a 32-byte account identifier written as a base58 string, and it is one of two kinds: the public key of a keypair, which someone can sign for, or a program derived address, which nobody holds a key for. Your wallet address is a public key; your USDC sits in a token account at a program derived address calculated from that wallet. To get paid you give the wallet address, never the token account, and a Fianto merchant proves that wallet by signing with it.

Solana6 min read

Token-2022 vs the original Token program: what merchants need to know

Token-2022, also called Token Extensions, is a second Solana token program at a different address that does everything the original Token program does and adds opt-in extensions such as transfer fees, a permanent delegate, transfer hooks and pausing. The original program has no extensions and will get no new instructions. USDC on Solana is on the original Token program, so none of those extensions can touch a USDC payment, and Fianto builds every transfer for that program.

Wallets8 min read

Can a merchant take more than I approved? Crypto subscription approval limits

No. A USDC subscription paid through Fianto runs on the Solana Foundation's Subscriptions program, which lets a collection through only if it stays within the cap for the period, the price plus the fees, and goes to a wallet the plan names. Your wallet may still list the approval as unlimited, because one approval is shared by every subscription your wallet pays through the program; the limits sit in each subscription's on-chain terms, not in that approval.

The rules sit in the accounts.

Read the plan your customers sign, then sell it.

New posts are announced on X and Discord.