Orca

Orca swap fees reflect the pools and fee settings used at execution

Orca swap fees reduce the amount available for exchange through each pool the executed route uses. The confirmed transaction records the actual tokens spent and received, making it the basis for reconciling a quote. On Solana, network fees use SOL and remain separate from token-denominated pool charges. Adaptive pools can change their effective fee as price conditions change, and routed trades can cross pools with different fees. Token transfer fees may also reduce usable output when the selected mint has that feature. A difference between quoted and received tokens therefore needs a breakdown of pricing and charges, including whether the quote already incorporated each deduction.

Key takeaway: The pool’s protocol share already sits inside its trading fee, so adding both as separate charges overstates swap costs.

Input tokens, output credits, and separate network debits

Total swap cost includes pool trading fees, applicable token transfer fees, any separate route charge, and the network fee. Creating a missing token account can also require a storage balance. The execution record separates these movements, while a single change in the wallet’s displayed value cannot identify them.

Keep amounts in their own units. When pool fees and network charges use different tokens, addition requires a shared valuation basis.

A fee deducted within the swap already affects its input/output relationship. When a cost estimate already includes the pool’s deduction, adding its fee again counts it twice. Price impact describes the rate change caused by the trade’s size relative to available liquidity; it changes the exchange outcome without becoming another payment to a fee recipient. The quote models that impact for the entered amount.

Quote review keeps the swap adjustable before signing

An unsigned swap preview lets the amount, route, and acceptance limit change before authorization. Review those inputs together because each can alter expected output or the conditions under which execution succeeds.

Expected output and the acceptance limit

The quote estimates execution against the pool state available when it was calculated. Later trades can change that state before execution. For an exact-input Whirlpool instruction, the swap fails if output falls below its minimum-output threshold. In exact-output mode, it fails if input exceeds the maximum-input threshold. Slippage tolerance sets an acceptable deviation from the quote. Increasing it expands permitted execution outcomes without reducing the pool’s trading rate. The quoted estimate and the encoded threshold serve different purposes, so compare each with the matching amount.

Visual outline: Orca swap fees - Quote review keeps the swap adjustable before signing

Open full-size image

The transaction awaiting approval

The wallet request asks you to authorize the actual instructions, including token transfers, network settings, and any account creation. Its cost details should correspond to the route under review. Resolve discrepancies before signing a transaction the application will submit. Signing authorizes execution of the encoded message; a later change in the swap panel cannot edit that signed message. Any revision to the transaction message requires fresh signatures.


Confirmation establishes the swap amounts

Confirmation ties the swap result to a specific transaction. A transaction signature identifies the signed transaction, while the recorded success or error establishes its execution outcome. For a successful swap, the relevant token-account balance changes show what the account actually gained or lost. A wallet display can lag behind that record.

A decoded Whirlpool Traded event identifies the pool and reports input, output, liquidity provider fees, and protocol fees, with separate fields for input and output transfer fees so the record distinguishes these charges. These raw amounts belong to their respective tokens and mint decimals. A two-hop route reports separate pool results; the intermediate output funds the next hop rather than representing a final wallet receipt. In TwoHopSwapV2, both events report the fee on the same intermediate-token transfer, so count that fee once. Read these events alongside transaction success and account transfers, since a log from a failed transaction does not establish a completed exchange.

Fixed and adaptive pools use different fee models

Each Whirlpool applies its own fee model during swap calculations. The quoted trade fee therefore depends on the selected pool, the amount it exchanges, and the state used for the quote.

A configured fixed rate

A fixed-fee pool uses its configured rate without a volatility adjustment. The actual charge depends on the input consumed and the program’s token-unit rounding. An authorized fee update can change that configured rate. A rate recorded for an earlier trade therefore describes that execution, without establishing the rate for every subsequent swap.

A rate adjusted during the trade

An adaptive pool adds a component to its base rate using recent price movement and the pool’s volatility state. The program updates this calculation across price intervals traversed by the swap. Fee rates can change across portions of one trade. A displayed effective rate describes pool conditions at a point in time; multiplying the planned input by that rate may not reproduce the full charge. The execution’s fee amounts include all calculated portions.


Pool fees already contain the protocol share

A Whirlpool’s protocol fee comes out of the pool’s total trading fee. The remaining portion accrues to liquidity providers whose active liquidity the swap uses. In a decoded trade event, lp_fee plus protocol_fee describes that pool’s trading charge in its input-token units. The pool’s configured protocol fee rate controls the split. Adding the protocol share again to the total pool charge overstates the trader’s cost. Any separately disclosed route or interface charge needs its own treatment because it may sit outside that pool total.

Diagram: Pool fees already contain the protocol share (Orca swap fees)

Open full-size image

Token transfer charges change the usable output

Supported Token-2022 mints can configure a transfer fee in addition to a pool’s swap fee. The transfer amount, the mint’s fee rate, its maximum fee, and the applicable epoch determine that deduction. Token-2022 support alone does not imply a transfer charge.

