How Does Solana Keep Fees Low?

TL;DR
1. Local vs Global Fee Markets
Solana isolates fee competition to specific accounts being accessed, so congestion on popular trading pools doesn't raise costs for your simple wallet transfers. Other blockchains raise fees globally for everyone during congestion.
2. October 10th Proof
During crypto's largest liquidation event, Solana's median fee stayed under $0.003 while Ethereum hit $100-300. The 100-1000x spread between regular users (paying pennies) and urgent traders (paying dollars) proved the isolation works.
3. Fixed Through Better Scheduling
Priority fees were broken until May 2024 when Agave introduced a central scheduler that properly orders transactions by fee across all threads, making higher-paying transactions actually process first.
On October 10th, 2025, crypto experienced its largest liquidation event in history. Billions in positions unwound simultaneously, flooding every major blockchain with transactions. Solana's median fees stayed under a penny. Ethereum's hit over $100, a 14,000x difference.

Median fee = The middle value when sorted. This reflects what the typical user actually pays for standard interactions.
So how did Solana keep costs low while handling extreme load? The answer lies in how the network prices blockspace. Unlike most blockchains, where congestion raises fees for everyone, Solana isolates costs to specific accounts under stress. Your simple transfer stays cheap even when popular trading pools are paying a premium.
This article explains how Solana's fee architecture works and why it's designed this way.
Solana Fee Basics
Solana transactions pay two types of fees:
Base fee: 5,000 lamports per signature. Most transactions require one signature, so most pay 5,000 lamports base. This fee is fixed regardless of what your transaction does.Note: Lamports are to SOL what gwei is to ETH—the smallest unit. 1 SOL = 1 billion lamports.
Priority fee: Optional fee denominated in microlamports (µ-lamports, millionths of a lamport) per Compute Unit requested. You set this to compete for faster processing when the network is busy.
Fee Calculation Example
A transaction with:
1 signature
500,000 Compute Units requested
Priority fee: 50,000µ per Compute Unit
Total fee = Base + Priority
= 5,000 lamports + (500,000 × 50,000 micro-lamports)
= 5,000 + 25,000,000 micro-lamports
= 5,000 + 25,000 lamports
= 30,000 lamports (0.00003 SOL)
Where the fees go:
Base Fee (50/50 split):
50% burned: Permanently removed from circulation, reducing total SOL supply (deflationary mechanism)
50% to validator: Paid to the validator node that included your transaction in a block
Priority Fees (100% to validator): When you add a priority fee to speed up your transaction during congestion, that entire amount goes to the validator. This incentivizes validators to prioritize your transaction over others.
Note: This changed in February 2025 via SIMD-0096, before which 50% of priority fees were burned, but now 100% goes to validators to better align incentives and prevent side deals.
During congestion, you add a priority fee to compete for blockspace. But here's the crucial question: when you add that priority fee, are you competing with the entire network or just the specific accounts your transaction touches?
That distinction determines whether fees stay predictable at scale.
The Problem: Global Fee Markets
To understand why Solana's approach matters, look at how most blockchains handle fees during congestion.
Ethereum uses EIP-1559: a dynamic base fee that adjusts for the entire network. When blocks fill up, the base fee rises globally. Every transaction pays the same elevated price per unit of gas, whether it's a simple stablecoin transfer or complex MEV arbitrage. Congestion in one area raises costs everywhere.
The Data Shows the Problem
Look at Ethereum's fee dynamics over the past three years. Average and median fees move almost in lockstep. The gap between them stays relatively narrow, both rise together during congestion, both fall together when activity cools.
Why does this matter? The median represents what half of all users paid, the typical user experience. The average gets skewed by high-paying transactions. When both move together, it means the base protocol fee is rising globally. There's no isolation, high-priority transactions force up the baseline cost for everyone, even for simple transfers.

In previous years during peak demand, Ethereum reached average fee rates of $20-30 with $10+ medians. Today's "calm" period shows $0.20 average and $0.02 median. But when the next surge hits, every user pays more, regardless of which accounts they interact with.
This pattern isn't unique to Ethereum. Base showed similar behavior during October 10th, with median fees spiking to over $3 as congestion raised costs network-wide.

