Fees and sponsorship
What a passkey account costs on-chain, who pays, and how to sponsor onboarding so users hold no XLM. Real mainnet numbers for account creation and add-device.
A passkey account is a Soroban smart account (a C... contract). Authorization and payment are separate: the passkey proves who may act, and a classic account (yours, a relayer, or the user's) pays the network fee and submits the transaction. This page shows what each passkey operation costs, who can pay, and how to run a gasless onboarding.
No base reserve
A contract account holds no base reserve, unlike a classic G account that locks ~1 XLM. Creating
a passkey account costs only the network fee of the deploy, so sponsoring accounts does not lock
up XLM.
What costs a fee
Only operations that submit a transaction cost a fee. The figures below are measured on Stellar mainnet.
| Operation | Cost | Notes |
|---|---|---|
Create an account (factory.deploy) | ~0.05 XLM | One-time, per account. Deploys the smart account. |
Add a device / signer (add_signer) | ~0.03 XLM | Enrolls a second passkey for recovery. |
Remove a signer (remove_signer) | ~0.005 XLM | Revokes a device. |
| Submit a passkey-signed transaction | ~0.005 XLM | Payments, contract calls, any authorized action. |
These are network fees, paid by whichever account submits the transaction. They are separate from the account's own balance: a passkey account holds and spends its own XLM and tokens; the fees above are only the cost of submitting.
What is free
These run in the browser or read-only against an RPC, so they cost nothing on-chain:
- Signing a transaction, an auth entry, or a message (the fee appears only when you submit a transaction).
connect(silent reconnect from a stored credential).recover(resolve a credential's accounts through the indexer).- Deriving an account address offline.
Who pays
The fee source is a pluggable submission adapter, so you choose the payer once and every operation follows it:
directSubmission: an account you control pays. Good for development.launchtubeSubmissionoropenzeppelinRelayerSubmission: a relayer pays, so the user needs no XLM.- The user's own
Gaccount pays.
Set the adapter once and account creation, add-device, and every signed transaction route through it. See Adapters and Gasless onboarding.
How to sponsor onboarding
Sponsor the two operations that remove the onboarding barrier: account creation and adding a backup device. Your new user then holds a working, recoverable passkey account without owning any XLM, and your funded account paid for it.
Per user that is about 0.05 XLM to create the account plus about 0.03 XLM to enroll a backup device, so about 0.08 XLM. Sponsoring 10,000 users is on the order of 800 XLM (about 500 XLM for creation and 300 XLM for one add-device each). Budget higher to allow for network fee changes.
Everything after onboarding is equally your choice. Because payment is decoupled, you sponsor your users' ongoing transactions through your own account or a relayer, or have users pay their own fees once they hold XLM. The deployed factories are open infrastructure: they set no fee policy and fund nothing themselves.
Proof on mainnet
The signing path runs on Stellar mainnet:
- Account creation:
7dcae6b8... - Passkey-signed payment:
6a532cc4... - Wrong key rejected on-chain:
6841ae73... - AccountFactory:
CCCNRWMI...
Never ship a fee-source secret in a browser page. Sponsor from a server-held account or a relayer.
Existing wallets
Add passkeys to users who already hold a classic (G) Stellar account. The migration to a smart account, backup signers, and who pays fees on testnet vs mainnet.
Stellar Wallets Kit
How the SoroPass PasskeyModule plugs passkey smart accounts into stellar-wallets-kit, its full configuration and error contract, and how you wire the same flows with @soropass/core today.