Position Delegate
Mainnet deployment for Release 0.2.2 is planned for June 26, 2026, at 11:00 AM UTC+8 (Friday).
Release summary
What We Shipped
- Position Delegate
- Withdraw Dead Liquidity (Compounding Pools Only)
What To Do
| Integrators | What Changed | What To Do |
|---|---|---|
| Partners |
|
|
Program: cp-amm 0.2.2
Program ID (mainnet and devnet): cpamdpZCGKUy5JxQXB4dcpGPiikHawvSWAd6mEn1sGGProgram PR #210Added
- Added support for NFT delegates to manage positions. The following endpoints can now be signed by a delegate if the owner has granted them permission:
claim_position_fee,claim_reward,add_liquidity,remove_liquidity,remove_all_liquidity,lock_position,lock_inner_position,permanent_lock_position. Note: theclose_position,split_position, andsplit_position2endpoints remain callable by the owner only. - Added new endpoint
update_delegate_permissionto set the permission bitmask onPosition.delegate_permission. Passpermission = 0to clear all permissions. Callers are responsible for managing the SPL token delegate via SPLApprove/Revokeseparately. The bitmask supports 8 permissions:AddLiquidity,RemoveLiquidity,RemoveLiquidityToOwner,ClaimPositionFee,ClaimPositionFeeToOwner,ClaimReward,ClaimRewardToOwner,LockPosition. - Added new endpoint
withdraw_dead_liquidity_rewardallowing the funder to recover the unownedDEAD_LIQUIDITYreward share of aCollectFeeMode::Compoundingpool at any time, without waiting for the reward campaign to end. This share is tracked by the newdead_liquidity_reward_checkpointfield in the PoolRewardInfo.
Changed
- Renamed the signer account from
ownertosigner, now that the signer may be a delegate, in the following endpoints:claim_position_fee,claim_reward,add_liquidity,remove_liquidity,remove_all_liquidity,lock_position,lock_inner_position,permanent_lock_position.
Breaking Changes
- The following endpoints previously rejected unauthorized signers with Anchor’s
ConstraintTokenOwner(2015) and now reject withPoolError::InvalidAuthority(6053),PoolError::InvalidPermission(6054), orPoolError::DelegatedAmountNonZero(6070):claim_position_fee,claim_reward,add_liquidity,remove_liquidity,remove_all_liquidity,lock_position,lock_inner_position,permanent_lock_position.
TypeScript SDK: @meteora-ag/cp-amm-sdk 1.4.4
SDK PR #105Added
- Added
updateDelegatePermissionendpoint to grant or revoke delegate permissions on a position. It SPL-approves the delegate on the position NFT account and sets the on-chain delegate permission bitmask in a single transaction. - Added
withdrawDeadLiquidityRewardendpoint to withdraw the reward share attributable to a compounding pool’s permanent dead liquidity. Only valid forCollectFeeMode.Compoundingpools. - Added
PositionDelegatePermissionenum andencodeDelegatePermissionshelper to build the delegate permission bitmask. - Added
UpdateDelegatePermissionParamsandWithdrawDeadLiquidityRewardParamstypes.
Changed
- Bumped the IDL and program fixture: the signer account on position instructions (
addLiquidity,removeLiquidity,removeAllLiquidity,claimPositionFee,claimReward,lockPosition,lockInnerPositionandpermanentLockPosition) was renamed fromownertosignerso a delegate can sign. SDK parameter interfaces are unchanged.
Compounding Liquidity
Mainnet deployment for Release 0.2.0 is planned for March 13, 2026, at 11:00 AM UTC+8 (Friday).
Release summary
What We Shipped
- Compounding Liquidity
What To Do
| Integrators | What Changed | What To Do |
|---|---|---|
| Swap Routers |
|
|
| Trading Terminals |
|
|
| Partners |
|
|
Program: cp-amm 0.2.0
Program ID (mainnet and devnet): cpamdpZCGKUy5JxQXB4dcpGPiikHawvSWAd6mEn1sGGProgram PR #187Added
- Pool now will track reserves balances
(token_a_amount, token_b_amount)ifpool.layout_version == 1. For pool layout_version 0, operator can call the new endpointfix_pool_layout_versionto pump pool version. - Add a new
collect_fee_mode (Compounding), in the new collect fee mode, fee will be collected in quote token, and a percentage of fee (configurable) will be added in reserves for compounding. In the new collect fee mode, the pool doesn’t have concentrated price range, instead following constant-product formulatoken_a_amount * token_b_amount = constant. - Endpoints
create_config,initialize_customizable_poolandinitialize_pool_with_dynamic_configwill allow user to create pool withcollect_fee_mode == Compounding, and config forcompounding_fee_bps.
Changed
- Related to event
EvtSwap2, inswap_resultfield,partner_feewill be replaced bycompounding_fee, now total_trading_fee will be calculated asswap_result.claiming_fee + swap_result.compounding_fee
Removed
- Removed
partnerfield from Pool struct - Removed unused
partner_feefeature and theclaim_partner_feeendpoint
Breaking Changes
- Quote function will be changed by the new fee mode
TypeScript SDK: @meteora-ag/cp-amm-sdk 1.3.7
SDK PR #101Added
- Added new
CollectFeeMode.Compoundingmode — a constant-product (x * y = k) liquidity mode where a configurable percentage of trading fees are compounded back into pool liquidity (as token B), with the remaining fees available for claiming. Pools with compounding mode do not use price ranges. - Added
LiquidityHandlerinterface and two implementations:CompoundingLiquidityHandlerandConcentratedLiquidityHandler, with agetLiquidityHandlerfactory function that dispatches based oncollectFeeMode. - Added
compoundingFeeBpsfield toPoolFeesParamsfor configuring the compounding fee split. - Added
collectFeeModeparameter togetLiquidityDelta,getDepositQuote,getWithdrawQuote, andpreparePoolCreationParams. - Added
tokenAAmount,tokenBAmount, andliquidityparameters togetDepositQuoteandgetWithdrawQuotefor compounding liquidity calculations.
Changed
- Rewrote
swapQuote.tsto useLiquidityHandlerabstraction, supporting both concentrated and compounding liquidity modes. - Fee structure:
tradingFeesplit intoclaimingFee+compoundingFeeinSwapResult2,FeeOnAmountResult, andSplitFeestypes. - Renamed
PoolVersionenum toLayoutVersion. PoolFeesParams.paddingchanged fromnumber[]tonumber.splitFeesandgetFeeOnAmountno longer accepthasPartnerparameter.getQuotetotalFeenow computed asclaimingFee + compoundingFee + protocolFee + referralFee.getQuote2return type:tradingFeeandpartnerFeereplaced withclaimingFeeandcompoundingFee.collectFeeModecomment updated:0: BothToken, 1: OnlyB, 2: Compounding.- Liquidity delta and amount functions (
getLiquidityDeltaFromAmountA,getLiquidityDeltaFromAmountB,getAmountAFromLiquidityDelta,getAmountBFromLiquidityDelta) now acceptcollectFeeModeand dispatch to the appropriate handler.
Removed
- Removed
claimPartnerFeeendpoint andClaimPartnerFeeParamstype. - Removed
partnerFeefrom fee result types (FeeOnAmountResult,SplitFees,SwapResult2). - Removed
hasPartnerhelper function. - Removed
FEE_PADDINGconstant.