The alternative: isolate costs to where congestion actually exists.
Solution: Local Fee Market
Solana isolates fee competition to the accounts being accessed. If ten transactions all need to write to the same trading pool, they compete with each other through priority fees. But if your transaction only touches completely different accounts, like the personal wallets of you and a friend, you're not competing with those ten transactions at all. Each account has its own separate queue.
This enables the network to process high-value, time-sensitive transactions alongside routine activity without forcing everyone to pay premium prices. Congestion stays localized and only the accounts under heavy demand see elevated fees. Everything else processes normally.
Imagine a liquidation event hits the network:
Raydium's SOL-USDC pool: 500 traders trying to liquidate positions, all competing to write to this one account. They need to pay a high priority fee to get in line—whoever pays more gets processed first.
Your wallet: Just you sending SOL to a friend. Nobody else is competing for your wallet accounts. You pay the basic 5,000 lamport base fee with no priority fee needed.
Same network, same moment, completely different prices.
Here's why: Solana isolates fee competition to specific accounts. When multiple transactions try to write to the same account simultaneously, they compete via priority fees. But transactions touching different accounts don't interfere with each other. You're not in the same queue as those liquidation traders because you're accessing completely separate data, what we call state.
The result: liquidation spikes only raise costs for people fighting over contested accounts. Your simple transfer processes at baseline cost because there's no competition for your wallet's state.

The Real-World Test
Solana's median fee remained stable through 2023–2025 as network activity exploded. Real-world stress tests proved local fee markets work.
1. October 10th, 2025: The Liquidation Event
Crypto's largest liquidation event in history hit the market. Geopolitical news triggered massive market volatility with over $19 billion in positions liquidated across all chains.
Blocks ran at full 60M compute unit capacity for hours. Transaction volume exceeded 3,200 TPS (non-vote transactions).
Looking at fee percentiles shows how local fee markets performed:
P50 (median): What half of all users paid - the typical user experience
P90 (90th percentile): What 90% of users paid less than - users adding priority fees
P99 (99th percentile): What 99% paid less than - the top 1% paying maximum priority
During the chaos:
P50: Stayed flat at $0.001-0.003 - typical users completely insulated
P90: Spiked to $0.01-0.10 - users competing for contested DEX accounts
P99: Hit $1.00+ - MEV bots and urgent liquidation trades

The 100-1000x spread between P50 and P99 proves local fee markets worked. Most users paid under a penny while high-priority transactions paid dollars. Fee competition stayed isolated to hot accounts.
Compare this to other chains' P90 fees (what 90% of users paid less than):
Ethereum: Spiked to $100-300 at peak
Arbitrum: Hit $10-100
Base: Reached $1-10
Solana: Stayed at $0.01-0.10

Even Solana's expensive transactions (P10) cost 10-1000x less than other chains' high-priority fees.
Why the massive difference?
Local fee markets isolated the congestion. When hundreds of traders competed to liquidate positions on popular DEX pools they drove up priority fees for those specific accounts. Your stablecoin transfer touching completely different accounts processed at baseline cost, under a penny.
On Ethereum, Base, and Arbitrum, the base fee rose globally. Every transaction paid the same elevated per-unit cost regardless of what it touched. A simple token transfer paid the same spiked base fee as urgent liquidation trades. There was no isolation, congestion anywhere raised costs everywhere.
2. Trump Event
The TRUMP memecoin launch in mid-January 2025 created Solana's most extreme single-program congestion event. Unlike the October 10th liquidation spread across multiple DEX pools, this concentrated hundreds of thousands of users on one token simultaneously.
Daily network revenue hit all-time highs. Fee percentiles during peak:
Median fee: $0.001-0.003 (barely 2-3x normal)
Average fee: $0.03+ (driven by memecoin traders)
The 10-30x gap proved isolation worked. Memecoin traders paid premium rates while everyone else continued at baseline costs. This was the ultimate test: massive demand on a single set of accounts. The congestion stayed contained.

