Raydium is where Hands-On Managers Run the CLMM Position Lifecycle
Raydium is a Solana concentrated-liquidity market maker whose positions move through a clear lifecycle: select a pool and range, deposit the required token mix, monitor range status, adjust liquidity, collect accrued assets and close the position account. A position keeps the same lower and upper ticks for its lifetime. If price leaves those bounds, fee accrual stops until price returns, so a hands-on manager either waits, removes liquidity or opens a new range.
Transaction costs across the position lifecycle
For most users, Raydium position costs come from the pool's configured trade fee plus Solana transaction, priority and account-rent charges across opening, adjusting, collecting and closing.
The pool's AmmConfig fixes its fee rate and endpoint spacing. Common CLMM configurations pair 0.01% with tick spacing 1, 0.05% with spacing 10, 0.25% with spacing 60 and 1.00% with spacing 120. Trade-fee rates use a denominator of 1,000,000, while the pool records liquidity-provider accrual separately for token 0 and token 1. Those rates apply to swaps passing through active liquidity; they are not a surcharge for selecting Increase or Decrease. The manager instead pays the network whenever a signed action changes or settles the position. This separation keeps trading revenue distinct from execution and account costs.
Solana charges a base fee of 5,000 lamports per signature. Its optional priority fee equals the requested compute-unit limit multiplied by the compute-unit price then divided by 1,000,000, and a transaction cannot request more than 1,400,000 compute units. New positions also fund rent-exempt accounts. ClosePosition refunds eligible rent from the NFT mint and PersonalPositionState to the payer, while initialized 60-tick TickArrayState accounts remain with the pool.
Boundary risk appears before the first deposit
Raydium CLMM boundary risk begins when the chosen ticks concentrate liquidity into a band and expose the position to one-sided conversion outside it.
The range converts inventory as price travels across it. Below tick_lower, the position holds only token 1; at or above tick_upper, it holds only token 0. The displayed base and quote labels can reverse how those account-side names feel, so read the actual mint symbols before acting. While the current tick remains outside, pool liquidity excludes this position and swap-fee growth inside the band stays unchanged. Closing at that point returns the one-sided inventory plus already accrued fees and rewards, crystallizing the mix produced by the price path.
Impermanent loss compares the position's value with simply holding the same starting assets. A narrower range intensifies fee concentration and inventory conversion, whereas a wider range spreads liquidity over more prices. Neither boundary liquidates the NFT or borrows against the manager; the position stays withdrawable while its on-chain accounts remain valid.
Opening the position and interpreting its first balances
Opening a Raydium CLMM position fixes two tick boundaries, transfers the required token amounts and mints a unique position NFT with supply 1.
Choose the pool and token order
The same token pair may have several pools, each bound to one AmmConfig and one fee tier. Select the pool ID first, then read token 0, token 1, current price and tick spacing as a single package. For a SOL/USDC position, the pool program handles the token account for wrapped SOL even when the interface presents native SOL. Changing the fee tier means choosing a different pool, not changing a setting on the new position.
Place two valid endpoints
At a protocol level, Raydium requires lower tick < upper tick, both endpoints aligned to the pool's spacing and both inside the protocol limits of −443636 through 443636. The manager chooses prices, while the interface snaps them to permitted ticks. A spacing of 60 accepts endpoints such as −120, −60, 0 and 60. The current price determines the deposit ratio: centered ranges need both tokens and fully off-side ranges need one.
Read the new position record
OpenPosition creates PersonalPositionState and a position mint, then places the supply-1 NFT in the owner's Associated Token Account. The new record stores pool ID, lower tick, upper tick, liquidity L, two fee-growth snapshots and three reward slots. Raydium's portfolio reads these fields into token balances and range status; Raydium SDK V2 exposes the same state for custom tools.
How do I tell whether a CLMM position is in range?
A Raydium CLMM position is in range when its current tick satisfies lower tick ≤ current tick < upper tick.
Later in the process, Raydium maps each tick index i to 1.0001^i, so one integer tick represents a 0.01% price step. The upper bound is exclusive: equality with tick_upper places the position out of range, while equality with tick_lower keeps it active. The pool stores square-root price as Q64.64, meaning the fixed-point scale uses 64 fractional bits and a factor of 2^64. Range managers need the decoded current tick rather than a rounded chart price near either boundary.
Balances confirm the same state from another angle. Inside the range, the position contains both assets except exactly at an edge, and swaps continuously change their proportions. Below the lower boundary it settles into token 1; at or above the upper boundary it settles into token 0. Uncollected fees appear separately from principal, so a growing USD display alone does not show whether fresh fees are accruing.
Adding liquidity without changing the boundaries
Adding liquidity to Raydium preserves the existing NFT and tick boundaries while increasing L through IncreaseLiquidityV2 at the pool's current price.
The action first settles fresh fee and reward growth into the position's owed counters, then transfers the required token amounts from the owner's accounts to the two pool vaults. It does not pay those counters to the wallet during the increase. The instruction accepts liquidity as a u128 plus amount_0_max and amount_1_max as u64 limits, protecting the deposit from consuming more than quoted. An in-range position needs the live ratio of both tokens. An out-of-range increase supplies the single asset matching its side of the price band. One NFT therefore supports repeated increases without recreating the range.
Reducing, collecting and closing are separate states
Position lifecycle actions on Raydium separate resizing, fee settlement, reward collection and account closure, so zero liquidity alone does not mean the NFT has closed.
| Choice | Instruction path | Position state afterward | Prerequisite |
|---|---|---|---|
| Increase liquidity | IncreaseLiquidityV2 | Same NFT and ticks with higher L | Position NFT plus the required token mix |
| Partial reduction | DecreaseLiquidityV2 | NFT remains with L above zero | Removed L is below position liquidity |
| Collect fees | DecreaseLiquidityV2 with L set to 0 | Principal and ticks stay unchanged | Position ownership and token destinations |
| Collect rewards | CollectReward for each stream | Liquidity stays unchanged | Populated reward slot and destination account |
| Close position | Decrease, collect and ClosePosition | NFT mint and personal state close | Liquidity, two fee counters and all reward counters equal 0 |
Partial reduction
DecreaseLiquidityV2 removes a chosen amount of L and returns principal at the current square-root price. The manager supplies amount_0_min and amount_1_min, both u64 values applied after supported Token-2022 transfer fees. A partial decrease leaves the NFT, endpoints and remaining liquidity active, while the same instruction also pays the position's two owed fee balances.
Collection without reshaping
A collect-only fee action sends DecreaseLiquidityV2 with liquidity set to 0. It refreshes both snapshots, transfers the two owed tokens and leaves principal untouched. Reward collection follows each populated slot; a pool exposes at most 3 concurrent streams.
Final account closure
ClosePosition succeeds only after liquidity equals 0, both fee counters equal 0 and all reward counters equal 0. It burns the NFT, closes its mint and PersonalPositionState and returns eligible rent to the payer. The two endpoint tick arrays remain available to the pool, even when their initialized-tick counts later return to zero.
Re-centering requires a replacement position
Re-centering a Raydium position requires a replacement because PersonalPositionState keeps its lower and upper tick indexes fixed for the account's lifetime.
Rebalancing starts by deciding whether the old inventory should remain exposed, return to the wallet or fund a replacement range. A full migration uses DecreaseLiquidityV2, pays out token amounts and owed fees, claims any reward counters and then satisfies ClosePosition. Opening the replacement mints another NFT with a new PersonalPositionState. If the new range surrounds spot, its deposit ratio again requires both assets. If it sits entirely above or below spot, the deposit becomes single-sided. Each signed stage uses a fresh quote because the current tick sets the returned and required token amounts.
The matching explanation appears in Raydium setup. Managers can keep the old NFT and layer a second range instead of closing immediately. That choice separates capital into two fee-growth histories and two inventories, each with its own bounds and claimable balances. A later cleanup still follows the same zero-liquidity, zero-fee and zero-reward preconditions for every NFT.
Token-2022 ownership and wallet display
Classic and Token-2022 position NFTs on Raydium share range semantics, while the token program and mint extensions determine account handling and net transfers.
Classic positions use the SPL Token program, while newer pools can use OpenPositionWithToken22Nft under Token-2022 with the same range semantics. Supported Token-2022 transfer-fee mints reduce the amount the pool receives or the wallet receives, and Raydium calculates maximum inputs and minimum outputs around that extension. Whether the signing wallet is Phantom, Solflare or Backpack, ownership comes from an Associated Token Account holding NFT balance 1. A gallery view is only presentation; transferring that NFT transfers control of IncreaseLiquidityV2, DecreaseLiquidityV2, fee collection and rewards for the position.
Choosing between waiting, widening and moving venues
Range managers choose among waiting, layering, widening or handing execution to another design, and each choice changes future workload rather than the past price path. For the closely related topic, continue with Raydium troubleshooting.
Waiting or layering ranges
Waiting keeps the original ticks and preserves the chance price re-enters without a transaction. Layering opens another NFT around a second band while the first remains intact. Widening uses the same replacement workflow: remove some or all liquidity, choose farther endpoints and open a new position. Wider bands spend more time in range but spread each unit of L over more price space, so the manager trades fee concentration for fewer re-centering events.
Moving to another liquidity design
Orca Whirlpools offers a separate concentrated-liquidity program on Solana, while Meteora DLMM organizes liquidity into discrete bins. Kamino Liquidity Vaults automate range rebalancing and compounding for supported pools, which replaces direct position control with a vault receipt. Jupiter aggregates swap routes rather than accepting a transferable CLMM position. None of these systems imports Raydium's position NFT; moving capital begins with withdrawing the underlying tokens and ends with a new deposit under the destination program's rules.
The decision turns on desired control. Keeping the NFT retains exact tick authority; a managed vault delegates rebalancing; another DEX creates independent position state.
The Solana account model behind the lifecycle
The Solana account model lets Raydium adapt Uniswap v3 concentrated liquidity by storing pool state, tick arrays and each manager's position separately.
One PoolState tracks the current Q64.64 square-root price, active liquidity and global fee growth. One ObservationState records price observations, while two token vaults hold the pool assets. Every manager receives one PersonalPositionState and one NFT mint with supply 1. TickArrayState packs 60 adjacent usable tick slots into an account; with spacing 60, one array spans 3,600 integer ticks. Raydium SDK V2 derives these Program Derived Addresses and assembles the writable accounts each instruction needs. This account layout explains the lifecycle: opening creates personal state, increases and decreases update endpoint ticks and closing removes only the position-owned accounts.
Worth knowing
Does transferring the position NFT move its Raydium liquidity too?
Yes, transferring the position NFT transfers control of the associated Raydium PersonalPositionState and its liquidity to the receiving wallet. The recipient's Associated Token Account must hold the NFT balance of 1 before it can increase liquidity, decrease liquidity, collect fees or claim rewards. The transfer does not withdraw either pool token; it changes which wallet satisfies the ownership check for later instructions.
When do collected Raydium fees become active liquidity again?
Collected Raydium fees become active liquidity only after the manager deposits them through IncreaseLiquidityV2 or opens another position. Collection transfers owed token amounts to the wallet; it does not change L or the two range ticks. Manual compounding therefore requires collection, any needed token-ratio adjustment and a separate increase transaction, each with its own Solana fee.
Is the position NFT burned after withdrawing all Raydium liquidity?
No, withdrawing all Raydium liquidity leaves the NFT in place until ClosePosition completes. Both fee counters and every reward counter must also equal zero before that final instruction burns the NFT and closes its mint plus PersonalPositionState, returning eligible rent to the payer. A zero-liquidity position is closable state, not proof the account has already closed.
Are Token-2022 transfer fees reflected in Raydium withdrawal minimums?
Yes, Raydium's DecreaseLiquidityV2 treats amount_0_min and amount_1_min as minimum outputs after supported Token-2022 transfer fees on the withdrawal side. The mint's transfer-fee extension sets the deduction, not the CLMM fee tier. A quote built before a transfer-fee configuration change can fall outside those minimums, so the transaction needs fresh net-output amounts for reliable execution.
How many reward streams can one Raydium CLMM pool run?
A Raydium CLMM pool has three reward slots and therefore supports up to three reward streams at once. Each position stores one reward-growth snapshot and one owed counter for every slot. Fee accrual remains separate in token 0 and token 1, so collecting swap fees does not automatically settle all reward mints unless the submitted transaction includes those reward instructions.
Could my Raydium position remain on-chain while a wallet gallery hides it?
Yes, a wallet gallery can omit a Raydium position while its NFT balance and PersonalPositionState remain valid on Solana. Confirm the position by checking the NFT mint, its Associated Token Account balance of 1 and the pool ID stored in the position account. Raydium's portfolio or Raydium SDK V2 decodes those program-specific fields more reliably than a generic artwork gallery.