Tokens reaching the pool

For a token with a transfer fee, the input transfer delivers the amount net of that fee to the pool. Whirlpool SwapV2 uses this net amount for swap calculations; its recorded input amount includes the incoming transfer fee. The pool’s trading fee then affects that tradable input. A routed swap can involve intermediate-token transfers, so its charges may use different token units along the route.

Tokens available in the receiving account

On the output side, the gross vault transfer and spendable receipt can differ. For a single-pool SwapV2 trade, output_amount records the gross amount before the output transfer fee, so subtracting output_transfer_fee gives the receiving account’s net credit from that transfer in the output mint’s raw token units. The program’s exact-input minimum-output check uses the net amount. A transfer-aware quote can already include this deduction, so reconciliation must keep the same gross or net basis without subtracting the fee twice.


SOL debits include execution and account funding

Solana’s transaction fee combines a base charge tied to signatures with any prioritization fee. The fee payer funds it in SOL, independently of pool-token deductions. Account creation can move additional SOL into a storage balance, so the complete wallet debit may exceed the transaction metadata’s fee field. The required storage balance depends on account size, which token extensions can increase. Reusing an existing token account avoids funding its creation again. Account funding remains associated with that account instead of joining the pool’s trading revenue.

Visual outline: SOL debits include execution and account funding (Orca swap fees)

Open full-size image

More pool hops do not automatically mean more network transactions; a Whirlpool two-hop swap can run within one transaction.


Like-for-like routing comparisons use net amounts

Compare routes with the same direction, token mints, and slippage limit, using quotes close together in time. For exact-input quotes, hold the input amount fixed. A pool with a lower trading fee can still yield less output if its accessible liquidity produces worse price impact. For exact-output quotes, compare the required input for the same target output.

At a glance: Like-for-like routing comparisons use net amounts
Swap configuration Charges to include Applicable scope
Fixed-fee Whirlpool Configured pool trading fee The token pair in that pool
Adaptive-fee Whirlpool Base fee plus the adaptive component Pools with adaptive fees enabled
Two-hop Whirlpool swap Each pool’s trading fee Input, intermediate, and output tokens
Aggregator route Pool charges and any disclosed route fee Liquidity selected for the supported tokens
Transfer-fee token swap Pool charges plus applicable transfer deductions Supported mints with a transfer-fee configuration

These conditions can overlap: an aggregator route may use an adaptive Whirlpool and a token with transfer fees. Orca’s interface offers direct pool routing and supported aggregator routing. The route actually quoted determines which pool fees matter. Network fees and required account funding still need separate comparison alongside the net token amounts.


Reconciliation carries forward the execution state

Keep the accepted quote alongside its transaction signature, token mints, trade amounts, and recorded charges. The quote documents expectations; the execution record supports final accounting. A pool query after confirmation can describe a later state, so it cannot reconstruct the earlier execution fee alone. For repeated swaps, refresh pool state and token fee settings because liquidity and effective fees may have changed. Leave unexplained differences separate from identified charges. Attributing the entire shortfall to fees can conceal pricing changes or a mismatch in token units.

Convert network units separately: 1 SOL equals 1,000,000,000 lamports, while each token mint defines its own decimal scale.

Questions people ask about Orca swap fees

Can a failed Orca swap still cost SOL?

A Solana transaction that reaches execution and fails can still incur its network fee. The failed transaction rolls back its swap effects, so it does not leave a completed pool exchange. A wallet rejection or an unconfirmed submission describes a different state. The confirmed transaction’s error and fee show the failed outcome and the network charge.

Is ORCA required to pay swap fees?

Holding ORCA is not a prerequisite for paying a Whirlpool’s trading fee, which comes from the input token. On Solana, the fee payer needs SOL for the network charge. Any required account funding also uses SOL.

Will closing an empty token account recover the network fee?

Closing an eligible token account returns its remaining lamports to the destination specified in the close instruction, without refunding a spent transaction fee. Ordinary token accounts need a zero token balance before closure, while wrapped SOL accounts have an exception. Token extensions can add closure requirements. The owner or designated close authority must authorize closure under the token program’s rules.

Which Whirlpool quote helper excludes token transfer fees?

The low-level compute_swap helper calculates pool amounts without applying transfer-fee extensions or slippage tolerance. Its result alone therefore does not give a transfer-fee token’s final spendable output. The higher-level swap_quote_by_input_token helper accepts transfer-fee inputs and applies them around the pool calculation. Those inputs must match the relevant mint configurations; omitting them does not establish that the tokens have no transfer fees.

When can Orca use a different route from the selected aggregator?

Orca can quote its own pool routing when that route offers higher output than the selected aggregator route. The interface indicates the Orca route before submission in that case. The route attached to the actual quote therefore determines the relevant pools and fee inputs. Selecting an aggregator source does not, by itself, establish which route will execute.
Updated