The October 10th and TRUMP launch events validated local fee markets under extreme conditions. But this wasn't always the case. Through 2023 and early 2024, the implementation was fundamentally broken.
Why was it broken?
The problem was how the validator actually processed transactions. The validator runs 4 worker threads in parallel. Think of them like 4 cashiers at a grocery store. Each has its own line of customers. When transactions arrive, they get randomly assigned to one of the 4 lines. Each cashier processes independently.
Here's where it breaks:
The Problem:
Person A: Pays $1 priority fee, assigned to Cashier #2's line, position 3
Person B: Pays $100 priority fee, arrives seconds later, assigned to Cashier #4's line, position 1
What happens:
Cashier #2 starts working through their line
Gets to Person A at position 3, locks Account X
Meanwhile, Cashier #4 gets to Person B at position 1
Tries to access Account X, it's locked
Person B waits, even though they paid 100x more
Person A went first. Person B waited. Just bad luck. Person A's cashier reached them first. Priority fees only worked within each cashier's line. They didn't work across all 4 cashiers globally. There was no coordination on who should actually go first when multiple people wanted the same account.
What users did:
Send the same transaction 50 times
Hope one copy lands in the right line
Hope it processes before someone else locks the account
April 2024 hit peak chaos: 75% of transactions failed. The network drowned in spam.
How Priority Fees Started Working
Agave v1.18 in May 2024 redesigned the entire scheduler. Instead of four independent threads with random assignment, v1.18 built a single central scheduler coordinating everything. It builds a dependency graph called a prio-graph, a directed acyclic graph (DAG) organizing transactions by their dependencies.
The scheduler identifies which transactions conflict, orders conflicting ones by priority fee, and organizes non-conflicting ones for parallel execution.
Example:
Transaction A writes to Account X (10,000µ fee)
Transaction B writes to Account X (100µ fee)
Transaction C writes to Account Y (5,000µ fee)
Transaction D writes to Account Y (200µ fee)
Old scheduler: Random assignment, whoever gets there first wins
New scheduler:
Chain 1: A → B (A goes first, higher fee)
Chain 2: D → C (D goes first, higher fee)
Both chains execute in parallel since they don't conflict
For conflicting transactions, the priority fee determines order. Higher fee processes first, always.
The key change: priority fees now work globally across all threads, not just within each thread's queue. All four worker threads receive transactions from the central scheduler, already ordered by priority. They execute in parallel when possible but follow global priority ordering for conflicts.
The central scheduler became the default in Agave v2.0 (November 2024), meaning all validators now use this improved ordering system.
The Priority Formula
The priority calculation was also refined:
Priority = (Priority Fee × CU Requested + Base Fee) / (1 + Requested CUs + Signature CUs + Write Lock CUs)
This rewards efficiency. A transaction requesting 10,000 CUs gets higher priority than one requesting 200,000 CUs at the same fee rate.
Most developers never customize CU limits. They use the 200,000 default even when operations only use 5,000 CUs. The formula now penalizes this waste. Simple token transfers get baseline priority. Complex transactions that don't optimize CU usage face a disadvantage.
Results
Transaction revert rates dropped after May 2024. The system became predictable:
Higher priority fees = better placement
Lower CU requests = better priority at same fee
Spam stopped helping
More importantly, local fee markets could finally function. With reliable priority ordering in place, granular per-account pricing became viable. Hot accounts charging premium, quiet accounts staying cheap, the isolation mechanism finally worked.
Future upgrades to handle more load
Now that you understand how local fee markets isolate costs to contested accounts, there's another critical piece: the underlying capacity that makes this possible.
Local fee markets work because Solana can process many transactions in parallel, but only if there's enough compute budget available. When accounts hit their resource limits, transactions queue up and compete via priority fees regardless of whether the overall block has spare capacity.
Solana's block capacity expanded from 48M to 60M Compute Units in 2024, with 100M planned next. Per-account limits evolved from a fixed 12M CUs to an adaptive 40% of the block budget (24M currently, 40M at 100M blocks).
We'll dive into the technical details of Compute Units, block limits, and how Solana scales this infrastructure in the next article.



