Skip to content

Fee markets

Ethereum prices blockspace with one global, protocol-set base fee that is burned and moves up to 12.5% per block toward a utilisation target, plus a tip to the block producer and, since Dencun, a separate exponentially priced blob fee for rollup data. Solana charges a fixed 5,000-lamport fee per signature plus an optional priority fee per requested compute unit, and because transactions declare the accounts they write, contention is priced per account rather than for the whole chain. Neither market is finished: Ethereum is debating multidimensional pricing and Solana is debating a dynamic base fee after its scheduler and SIMD-0096 changes.

Ethereum’s fee market is a toll road with one electronic sign: the toll is posted for everyone, rises automatically when the road was crowded in the last minute and falls when it was empty, and the money goes into a furnace; if you want to jump the line you hand the toll operator a separate cash tip. Solana’s fee market is a parking garage with a flat entry fee and separately priced spaces: if a concert fills the spaces near one entrance, only people who want those spaces bid more, while the rest of the garage stays cheap.

Every block has limited room, so users pay fees to get in. On Ethereum the network itself sets a price that goes up when blocks were full and down when they were empty, and that price is destroyed rather than paid to anyone; people add a small tip so the block maker prefers their transaction. On Solana the basic price is fixed and tiny, and if you want to go first you add a bonus that depends on how much computing you ask for. Because Solana knows which accounts each transaction touches, crowding around one popular account only raises prices for that account, not for everyone.

Alice wants a token swap included during a busy period.

  1. Before (Ethereum). The current block’s base fee is 20 gwei per gas; the previous block used 30M gas against a 15M target. Alice’s wallet sets max_fee_per_gas = 30 gwei and max_priority_fee_per_gas = 2 gwei; her swap needs 150,000 gas. Balance: 1.000 ETH.
  2. Inclusion (Ethereum). The builder includes her transaction; she pays 150,000×(20+2)150{,}000\times(20+2) gwei = 0.0033 ETH. The 0.0030 ETH base-fee portion is burned; 0.0003 ETH goes to the proposer. Balance: 0.9967 ETH minus the swap itself.
  3. Next block (Ethereum). Because the parent was full (30M vs 15M target), the base fee rises by the maximum step, 12.5%, to 22.5 gwei; Alice’s max_fee of 30 gwei would still cover her next transaction.
  4. Before (Solana). Alice’s swap has 1 signature and requests 200,000 compute units (CU) at a compute-unit price of 10,000 micro-lamports per CU. The base fee is 5,000 lamports. Balance: 1.000 SOL.
  5. Inclusion (Solana). The leader’s scheduler ranks her transaction by fee per requested CU against transactions competing for the same accounts (the pool). She pays 5,000 + 2,000 = 7,000 lamports (0.000007 SOL). The 5,000 base fee is split 50% burn / 50% leader; the 2,000 priority fee goes 100% to the leader (SIMD-0096). Balance: 0.999993 SOL minus the swap.
  6. After. A user sending USDC to a friend in the same Solana block pays only 5,000 lamports because their accounts were uncontested; on Ethereum that user faced the same 22.5 gwei base fee.
  • Myth: “EIP-1559 lowered Ethereum fees.” Reality: Its authors’ goal was predictability and a slack mechanism, not lower fees; in extended congestion the base fee rises exponentially until demand falls (Paradigm, 2020-06).
  • Myth: “Solana has no fee market because fees are fixed.” Reality: The base fee is fixed but the priority fee is a per-account auction; in November 2024 average non-vote fees exceeded 0.0003 SOL while the median stayed at 0.00000861 SOL, about 35x lower (Helius, as of 2025-01).
  • Myth: “A higher Solana priority fee guarantees first position.” Reality: Until Agave v1.18 (2024-05) ordering was largely arrival-time-based; even now there is no formal ordering specification (Helius).
  • Myth: “Blob fees and gas fees are the same market.” Reality: EIP-4844 created a separate blob gas with its own exponential base fee; a busy blob market does not raise execution gas (EIP-4844).
  • Myth: “Burning the base fee is just deflation marketing.” Reality: Burning makes a protocol minimum fee enforceable; a fee paid to the producer can be refunded off-chain (Paradigm, 2020-06).

