Skip to main content

Overview

DAMM v2 (Dynamic AMM v2) is Meteora’s next-generation liquidity protocol on Solana. Built on the cp-amm program, it gives token creators and LPs fine-grained control over how pools are configured, how fees are collected, and how liquidity is locked and released.

Key Features

DAMM v2 comes with the following features.

Concentrated Liquidity

LPs concentrate capital in a chosen price range to earn more fees per dollar deployed. Supports full-range (x·y=k) as a special case.

Three Fee Modes

BothToken — fees in both tokens. OnlyB — fees in quote token only. Compounding — a configurable share of fees auto-reinvests back into pool liquidity.

NFT-Backed Positions

Each LP position is tied to a position NFT. Positions track unlocked, vested, and permanently locked liquidity separately.

Built-in Farming

Up to 2 reward tokens per pool. Rewards accrue pro-rata based on total position liquidity — no separate staking contract needed.

Liquidity Vesting

Lock liquidity with cliff + linear vesting schedules, or lock permanently. Both inner vesting (single account) and external vesting accounts supported.

Compounding Fee Mode

A percentage of trading fees can be set to auto-compound directly into pool reserves via compounding_fee_bps. The pool operates as a standard constant-product AMM in this mode, with no concentrated price range.

Anti-Sniper Controls

Set an activation point (by slot or timestamp) to delay trading. Pair with an Alpha Vault or presale vault for whitelisted early access.

Dynamic + Scheduled Fees

5 base fee modes: time-decay linear/exponential, market-cap-based linear/exponential, and rate limiter. Combine with volatility-based dynamic fees.

Token 2022 Support

Permissionless and permissioned support for SPL Token 2022 with extensions.

Pool Creation Options

DAMM v2 supports three ways to create a pool, each offering different levels of control:
MethodDescription
initialize_poolCreates a pool using a pre-defined static config created by Meteora. Fee parameters are fixed.
initialize_pool_with_dynamic_configCreates a pool using a dynamic config. The pool creator defines all fee parameters during creation.
initialize_customizable_poolCreates a fully customizable pool where the pool creator sets all parameters including fee mode, dynamic fees, and compounding settings.
All three creation methods support collect_fee_mode = 2 (Compounding) and compounding_fee_bps configuration.

Position Features

Each liquidity position in DAMM v2 is represented by an NFT, making positions transferable between wallets.

Liquidity Locking & Vesting

Positions support three liquidity states:
StateDescription
UnlockedCan be withdrawn at any time by the position owner.
VestingTime-locked liquidity that gradually becomes unlocked based on a cliff + periodic release schedule.
Permanently LockedCannot be withdrawn ever, but still earns trading fees and farming rewards.
Use lock_position or lock_inner_position to vest liquidity directly within a position (no separate vesting account required). Use permanent_lock_position to permanently lock liquidity. Call refresh_vesting to release vested liquidity that has reached its unlock time.
lock_inner_position stores vesting state inside the position itself, enabling better composability with other programs.

Position Splitting

Position owners can split a position into two using split_position or split_position2. The split proportionally divides:
  • Unlocked, vested, and permanently locked liquidity
  • Pending trading fees (both tokens)
  • Pending farming rewards
  • Inner vesting state
This is useful for partially transferring or selling a portion of a position.

Swap Modes

DAMM v2 supports two swap instructions:
InstructionModes
swapExactIn only (deprecated)
swap2ExactIn (0), PartialFill (1), ExactOut (2)
The original swap instruction and the EvtSwap, EvtRemoveLiquidity, and EvtAddLiquidity events are deprecated. Use swap2 and EvtSwap2 / EvtLiquidityChange instead.
For pools with Rate Limiter enabled (baseFeeMode == 2), the SYSVAR_INSTRUCTIONS_PUBKEY must be included in the remaining accounts of the swap instruction.

Farming Rewards

DAMM v2 has a built-in farming mechanism (no separate farm program required). Each pool supports up to 2 reward tokens simultaneously.
  • Pool creators can permissionlessly initialize the first reward (index 0) for their own pool
  • Rewards are distributed proportionally based on position liquidity (including unlocked, vesting, and permanently locked)
  • LPs claim rewards via claim_reward
  • The skip_reward parameter allows claiming even if a reward vault is frozen

Case Studies

Program Address

NetworkAddress
MainnetcpamdpZCGKUy5JxQXB4dcpGPiikHawvSWAd6mEn1sGG
DevnetcpamdpZCGKUy5JxQXB4dcpGPiikHawvSWAd6mEn1sGG

Key Concepts

Pool Types

A DAMM v2 pool is always a constant-product pool (x·y=k within a price range). Two config types exist:
  • Static Config — Pool parameters (fee, price range, collect fee mode) are fixed at config creation. Pools inherit them.
  • Dynamic Config — Pool creator can specify custom parameters at pool creation time (private configs only).

Positions

Every LP position is an on-chain account backed by a position NFT. The NFT is the ownership token — whoever holds it can manage the position. A position tracks three liquidity buckets:
BucketDescription
unlocked_liquidityAvailable to withdraw freely
vested_liquidityReleased on a cliff + periodic schedule
permanent_locked_liquidityNever withdrawable

Activation & Trading Gating

Pools can have an activation point (a future slot or timestamp) before which trading is disabled. This is used for:
  • Fair launch countdowns
  • Alpha Vault presale windows
  • Coordinated launch times across platforms

Fee Architecture

DAMM v2 fees have three layers:
Total Trading Fee
  ├── Protocol Fee (fixed %)
  │     └── Referral Fee (portion of protocol fee, if referral)
  └── LP Fee (remainder)
        └── [Compounding only] compoundingFeeBps portion → back into pool reserves
See Fee Configuration and Collect Fee Modes for details.

Pool Types & Configuration

Static vs dynamic config, price ranges, pool parameters

Collect Fee Modes

BothToken, OnlyB, and Compounding explained

Fee Configuration

Base fee modes, dynamic fee, protocol fee

Position Management

Creating positions, adding/removing liquidity

Liquidity Locking

Vesting schedules and permanent locks

Farming Rewards

Setting up and claiming in-pool rewards