Live prices are currently unavailable — the exchange feed could not be reached and no recent cached reading is held.

Research · Solana

Fees and priority fees

A Solana transaction pays two things: a fixed base fee for each signature it carries, and an optional prioritisation fee that raises its scheduling priority. The base fee is a constant; the prioritisation fee is set by the transaction itself, as a price per compute unit multiplied by the compute unit limit it requests. This page sets out how each is calculated, how each is distributed, and the details that most often surprise people — chiefly that the fee is charged whether the transaction succeeds or fails.

Last reviewed 2026-09-21Source: Solana fee documentationFee schedule described as deployed; the v1 transaction format is noted as upcoming.

The base fee

Every transaction pays a base fee of 5,000 lamports for each signature it carries. The fee is fixed rather than market-driven: it does not rise when the network is busy and it does not fall when it is idle. Its stated purpose is to compensate validators for the cryptographic work of verifying signatures, which is a cost that scales with the number of signatures rather than with the amount of computation the transaction performs.

Because the fee is per signature, a transaction with one signer pays 5,000 lamports and a transaction with three signers pays 15,000. Most transactions have a single signer, so the base fee is usually the same small amount. The fee is deducted from the fee payer — the first writable signer in the account list — before any instruction runs. If the payer's balance cannot cover it, the transaction fails at that point and nothing else executes.

The base fee is split. Half is burned, removing it from circulating supply, and half goes to the validator that produced the block containing the transaction. The burn is a deliberate part of the design rather than an accident of accounting: it means that a sustained high volume of transactions reduces supply slightly, and it means the validator's income from the base fee is only half of what the payer spends.

The prioritisation fee

The base fee does not let a transaction compete for space, because everyone pays the same amount. The prioritisation fee is the mechanism that does. It is optional, and a transaction that does not set one pays nothing beyond the base fee and receives the lowest scheduling priority.

The fee is set through two compute budget instructions. One sets the compute unit price, denominated in micro-lamports per compute unit; the other sets the compute unit limit, the maximum number of compute units the transaction may consume. The runtime multiplies the two and divides by one million to get the fee in lamports, rounding up. A transaction that sets a price but no limit uses the default limit derived from its instructions.

The critical detail is that the fee is based on the limit the transaction requests, not on the compute units it actually consumes. A transaction that requests a large limit and uses a fraction of it pays for the whole limit. That is why the documentation advises requesting the minimum compute units required: over-requesting is simply paying for capacity that goes unused, and it also makes the transaction look more expensive to the scheduler.

Unlike the base fee, the prioritisation fee is not burned. Under the current schedule it goes entirely to the validator that produced the block. That difference matters for incentives: the validator's marginal reward for including a transaction comes from the prioritisation fee, not from the base fee, which is why the prioritisation fee is the lever that actually influences inclusion.

The fee components and limits that govern a Solana transaction, with the constant behind each.
ItemValueConstant
Base fee per signature5,000 lamportslamports_per_signature
Default compute unit limit per instruction200,000DEFAULT_INSTRUCTION_COMPUTE_UNIT_LIMIT
Maximum compute unit limit per transaction1,400,000MAX_COMPUTE_UNIT_LIMIT
Micro-lamports per lamport1,000,000MICRO_LAMPORTS_PER_LAMPORT

Last reviewed 2026-09-21Source: Solana — Fees

The fee is charged on failure

A transaction that fails still pays. The fee payer's balance is debited before execution begins, and if an instruction later returns an error — an exhausted compute budget, a failed assertion, a program error — the transaction is recorded as failed and the fee is kept. The runtime does not refund it.

This is a deliberate anti-spam property rather than an oversight. If failed transactions were free, an attacker could flood the network with transactions designed to fail, consuming the compute and bandwidth of every validator that processed them at no cost. Charging the fee regardless makes that attack expensive. It also means that a user who submits a transaction with a bug pays for the attempt, which is why simulating a transaction before sending it is a standard practice.

The failure case interacts with the prioritisation fee in a way worth noting. Because the prioritisation fee is computed from the requested compute unit limit, a transaction that fails by exhausting its budget pays the full prioritisation fee it set. A transaction that fails early, having consumed few compute units, still pays the fee based on the limit it requested rather than the units it used.

How the fee becomes a scheduling priority

The prioritisation fee does not directly order transactions. The scheduler converts it into a priority by comparing the reward the validator will keep against the estimated cost of executing the transaction. The reward is the prioritisation fee plus the non-burned portion of the base fee; the cost is an estimate built from signature verification, write locks, instruction data and program execution. The ratio of the two is the priority.

The consequence is that a transaction's priority depends on more than the fee it pays. A transaction that touches many accounts, or that requests a large compute budget, carries a higher estimated cost and therefore needs a larger fee to reach the same priority as a simple transfer. This is why the documentation recommends setting an accurate compute unit limit: a transaction that leaves the default limit in place is treated as more expensive than one that declares a tight limit, and is ranked accordingly.

The fee also does not guarantee inclusion. It raises the likelihood that a transaction is scheduled ahead of competing ones, but the scheduler's ordering is not a strict auction, and a transaction can still fail to land if it conflicts with others on the same account. That case — contention on a specific account rather than on block space in general — is the subject of the local fee markets page.

A note on the upcoming format

The price-times-limit formula described above applies to the legacy and v0 transaction formats. The documentation notes that an upcoming v1 format changes the mechanism: the prioritisation fee becomes an absolute total in lamports, set directly in the message configuration, with no per-compute-unit price and no multiplication or rounding. That is a change to how the fee is expressed rather than to the principle that a transaction may pay extra for priority.

It is described here as upcoming rather than deployed, because that is how the project's own documentation describes it. A reader building against the current network should use the price-times-limit formula, and should check the documentation for the status of the v1 format before relying on it.

Sources and references

The base fee, the prioritisation fee formula, the distribution split and the treatment of failed transactions are taken from the project's own fee documentation. The fee schedule is presented as deployed; the v1 format is marked as upcoming, following the source.

  • The fee structure. Solana, Fee Structure: gives the base fee, the prioritisation fee formula, the distribution split, the priority calculation and the note on the upcoming v1 format.
  • Fees, rent and compute units. Solana, Fees: covers the fee components, the compute unit budget, the prioritisation fee instructions and the storage deposit.
  • Compute budget and limits. Solana, Fees — compute unit limits: documents the default per-instruction limit, the maximum transaction limit and the micro-lamport conversion constant.