API Version: v1.6.0

CCIP v1.6.0 SVM BurnMint Token Pool API Reference

BurnMint Token Pool

Below is a complete API reference for the CCIP BurnMint Token Pool program instructions. This pool implementation burns tokens on the source chain and mints them on the destination chain.

Global Configuration

These instructions manage the global configuration of the BurnMint Token Pool program.

init_global_config

Initializes the global configuration for the BurnMint Token Pool program. This must be called once during initial setup.

fn init_global_config(
    ctx: Context<InitGlobalConfig>,
    router_address: Pubkey,
    rmn_address: Pubkey,
) -> Result<()>;
Parameters
NameTypeDescription
router_addressPubkeyThe default CCIP Router program address
rmn_addressPubkeyThe default RMN Remote program address
Context (Accounts)
FieldTypeWritable?Description
configAccount<PoolConfig>YesGlobal pool config PDA to initialize.
Derivation: ["config"] under this program.
authoritySigner<'info>YesMust be the program upgrade authority.
system_programProgram<'info, System>NoStandard System Program.
programProgram<'info, BurnmintTokenPool>NoThe BurnMint Token Pool program.
program_dataAccount<'info, ProgramData>NoProgram data account for upgrade authority verification.
Authorization
  • Caller: Must be the program upgrade authority

update_self_served_allowed

Updates whether self-service pool initialization is allowed.

fn update_self_served_allowed(
    ctx: Context<UpdateGlobalConfig>,
    self_served_allowed: bool,
) -> Result<()>;
Parameters
NameTypeDescription
self_served_allowedboolWhether mint authorities can initialize their own pools
Context (Accounts)
FieldTypeWritable?Description
configAccount<PoolConfig>YesGlobal pool config PDA.
Derivation: ["config"] under this program.
authoritySigner<'info>NoMust be the program upgrade authority.
programProgram<'info, BurnmintTokenPool>NoThe BurnMint Token Pool program.
program_dataAccount<'info, ProgramData>NoProgram data account for upgrade authority verification.
Authorization
  • Caller: Must be the program upgrade authority

update_default_router

Updates the default router address used for new token pools.

fn update_default_router(
    ctx: Context<UpdateGlobalConfig>,
    router_address: Pubkey,
) -> Result<()>;
Parameters
NameTypeDescription
router_addressPubkeyThe new default CCIP Router program address
Context (Accounts)

Same as update_self_served_allowed.

Authorization
  • Caller: Must be the program upgrade authority

update_default_rmn

Updates the default RMN Remote address used for new token pools.

fn update_default_rmn(
    ctx: Context<UpdateGlobalConfig>,
    rmn_address: Pubkey,
) -> Result<()>;
Parameters
NameTypeDescription
rmn_addressPubkeyThe new default RMN Remote program address
Context (Accounts)

Same as update_self_served_allowed.

Authorization
  • Caller: Must be the program upgrade authority

Pool Initialization & Management

These instructions handle individual token pool lifecycle management.

initialize

Initializes a new token pool for a specific SPL token mint.

fn initialize(ctx: Context<InitializeTokenPool>) -> Result<()>;
Parameters

This instruction takes no additional parameters.

Context (Accounts)
FieldTypeWritable?Description
stateAccount<State>YesPool state PDA to initialize.
Derivation: ["ccip_tokenpool_config", mint] under this program.
mintInterfaceAccount<'info, Mint>NoThe SPL token mint to create a pool for.
authoritySigner<'info>YesPool initializer (see Authorization below).
system_programProgram<'info, System>NoStandard System Program.
programProgram<'info, BurnmintTokenPool>NoThe BurnMint Token Pool program.
program_dataAccount<'info, ProgramData>NoProgram data account for upgrade authority verification.
configAccount<PoolConfig>NoGlobal pool config PDA.
Derivation: ["config"] under this program.
Authorization
  • Program Upgrade Authority: Can always initialize pools
  • Mint Authority: Can initialize pools when self_served_allowed is true

transfer_mint_authority_to_multisig

Transfers the mint authority of the token to a multisig account that includes the pool signer as a required signer.

fn transfer_mint_authority_to_multisig(
    ctx: Context<TransferMintAuthority>,
) -> Result<()>;
Parameters

This instruction takes no additional parameters.