Ethereum prices congestion globally and burns the base fee; Solana prices congestion per account and burns only half of a fixed base fee, so the interesting Solana fee is the priority fee and the interesting Ethereum fee is the base fee.

EIP-1559 (Buterin et al., created 2019-04, live August 2021) replaced the first-price gas auction with a protocol base fee bb that “can move up or down each block according to a formula” and is burned, plus a priority fee the user offers to the block producer. With parent gas used gg, gas target gg^* (half the block limit, since ELASTICITY_MULTIPLIER = 2) and BASE_FEE_MAX_CHANGE_DENOMINATOR = 8:

bn+1  =  bn(1+18gngg)b_{n+1} \;=\; b_n\left(1 + \frac{1}{8}\cdot\frac{g_n - g^*}{g^*}\right)

so a full block (gn=2gg_n = 2g^*) raises bb by 12.5% and an empty block lowers it by 12.5%. Users specify max_fee_per_gas and max_priority_fee_per_gas; the effective price is

peff=b+min ⁣(max_priority_fee, max_feeb),p_{\text{eff}} = b + \min\!\big(\text{max\_priority\_fee},\ \text{max\_fee} - b\big),

and a transaction is invalid if max_fee<b\text{max\_fee} < b. Konstantopoulos and Hasu’s analysis (Paradigm, 2020-06) shows why burning matters: “Minimum fees are usually not enforceable since the protocol cannot prevent external price discovery … EIP-1559 solves this by burning the entire BASEFEE, so it cannot be refunded.” Compounding at 12.5% per block, after kk consecutive full blocks the base fee is b01.125kb_0\cdot 1.125^k; their example (as of 2020-06, target 10M/cap 20M) has a 21,000-gas transfer costing $0.0005 at block 0, $0.02 after 10 full blocks and $657 after 100. The slack mechanism therefore works “on the time-frame of minutes to half an hour, but not beyond”. The gas limit was 30M (target 15M) through 2024 (ethresear.ch, 2024-01) and rose to about 60M with Fusaka (2025-12-03), which also capped a single transaction at 16.7M gas (ethereum.org roadmap, accessed 2026-08).

Ethereum: blobs and multidimensional pricing

Section titled “Ethereum: blobs and multidimensional pricing”

EIP-4844 (Dencun, 2024-03-13) added blob-carrying transactions: each blob is 4,096 field elements of 32 bytes (128 KB), initially targeting 3 and allowing 6 blobs per block, with data pruned after about 18 days. Blob gas has its own base fee,

bblob=MIN_BASE_FEE_PER_BLOB_GASexp ⁣(excess_blob_gas3,338,477),b_{\text{blob}} = \text{MIN\_BASE\_FEE\_PER\_BLOB\_GAS}\cdot \exp\!\left(\frac{\text{excess\_blob\_gas}}{3{,}338{,}477}\right),

burned like the execution base fee and “not refunded in case of transaction failure”. Pectra (2025-05-07) raised the target/max to 6/9 and Fusaka introduced PeerDAS and blob-parameter-only forks for further increases (ethereum.org roadmap, accessed 2026-08). This is a two-dimensional instance of Buterin’s multidimensional EIP-1559 (ethresear.ch, 2022-01): a base fee fif_i per resource ii, each with burst limit bib_i and sustained target sis_i, updated as fi,new=fi,oldexp ⁣(k(uisi)/si)f_{i,\text{new}} = f_{i,\text{old}}\cdot\exp\!\big(k\,(u_i - s_i)/s_i\big), because resources have very different burst/sustained ratios.

Solana: base fee, compute units, priority fee

Section titled “Solana: base fee, compute units, priority fee”

A Solana transaction pays a base fee of 5,000 lamports per signature, “split 50% burned / 50% to the validator”, and an optional prioritization fee

feeprio=cu_price×cu_limit106 lamports,\text{fee}_{\text{prio}} = \left\lceil \frac{\text{cu\_price}\times\text{cu\_limit}}{10^6} \right\rceil\ \text{lamports},

