CPMM vs CLMM vs DLMM is a question of where an automated market maker places its liquidity. A CPMM spreads it over all possible prices with x · y = k. The CLMM allows each liquidity provider to choose their own price range. The DLMM divides the price range into bins, and any transaction within a bin occurs at a constant price.
On Solana, Raydium offers CPMM and CLMM, Orca's Whirlpools are a CLMM, and Meteora runs the DLMM. All protocol information below is taken from the documentation of each team, checked on 9 November 2026.
CPMM vs CLMM vs DLMM at a glance
CPMM: the constant product market maker
The constant product market maker maintains two token balances, x and y, and enables any transaction that does not change their product k after fees. The price is just the ratio of these balances, so any trade shifts the price a bit, and the larger the trade, the more it changes. Liquidity is provided across the entire price curve, which means that the pool is easy and available all the time but keeps most of its capital at prices that rarely trade.
Raydium's CPMM, represented in its UI as Standard AMM, is the program Raydium recommends for new constant-product pools. This protocol allows for Token-2022 mints with supported extensions, provides fungible LP token to liquidity providers, and is where a token lands once Raydium's LaunchLab bonding curve fills. Raydium's original AMM v4 continues to support existing pools, whereas new pools use CPMM by default.
For an LP, CPMM is the hands-off choice: deposit both tokens and take a share of fees for as long as the pool trades. A CPMM is predictable for a trader and its slippage depends only on the depth of the pool.
CLMM: concentrated liquidity
With a CLMM, or concentrated liquidity pool, each LP picks the price range their deposit covers. Inside that range the deposit acts like a far deeper constant-product pool; beyond it, the position stops earning and ends up held in a single token. The prices are discretized into ticks that represent 0.01% price movement (1.0001^i) and the tick spacing determines the granularity of the range.
Raydium's CLMM follows this Uniswap-v3-style concentrated liquidity design: positions are NFTs, fee accounting happens per position, and nothing is earned while the price is outside a position's range. Orca's Whirlpools take the same approach, with fee tiers that depend on tick spacing, ranging from 0.01% for pegged stable pairs to 2% at the top end. Also, there is the full-range Splash Pool for passive liquidity.
However, CLMM comes with additional management burden. The range specified near the current price will stop earning once the price is out of this range, hence CLMM incentivizes liquidity providers to rebalance their positions. Opening a position can also require extra rent if the required tick array is not present in the chain.
DLMM: liquidity in bins
Meteora's Dynamic Liquidity Market Maker breaks up the price line into bins. There is liquidity at one price in each bin and within each bin, the behavior of the pool is as if there is constant-sum market: L = P · x + y. A single bin is active at any moment, and swaps fill at that bin's price without price impact until the bin becomes depleted of the output token and then the pool shifts to the next bin.
The distance between bins is called the bin step, expressed in basis points and going up to 400. The bin step of 25 basis points means that neighbouring bins are roughly 0.25% apart from each other. Bins are arranged into arrays of 70 bins each, and a single position may cover up to 1,400 bins.
DLMM introduces two features not available to the CPMM and regular CLMM pools. First, fees consist of a base fee plus, on pools configured to charge it, a variable fee that rises when swaps cross many bins quickly and eases off once trading calms down. Second, LPs choose the shape of liquidity: Spot distributes it evenly, Curve clusters liquidity around the center, while Bid-Ask accumulates it on the edges.
Which AMM type should you use?
- Passive LP, any pair: CPMM. There is no range to optimize, and fees keep accruing for as long as the pool trades.
- Active LP, liquid pair: CLMM. Ranges that are close to the current price return the most per dollar, provided you keep rebalancing.
- Volatile pairs and token launches: DLMM. The fee schedule can adjust higher when there is a lot of volatility, and bin shapes let a team design its launch liquidity.
- Trading bots: all three. Aggregators can route one trade through several pools of different designs, so a bot watching only one design misses part of the market.
What each pool type means for a developer
For everyone who creates bots, indexers, and dashboards, the decision about what pool architecture will be used determines which accounts a swap touches and how much state you end up tracking.
Every design operates within its own program ID, which serves as the easiest means of filtering for it:
Raydium’s own program address list warns against signing anything whose program ID doesn’t match its table, so check IDs against each team's docs before you ship.
Streaming pool state with gRPC
getAccountInfo polling for each of the pools you want to follow eats into your rate limits and is late anyway. Yellowstone gRPC pushes account updates as they happen. An account subscription can filter by owner, which will return all the accounts owned by a program ID, plus more filters with dataSize and memcmp, as the account monitoring guide shows:
const request = {
accounts: {
dlmm_pairs: {
owner: ["LBUZKhRxPF3XUpBCjp4YzTKgLccjZhTSDM9YuVaPwxo"],
account: [],
filters: [],
},
},
commitment: CommitmentLevel.PROCESSED,
};
A memcmp filter on the account discriminator narrows the stream to pool or pair accounts and leaves out positions and bin arrays you have no use for.
Swap tracking has a catch: plenty of swaps arrive through an aggregator, which turns the AMM call into an inner instruction instead of a top-level one. Yellowstone contains inner instructions and metadata. Jetstream, on the other hand, is much more lightweight and built from decoded shreds, but does not contain inner instructions. Jetstream is enough for top-level events like a pool being created; routed swaps need Yellowstone.
Seeing new pools early
New pools, particularly on launch-heavy DLMM and CPMM programs, see the fiercest competition among bots. Shredstream transmits raw shreds over UDP straight from top-of-Turbine validators, meaning the transaction that creates a pool can be known before the block itself is assembled. You require a public IP address with an open UDP port, plus your own deshredding process. Keep the receiver on a machine near the feed; our sister brand OrbitServers offers trading bot hosting suited to it.
Landing swaps
Pool design aside, every swap must still get to the current leader. Apex forwards a single signed transaction to the current and upcoming leaders through partner validators, direct TPU or Jito, with no subscription and no per-send fee. Beyond normal network and priority fees, you pay only the tip, at least 0.001 SOL on the standard tier, and only when the transaction lands. Delivery does not guarantee execution, so every swap still needs a slippage cap and a priority fee, and its result should be checked on your RPC.
Originally published at orbitflare.com.



Top comments (0)