CCIP v2.0.0 BurnToAddressMintTokenPool API Reference
BurnToAddressMintTokenPool is a TokenPool implementation that transfers tokens to a designated burn address on the source chain and mints tokens on the destination chain.
If you use this pool, tokens are not burned through the token contract. Instead, they are transferred to a specified address that serves as a burn address.
This approach does not rely on token-level burn functionality and instead depends on the properties of the chosen burn address to remove tokens from circulation.
Use this variant when your token does not support burn or burnFrom, and you need to remove tokens from circulation by sending them to a designated address.
This contract is not intended to be called directly by applications. It is used by CCIP infrastructure during token transfers.
Usage Boundary
You do not call this contract directly.
- The Router and OnRamp/OffRamp contracts invoke this pool during cross-chain token transfers.
- You choose this pool when configuring how a token is bridged across chains.
- Use this pool only if your token does not support direct burn mechanisms.
- Prefer
BurnMintTokenPoolorBurnFromMintTokenPoolif your token supportsburnorburnFrom. - You are responsible for selecting a burn address that correctly removes tokens from circulation.
Contract
pools/BurnToAddressMintTokenPool.sol
Import
import {BurnToAddressMintTokenPool} from "chainlink-ccip/pools/BurnToAddressMintTokenPool.sol";
If you have not installed the package:
npm install @chainlink/contracts-ccip@2.0.0
Inheritance
BurnMintTokenPoolAbstractITypeAndVersion
Constructor
constructor(
IBurnMintERC20 token,
uint8 localTokenDecimals,
address advancedPoolHooks,
address rmnProxy,
address router,
address burnAddress
) TokenPool(
token,
localTokenDecimals,
advancedPoolHooks,
rmnProxy,
router
)
| Parameter | Type | Description |
|---|---|---|
token | IBurnMintERC20 | Token being bridged. |
localTokenDecimals | uint8 | Number of decimals used by the token on the local chain. |
advancedPoolHooks | address | Optional hook contract for custom pool behavior. |
rmnProxy | address | RMN proxy used for curse checks. |
router | address | Address of the CCIP Router that interacts with this pool. |
burnAddress | address | Address that receives tokens and acts as the burn address. |
External API
getBurnAddress
function getBurnAddress() public view returns (address burnAddress)
Returns the configured burn address.
Returns:
| Type | Description |
|---|---|
address | Address used as the burn sink. |
typeAndVersion
function typeAndVersion() external pure virtual override returns (string memory)
Returns:
| Type | Description |
|---|---|
string memory | Contract type and version identifier. |
Events
No new events declared.
For a cross-contract event index, see Events.
Errors
No new custom errors declared.
For a cross-contract error index, see Errors.
Internal Functions
_lockOrBurn
function _lockOrBurn(
uint64 /* remoteChainSelector */,
uint256 amount
) internal override
Transfers tokens from the sender to the configured burn address.
- Tokens are transferred to the configured burn address instead of being burned by the token contract.
_releaseOrMint
Inherited from BurnMintTokenPoolAbstract.
Mints tokens to the receiver on the destination chain.
Security model
- Tokens are only effectively burned if the configured burn address is irrecoverable.
- If the burn address is externally controlled or recoverable, tokens can be reclaimed and are not permanently removed from circulation.
- Only authorized CCIP components (OnRamp and OffRamp) can trigger token movements.
Notes
- Tokens are transferred to the burn address rather than burned via the token contract.
- The burn address is a critical configuration decision and cannot be changed without deploying a new pool.
- You must choose a burn address that cannot access or recover the tokens (for example, a provably unspendable address).
- Common burn addresses include
0x000000000000000000000000000000000000dEaD. - If your token supports direct
burn(amount)orburnFrom, preferBurnMintTokenPoolorBurnFromMintTokenPool.