with cu_price in micro-lamports per compute unit set by a SetComputeUnitPrice instruction and cu_limit by SetComputeUnitLimit (default 200,000 CU per instruction, max 1.4M per transaction) (Solana docs, Fees, as of 2026-08). SIMD-0096 (activated; created 2023-12) moved the priority fee from 50/50 burn/reward to 100% to the leader “to better align validator incentives” and discourage side deals. Block capacity is denominated in CU: 48M per block, 12M per account per block, chosen “based on how much validators can reasonably process to arrive at 400 millisecond block times” (Helius, 2025-01); the block limit rose to 60M in 2025 with a proposal for 100M (Solana Foundation, 2025-08).

Solana: local fee markets and the scheduler

Section titled “Solana: local fee markets and the scheduler”

Because every transaction declares its write set, the leader can price contention per account. Two transactions are contentious when they access the same state with at least one write; only they compete. The Agave central scheduler (v1.18, 2024-05) builds a dependency graph (prio-graph) and orders conflicting transactions by

priority=feeprio+feebase1+CUexec+CUsig+CUwrite-lock,\text{priority} = \frac{\text{fee}_{\text{prio}} + \text{fee}_{\text{base}}}{1 + \text{CU}_{\text{exec}} + \text{CU}_{\text{sig}} + \text{CU}_{\text{write-lock}}},

which favours transactions that request fewer compute units (Helius, 2025-01). Before v1.18, four banking threads kept independent queues, so priority only worked intra-thread and ordering was “inherently non-deterministic” (Helius, Priority Fees). Jito tips (see /foundations/mev-supply-chain/) and stake-weighted QoS compete with priority fees out of protocol.

Proposals: exponential write-lock fees and dynamic base fees

Section titled “Proposals: exponential write-lock fees and dynamic base fees”

SIMD-0110 (Tao Zhu and Anatoly Yakovenko, 2023-01, now closed) would track an exponential moving average of CU utilisation per write-locked account and raise that account’s write-lock cost rate above a 25% target, starting at 1,000 micro-lamports per CU, adjusting 1% per block, fully burned (Helius, 2025-01). Ellipsis Labs’ Jarry Xiao and Eugene Chen instead advocate dynamic base fees, global and per account, that can double every 400 ms block under load so spammers “will burn all their SOL”; Helius calls the current base fee “definitively too low”.

Continuing Alice’s swap from §2.

