Stellar Transaction Fees Explained: Base Fee, Surge, Soroban
How Stellar fees work: the 100-stroop base fee, surge pricing, Soroban resource fees with real mainnet examples, fee bumps, and minimum-balance reserves.
A Stellar payment costs 0.00001 XLM. That number is real, but it is the floor, not the whole story: smart-contract calls pay a second, resource-based fee, busy ledgers switch to an auction, and the cost new users actually notice is not a fee at all but the XLM reserve every account and trustline locks up.
Every transaction pays an inclusion fee: at least 100 stroops per operation, more only under surge pricing. Soroban transactions add a resource fee for CPU, storage, bandwidth and rent, part of which is refunded if unused. Separately, accounts must hold 1 XLM plus 0.5 XLM per trustline or offer as a refundable reserve.
Two fees, one formula
Stellar charges two kinds of fee. The inclusion fee applies to every transaction and buys a place in the ledger. The resource fee applies only to smart-contract transactions and pays for the computation and storage they use. A contract transaction's total fee is the sum of the two.
The developer documentation states it as a formula: Transaction Fee = Resource Fee + Inclusion Fee. For a classic transaction, such as a payment, an offer on the DEX or a trustline change, the resource fee is simply zero.
Two further rules shape everything below. First, contract and non-contract transactions do not compete with each other for ledger space; each has its own limits and its own auction. Second, all fees are paid in XLM, and "the lumens collected from transaction fees go into a locked account and are not given to or used by anyone". Stellar has no block rewards, so there is no fee income for validators, which is also why XLM cannot be staked natively.
The inclusion fee and the base fee
The inclusion fee equals the number of operations multiplied by the effective base fee for that ledger. The network minimum is 100 stroops per operation, where one stroop is one ten-millionth of an XLM. When ledgers are not full, everyone pays the minimum, whatever maximum they bid.
The base fee you set on a transaction is a maximum bid per operation, not a price. The documentation is explicit: "You'll only be charged the lowest amount needed for your transaction to make it to the ledger." A classic transaction can contain up to 100 operations; a Soroban transaction is limited to one, plus one more if it is fee-bumped.
| Transaction | Operations | Minimum inclusion fee |
|---|---|---|
| Single XLM or USDC payment | 1 | 100 stroops = 0.00001 XLM |
| Add a trustline and place a DEX offer | 2 | 200 stroops = 0.00002 XLM |
| Batch of 100 payments (maximum) | 100 | 10,000 stroops = 0.001 XLM |
Live data shows how rarely the minimum is exceeded for classic traffic. On 2 October 2026, Stellar RPC's fee statistics over the previous ten ledgers showed a median classic inclusion fee of 100 stroops, with the 99th percentile at 200. For Soroban transactions over the previous 50 ledgers, the most common inclusion fee was 200 stroops. Horizon reported ledgers running at 51% of capacity.
Surge pricing, with the numbers
Surge pricing starts when submitted operations exceed a ledger's capacity, or when contract transactions compete for a resource. Transactions are then sorted by fee bid and the cheapest drop out. Everyone included pays the lowest inclusion fee in the accepted set, so bidding high costs nothing extra unless the network is genuinely full.
The documented limits, as of July 2026 on mainnet, are 1,000 non-contract operations per ledger and a separate cap for contract transactions, alongside contract resource limits for instructions, ledger reads and writes, and transaction size. Validators can change these by vote; current values are on Stellar Lab's Network Limits page.
SDF's own example: five transactions bid inclusion fees of 2, 3, 4, 4 and 5 XLM, and only four fit. The 2 XLM bid is excluded and the other four each pay 3 XLM, the lowest accepted bid. Had all five fitted, each would have paid 100 stroops. Ties at the margin are broken randomly; transactions that do not get in wait for a later ledger or are discarded. Setting time bounds on a transaction makes the outcome definite.
The documentation adds a warning worth repeating: contract transactions have tighter limits, surge more often, and are "more likely to pay your maximum fee bid". Wallets therefore tend to bid well above 100 stroops for Soroban calls.
SDF describes two strategies for living with this. The first is to set the highest fee you are comfortable paying: under normal conditions you still pay only the minimum, and the docs observe that the average user "probably doesn't care if they're paying 0.8 cents or 0.00008 cents", so wallets may set a persistent base fee above the market rate. The second is to resubmit with a higher fee when a transaction fails to get in.
If a transaction is stuck, a fee-bump transaction lets any account wrap it and pay a higher fee without re-signing the inner transaction. To replace a transaction already in the queue, the new bid must be at least 10 times the original.
Soroban resource fees and refunds
A Soroban transaction declares in advance how much CPU, ledger access, I/O, bandwidth, events and rent it will use, and pays a resource fee calculated from network-set rates. CPU, reads, writes and bandwidth are non-refundable; rent, events and return value are refundable, so unused budget for those comes back after execution.
The resource fee covers:
- Instructions: CPU instructions metered by the host;
- Ledger entry accesses: each entry read or written;
- Ledger I/O: bytes read and written;
- Transaction size: charged for propagation and history storage;
- Events and return value: data written to transaction metadata;
- Rent: payments to keep contract data alive, covered in the state-archival docs.
Wallets get the numbers by calling RPC's simulateTransaction, which dry-runs the call and returns the resources and fee to declare. If execution exceeds the declared resources, it fails. If it uses fewer, the non-refundable part is not returned, but unused refundable fee is. Storage write fees also move with ledger size: they rise as state grows towards a target set by validators, and rise steeply beyond it. Protocol 23 removed the read-bytes fee for live contract state and cut Wasm-loading costs, as described in Stellar's 2025–2026 upgrades.
Worked examples from mainnet
Two contract calls that closed on mainnet at 09:27 UTC on 2 October 2026 show the pattern. Both were fee-bumped and bid generously; the network charged 77% and 7% of their maximum fees respectively, because part of the refundable resource budget went unused and there was no surge.
| Transaction (Horizon) | Declared resource fee | Total max fee | Charged | In XLM |
|---|---|---|---|---|
897ad73e… (5.7M instructions, 16 entries) | 44,984 stroops | 45,185 | 34,760 | 0.0034760 |
6f6b99a4… (1.0M instructions, 1,472 bytes written) | 283,470 stroops | 283,671 | 18,461 | 0.0018461 |
In the second case most of the declared fee was refundable budget that the call did not use, so about 265,000 stroops were never charged. The lesson for users: the fee a wallet shows before signing is a ceiling. At an XLM price of about $0.22 (the XLM/USDC order book on 2 October 2026), 34,760 stroops is under a tenth of a US cent. Horizon's fee statistics for recent ledgers put the median total fee charged, classic and contract transactions together, at 9,230 stroops.
Reserves: the cost that is not a fee
Every Stellar account must hold a minimum balance of two base reserves, currently 1 XLM, plus one base reserve, 0.5 XLM, for each trustline, offer, signer or data entry. Liquidity-pool share trustlines count double. The XLM is locked, not spent, and returns when the entry is removed.
Horizon confirms the base reserve at 5,000,000 stroops (0.5 XLM) on 2 October 2026. Validators can vote to change it, which the docs say is "uncommon". An account can have at most 1,000 subentries.
| Account set-up | Calculation | Minimum balance |
|---|---|---|
| New, empty account | 2 × 0.5 | 1 XLM |
| Holds USDC and AQUA | 1 + 2 trustlines × 0.5 | 2 XLM |
| Plus one open DEX offer | 2 + 0.5 | 2.5 XLM |
| In a classic XLM/USDC pool | 1 + USDC trustline 0.5 + pool share 1.0 | 2.5 XLM |
| Docs example: 1 trustline, 2 offers, 1 claimable-balance claimant | 1 + 1.5 + 0.5 | 3 XLM |
Two refinements. Spendable balance also excludes XLM committed to open sell offers: available = balance − minimum balance − selling liabilities. And another account can sponsor reserves, which is how some wallets onboard users with zero XLM. Smart-contract data does not use reserves; it pays rent instead, priced by entry size and how long it should stay live before archiving.
Reserves explain a common support question: "I have 10 XLM but can only send 8." The rest is locked by the account's trustlines and offers, and is not lost. Wallets in our Stellar wallet guide generally show this as a separate line.
The takeaway
Stellar's fees are low by design, and for classic payments they are almost always the 100-stroop minimum. Smart-contract calls cost more, still well under a cent in our examples, and the fee shown before signing is a maximum. The number to plan for is the reserve: 0.5 XLM per asset you hold, returned when you leave. That economics is why frequent on-chain actions, like compounding a Soroban vault several times a day, are viable on Stellar.
Sources: Stellar developer docs (Fees, Resource Limits, and Metering; Lumens: base reserves, minimum balance, rent); Stellar RPC getFeeStats and Horizon /fee_stats, /ledgers and /transactions, mainnet, 2 October 2026; Horizon XLM/USDC order book, 2 October 2026.
Frequently asked questions
How much is a Stellar transaction fee?
The network minimum is 100 stroops (0.00001 XLM) per operation. A one-payment transaction costs 0.00001 XLM when the network is not congested. Smart-contract transactions also pay a resource fee; the two mainnet contract calls we examined on 2 October 2026 were charged 18,461 and 34,760 stroops, about 0.0018 and 0.0035 XLM.
What is surge pricing on Stellar?
When more operations are submitted than fit in a ledger, or contract transactions compete for a resource, the network ranks transactions by their fee bid. Everyone included pays the lowest bid that made it in, not their own maximum. Transactions that do not fit wait for a later ledger or are dropped.
Why do I need XLM to hold other tokens?
Every account must keep a minimum balance: two base reserves (1 XLM) plus 0.5 XLM for each trustline, offer, signer or data entry. Holding USDC therefore locks 0.5 XLM for the trustline. Removing the trustline returns it. This is a deposit, not a fee.
Where do Stellar fees go?
Fees go to a fee pool that nobody can spend. Stellar has no validator rewards, so fees are not paid to validators or stakers; see why there is no native XLM staking.
Low fees make compounding worth it
WhaleHub's Aquarius LP vaults compound every four hours, a frequency that only makes sense on a network where a transaction costs a fraction of a cent.
Launch the appThis article is for education only and is not financial advice. Figures are taken from the sources linked in the text as of the date shown and change constantly. Verify them before acting.



