How recurring USDC payments work on Solana.
The customer signs once to let the Subscriptions program, a public program on Solana, move USDC from their wallet within a cap per billing period. Each period, Fianto asks the program to collect; the program checks the amount, the destination and the period before anything moves. Nothing is prepaid and nothing sits with Fianto.
The parts
- The plan: the amount per period, the period length (30 or 365 days), the merchant's receiving wallet, and the keys allowed to request collections. Fianto creates it on chain for a recurring price.
- The subscription: an account that links the customer's wallet to the plan. The customer creates it, and pays its account rent, when they subscribe.
- The wallet's authority account: set up the first time a wallet subscribes with USDC, it is the program's delegate on the wallet's USDC account, so the program can move USDC from it within the limits each subscription sets.
- The collector: Fianto's charging keys. The program does not run on a timer, so someone must ask; on each due date Fianto submits the collection.
What the customer signs
| Action | What it is | What it costs them |
|---|---|---|
| Subscribe | A transaction: sets up the subscription with its cap, and pays the first period | The first period, the network fee, and account rent |
| Sign in to fianto.xyz/my | A message, not a transaction. It moves nothing and gives nobody permission to collect | Nothing |
| Cancel | A transaction. The subscription runs to the end of the paid period | The network fee, under $0.01 |
| Reclaim rent | A transaction, offered after the subscription ends | The network fee; the rent comes back |
The cap is the most that can be collected in one period: the price, plus any Fianto fee (none during the beta), plus the flat network fee each renewal carries, 0.01 USDC today. Changing the amount, the cap, the destination or the period needs a new signature from the customer's wallet. Nobody can do it for them, Fianto included.
What the program checks on every collection
- The amount is within the cap for this period.
- The USDC goes to the plan's destination, the merchant's receiving wallet.
- This period has not already been collected.
- The subscription is still in place.
A request that fails any check is refused on chain and nothing moves. When it passes, the USDC goes from the customer's wallet to the merchant's in that one transaction.
When each period is collected
A monthly plan renews every 30 days from the day it started, a yearly plan every 365 days. Fianto first asks two minutes into the new period. If the wallet is short, nothing is taken and Fianto tries again one hour, six hours and one day into the period; after a fourth failure the subscription ends. See failed renewals and retries.