Ethereum. Gas used G=150,000G = 150{,}000; b=20b = 20 gwei; tip t=2t = 2 gwei; cap 30 gwei. Effective price p=20+min(2,3020)=22p = 20 + \min(2, 30-20) = 22 gwei. Total =150,000×22×109=0.0033= 150{,}000\times 22\times 10^{-9} = 0.0033 ETH: burned 0.00300.0030 ETH, proposer 0.00030.0003 ETH. Next base fee: 20×(1+1830M15M15M)=22.520\times(1 + \tfrac{1}{8}\cdot\tfrac{30\text{M}-15\text{M}}{15\text{M}}) = 22.5 gwei. If ten full blocks followed, b=20×1.1251064.8b = 20\times 1.125^{10} \approx 64.8 gwei; if ten empty blocks followed, b=20×0.875105.3b = 20\times 0.875^{10}\approx 5.3 gwei. Solana. Signatures 1 → base 5,000 lamports (2,500 burned, 2,500 to leader). Priority: 10,000×200,000/106=2,000\lceil 10{,}000\times 200{,}000/10^6\rceil = 2{,}000 lamports, all to the leader under SIMD-0096. Total 7,000 lamports = 0.000007 SOL. Scheduler priority ≈ (2,000+5,000)/(1+200,000+CUsig+CUlock)0.035(2{,}000+5{,}000)/(1+200{,}000+\text{CU}_{\text{sig}}+\text{CU}_{\text{lock}})\approx 0.035 lamports per CU; a competitor requesting 1,400,000 CU at the same price pays 14,000 lamports but scores only about 0.01360.0136, so Alice ranks ahead for the contested pool account. If the pool is uncontested, the simple 5,000-lamport USDC transfer in the same block lands too; November 2024 data show exactly this split (median 0.00000861 SOL vs average over 0.0003 SOL, Helius, as of 2025-01).

  • Rollups (Base, Optimism, Arbitrum) — buy blob gas under EIP-4844; Base’s own EIP-1559-style market showed a $0.1115 average against a $0.0228 median on 2024-12-05, about 5x apart versus Solana’s 35x (Helius) — /foundations/roadmaps/.
  • Wallets and fee estimators — set max_fee/max_priority_fee knowing the base fee moves at most $1.125^koveroverk$ blocks — /mev/mev-taxonomy/.
  • Builders — under MEV-Boost, tips and direct builder payments, not the base fee, decide ordering — /mev/pbs-and-epbs/.
  • Helius Priority Fee API / getRecentPrioritizationFees — estimate per-account fees from recent slots; Helius uses percentiles over the last 50 slots (Helius, 2025-01).
  • Jito block engine — bundle tips priced by tip/CU efficiency in 50 ms auctions; Jito recommends a 70/30 split between priority fee and tip for sendTransaction (Jito docs, as of 2026-08) — /mev/solana-mev/.
  • Metaplex Candy Machine bot tax — an app-level fee on invalid mints that “quickly drained” snipers in 2022 (Helius).
  • Fee contagion on a global market. During the Otherside NFT mint (2022-05) users “paid upwards of $150 million USD collectively on failed Ethereum transactions” (Helius, citing a contemporaneous tweet, secondary); a local fee market confines such spikes to the minted accounts.
  • Producer manipulation of the base fee. Miners could pin the base fee at zero by never exceeding the target, but this is a collective-action problem needing a majority soft fork (Paradigm); EIP-1559 calls the equilibrium “not particularly stable”.
  • Path dependence. Tefagh (ethresear.ch, 2021-03) simulated rational users deferring transactions while the base fee declines, arguing this creates a permanent loss for non-strategic users and motivating EIP-3416.
  • Solana April 2024 congestion. Reverted transactions peaked at 75.7% of non-vote transactions in April 2024; addresses sending over 100,000 transactions a day caused 95.2% of reverts in a January 2025 sample, and the December 2024 revert rate was still 41.2% (Helius, as of 2025-01).
  • Fee reporting can be gamed. SIMD-0096’s own drawbacks section: with 100% of priority fees kept, “leaders can now inflate the reported priority fees in their blocks artificially”, misleading wallet estimators.
  • Multidimensional pricing on Ethereum. Buterin proposes per-resource base fees with slack far above 2x; objections (yoavw, wanderingbort) are that per-opcode prices become “global mutable variables” enabling griefing and revert attacks (ethresear.ch, 2022-01).
  • Solana dynamic base fee vs write-lock fees. SIMD-0110 is closed; dynamic base fees (Ellipsis) are argued but unspecified; Helius: “The network has yet to figure out ways to apply economic backpressure to disincentive spam while maintaining low fees for genuine human users.”
  • No ordering specification. Helius reports a scheduler bug leaving three of four banking threads idle after the first block and notes “there is no formal specification for how transactions should be ordered” (as of 2025-01).
  • Fee-API lock-in. Each RPC provider ships its own priority-fee estimator while the core RPC method ignores Jito, “a soft form of vendor lock-in” (Helius); and under multiple concurrent leaders it is unclear “what sort of fee market logic applies when lanes compete for assets” (Helius, Alpenglow, 2025).
AspectEthereumSolana
Base feeDynamic, ±12.5%/block toward 50% target, burnedFixed 5,000 lamports/signature, 50% burned
PriorityTip per gas to proposer/builderMicro-lamports per requested CU, 100% to leader (SIMD-0096)
Scope of congestion priceGlobal (all transactions)Local (per contended account)
Resource unitGas (opcodes) + blob gasCompute units; per-account 12M CU/block cap
Block capacity~60M gas (2025-12), target half60M CU (2025), 100M proposed
Data marketSeparate blob base fee, exp\exp updateNone (no blob equivalent)
Ordering ruleBuilder’s choice; tips dominate under MEV-BoostScheduler prio-graph; fee/CU efficiency
Out-of-protocol channelBuilder payments, OFAsJito tips, stake-weighted QoS
Open proposalsMultidimensional 1559, AMM curveDynamic base fee, SIMD-0110 write-lock fees