Context (Accounts)
FieldTypeWritable?Description
stateAccount<State>YesPool state PDA.
Derivation: ["ccip_tokenpool_config", mint] under this program.
mintInterfaceAccount<'info, Mint>YesThe SPL token mint.
token_programInterface<'info, TokenInterface>NoToken program (SPL Token or Token-2022).
pool_signerUncheckedAccount<'info>NoPool signer PDA.
Derivation: ["ccip_tokenpool_signer", mint] under this program.
authoritySigner<'info>NoMust be the program upgrade authority.
new_multisig_mint_authorityUncheckedAccount<'info>NoThe new multisig account that will become the mint authority.
programProgram<'info, BurnmintTokenPool>NoThe BurnMint Token Pool program.
program_dataAccount<'info, ProgramData>NoProgram data account for upgrade authority verification.
Authorization
  • Caller: Must be the program upgrade authority
Multisig Requirements
  • Must have at least 2 total signers
  • Must require at least 1 signature (threshold ≄ 1)
  • Pool signer must appear at least threshold times as a signer
  • Pool signer must not appear more than (total_signers - threshold) times

transfer_ownership

Initiates transfer of pool ownership to a new owner.

fn transfer_ownership(
    ctx: Context<SetConfig>,
    proposed_owner: Pubkey,
) -> Result<()>;
Parameters
NameTypeDescription
proposed_ownerPubkeyThe public key of the proposed new owner
Context (Accounts)
FieldTypeWritable?Description
stateAccount<State>YesPool state PDA.
Derivation: ["ccip_tokenpool_config", mint] under this program.
mintInterfaceAccount<'info, Mint>NoThe SPL token mint.
authoritySigner<'info>NoMust be the current pool owner.
Authorization
  • Caller: Must be the current pool owner

accept_ownership

Accepts pool ownership by the proposed owner.

fn accept_ownership(ctx: Context<AcceptOwnership>) -> Result<()>;
Parameters

This instruction takes no additional parameters.

Context (Accounts)
FieldTypeWritable?Description
stateAccount<State>YesPool state PDA.
Derivation: ["ccip_tokenpool_config", mint] under this program.
mintInterfaceAccount<'info, Mint>NoThe SPL token mint.
authoritySigner<'info>NoMust be the proposed owner.
Authorization
  • Caller: Must be the proposed owner stored in the pool state

set_router

Updates the router address for an existing pool.

fn set_router(
    ctx: Context<AdminUpdateTokenPool>,
    new_router: Pubkey,
) -> Result<()>;
Parameters
NameTypeDescription
new_routerPubkeyThe new CCIP Router program address
Context (Accounts)
FieldTypeWritable?Description
stateAccount<State>NoPool state PDA.
Derivation: ["ccip_tokenpool_config", mint] under this program.
mintInterfaceAccount<'info, Mint>NoThe SPL token mint.
authoritySigner<'info>YesMust be program upgrade authority and pool owner.
programProgram<'info, BurnmintTokenPool>NoThe BurnMint Token Pool program.
program_dataAccount<'info, ProgramData>NoProgram data account for upgrade authority verification.
Authorization
  • Caller: Must be the program upgrade authority AND the pool owner

set_rmn

Updates the RMN Remote address for an existing pool.

fn set_rmn(
    ctx: Context<AdminUpdateTokenPool>,
    rmn_address: Pubkey,
) -> Result<()>;
Parameters
NameTypeDescription
rmn_addressPubkeyThe new RMN Remote program address
Context (Accounts)

Same as set_router.

Authorization
  • Caller: Must be the program upgrade authority AND the pool owner

Chain Configuration

These instructions manage per-destination-chain configuration for token pools.

init_chain_remote_config

Initializes configuration for a specific remote destination chain.

fn init_chain_remote_config(
    ctx: Context<InitializeChainConfig>,
    remote_chain_selector: u64,
    mint: Pubkey,
    cfg: RemoteConfig,
) -> Result<()>;
Parameters
NameTypeDescription
remote_chain_selectoru64The destination chain selector
mintPubkeyThe SPL token mint
cfgRemoteConfigRemote chain configuration (must have empty pool addresses)
Context (Accounts)
FieldTypeWritable?Description
stateAccount<State>NoPool state PDA.
Derivation: ["ccip_tokenpool_config", mint] under this program.
chain_configAccount<ChainConfig>YesChain config PDA to initialize.
Derivation: ["ccip_tokenpool_chainconfig", remote_chain_selector, mint] under this program.
authoritySigner<'info>YesMust be the pool owner.
system_programProgram<'info, System>NoStandard System Program.
Authorization
  • Caller: Must be the pool owner

edit_chain_remote_config

Updates configuration for an existing remote destination chain.

