> ## Documentation Index
> Fetch the complete documentation index at: https://docs.meteora.ag/llms.txt
> Use this file to discover all available pages before exploring further.

# DBC Changelog

> Track DBC release notes, breaking changes, and upgrade guidance for the program, IDL, TypeScript SDK, Rust quote helpers, and migration flows.

<Tip>
  Track DBC releases here.
</Tip>

<Update label="dynamic-bonding-curve 0.2.0" description="Transfer Hook Support and Restricted Mint Authority" rss="DBC dynamic-bonding-curve 0.2.0 adds Token-2022 transfer-hook support and restricted mint authority, with transfer-hook config, pool, swap, fee-claim, event parsing, and nested poolState layout updates. SDK 1.5.8.">
  <Info>
    Mainnet deployment for Release 0.2.0 is planned for June 3, 2026, at 11:00 AM UTC+8 (Wednesday).
  </Info>

  ## Release summary

  | Component      | Version | PR                                                                                                |
  | -------------- | ------- | ------------------------------------------------------------------------------------------------- |
  | Program        | `0.2.0` | [dynamic-bonding-curve #193](https://github.com/MeteoraAg/dynamic-bonding-curve/pull/193)         |
  | TypeScript SDK | `1.5.8` | [dynamic-bonding-curve-sdk #103](https://github.com/MeteoraAg/dynamic-bonding-curve-sdk/pull/103) |

  ## What We Shipped

  * Transfer Hook Support
  * Restricted Mint Authority

  ## What To Do

  <div style={{overflowX: 'auto', marginBottom: '1.5rem'}}>
    <table>
      <thead>
        <tr>
          <th>Integrators</th>
          <th>What Changed</th>
          <th>What To Do</th>
        </tr>
      </thead>

      <tbody>
        <tr>
          <td><strong>Swap Routers</strong></td>

          <td>
            <ul>
              <li>Token-2022 transfer-hook pool support</li>
              <li>New transfer-hook swap endpoint: <code>swap2\_with\_transfer\_hook</code></li>
            </ul>
          </td>

          <td>
            <ul>
              <li>Use <code>swap2\_with\_transfer\_hook</code> for transfer-hook pools and pass the required <code>transfer\_hook\_accounts\_info: TransferHookAccountsInfo</code> remaining-account metadata.</li>
              <li>Keep using the original swap endpoints for non-transfer-hook pools.</li>
              <li>Update any direct pool account readers to handle the transfer-hook pool account and nested pool-state layout.</li>
            </ul>
          </td>
        </tr>

        <tr>
          <td><strong>Trading Terminals</strong></td>

          <td>
            <ul>
              <li>New transfer-hook event variants</li>
              <li>Restricted mint-authority behavior for non-transfer-hook pools</li>
            </ul>
          </td>

          <td>
            <ul>
              <li>Update event parsing for <code>EvtInitializePoolWithTransferHook</code>, <code>EvtSwap2WithTransferHook</code>, <code>EvtCurveCompleteWithTransferHook</code>, and <code>EvtCreateConfigV2WithTransferHook</code>.</li>
              <li>Display transfer-hook pools separately from non-transfer-hook pools where users need to understand additional token-transfer requirements.</li>
              <li>Do not assume creator or partner mint authority is available for non-transfer-hook pools. For those pools, <code>base\_mint</code> mint authority is always revoked at initialization.</li>
            </ul>
          </td>
        </tr>

        <tr>
          <td><strong>Partners</strong></td>

          <td>
            <ul>
              <li>New transfer-hook config and pool-creation flow</li>
              <li>Protocol-fee claim endpoint update</li>
              <li>Restricted mint-authority config options</li>
            </ul>
          </td>

          <td>
            <ul>
              <li>Bump your SDK version to at least <code>@meteora-ag/dynamic-bonding-curve-sdk\@1.5.8</code>. Use <code>1.5.9+</code> for the transfer-hook state-fetch fix.</li>
              <li>For Token-2022 transfer-hook launches, create configs with <code>create\_config\_with\_transfer\_hook</code> and initialize pools with <code>initialize\_virtual\_pool\_with\_token2022\_transfer\_hook</code>.</li>
              <li>Only use <code>CreatorUpdateAndMintAuthority</code> or <code>PartnerUpdateAndMintAuthority</code> with transfer-hook configs. <code>create\_config</code>, <code>initialize\_virtual\_pool\_with\_spl\_token</code>, and <code>initialize\_virtual\_pool\_with\_token2022</code> now reject those options.</li>
            </ul>
          </td>
        </tr>
      </tbody>
    </table>
  </div>

  ## Program: `dynamic-bonding-curve` `0.2.0`

  Program ID (mainnet and devnet): `dbcij3LWUppWqq96dh6gJWwBifmcGfLSB5D4DuSMaqN`

  [Program PR #193](https://github.com/MeteoraAg/dynamic-bonding-curve/pull/193)

  ### Added

  * Added an endpoint `claim_protocol_fee2` that requires `protocol_fee_authority` as the signer instead of an operator. Only one of the pool tokens can be claimed per instruction call.
  * Added endpoint `create_config_with_transfer_hook` that creates a `ConfigWithTransferHook` account storing the transfer hook program alongside the pool config. Only valid for `token_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_hook` for creating virtual pools with token-2022 base mints that have transfer hooks. The transfer hook program is sourced from the `ConfigWithTransferHook` account and the transfer hook authority is set to the `pool_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_fee2` and `claim_creator_trading_fee2`. These accept a `transfer_hook_accounts_info: TransferHookAccountsInfo` parameter for passing transfer hook extra accounts via remaining accounts. The original endpoints are unchanged for backwards compatibility with non-transfer-hook pools.
  * Added `WithTransferHook` event 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::CreatorUpdateAndMintAuthority` and `TokenAuthorityOption::PartnerUpdateAndMintAuthority` for 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_fee` and `zap_protocol_fee` endpoints in favour of using `claim_protocol_fee2` through the `protocol_fee` wrapper program.
  * Deprecated `TokenAuthorityOption::CreatorUpdateAndMintAuthority` and `TokenAuthorityOption::PartnerUpdateAndMintAuthority` for non-transfer-hook configs.

  ### Removed

  * Removed unused events: `EvtPartnerWithdrawMigrationFee` and `EvtClaimProtocolLiquidityMigrationFee`

  ### Breaking Changes

  * `create_config` endpoint now rejects the configs with the following `token_update_authority`: `CreatorUpdateAndMintAuthority` and `PartnerUpdateAndMintAuthority`
  * `initialize_virtual_pool_with_spl_token` and `initialize_virtual_pool_with_token2022` endpoints now reject configs whose `token_update_authority` is `CreatorUpdateAndMintAuthority` or `PartnerUpdateAndMintAuthority`. Existing configs on-chain that used these variants can no longer initialize new pools.
  * For non-transfer-hook pools, `base_mint` mint 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 #103](https://github.com/MeteoraAg/dynamic-bonding-curve-sdk/pull/103)

  <Tip>
    Early testing: [`@meteora-ag/dynamic-bonding-curve-sdk@1.5.7-rc.0`](https://www.npmjs.com/package/@meteora-ag/dynamic-bonding-curve-sdk/v/1.5.7-rc.0).<br /> Production: [`@meteora-ag/dynamic-bonding-curve-sdk@1.5.8`](https://www.npmjs.com/package/@meteora-ag/dynamic-bonding-curve-sdk/v/1.5.8).
  </Tip>

  ### Added

  * Added Token-2022 transfer-hook support for DBC pool configs and pools:
    * `client.partner.createConfigWithTransferHook`
    * `client.partner.createConfigAndPoolWithTransferHook`
    * `client.partner.createConfigAndPoolWithFirstBuyWithTransferHook`
    * `client.creator.createPoolWithTransferHook`
    * `client.creator.createPoolWithFirstBuyWithTransferHook`
    * `client.creator.createPoolWithPartnerAndCreatorFirstBuyWithTransferHook`
  * Added transfer-hook swap and fee claim endpoints:
    * `client.pool.swap2WithTransferHook`
    * `client.partner.claimPartnerTradingFee2`
    * `client.creator.claimCreatorTradingFee2`
  * Added transfer-hook account helper types:
    * `TransferHookAccountsInfo`
    * `TransferHookRemainingAccounts`
    * `FirstBuyWithTransferHookParams`
    * `PartnerFirstBuyWithTransferHookParams`
    * `CreatorFirstBuyWithTransferHookParams`
    * `AccountsType`
  * Added account types for transfer-hook program accounts:
    * `ConfigWithTransferHook`
    * `TransferHookPool`
  * Added `CreateVirtualPoolMetadataParameters` as an exported IDL-derived type.
  * Added `client.partner.createConfigAndPool` and `client.partner.createConfigAndPoolWithFirstBuy` so partner-owned config-and-pool flows live under the partner service.
  * Added `client.creator.createPool`, `client.creator.createPoolWithFirstBuy`, and `client.creator.createPoolWithPartnerAndCreatorFirstBuy` so creator-owned pool initialization flows live under the creator service.
  * Added `client.partner.claimPartnerTradingFeeToReceiver` and `client.creator.claimCreatorTradingFeeToReceiver` for the non-transfer-hook fee claim flows that do not require `tempWSolAcc`.
  * Added test coverage for transfer-hook config creation, pool creation, swaps, first buys, and fee claims using the new `transfer_hook_counter` test 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 `DynamicBondingCurveClient` so all services share one `StateService` instance.
  * Updated `StateService.getPoolConfig` to fetch both regular `poolConfig` accounts and transfer-hook config accounts.
  * Updated `StateService.getPool` to fetch both regular `virtualPool` accounts and transfer-hook pool accounts.
  * Updated swap quote math and state helpers to read virtual pool fields from the new nested `poolState` layout.
  * Updated `buildCurve*` helpers to accept `token.tokenAuthorityOption` and map it to the on-chain `tokenUpdateAuthority` field.
  * Renamed `createVaultProgram` to `createDynamicVaultProgram` to match the Dynamic Vault IDL naming.
  * Renamed internal/public DAMM V1 and Dynamic Vault generated IDL program types from `DammV1` and `DynamicVault` to `Amm` and `Vault`.
  * Updated validator and CI setup to use the `mercurial_vault.so` fixture and include the `transfer_hook_counter.so` fixture.
  * Reworked `docs.md` with the current SDK service layout and transfer-hook function documentation.
  * Updated `getMigratedPoolMarketCapFeeSchedulerParams` and `MigratedPoolMarketCapFeeSchedulerParams` to use `priceMultiple` directly.

  ### 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 `virtualPool` to `pool` across SDK request types.** Update call sites for:
    * `CreateLockerParams`
    * `WithdrawLeftoverParams`
    * `MigrateToDammV1Params`
    * `MigrateToDammV2Params`
    * `DammLpTokenParams`
    * `PartnerWithdrawSurplusParams`
    * `CreatorWithdrawSurplusParams`
    * `TransferPoolCreatorParams`
    * `WithdrawMigrationFeeParams`
    * `ClaimPartnerPoolCreationFeeParams`
  * **Virtual pool account data now uses the nested `poolState` layout.** Code that directly reads `VirtualPool` fields must migrate from flat fields like `pool.config`, `pool.baseMint`, `pool.quoteReserve`, `pool.sqrtPrice`, and `pool.metrics` to `pool.poolState.config`, `pool.poolState.baseMint`, `pool.poolState.quoteReserve`, `pool.poolState.sqrtPrice`, and `pool.poolState.metrics`.
  * **`TokenType.SPL` was renamed to `TokenType.SPLToken`.** The enum value remains `0`, but TypeScript callers must update the enum member name.
  * **`TokenUpdateAuthorityOption` was renamed to `TokenAuthorityOption`.** Update imports and references.
  * **`TokenConfig.tokenUpdateAuthority` was renamed to `tokenAuthorityOption` for all `buildCurve*` helpers.** The helper still maps this value to the on-chain `tokenUpdateAuthority` config field.
  * **`PreCreatePoolParams` was renamed to `CreatePoolBaseParams`.** Update imports and any explicit type annotations.
  * **The old no-`tempWSolAcc` trading fee claim types were renamed.**
    * `ClaimTradingFeeParams` -> `ClaimPartnerTradingFeeParams`
    * `ClaimTradingFee2Params` -> `ClaimPartnerTradingFeeToReceiverParams`
    * `ClaimCreatorTradingFee2Params` -> `ClaimCreatorTradingFeeToReceiverParams`
  * **The old `claimPartnerTradingFee2` and `claimCreatorTradingFee2` non-transfer-hook behavior moved to `claimPartnerTradingFeeToReceiver` and `claimCreatorTradingFeeToReceiver`.** In `1.5.8`, `claimPartnerTradingFee2` and `claimCreatorTradingFee2` build transfer-hook fee claim instructions and should be used only for transfer-hook pools.
  * **`createVaultProgram` was renamed to `createDynamicVaultProgram`.** Update helper imports.
  * **`StateService.getDammV1LockEscrow` was removed.** Consumers that need lock escrow data must fetch it through the relevant generated program client.
  * **`LockEscrow` now 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`.** Replace `marketCapFeeSchedulerParams.startingMarketCap` and `marketCapFeeSchedulerParams.endingMarketCap` with `marketCapFeeSchedulerParams.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.
</Update>

<Update label="dynamic-bonding-curve 0.1.10" description="Migrate to DAMM v2 Inner Positions + DAMM v2 Compounding Fee" rss="DBC dynamic-bonding-curve 0.1.10 migrates DAMM v2 vesting to inner positions and adds DAMM v2 compounding fee pool support, with event parsing and bonding curve configuration updates. SDK 1.5.6.">
  <Info>
    Mainnet deployment for Release 0.1.10 is planned for March 16, 2026, at 11:00 AM UTC+8 (Monday).
  </Info>

  ## Release summary

  | Component      | Version  | PR                                                                                                |
  | -------------- | -------- | ------------------------------------------------------------------------------------------------- |
  | Program        | `0.1.10` | [dynamic-bonding-curve #174](https://github.com/MeteoraAg/dynamic-bonding-curve/pull/174)         |
  | TypeScript SDK | `1.5.7`  | [dynamic-bonding-curve-sdk #101](https://github.com/MeteoraAg/dynamic-bonding-curve-sdk/pull/101) |

  ## What We Shipped

  * Migrate to DAMM v2 Inner Positions
  * Migrate to DAMM v2 Compounding Fee Pool

  ## What To Do

  <div style={{overflowX: 'auto', marginBottom: '1.5rem'}}>
    <table>
      <thead>
        <tr>
          <th>Integrators</th>
          <th>What Changed</th>
          <th>What To Do</th>
        </tr>
      </thead>

      <tbody>
        <tr>
          <td><strong>Trading Terminals</strong></td>

          <td>
            <ul>
              <li><code>EvtPartnerClaimPoolCreationFee</code> event parsing</li>
            </ul>
          </td>

          <td>
            <ul>
              <li>The <code>EvtPartnerClaimPoolCreationFee</code> event now includes a fee\_receiver field. Partners parsing/indexing this event must update their deserialization.</li>
            </ul>
          </td>
        </tr>

        <tr>
          <td><strong>Partners</strong></td>

          <td>
            <ul>
              <li>Bonding Curve Configuration Updates</li>
            </ul>
          </td>

          <td>
            <ul>
              <li>Bump your SDK version to <code>@meteora-ag/dynamic-bonding-curve-sdk\@1.5.5-rc.0</code> to start testing.</li>
              <li>Optionally update your bonding curve configuration to enable compounding fee mode by passing <code>migrated\_pool\_fee.collect\_fee\_mode: 2</code> and <code>compounding\_fee\_bps: 1-10\_000</code> field in <code>ConfigParameters</code></li>
            </ul>
          </td>
        </tr>
      </tbody>
    </table>
  </div>

  ## Program: `dynamic-bonding-curve` `0.1.10`

  Program ID (mainnet and devnet): `dbcij3LWUppWqq96dh6gJWwBifmcGfLSB5D4DuSMaqN`

  [Program PR #174](https://github.com/MeteoraAg/dynamic-bonding-curve/pull/174)

  ### Added

  * Add new endpoint `create_operator_account` and `close_operator_account` that allows admin to manage different operator accounts.
  * Add new account `Operator`, that would stores `whitelisted_address` as well as their operational permissions
  * Add new endpoint `zap_protocol_fee` that 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 the `create_config` endpoint by passing `migrated_pool_fee.collect_fee_mode: 2` and `compounding_fee_bps: 1-10_000` field in `ConfigParameters`

  ### 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_operator` endpoint in favor of `create_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 #98](https://github.com/MeteoraAg/dynamic-bonding-curve-sdk/pull/98)

  <Tip>
    Early testing: [`@meteora-ag/dynamic-bonding-curve-sdk@1.5.5-rc.0`](https://www.npmjs.com/package/@meteora-ag/dynamic-bonding-curve-sdk/v/1.5.5-rc.0).<br /> Production: [`@meteora-ag/dynamic-bonding-curve-sdk@1.5.6`](https://www.npmjs.com/package/@meteora-ag/dynamic-bonding-curve-sdk/v/1.5.6).
  </Tip>

  ### Added

  * Added `MigratedCollectFeeMode` enum with `Compounding` (2) support for migrated DAMM v2 pool configuration.
  * Added `compoundingFeeBps` support in `MigratedPoolFeeConfig` and propagated it through all `buildCurve*` helpers.

  ### Changed

  * Updated migrated pool fee validation to require `compoundingFeeBps > 0` only when `collectFeeMode = MigratedCollectFeeMode.Compounding`, and `0` otherwise.
  * Updated migration flow for DAMM v2 to remove position vesting accounts from `migrateDammV2` remaining accounts.
  * Removed `deriveDammV2PositionVestingAccount` PDA helper.
</Update>
