Support for Stock Tokens in DBC + Deprecation of Rate Limiter and DAMM v1
Mainnet deployment for Release 0.2.1 is planned for September 9, 2026, at 11:00 AM UTC+8 (Wednesday).
Release summary
What We Shipped
- Support for Stock Tokens in DBC via Token Badges
- Deprecated
BaseFeeMode.RateLimiterfor new configs and new pools. Existing rate-limiter pools can still be quoted and swapped. - Deprecated
MigrationOption.MET_DAMM(DAMM v1) for new configs and new pools. Existing DAMM v1 pools can still migrate.
What To Do
| Integrators | What Changed | What To Do |
|---|---|---|
| Partners |
|
|
Program: dynamic-bonding-curve 0.2.1
Program ID (mainnet and devnet): dbcij3LWUppWqq96dh6gJWwBifmcGfLSB5D4DuSMaqNProgram PR #202Added
- Added endpoints
create_token_badgeandclose_token_badgefor operators to whitelist quote mints with otherwise-unsupported token2022 extensions guarded by newOperatorPermission::CreateTokenBadgeandOperatorPermission::CloseTokenBadge. - Note that a token badge does not allow a non-zero transfer fee: the current and any scheduled
transfer_fee_basis_pointsmust be 0. Expired historicalolder_transfer_feetransfer fees are ignored. This is enforced withQuoteMintHasNonZeroTransferFeeat token badge creation, at config/pool creation and on every endpoint that transfers quote tokens. - Note that all DAMM v2 configs used by DBC have the
CreatePoolWithoutMintValidationpermission, so a pool with a quote mint that is not permissionless-supported by DAMM v2 can still migrate.
Changed
- The endpoints
create_config,create_config_with_transfer_hook,initialize_virtual_pool_with_spl_token,initialize_virtual_pool_with_token2022andinitialize_virtual_pool_with_token2022_transfer_hooknow take thetoken_badgeaccount as a remaining account at index 0. Required when the quote mint is not permissionless-supported.
Deprecated
- Deprecated
BaseFeeMode::RateLimiter. New configs and new pools can no longer be created withBaseFeeMode::RateLimiter. Existing configs withBaseFeeMode::RateLimitercan no longer be used to create new pools. Existing pools withBaseFeeMode::RateLimiterare unaffected. - Deprecated
MigrationOption::MeteoraDamm. New configs and new pools can no longer be created withMigrationOption::MeteoraDamm. Existing configs withMigrationOption::MeteoraDammcan no longer be used to create new pools. Existing pools withMigrationOption::MeteoraDammare unaffected and can still migrate to DAMM v1.
Removed
- Removed deprecated endpoints
claim_protocol_feeandzap_protocol_fee.
TypeScript SDK: @meteora-ag/dynamic-bonding-curve-sdk 1.5.12
SDK PR #112Added
- Added optional
tokenBadgeremaining account support on config and pool creation. Required when the quote mint is not permissionless-supported. - Added
deriveTokenBadgeAddressandgetTokenBadgeRemainingAccountshelpers. - Added
TokenBadgeaccount type andclient.state.getTokenBadge.
Changed
- Updated the DBC IDL to program version 0.2.1.
getOrCreateATAInstructionandprepareTokenAccountTxnow accept an optionalcommitment(defaults toconfirmed) and pass it through to the token account fetch.- Synced the DAMM v2 IDL and test-validator
cp_amm.sofixture to cp_amm 0.2.4. DAMM v2 configs now include apermissionbitmask. Migration tests create a private DAMM v2 config withCreatePoolWithoutMintValidationso Token-2022 quote mints that need a DBC token badge can still migrate. Token-2022 wrapped SOL is still rejected.
Deprecated
- Deprecated
BaseFeeMode.RateLimiterfor new configs and new pools. Existing rate-limiter pools can still be quoted and swapped. - Deprecated
MigrationOption.MET_DAMM(DAMM v1) for new configs and new pools. Existing DAMM v1 pools can still migrate.
Breaking Changes
createConfig,createPool, andbuildCurve*now rejectBaseFeeMode.RateLimiterandMigrationOption.MET_DAMM.getMigratedPoolFeeParamsnow rejectsMigrationOption.MET_DAMM.getBaseFeeParamsno longer takestokenQuoteDecimaloractivationType. Those arguments were only used to encode RateLimiter params, which this helper now rejects.
Transfer Hook Support and Restricted Mint Authority
Mainnet deployment for Release 0.2.0 is planned for June 3, 2026, at 11:00 AM UTC+8 (Wednesday).
Release summary
What We Shipped
- Transfer Hook Support
- Restricted Mint Authority
What To Do
| Integrators | What Changed | What To Do |
|---|---|---|
| Swap Routers |
|
|
| Trading Terminals |
|
|
| Partners |
|
|
Program: dynamic-bonding-curve 0.2.0
Program ID (mainnet and devnet): dbcij3LWUppWqq96dh6gJWwBifmcGfLSB5D4DuSMaqNProgram PR #193Added
- Added an endpoint
claim_protocol_fee2that requiresprotocol_fee_authorityas the signer instead of an operator. Only one of the pool tokens can be claimed per instruction call. - Added endpoint
create_config_with_transfer_hookthat creates aConfigWithTransferHookaccount storing the transfer hook program alongside the pool config. Only valid fortoken_type: Token2022. The transfer hook program must be executable and cannot be the DBC program, SPL Token program, Token 2022 program, or default pubkey. - Added endpoint
initialize_virtual_pool_with_token2022_transfer_hookfor creating virtual pools with token-2022 base mints that have transfer hooks. The transfer hook program is sourced from theConfigWithTransferHookaccount and the transfer hook authority is set to thepool_authority. The transfer hook program and authority is revoked after the last swap when the curve completes. - Added endpoints with transfer hook support:
swap2_with_transfer_hook,claim_trading_fee2andclaim_creator_trading_fee2. These accept atransfer_hook_accounts_info: TransferHookAccountsInfoparameter for passing transfer hook extra accounts via remaining accounts. The original endpoints are unchanged for backwards compatibility with non-transfer-hook pools. - Added
WithTransferHookevent variants for events consumed by external indexers to differentiate between transfer-hook and non-transfer-hook pool operations:EvtInitializePoolWithTransferHook,EvtSwap2WithTransferHook,EvtCurveCompleteWithTransferHook,EvtCreateConfigV2WithTransferHook. - Re-enabled
TokenAuthorityOption::CreatorUpdateAndMintAuthorityandTokenAuthorityOption::PartnerUpdateAndMintAuthorityfor transfer-hook configs only. The mint authority is assigned to the creator or partner at pool initialization.
Changed
- Update anchor to 1.0.2
Deprecated
- Deprecated
claim_protocol_feeandzap_protocol_feeendpoints in favour of usingclaim_protocol_fee2through theprotocol_feewrapper program. - Deprecated
TokenAuthorityOption::CreatorUpdateAndMintAuthorityandTokenAuthorityOption::PartnerUpdateAndMintAuthorityfor non-transfer-hook configs.
Removed
- Removed unused events:
EvtPartnerWithdrawMigrationFeeandEvtClaimProtocolLiquidityMigrationFee
Breaking Changes
create_configendpoint now rejects the configs with the followingtoken_update_authority:CreatorUpdateAndMintAuthorityandPartnerUpdateAndMintAuthorityinitialize_virtual_pool_with_spl_tokenandinitialize_virtual_pool_with_token2022endpoints now reject configs whosetoken_update_authorityisCreatorUpdateAndMintAuthorityorPartnerUpdateAndMintAuthority. Existing configs on-chain that used these variants can no longer initialize new pools.- For non-transfer-hook pools,
base_mintmint authority can no longer be assigned to the creator or partner. It is always revoked at pool initialization. Transfer-hook pools may still assign mint authority to creator/partner.
TypeScript SDK: @meteora-ag/dynamic-bonding-curve-sdk 1.5.8
SDK PR #103Added
- Added Token-2022 transfer-hook support for DBC pool configs and pools:
client.partner.createConfigWithTransferHookclient.partner.createConfigAndPoolWithTransferHookclient.partner.createConfigAndPoolWithFirstBuyWithTransferHookclient.creator.createPoolWithTransferHookclient.creator.createPoolWithFirstBuyWithTransferHookclient.creator.createPoolWithPartnerAndCreatorFirstBuyWithTransferHook
- Added transfer-hook swap and fee claim endpoints:
client.pool.swap2WithTransferHookclient.partner.claimPartnerTradingFee2client.creator.claimCreatorTradingFee2
- Added transfer-hook account helper types:
TransferHookAccountsInfoTransferHookRemainingAccountsFirstBuyWithTransferHookParamsPartnerFirstBuyWithTransferHookParamsCreatorFirstBuyWithTransferHookParamsAccountsType
- Added account types for transfer-hook program accounts:
ConfigWithTransferHookTransferHookPool
- Added
CreateVirtualPoolMetadataParametersas an exported IDL-derived type. - Added
client.partner.createConfigAndPoolandclient.partner.createConfigAndPoolWithFirstBuyso partner-owned config-and-pool flows live under the partner service. - Added
client.creator.createPool,client.creator.createPoolWithFirstBuy, andclient.creator.createPoolWithPartnerAndCreatorFirstBuyso creator-owned pool initialization flows live under the creator service. - Added
client.partner.claimPartnerTradingFeeToReceiverandclient.creator.claimCreatorTradingFeeToReceiverfor the non-transfer-hook fee claim flows that do not requiretempWSolAcc. - Added test coverage for transfer-hook config creation, pool creation, swaps, first buys, and fee claims using the new
transfer_hook_countertest program.
Changed
- Updated the DBC IDL and generated types to include transfer-hook instructions and account layouts.
- Updated DAMM V1, DAMM V2, and Dynamic Vault IDLs and generated types.
- Updated
DynamicBondingCurveClientso all services share oneStateServiceinstance. - Updated
StateService.getPoolConfigto fetch both regularpoolConfigaccounts and transfer-hook config accounts. - Updated
StateService.getPoolto fetch both regularvirtualPoolaccounts and transfer-hook pool accounts. - Updated swap quote math and state helpers to read virtual pool fields from the new nested
poolStatelayout. - Updated
buildCurve*helpers to accepttoken.tokenAuthorityOptionand map it to the on-chaintokenUpdateAuthorityfield. - Renamed
createVaultProgramtocreateDynamicVaultProgramto match the Dynamic Vault IDL naming. - Renamed internal/public DAMM V1 and Dynamic Vault generated IDL program types from
DammV1andDynamicVaulttoAmmandVault. - Updated validator and CI setup to use the
mercurial_vault.sofixture and include thetransfer_hook_counter.sofixture. - Reworked
docs.mdwith the current SDK service layout and transfer-hook function documentation. - Updated
getMigratedPoolMarketCapFeeSchedulerParamsandMigratedPoolMarketCapFeeSchedulerParamsto usepriceMultipledirectly.
Breaking Changes
- Pool creation methods moved service namespaces. Existing callers must update:
client.pool.createPool(...)->client.creator.createPool(...)client.pool.createPoolWithFirstBuy(...)->client.creator.createPoolWithFirstBuy(...)client.pool.createPoolWithPartnerAndCreatorFirstBuy(...)->client.creator.createPoolWithPartnerAndCreatorFirstBuy(...)client.pool.createConfigAndPool(...)->client.partner.createConfigAndPool(...)client.pool.createConfigAndPoolWithFirstBuy(...)->client.partner.createConfigAndPoolWithFirstBuy(...)
- Pool address params were renamed from
virtualPooltopoolacross SDK request types. Update call sites for:CreateLockerParamsWithdrawLeftoverParamsMigrateToDammV1ParamsMigrateToDammV2ParamsDammLpTokenParamsPartnerWithdrawSurplusParamsCreatorWithdrawSurplusParamsTransferPoolCreatorParamsWithdrawMigrationFeeParamsClaimPartnerPoolCreationFeeParams
- Virtual pool account data now uses the nested
poolStatelayout. Code that directly readsVirtualPoolfields must migrate from flat fields likepool.config,pool.baseMint,pool.quoteReserve,pool.sqrtPrice, andpool.metricstopool.poolState.config,pool.poolState.baseMint,pool.poolState.quoteReserve,pool.poolState.sqrtPrice, andpool.poolState.metrics. TokenType.SPLwas renamed toTokenType.SPLToken. The enum value remains0, but TypeScript callers must update the enum member name.TokenUpdateAuthorityOptionwas renamed toTokenAuthorityOption. Update imports and references.TokenConfig.tokenUpdateAuthoritywas renamed totokenAuthorityOptionfor allbuildCurve*helpers. The helper still maps this value to the on-chaintokenUpdateAuthorityconfig field.PreCreatePoolParamswas renamed toCreatePoolBaseParams. Update imports and any explicit type annotations.- The old no-
tempWSolAcctrading fee claim types were renamed.ClaimTradingFeeParams->ClaimPartnerTradingFeeParamsClaimTradingFee2Params->ClaimPartnerTradingFeeToReceiverParamsClaimCreatorTradingFee2Params->ClaimCreatorTradingFeeToReceiverParams
- The old
claimPartnerTradingFee2andclaimCreatorTradingFee2non-transfer-hook behavior moved toclaimPartnerTradingFeeToReceiverandclaimCreatorTradingFeeToReceiver. In1.5.8,claimPartnerTradingFee2andclaimCreatorTradingFee2build transfer-hook fee claim instructions and should be used only for transfer-hook pools. createVaultProgramwas renamed tocreateDynamicVaultProgram. Update helper imports.StateService.getDammV1LockEscrowwas removed. Consumers that need lock escrow data must fetch it through the relevant generated program client.LockEscrownow comes from IDL types instead of IDL accounts. Update assumptions if you were treating it as an Anchor account object.- Raw IDL instruction indexes changed. Code using
DynamicBondingCurve['instructions'][index]directly must be updated because transfer-hook instructions shifted the generated instruction order. - Market cap fee scheduler config now uses
priceMultiple. ReplacemarketCapFeeSchedulerParams.startingMarketCapandmarketCapFeeSchedulerParams.endingMarketCapwithmarketCapFeeSchedulerParams.priceMultiple.
Fixed
- Fixed state and quote helpers to work with the new nested virtual pool account layout.
- Fixed transfer-hook pool state reads so
getPoolConfig,getPool, fee metrics, fee breakdowns, and curve progress helpers work with both regular and transfer-hook pools. - Fixed SOL quote handling in transfer-hook fee claim flows by preserving the wrapped SOL post-instructions where needed.
Migrate to DAMM v2 Inner Positions + DAMM v2 Compounding Fee
Mainnet deployment for Release 0.1.10 is planned for March 16, 2026, at 11:00 AM UTC+8 (Monday).
Release summary
What We Shipped
- Migrate to DAMM v2 Inner Positions
- Migrate to DAMM v2 Compounding Fee Pool
What To Do
| Integrators | What Changed | What To Do |
|---|---|---|
| Trading Terminals |
|
|
| Partners |
|
|
Program: dynamic-bonding-curve 0.1.10
Program ID (mainnet and devnet): dbcij3LWUppWqq96dh6gJWwBifmcGfLSB5D4DuSMaqNProgram PR #174Added
- Add new endpoint
create_operator_accountandclose_operator_accountthat allows admin to manage different operator accounts. - Add new account
Operator, that would storeswhitelisted_addressas well as their operational permissions - Add new endpoint
zap_protocol_feethat allow operator to claim protocol fees and zap out to SOL/USDC or other token in pool and send to treasury address - Add support for damm-v2 Compounding
collect_fee_mode. This can be enabled through thecreate_configendpoint by passingmigrated_pool_fee.collect_fee_mode: 2andcompounding_fee_bps: 1-10_000field inConfigParameters
Changed
- When migrate to damm-v2, instead of using external accounts for vesting, now we will use position itself, that would save 2 accounts for damm-v2 migration instruction.
Removed
- Removed the
create_claim_protocol_fee_operatorendpoint in favor ofcreate_operator_account, which can create an operator account configured with permissions, including claiming protocol fees.
TypeScript SDK: @meteora-ag/dynamic-bonding-curve-sdk 1.5.6
SDK PR #98Added
- Added
MigratedCollectFeeModeenum withCompounding(2) support for migrated DAMM v2 pool configuration. - Added
compoundingFeeBpssupport inMigratedPoolFeeConfigand propagated it through allbuildCurve*helpers.
Changed
- Updated migrated pool fee validation to require
compoundingFeeBps > 0only whencollectFeeMode = MigratedCollectFeeMode.Compounding, and0otherwise. - Updated migration flow for DAMM v2 to remove position vesting accounts from
migrateDammV2remaining accounts. - Removed
deriveDammV2PositionVestingAccountPDA helper.