fn edit_chain_remote_config(
    ctx: Context<EditChainConfigDynamicSize>,
    remote_chain_selector: u64,
    mint: Pubkey,
    cfg: RemoteConfig,
) -> Result<()>;
Parameters
NameTypeDescription
remote_chain_selectoru64The destination chain selector
mintPubkeyThe SPL token mint
cfgRemoteConfigUpdated remote chain configuration
Context (Accounts)
FieldTypeWritable?Description
stateAccount<State>NoPool state PDA.
Derivation: ["ccip_tokenpool_config", mint] under this program.
chain_configAccount<ChainConfig>YesExisting chain config PDA.
Derivation: ["ccip_tokenpool_chainconfig", remote_chain_selector, mint] under this program.
authoritySigner<'info>YesMust be the pool owner.
system_programProgram<'info, System>NoStandard System Program.
Authorization
  • Caller: Must be the pool owner

append_remote_pool_addresses

Adds additional remote pool addresses to an existing chain configuration.

fn append_remote_pool_addresses(
    ctx: Context<AppendRemotePoolAddresses>,
    remote_chain_selector: u64,
    mint: Pubkey,
    addresses: Vec<RemoteAddress>,
) -> Result<()>;
Parameters
NameTypeDescription
remote_chain_selectoru64The destination chain selector
mintPubkeyThe SPL token mint
addressesVec<RemoteAddress>Remote pool addresses to add
Context (Accounts)

Same as edit_chain_remote_config.

Authorization
  • Caller: Must be the pool owner

set_chain_rate_limit

Configures rate limits for inbound and outbound transfers to/from a specific chain.

fn set_chain_rate_limit(
    ctx: Context<SetChainRateLimit>,
    remote_chain_selector: u64,
    mint: Pubkey,
    inbound: RateLimitConfig,
    outbound: RateLimitConfig,
) -> Result<()>;
Parameters
NameTypeDescription
remote_chain_selectoru64The destination chain selector
mintPubkeyThe SPL token mint
inboundRateLimitConfigRate limit configuration for inbound transfers
outboundRateLimitConfigRate limit configuration for outbound transfers
Context (Accounts)
FieldTypeWritable?Description
stateAccount<State>NoPool state PDA.
Derivation: ["ccip_tokenpool_config", mint] under this program.
chain_configAccount<ChainConfig>YesChain config PDA.
Derivation: ["ccip_tokenpool_chainconfig", remote_chain_selector, mint] under this program.
authoritySigner<'info>YesMust be pool owner or rate limit admin.
Authorization
  • Caller: Must be the pool owner OR the rate limit admin

delete_chain_config

Removes configuration for a specific remote destination chain.

fn delete_chain_config(
    ctx: Context<DeleteChainConfig>,
    remote_chain_selector: u64,
    mint: Pubkey,
) -> Result<()>;
Parameters
NameTypeDescription
remote_chain_selectoru64The destination chain selector
mintPubkeyThe SPL token mint
Context (Accounts)
FieldTypeWritable?Description
stateAccount<State>NoPool state PDA.
Derivation: ["ccip_tokenpool_config", mint] under this program.
chain_configAccount<ChainConfig>YesChain config PDA to delete.
Derivation: ["ccip_tokenpool_chainconfig", remote_chain_selector, mint] under this program.
authoritySigner<'info>YesMust be the pool owner.
Authorization
  • Caller: Must be the pool owner

Access Control

These instructions manage allowlists for token transfers.

configure_allow_list

Configures the allowlist for the token pool, adding addresses and enabling/disabling the allowlist.

fn configure_allow_list(
    ctx: Context<AddToAllowList>,
    add: Vec<Pubkey>,
    enabled: bool,
) -> Result<()>;
Parameters
NameTypeDescription
addVec<Pubkey>Addresses to add to the allowlist
enabledboolWhether to enable the allowlist
Context (Accounts)
FieldTypeWritable?Description
stateAccount<State>YesPool state PDA.
Derivation: ["ccip_tokenpool_config", mint] under this program.
mintInterfaceAccount<'info, Mint>NoThe SPL token mint.
authoritySigner<'info>YesMust be the pool owner.
system_programProgram<'info, System>NoStandard System Program.
Authorization
  • Caller: Must be the pool owner

remove_from_allow_list

Removes addresses from the allowlist.

fn remove_from_allow_list(
    ctx: Context<RemoveFromAllowlist>,
    remove: Vec<Pubkey>,
) -> Result<()>;
Parameters
NameTypeDescription
removeVec<Pubkey>Addresses to remove from the allowlist
Context (Accounts)

Same as configure_allow_list.

