What problem does your feature solve?
On Stellar, a Freighter user cannot exist or transact until they hold XLM.
Opening an account locks ~1 XLM, each trustline locks 0.5 XLM more, and every operation spends a network fee in XLM. Sending a user to an exchange to buy XLM is a bad UX design.
That cost is small in dollars and large in drop-off:
- A user who was sent USDC (or another held asset) still cannot claim or spend
it until they acquire a second asset they were not given.
- Freighter’s current unfunded state can only say “add XLM” / Friendbot.
- No on-ramp is designed to sell ~1.5 XLM.
This is not a fee-sponsorship-only problem. Stellar spends XLM as a fee and locks XLM as a reserve. Covering only the fee still leaves the account unable to be created.
What would you like to see?
Let Freighter activate an unfunded account, and later pay classic send/swap fees, using a supported asset the user already holds, without requiring them to acquire XLM first.
Concretely, in the extension:
- Unfunded account + inbound claimable in an accepted asset: one
“Activate with {sendMax} {ASSET}” path. One signature creates the account (starting balance 0), opens the trustline, claims the balance, and pays reserves + the network fee from that asset. The button shows the quoted ceiling, not the waiting balance.
- Classic send / swap when spendable XLM is 0: an optional fee-assetpicker for accepted balances. Existing XLM-fee paths stay as they are.
- The user always sees
sendMax before signing. If the route moves past that ceiling, the transaction fails and nothing is taken. Opt-in and conditional: the token path only appears when Reserve accepts the network and a supported asset is actually available. Funded accounts with enough XLM should look and behave exactly as they do today.
Integration details (for product review)
This would use Cavos Reserve, a hosted Stellar sponsor we operate
(docs, SDK @cavos/reserve).
|
|
| What it sponsors |
Base reserves (CAP-33) and the network fee (CAP-15 fee-bump) |
| How the user pays |
PathPaymentStrictReceive in the same inner tx: token → exact XLM owed to the sponsor. Rate is the SDEX/pool route, not an oracle |
| Networks |
Testnet and mainnet hosted endpoints. No API key required |
| Accepted assets |
Allowlisted, liquidity-verified issuers only (XLM, Circle USDC, EURC, PYUSD, USDT0, AQUA, …). A code without its issuer is rejected |
| Keys |
Reserve never holds a user key and never adds itself as a signer. It signs only the outer fee-bump. SetOptions / signers / thresholds are not expressible in the request |
| Wallet check |
Freighter re-derives the server-built transaction from the request it made and compares XDR before prompting (ops, sponsorship sandwich, fee destination, destAmount, sendMax, path hops) |
| Scope in this proposal |
Classic G… accounts. Not Soroban, not dApp signTransaction inference |
We maintain the SDK and the service, and we can change either if Freighter needs a different trust, allowlist, or operational boundary.
Happy to join a product review or adjust the integration before any code review of #3001.
What problem does your feature solve?
On Stellar, a Freighter user cannot exist or transact until they hold XLM.
Opening an account locks ~1 XLM, each trustline locks 0.5 XLM more, and every operation spends a network fee in XLM. Sending a user to an exchange to buy XLM is a bad UX design.
That cost is small in dollars and large in drop-off:
it until they acquire a second asset they were not given.
This is not a fee-sponsorship-only problem. Stellar spends XLM as a fee and locks XLM as a reserve. Covering only the fee still leaves the account unable to be created.
What would you like to see?
Let Freighter activate an unfunded account, and later pay classic send/swap fees, using a supported asset the user already holds, without requiring them to acquire XLM first.
Concretely, in the extension:
“Activate with {sendMax} {ASSET}” path. One signature creates the account (starting balance 0), opens the trustline, claims the balance, and pays reserves + the network fee from that asset. The button shows the quoted ceiling, not the waiting balance.
sendMaxbefore signing. If the route moves past that ceiling, the transaction fails and nothing is taken. Opt-in and conditional: the token path only appears when Reserve accepts the network and a supported asset is actually available. Funded accounts with enough XLM should look and behave exactly as they do today.Integration details (for product review)
This would use Cavos Reserve, a hosted Stellar sponsor we operate
(docs, SDK
@cavos/reserve).PathPaymentStrictReceivein the same inner tx: token → exact XLM owed to the sponsor. Rate is the SDEX/pool route, not an oracleSetOptions/ signers / thresholds are not expressible in the requestdestAmount,sendMax, path hops)G…accounts. Not Soroban, not dAppsignTransactioninferenceWe maintain the SDK and the service, and we can change either if Freighter needs a different trust, allowlist, or operational boundary.
Happy to join a product review or adjust the integration before any code review of #3001.