Ethereum’s market is more mature as a mechanism (a single, predictable controller with a decade of analysis) but coarse in what it prices; Solana’s market is finer-grained because transactions expose their state, yet its fixed base fee and scheduler quirks mean much of the real pricing happens through tips and RPC heuristics rather than in protocol.

Analysis of EIP-1559 — Georgios Konstantopoulos and Hasu (Paradigm), 2020-06-10. https://www.paradigm.xyz/2020/06/analysis-of-eip-1559

The post evaluates the pre-launch EIP-1559 against its four stated design goals. Design goals: better UX (first-price auctions make fee estimation hard; 1559 has everyone pay the same rate most of the time), a slack mechanism (let some blocks be larger if others are smaller), better security (burned fees make a perpetual block subsidy palatable), and preventing economic abstraction (fees must be in ETH and burned).

How it works separates two building blocks. BASEFEE is a protocol minimum fee; ordinary minimum fees are unenforceable because miners and users can settle off-chain, and burning fixes this. Users set a tip (GAS_PREMIUM) and a FEECAP. The elastic block size replaces the hard cap with a 10M target and 20M ceiling (numbers of 2020); BASEFEE adjusts by the distance from target, capped at 12.5% per block.

Expected behaviour walks through three regimes. Without congestion, inclusion is fully determined by BASEFEE and users buy at a fixed price. Under occasional congestion the base fee rises until a block at or below target is mined; the authors compute that a 21k-gas transaction costing $0.0005 at 1 gwei costs $0.02 after 10 full blocks and $657 after 100, so “after only 30 min of burst demand” fees exceed $1,000 and 89 empty blocks (or 183 half-empty ones) are needed to return. Under extended congestion the protocol falls back to a tip auction; the slack mechanism “pulls a number of blocks worth of capacity from the near future into the immediate present” but cannot create capacity. On security, 1559 is incompatible with a fee-only security model but makes perpetual issuance more acceptable. On economic abstraction, the burned BASEFEE cannot be paid in other assets, but tips can.

Possible problems examines miner manipulation: keeping BASEFEE at zero by never exceeding the target is a collective-action problem needing a miner-activated soft fork, not a 1559-specific risk. The summary: 1559 “largely holds what it promises”, with unpredictable fees only during minutes-long congestion; further research into parameters is encouraged, with simulation code on GitHub.

“EIP-1559 solves this by burning the entire BASEFEE, so it cannot be refunded.” — How it works, BASEFEE + Tip “Consider a BASEFEE of 1 billion wei per gas at block 0. At an ETH price of 240, a typical 21k gas transaction costs 0.0005. After only 10 blocks of 20M gas, the transaction will cost 0.02. After 100 blocks, it will cost 657.” — Expected behavior, occasional congestion “the slack mechanism pulls a number of blocks worth of capacity from the near future into the immediate present. But it can’t generate more capacity, eventually the debt has to be repaid.” — Expected behavior, extended congestion “EIP-1559 can prevent economic abstraction of the BASEFEE, but not the tip.” — Prevent economic abstraction “We find that EIP-1559 largely holds what it promises.” — Summary

Background: what gas is, what a first-price auction is, and compound growth. Read “How it works” and the three congestion states first; skip the miner-manipulation section on a first pass. The hardest paragraph is the extended-congestion arithmetic: because the base fee multiplies by 1.125 per full block and divides by 1.125 per empty block, symmetric recovery needs roughly as many empty blocks as there were full ones (89 after 100), which is why the mechanism smooths minutes, not day-night cycles.

EIP-1559 went live in the London upgrade (2021-08) with a 15M target/30M limit rather than 10M/20M. The Merge (2022-09) replaced miners with proposers and MEV-Boost builders, so the “miner collusion” analysis now concerns builders. EIP-4844 (2024-03) added the blob fee with an exponential controller, an idea from Buterin’s 2021-04 “AMM curve” and 2022-01 multidimensional posts. Pectra (2025-05) and Fusaka (2025-12) raised blob targets and the gas limit (~60M) and capped per-transaction gas at 16.7M (ethereum.org roadmap, accessed 2026-08).

  1. EIP-1559 specification — read if you need the exact update rule and parameter names.
  2. Buterin, “Multidimensional EIP 1559” (ethresear.ch, 2022-01) — read if you want to understand why blobs got their own fee.
  3. EIP-4844 — read if you work on rollup data costs.
  4. Tefagh, “Path-dependence of EIP-1559” (ethresear.ch, 2021-03) — read if you are sceptical of the controller’s incentive properties.