Authorization
  • Caller: Must be the pool owner

Cross-Chain Operations

These instructions handle the core cross-chain token transfer operations.

lock_or_burn_tokens

Burns tokens on the source chain as part of a cross-chain transfer (OnRamp operation).

fn lock_or_burn_tokens(
    ctx: Context<TokenOnramp>,
    lock_or_burn: LockOrBurnInV1,
) -> Result<LockOrBurnOutV1>;
Parameters
NameTypeDescription
lock_or_burnLockOrBurnInV1Cross-chain transfer request data
Return Value
TypeDescription
LockOrBurnOutV1Contains destination token address and pool data
Context (Accounts)
FieldTypeWritable?Description
authoritySigner<'info>NoMust be the Router's onramp authority.
stateAccount<State>NoPool state PDA.
Derivation: ["ccip_tokenpool_config", mint] under this program.
token_programInterface<'info, TokenInterface>NoToken program (SPL Token or Token-2022).
mintInterfaceAccount<'info, Mint>YesThe SPL token mint.
pool_signerUncheckedAccount<'info>NoPool signer PDA.
Derivation: ["ccip_tokenpool_signer", mint] under this program.
pool_token_accountInterfaceAccount<'info, TokenAccount>YesPool's token account (ATA for pool_signer).
rmn_remoteUncheckedAccount<'info>NoRMN Remote program address.
rmn_remote_cursesUncheckedAccount<'info>NoRMN curses PDA.
rmn_remote_configUncheckedAccount<'info>NoRMN config PDA.
chain_configAccount<ChainConfig>YesChain config PDA.
Derivation: ["ccip_tokenpool_chainconfig", remote_chain_selector, mint] under this program.
Authorization
  • Caller: Must be the Router's designated onramp authority

release_or_mint_tokens

Mints tokens on the destination chain as part of a cross-chain transfer (OffRamp operation).

fn release_or_mint_tokens(
    ctx: Context<TokenOfframp>,
    release_or_mint: ReleaseOrMintInV1,
) -> Result<ReleaseOrMintOutV1>;
Parameters
NameTypeDescription
release_or_mintReleaseOrMintInV1Cross-chain transfer completion data
Return Value
TypeDescription
ReleaseOrMintOutV1Contains the destination amount minted
Context (Accounts)
FieldTypeWritable?Description
authoritySigner<'info>NoOfframp authority derived from external token pools signer.
offramp_programUncheckedAccount<'info>NoThe offramp program for PDA derivation.
allowed_offrampUncheckedAccount<'info>NoRouter's allowed offramp PDA.
stateAccount<State>NoPool state PDA.
Derivation: ["ccip_tokenpool_config", mint] under this program.
token_programInterface<'info, TokenInterface>NoToken program (SPL Token or Token-2022).
mintInterfaceAccount<'info, Mint>YesThe SPL token mint.
pool_signerUncheckedAccount<'info>NoPool signer PDA.
Derivation: ["ccip_tokenpool_signer", mint] under this program.
pool_token_accountInterfaceAccount<'info, TokenAccount>YesPool's token account (ATA for pool_signer).
chain_configAccount<ChainConfig>YesChain config PDA.
Derivation: ["ccip_tokenpool_chainconfig", remote_chain_selector, mint] under this program.
rmn_remoteUncheckedAccount<'info>NoRMN Remote program address.
rmn_remote_cursesUncheckedAccount<'info>NoRMN curses PDA.
rmn_remote_configUncheckedAccount<'info>NoRMN config PDA.
receiver_token_accountInterfaceAccount<'info, TokenAccount>YesReceiver's token account (ATA for the recipient).
Authorization
  • Caller: Must be an authorized offramp with valid Router approval

Utility Instructions

type_version

Returns the program type and version information.

fn type_version(ctx: Context<Empty>) -> Result<String>;
Parameters

This instruction takes no additional parameters.

Return Value
TypeDescription
StringProgram type and version information

initialize_state_version

Permissionless instruction to initialize the state version for pools that were created before versioning was implemented.

fn initialize_state_version(
    ctx: Context<InitializeStateVersion>,
    mint: Pubkey,
) -> Result<()>;
Parameters
NameTypeDescription
mintPubkeyThe SPL token mint
Context (Accounts)
FieldTypeWritable?Description
stateAccount<State>YesPool state PDA with uninitialized version.
Derivation: ["ccip_tokenpool_config", mint] under this program.
Authorization
  • Permissionless: Anyone can call this instruction

Get the latest Chainlink content straight to your inbox.