Get started

How money moves

What the payer signs, where the price and the service fee go, and when a payment counts as paid.

3 min read

A payer pays with one Solana transaction that their own wallet signs. The price goes straight to the merchant's wallet and any service fee to fianto, in the same transaction. Nothing is held in between.

A one-time payment

How money moves in a one-time payment
How money moves in a one-time fianto paymentPayer's walletsigns one transactionMerchant's walletthe pricefianto treasuryservice fee, when above zero

Scroll sideways to see the whole diagram →

Show as text
  1. The payer's wallet signs one transaction. The payer is the only signer.
  2. That transaction sends the price in USDC straight to the merchant's wallet.
  3. In the same transaction, the service fee goes to fianto's treasury — only when the service fee is above zero.
  4. fianto broadcasts the signed transaction and watches the chain. The price goes straight to the merchant's wallet and any service fee to fianto, in the same transaction. Nothing is held in between.
  5. Subscriptions work differently: fianto's charging key co-signs the subscribe transaction and signs each renewal, within the limits the on-chain program enforces.

The transaction the payer signs holds:

  1. Two compute-budget instructions.
  2. A USDC transfer of the price to the merchant's wallet. This transfer carries the session's reference, so fianto can match it to the checkout.
  3. A USDC transfer of the service fee to fianto's treasury, only when the fee is above zero.

The payer is the only signer and pays the network fee. The wallet only signs: fianto broadcasts the transaction, and rebroadcasts it when needed.

To pay, the payer needs:

  • a USDC token account that already exists and is not frozen,
  • the price plus the service fee in USDC,
  • at least 0.00001 SOL.

A one-time payment costs the payer no rent. fianto never creates token accounts, for the payer or for the merchant. The merchant's receiving wallet must already have a USDC token account, or creating a checkout fails with merchant_token_account_missing. Send that wallet any amount of USDC once to create it.

Confirmed, then finalized

A Solana transaction is first confirmed, then finalized. fianto acts on each step differently:

StepWhat happens
ConfirmedThe checkout page shows the payer success.
FinalizedThe order becomes PAID, the payment SUCCEEDED, and fianto sends order.paid and checkout.session.completed to your webhook endpoint.

The payer's success screen is not proof of payment

The payer sees success at confirmed, before the order is paid. Fulfil an order only from the order.paid webhook or from the order you read back from the API.

The service fee

The payer pays the service fee

fianto's service fee is capped at 10 % of the price. It is added on top of the price and the payer pays it. It is rounded down in the payer's favour. It goes to fianto's treasury in the same transaction, and only when it is above zero. The checkout page always shows a "Service fee" line.

The fee is fixed on the session when you create it, so a later change never alters a checkout that is already open.

Subscriptions work differently

What the subscribe transaction contains
The instructions in the subscribe transaction, who signs it and who paysone transaction, in this order1Set compute budget2Create USDC authorityonly when the wallet has none3Subscribebound to the plan's terms4Pull price → merchant's walletcarries the session reference5Pull service fee → fianto's treasuryonly when the fee is above zerodashed: only sometimes included · the first period is charged herewho signspayer's walletfianto's charging keyco-signswho payspayernetwork fee + both rentsfianto's charging keynothingrent is read from Solanaat subscribe time

Scroll sideways to see the whole diagram →

Show as text
  1. Set the compute budget.
  2. Create the payer's USDC authority, only when the wallet has none.
  3. Subscribe, bound to the plan's terms.
  4. Pull the price to the merchant's wallet; this pull carries the session reference.
  5. Pull the service fee to fianto's treasury, only when the fee is above zero.
  6. The first period is charged inside this transaction.
  7. The payer's wallet signs and is the fee payer: the payer pays the network fee and both rents (the subscription's and, when it is created, the USDC authority's).
  8. fianto's charging key co-signs and pays nothing.
  9. The rent is read from Solana at subscribe time.

To subscribe, the payer signs one subscribe transaction. It creates the payer's USDC authority when the wallet has none, subscribes to the plan, pulls the price to the merchant's wallet and pulls the service fee to fianto's treasury when the fee is above zero. The first period is charged inside this transaction.

What the payer pays to subscribe

The payer pays the network fee and two rents: the subscription account's, and the USDC authority's when this transaction creates it. The rent is read from Solana when the payer subscribes and shown on the checkout page. fianto's charging key co-signs and pays nothing.

After that, fianto's charging key takes each renewal, every 30 days or every 365 days as the price sets, and pays the network fee for it. It can only take what the subscription's own on-chain terms allow: at most the plan amount per period, only to the plan's destinations, and nothing after the subscription is cancelled or expired.

A subscription keeps the wallet and the fee it started with. If the merchant's wallet or the fee changes, only new subscribers get the new ones.

See also

Was this page helpful? Tell us

On this page