The Truth about Solana Local Fee Markets — Helius (reviewed by Eugene Chen and 0xIchigo), 2025-01. https://www.helius.dev/blog/solana-local-fee-markets

The article follows six sections. Fee basics: base fee 5,000 lamports per signature; priority fee in micro-lamports per requested CU; 50% of both burned at the time of writing, with SIMD-0096 moving priority fees to 100% validator; a worked example of 5,000 + 500,000 CU × 50,000 µL = 25,000 lamports; block limit 48M CU, 12M per account, 1.4M per transaction, 1,232-byte messages.

Early issues summarises Eugene Chen’s critique: no incentive to request CUs accurately, burning half the priority fee pushes users toward Jito’s off-chain auction, and scheduler ordering was primarily arrival-time, so “Local fee markets are a lie” (Ben Coverston, 2023-12) and spam became the dominant strategy.

The central scheduler (v1.18, 2024-05) replaced four independent thread queues with a prio-graph that orders conflicting transactions by priority fee and introduced the priority formula (feeprio+feebase)/(1+CUexec+CUsig+CUlock)(\text{fee}_{\text{prio}}+\text{fee}_{\text{base}})/(1+\text{CU}_{\text{exec}}+\text{CU}_{\text{sig}}+\text{CU}_{\text{lock}}).

Measuring effectiveness uses the median/average gap: November 2024 average fees above 0.0003 SOL against a median of 0.00000861 SOL (35x), versus April 2024’s 10x gap, and Base’s 5x gap as a global-market comparison; reverted transactions peaked at 75.7% in April 2024, fell after v1.18, and were 41.2% in December 2024, with bots responsible for 95.2% of reverts.

Ongoing issues: a scheduler bug leaves only one non-vote thread busy after the first block, there is no ordering specification, fee APIs are provider-specific and ignore Jito, and developers overpay or overuse tips. Proposed solutions: SIMD-0110 exponential write-lock fees (25% target, 1,000 µL/CU start, 1%/block, fully burned; closed) and dynamic base fees (Ellipsis), with Candy Machine’s bot tax as precedent.

“Transactions pay fees based on the specific state they write to, preventing localized hotspots from raising fees across the entire blockchain.” — Actionable Insights “In November 2024, the average fees for non-vote transactions reached an all-time high of over 0.0003 SOL. However, median fees remained steady at 0.00000861 SOL, approximately 35x lower.” — Actionable Insights “Reverted transactions peaked in April 2024, accounting for 75.7% of all non-vote transactions.” — Measuring Local Fee Market Effectiveness “The network has yet to figure out ways to apply economic backpressure to disincentive spam while maintaining low fees for genuine human users.” — Actionable Insights

Background: Solana’s account model (see /foundations/accounts-and-execution/) and what a scheduler thread is. Read Actionable Insights, then the v1.18 section, then Measuring Effectiveness; skip the RPC JSON example. The hardest paragraph is the priority formula: dividing total fee by total CU (execution plus signature and write-lock costs) means a low-CU transaction with no priority fee can outrank a bloated one with a small tip.

SIMD-0096 is activated (100% priority fee to validator). Block limits rose from 48M to 60M CU in 2025 with SIMD-0286 proposing 100M; P-Token cut token-transfer CU by over 95% (Solana Foundation, 2025-08). Jito’s BAM (2025) moves scheduling into TEEs with intra-block auctions (Helius, BAM). Alpenglow (approved 2025-09) removes vote transactions and replaces vote fees with a burned admission ticket (SIMD-0326).

  1. SIMD-0096 — read if you want the exact fee-distribution change and its stated drawback.
  2. Helius, “Priority Fees: Understanding Solana’s Transaction Fee Mechanics” — read if you are implementing SetComputeUnitPrice.
  3. Helius, “Solana Fees in Theory and Practice” — read if you want the pre-1.18 scheduler explained with data.
  4. Solana docs, Fees — read for the current constants.