All articles
Comparisons·July 7, 2026·6 min read

Meteora DLMM vs Uniswap v3: Concentrated Liquidity Compared

Meteora DLMM vs Uniswap v3: bin-based liquidity versus tick-based ranges, and what each means for LP bot rebalancing, fees, and slippage.

Meteora's DLMM and Uniswap v3 both promise the same headline feature — concentrated liquidity — but they get there through mechanisms that behave nothing alike once you're writing a bot to manage a position. One discretizes price into bins with zero slippage inside each bin. The other uses a continuous curve segmented by ticks, where every trade moves the price a little no matter how narrow your range is. If you're building an LP bot for either, that difference dictates your rebalancing logic, your fee assumptions, and honestly your entire risk model.

The core mechanism difference

Uniswap v3 splits the price axis into discrete ticks, where each tick represents a 0.01% price move (price = 1.0001^tick). You choose a lower and upper tick, and Uniswap computes a virtual liquidity curve L for that range using the standard x*y=k invariant, just clipped to your bounds. Inside the range, every swap still moves price along that curve — there's always some slippage, it's just bounded by how tight your range is.

Meteora DLMM (Dynamic Liquidity Market Maker), which borrows its bin architecture from Trader Joe's Liquidity Book, instead chops price into bins. Each bin holds a fixed price, and swaps executed entirely within one bin fill at that constant price — genuinely zero slippage, not "low" slippage. A trade only starts to move the effective price once it exhausts the active bin's liquidity and rolls into the next one. That's a materially different execution guarantee for takers, and it changes what "in range" even means for an LP.

// Uniswap v3: price at a given tick
const priceAtTick = (tick: number) => Math.pow(1.0001, tick);

// Meteora DLMM: price at a given bin, binStep in bps
const priceAtBin = (binId: number, binStep: number, basePrice = 1) =>
  basePrice * Math.pow(1 + binStep / 10000, binId);

Both are geometric progressions, which is why they get compared as "the same idea." But tick spacing on Uniswap v3 is fixed per fee tier (1, 10, 60, or 200 ticks depending on whether the pool is 0.01%, 0.05%, 0.3%, or 1%), while Meteora lets the pool creator pick a bin step (common values: 1, 2, 5, 10, 20, 25, 50, 100 bps) independent of the fee schedule. That decoupling matters more than it sounds — it means two DLMM pools on the same pair can have wildly different granularity and fee behavior, and your bot needs to read both parameters before deciding how to size a position.

Fees: static tiers vs. adaptive volatility pricing

This is where the two designs diverge hardest for bot economics. Uniswap v3 fees are picked at pool creation and don't move — 0.05% for stable pairs, 0.3% for most majors, 1% for exotic pairs. An LP bot has to pre-commit to a fee tier and live with it; if volatility spikes, the fee doesn't adjust, only the fill rate does.

Meteora's dynamic fee is a base fee plus a variable component that scales with recent volatility, measured by bin-crossing frequency in a rolling window. When price whips around and crosses bins fast, the variable fee ramps up automatically, which is Meteora's answer to the impermanent-loss-during-volatility problem that plagues static-fee AMMs. For a bot, this means you don't need to manually widen ranges or bail out during choppy conditions purely for fee-compensation reasons — the protocol is doing some of that work. It doesn't eliminate IL, but it changes the calculus of when rebalancing is actually worth it versus when the fee bump alone covers your risk.

Rebalancing logic your bot actually needs

On Uniswap v3, your bot tracks whether current tick sits inside [tickLower, tickUpper]. Once price exits, your position earns zero fees and sits as 100% of one asset — you decide when to burn and remint a new range, and every rebalance is an on-chain transaction with real gas cost, which matters a lot on L1 Ethereum and less on L2s like Arbitrum or Base.

On Meteora, you're tracking active bin ID against your bin range, and DLMM adds a wrinkle: you also choose a liquidity shape across bins — Spot (uniform), Curve (concentrated near active bin), or Bid-Ask (concentrated at the edges, good for range-bound market making). That shape decision is something Uniswap v3 doesn't have an equivalent for; on Uniswap your only shape lever is range width. Meteora bots effectively get two knobs (range width and distribution shape) instead of one, which is more flexible but also more surface area for bad parameter choices.

Because Meteora lives on Solana, rebalance costs are near-zero in raw fees but you're fighting for block inclusion and MEV exposure instead — which is why serious Solana LP bots pair DLMM position management with landing infrastructure. We've written before about the practical gap between Jito bundles and standard Solana RPC for trade landing, and the same reasoning applies directly to rebalance transactions racing against arbitrageurs. Data freshness matters too — if you're polling bin state instead of streaming it, compare Yellowstone gRPC against a standard Solana WebSocket RPC before you commit to a polling architecture that lags the active bin by a full slot or more.

Comparison table

Dimension Uniswap v3 Meteora DLMM
Liquidity model Continuous curve, tick-bounded Discrete bins, each a fixed price
Slippage in range Present, bounded by range width Zero within active bin
Fee structure Static per pool (0.01–1%) Base + volatility-adaptive variable fee
Granularity control Tick spacing tied to fee tier Bin step independent of fee
Shape control Range width only Range width + Spot/Curve/Bid-Ask distribution
Chain Ethereum + EVM L2s Solana
Rebalance cost driver Gas (high on L1, low on L2) Priority fees, MEV/landing risk
Tooling maturity Mature (v3-sdk, deep subgraph history) Newer SDK, smaller ecosystem

Which to pick when

If your strategy is a passive-ish range LP on an established EVM pair and you value years of battle-tested tooling and subgraph analytics, build on Uniswap v3 — the ecosystem around it, from position simulators to fee-tier backtesting data, is simply deeper. If you're market-making on Solana pairs with real intraday volatility, Meteora DLMM's adaptive fee and zero-slippage bins are a genuine structural advantage — you're not fighting IL with a fixed fee that was calibrated for calmer conditions. For anyone running both simultaneously as a cross-chain LP desk, expect to maintain two separate rebalancing engines; the bin-shape logic and tick-range logic are not portable code, and treating them as "the same AMM math with different names" is how bots end up mis-sizing positions on one side or the other.

Swap routing sits adjacent to this decision too — if you're also executing trades against these pools rather than just providing liquidity to them, our breakdown of Jupiter versus Raydium for swap routing and execution covers how aggregator behavior interacts with DLMM's bin liquidity differently than it does with standard constant-product pools.

Getting the rebalancing state machine and fee-tier assumptions wrong is the single most common way LP bots bleed money quietly for weeks before anyone notices — a pre-deployment code review on the position-management logic catches most of it, and a full smart contract audit is worth it if you're deploying a custom vault or aggregator on top of either protocol.

If you're deciding which model actually fits your strategy and risk tolerance before writing a line of bot code, that's exactly the kind of design question worth a strategy consultation.

Need a bot like this built?

We design, build and run trading bots on Solana, Hyperliquid and Polymarket.

Start a project
#Meteora DLMM#Uniswap v3#concentrated liquidity#LP bots#Solana