β‘Gasless Trustline
The Gasless Trustline feature lets your users receive a brand-new asset without ever needing to understand, fund, or manually pay for a Stellar trustline. It is one of the most powerful onboarding tools in the Soroswap API, and it is designed to remove the single biggest friction point that new users hit on Stellar.
TL;DR β A sponsor account fronts the ~0.5 XLM reserve needed to open the user's trustline, and the user repays it inside the same swap using the assets they are already trading. The user does not need to hold XLM beforehand, and never has to think about trustlines at all.
New to trustlines? Read the Trustlines concept page first. In short: on Stellar, an account must open a trustline β and lock up a small XLM base reserve β before it can hold any non-native asset.
The problem it solves
On Stellar, before an account can receive a token (say USDC), it must:
Understand what a trustline is.
Own XLM to pay the base reserve (~0.5 XLM per trustline) plus the transaction fee.
Submit a separate
changeTrusttransaction before the swap.
For a brand-new user who only holds, for example, some bridged USDC and no XLM, this is a dead end: they can't open the trustline needed to receive the very asset they want, because they have no XLM to pay for it. This "empty wallet" problem is a classic onboarding cliff.
Gasless Trustline removes all three barriers. The user just swaps. The trustline is created, funded, and repaid automatically as part of the transaction they were going to sign anyway.
Benefits
π Zero-XLM onboarding
Users can acquire their first non-native asset even with no XLM in their wallet.
π§ No trustline knowledge required
The concept is fully abstracted away β your UI never has to explain "base reserves" or "changeTrust".
π One signature, one flow
The trustline creation and the swap are bundled into a single transaction β no separate pre-step, no second round-trip.
πΈ User self-repays
The sponsor is reimbursed from the swap's proceeds, so sponsoring is (near) cost-neutral β you're lending, not gifting.
π Transparent costs
The quote returns the trustline cost in both the input and output asset, so you can show the user exactly what it costs (or hide it entirely).
π‘ Sponsor stays in control
The sponsor's XLM only covers the reserve via beginSponsoringFutureReserves / endSponsoringFutureReserves; it is repaid within the same atomic transaction.
βοΈ Atomic & safe
Everything happens in one transaction. If any part fails, the whole thing reverts β the sponsor is never left out of pocket.
How it works
Gasless Trustline runs on the Stellar Classic DEX (SDEX) using path payments, and applies only to the first swap for a given user (i.e., when that user does not yet have a trustline for the output asset).
The role of the sponsor
A sponsor is a wallet you control (your app's account) that temporarily covers the XLM base reserve required to open the user's trustline. Two Stellar primitives make this safe and atomic:
beginSponsoringFutureReservesβ the sponsor starts paying reserves on behalf of the user.endSponsoringFutureReservesβ the sponsorship window closes.
Between those two operations, the transaction opens the trustline, performs the swap, and repays the sponsor's ~0.5 XLM out of the assets being swapped β so the sponsor is made whole within the same transaction.
The operations, step by step
When gasless trustline is enabled, /quote/build assembles a single SDEX transaction (built on the sponsor's account as source) containing all of the operations below. For an EXACT_IN swap:
beginSponsoringFutureReservesβ sponsor starts sponsoring the user's future reserves.changeTrustβ the user opens the trustline for the output asset (reserve paid by the sponsor).(optional) Platform-fee payments β if
feeBps/referralIdare set.pathPaymentStrictSendβ the user performs the actual swap (assetInβassetOut).pathPaymentStrictReceiveβ the user buys 0.5 XLM using the output asset and sends it to the sponsor, repaying the reserve.endSponsoringFutureReservesβ the sponsorship window closes.
The EXACT_OUT flow is analogous but reorders the steps: the user first buys the 0.5 XLM for the sponsor (via a pathPaymentStrictReceive, or a plain payment when the input asset is XLM), then opens the trustline, then performs the main swap.
Because the transaction touches both the user's account (trustline + swap) and the sponsor's account (reserve), the resulting XDR must be signed by both the user and the sponsor.
Using it in the API
Gasless Trustline touches two endpoints: /quote and /quote/build.
Step 1 β Request a gasless quote
Add gaslessTrustline: "create" to your /quote request body.
Only set gaslessTrustline: "create" when you are sure the user does not already have a trustline for the output asset, and you have a funded sponsor account. If the user already trusts the asset, use a regular quote instead.
The response is a Gasless Trustline Swap Quote. It always routes through "platform": "sdex" and includes two extra objects:
Key fields:
gaslessTrustline
Confirms this is a gasless trustline quote ("create").
amountOut / netAmount
What the user actually receives after the trustline cost is repaid.
trustlineInfo.trustlineCostAssetIn
The trustline cost expressed in the input asset β display it to the user if you like.
trustlineInfo.trustlineCostAssetOut
The same cost expressed in the output asset.
rawTrade.trustlineOperation
The path-payment details used to buy the 0.5 XLM and repay the sponsor.
Step 2 β Build the transaction
Pass the quote to /quote/build along with the user (from) and the sponsor account.
The response contains the unsigned XDR:
Requirements & limits
sponsoris required whengaslessTrustlineis set β the build fails without it.The
fromandtoaddresses must currently be the same (a different recipient is not yet supported for gasless trustlines).Gasless trustline works only on the Stellar Classic DEX (SDEX) and applies only to the user's first swap for that asset.
Step 3 β Sign with both wallets, then send
Because the transaction spans the user and the sponsor, collect both signatures before submitting:
The user signs the XDR (opens the trustline, performs the swap, repays the sponsor).
The sponsor signs the XDR (authorizes covering the reserve).
Submit the fully-signed XDR to
POST /send(or through your own Soroban RPC / Horizon).
End-to-end example (JavaScript)
When to use it
β Use gasless trustline when:
The user is acquiring an asset for the first time (no existing trustline).
You want the smoothest possible onboarding, especially for users with no XLM.
You operate a funded sponsor account to front the reserve.
β Don't use it when:
The user already has a trustline for the output asset (use a regular quote β it will be cheaper and can route across all protocols, not just SDEX).
You need to send the output to a different recipient than the swapper (
fromβtois not yet supported).You want routing across Soroswap / Phoenix / Aqua β gasless trustline is SDEX-only.
Related
Last updated