Learn how to plan DAMM v1 CPI integrations with Anchor crates, account requirements, PDA helpers, swaps, liquidity, locks, and common constraints.
DAMM v1 can be invoked from Anchor programs through the dynamic-amm program crate included in damm-v1-sdk/programs/dynamic-amm. CPI builders must pass the same pool, Dynamic Vault, token, mint, and remaining accounts required by the on-chain instruction.
Prefer the TypeScript SDK or Rust off-chain helpers for ordinary app transactions. Use CPI only when another on-chain program must compose directly with DAMM v1.
Constant-product pools use balanced liquidity after bootstrap.
add_imbalance_liquidity
Stable imbalanced deposit.
Stable pools only.
remove_balance_liquidity
Balanced withdrawal.
Allowed even when the pool is disabled.
remove_liquidity_single_side
Stable single-sided withdrawal.
Stable pools only.
bootstrap_liquidity
Re-seed depleted pool.
Pool must satisfy depleted-pool checks.
Liquidity instructions need pool LP mint, user token accounts, user pool LP account, both Dynamic Vault accounts, vault token accounts, vault LP mints, and pool-held vault LP token accounts.
Pool creation CPI is possible but account-heavy because it initializes the pool, LP mint, pool-held vault LP accounts, protocol fee accounts, payer LP ATA, and LP metadata.
Instruction
Notes
initialize_permissionless_pool
Uses curve default fee and PDA from curve type plus sorted mints.
initialize_permissionless_pool_with_fee_tier
Adds the fee-tier seed when the fee differs from the default.
Source includes explicit CpiDisabled and strict transaction sysvar validation for zap-related protocol fee flows. Treat zap protocol fee as an operator off-chain transaction path.
Admin config and operator creation
Admin signer restrictions apply. These are not ordinary CPI integration flows.
Activation updates
Launch-pool activation changes are restricted by activation timing windows.
Depeg pools
CPI callers must include the same depeg remaining accounts required by direct transactions.