Tick Array
DEX & liquidity
A tick array is a Solana account that stores 88 consecutive ticks of liquidity data for an Orca Whirlpool. When a swap pushes price across one of those ticks, the program reads the array to know how much liquidity flips on or off. You load three of these accounts on every Whirlpool swap so the program has room to walk across price.
Detailed explanation
Orca Whirlpools store concentrated liquidity in a sparse grid. Every position is bounded by two ticks, and each tick records the net liquidity that activates or deactivates when price crosses it. Storing every tick on its own account would burn rent and blow past Solana's account-load limits, so Orca packs 88 ticks into one account called a TickArray. Each TickArray covers a contiguous block of ticks starting at a fixed index.
The Whirlpools program ID is whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc. Every swap instruction expects three TickArray accounts in its remaining accounts list. The program picks the array containing the current tick, then reaches into the neighbors as price moves. If you stage too few arrays and a large swap walks past your supplied window, the transaction fails with a TickArrayIndexOutOfBounds error.
Each TickArray account is roughly 9,944 bytes. The layout is a fixed-size array of 88 Tick structs, each storing initialized status, liquidity net, liquidity gross, and fee growth checkpoints. Indexers walking the Whirlpools program have to derive the array's PDA from the pool address and the starting tick index, then deserialize against the IDL.
One opinion: most off-chain code that claims to support Orca quietly skips the tick-array load and just snapshots the pool reserves. That works for displaying price. It does not work for simulating a swap. If you need a real quote, you have to read the arrays.
When you'll see this
Tick arrays show up in every Whirlpools swap and every position open or close. The instructions that touch them include swap, swapV2, twoHopSwap, openPosition, increaseLiquidity, and decreaseLiquidity.
On a Geyser stream, you will see TickArray accounts updating on most high-volume Whirlpools several times per second. The pool itself (Whirlpool account) updates every swap, but the active TickArray often updates more often because fee growth checkpoints get rewritten.
How NoLimitNodes uses this
Our Orca Enhanced Stream decodes the tick-array account writes for you and emits a parsed event with the tick index, liquidity delta, and the pool it belongs to. You can also pull raw account data through our Yellowstone gRPC nodes and decode the TickArray bytes yourself if you want full control.
Related terms
- Whirlpool · The Orca CLMM pool account that stores the active sqrt-price, current liquidity, fee tier, and tick spacing.
- Sqrt Price · The square root of price stored as a Q64.64 fixed-point number, the math primitive every CLMM uses.
- CLMM · Concentrated Liquidity Market Maker. LPs choose a price range, and capital only earns fees inside that range.
- Position NFT · The non-fungible token that represents ownership of a CLMM liquidity position with its own price range.
- Bin Array · A Meteora DLMM account holding 70 price bins, each storing reserves and liquidity for one discrete price step.