Solana priority fees, and why the median transaction pays nothing extra

Solana charges a fixed base fee and then lets you bid for position on top of it. The bid is priced per compute unit, not per transaction, which is the detail that trips up most cost estimates. Measured across finalized blocks, the median transaction on the network bids nothing at all, while the top percentile bids many multiples of the base fee. Both facts matter when you are budgeting thousands of swaps.

Volion Research Updated Jul 30, 2026 4 sections

How a Solana priority fee is calculated

A Solana transaction fee has two parts. The base fee is 5,000 lamports per signature and is fixed by the protocol. The priority fee is your bid, set as a price in micro-lamports per compute unit and multiplied by the compute unit limit you request. A transaction requesting 200,000 compute units at a price of 10,000 micro-lamports per unit pays 2,000,000 micro-lamports, which is 2,000 lamports, on top of the base fee.

Two instructions control this. One sets the compute unit limit, the ceiling on how much execution the transaction may consume. The other sets the compute unit price, your bid per unit. The fee you pay for priority is limit multiplied by price, converted from micro-lamports to lamports by dividing by a million.

The consequence that catches people out is that requesting a larger compute limit than you need makes your bid more expensive at the same price. Overshooting the limit is not free insurance, it is a larger bill. Conversely, setting the limit too low means the transaction runs out of compute and fails, which costs the fee anyway. Getting this right per instruction type is ordinary engineering work, and it is where a well-built engine quietly saves money.

Validators order transactions by the fee per compute unit, so what buys you position is the price of your bid rather than its total. A small transaction bidding aggressively per unit outranks a large one bidding modestly, even if the large one pays more in absolute terms.

What transactions actually bid

Measured across finalized mainnet blocks, the median Solana transaction pays a priority fee at or near zero: it pays the base fee and nothing more. The distribution is extremely skewed, with the top one percent bidding tens of times the base fee. This means network-wide averages are close to useless for planning, because the mean is dragged upward by a small number of contested transactions.
PercentileTotal feeBase feePriority portion
Median (p50)5,0005,0000
p9011,8065,0006,806
p99320,0005,000315,000
Maximum15,005,0005,00015,000,000
Lamports, from a sample of 22,506 transactions across 14 finalized blocks. The priority portion is what a transaction bid above the protocol minimum.

The practical reading is that priority fees are not a general tax on activity, they are a congestion price on specific accounts. Most of the network moves without competing for anything, so it bids nothing. Your swaps are not most of the network: they compete for the accounts belonging to one token, alongside everyone else interested in that token at that moment.

This is why a launch hour costs several multiples of what a quiet hour costs while the network median stays flat. It is also why a vendor quoting one fee figure for all conditions is quoting something that cannot be true.

Contention is per account, not per network

Solana executes transactions in parallel by locking the accounts each one writes to. Transactions touching different accounts run simultaneously; transactions touching the same account must be serialised, and those that cannot get their lock in the current slot are dropped rather than queued. Priority fees only matter where accounts are contested, which for a volume bot means the pool or curve accounts of your specific token.

This architecture explains almost everything about Solana fee behaviour. There is no single global queue to buy your way into. There are as many small queues as there are hot accounts, and you are only bidding in the ones your transaction touches.

For a volume campaign the contested accounts are predictable: the bonding curve or pool state for your token, plus any shared program accounts. When many wallets in your own fleet trade the same token in the same slot, they contend with each other, not just with outsiders. Spacing trades across slots is therefore both a cost control and a reliability measure, and it is one of the reasons duration is a meaningful setting rather than cosmetic.

Failed transactions from lost account locks still pay their fee, which is why measured failure rates belong in any honest cost model. The measurement page reports them per DEX program.

Budgeting priority fees for a campaign

Estimate from the percentile you expect to compete at, not from the median. For a quiet token, base fee plus a small bid is realistic. For a launch window on a contested token, plan for the upper percentiles and treat the difference as the cost of landing transactions at all. Then divide by your expected success rate, because a lost bid still pays.

A workable method: decide what proportion of your transactions must land within the campaign window. If timing is loose, bid low and accept retries; the cheapest strategy on a quiet pair is patience. If timing is tight, because you are targeting a specific feed window, bid at the upper percentiles from the start rather than discovering the requirement through failures.

The trap in the middle is bidding just below what is needed. Those transactions fail, pay, and retry at the same inadequate bid, producing the worst of both approaches. Under-bidding is more expensive than either bidding properly or waiting.

Full campaign arithmetic including tips and rent is in the cost breakdown. Jito tips are a separate bid with separate mechanics, covered in Jito tips explained.

What a bid actually buys differs by venue, because failure rates do. The per-venue figures are on the Solana volume bot overview and, for bonding-curve traffic specifically, on the Pump.fun volume bot page.

In practice the bid you need is set by whoever else is competing for the same accounts. That is at its worst on a live Pump.fun launch, moderate on Meteora DLMM and Orca Whirlpools where arbitrage traffic concentrates, and lowest on a settled PumpSwap or Raydium pool. Paying launch-window priority fees on a quiet pool is one of the most common ways a campaign overspends without noticing.

Questions

What is the base fee on Solana?
5,000 lamports per signature, which is 0.000005 SOL. It is fixed by the protocol and does not vary with congestion. Everything above that figure in a transaction fee is a priority fee you chose to bid.
Are priority fees per transaction or per compute unit?
Per compute unit. You set a price in micro-lamports per compute unit and a compute unit limit, and the priority fee is the two multiplied together. This is why requesting more compute than you need raises your cost at the same bid price.
Why does the median transaction pay no priority fee?
Because most of the network is not competing for anything. Solana locks accounts rather than serialising all traffic, so transactions touching uncontested accounts have no reason to bid. Congestion pricing on Solana is local to hot accounts, not global.
Do failed transactions still pay the priority fee?
Yes. A transaction that fails has still consumed validator resources and is charged accordingly. This is why cost per landed swap, rather than cost per attempt, is the figure worth comparing between tools.
How do I know what to bid?
Sample recent fees on the accounts you will touch rather than the network as a whole, and bid at the percentile matching how urgently your transactions must land. Bidding slightly below the required level is the most expensive option available, because you pay for failures and then retry at the same inadequate price.