Skip to main content

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.

Transfer-hook pools are Token 2022 DBC launches where the base mint has an active transfer hook during bonding-curve trading. Use this path when a launch needs token-transfer logic during the DBC phase, such as allowlist checks or transfer accounting that lives in a separate transfer-hook program. The hook is a pre-migration feature. When the curve completes, DBC revokes the transfer-hook program and transfer-hook authority from the base mint so the token can graduate to DAMM v2 liquidity.

Account Model

Transfer-hook launches use separate account discriminators while keeping the same core config and pool fields.
AccountWhat It Stores
ConfigWithTransferHookA PoolConfig plus the executable transfer_hook_program configured by the partner.
TransferHookPoolA PoolState for the launched pool. It has the same fields as a standard VirtualPool, but a different discriminator.
The TypeScript SDK’s state service fetches both account families. client.state.getPoolConfig, getPoolConfigs, getPool, and pool list helpers return normalized config and pool shapes for both standard and transfer-hook accounts.

Launch Rules

RuleBehavior
Base token typeTransfer-hook configs must use Token2022.
Migration targetUse DAMM v2. DAMM v1 does not support Token 2022 launches.
Transfer hook programMust be executable and cannot be the DBC program, SPL Token program, Token 2022 program, or the default pubkey.
Config instructionUse create_config_with_transfer_hook, or the SDK’s client.partner.createConfigWithTransferHook.
Pool instructionUse initialize_virtual_pool_with_token2022_transfer_hook, or the SDK’s client.creator.createPoolWithTransferHook.
Transfer hook authorityDBC initializes the base mint with the pool authority as transfer-hook authority.
Mint authority optionsCreatorUpdateAndMintAuthority and PartnerUpdateAndMintAuthority are only valid for transfer-hook configs. Standard configs reject those options.

Trading

Transfer-hook pools must use the transfer-hook swap path.
Pool TypeSwap Path
Standard VirtualPoolswap or swap2; SDK: client.pool.swap or client.pool.swap2.
TransferHookPoolswap2_with_transfer_hook; SDK: client.pool.swap2WithTransferHook.
swap2_with_transfer_hook supports the same swap modes as swap2: exact in, partial fill, and exact out. It also accepts TransferHookAccountsInfo, which describes how the remaining accounts are sliced for the transfer-hook CPI.
Remaining Account SliceUse
TransferHookBaseExtra accounts for base-token transfers between the user and the pool.
TransferHookBaseReferralExtra accounts for referral transfers when referral fees are paid in the base token.
If a transfer-hook pool is sent through a standard swap instruction, the program returns PoolTypeMismatch. If transfer-hook remaining accounts are missing, malformed, duplicated, or use the wrong slice type, the transfer fails before token movement.

Fee Claims

Transfer-hook pools also use transfer-hook-aware trading fee claim paths.
Claim TypeProgram InstructionSDK Method
Partner trading feesclaim_trading_fee2client.partner.claimPartnerTradingFee2
Creator trading feesclaim_creator_trading_fee2client.creator.claimCreatorTradingFee2
For standard pools, use claim_trading_fee / claim_creator_trading_fee, or the SDK’s claimPartnerTradingFee, claimPartnerTradingFeeToReceiver, claimCreatorTradingFee, and claimCreatorTradingFeeToReceiver methods.

Completion And Migration

Transfer hooks are active only while the pool is trading on the bonding curve. When a transfer-hook pool reaches the configured migration quote threshold, DBC:
  1. Marks the curve complete.
  2. Moves the pool to PostBondingCurve when locked vesting is configured, or LockedVesting otherwise.
  3. Revokes the transfer-hook program id and transfer-hook authority from the base mint.
  4. Emits EvtCurveCompleteWithTransferHook.
After that, the pool follows the normal DAMM v2 migration flow. The migrated DAMM v2 pool receives a Token 2022 mint without an active transfer hook.

Events

Indexers should handle the transfer-hook-specific event variants.
EventUse
EvtCreateConfigV2WithTransferHookIndex transfer-hook configs and their transfer_hook_program.
EvtInitializePoolWithTransferHookIndex transfer-hook pool creation.
EvtSwap2WithTransferHookTrack transfer-hook swaps, quote progress, fees, and partial fills.
EvtCurveCompleteWithTransferHookMark transfer-hook pool completion and hook revocation.
See DBC Program Events for the full event table.