CCIP v2.0.0 IPoolV2 API Reference

IPoolV2 defines the interface for CCIP V2 token pools.

If you implement this interface, you define how tokens are locked, burned, released, or minted during cross-chain transfers, along with how fees, verification requirements, and finality constraints are applied.

Compared to V1, this interface adds:

  • finality configuration (requestedFinalityConfig)
  • verifier selection (getRequiredCCVs)
  • fee and gas configuration surfaces

requestedFinalityConfig specifies the desired finality or confirmation guarantees for the transfer.

Most applications do not interact with this interface directly. It is implemented by pool contracts used within CCIP infrastructure.

Usage Boundary

You typically do not use this interface directly.

  • CCIP pools implement this interface to define token transfer behavior.
  • OnRamp and OffRamp components call these functions during cross-chain execution.
  • You implement this interface only if you are building a custom token pool.
  • You are responsible for validation, authorization, and correct token handling.

Contract

interfaces/IPoolV2.sol

Import

import {IPoolV2} from "chainlink-ccip/interfaces/IPoolV2.sol";

If you have not installed the package:

npm install @chainlink/contracts-ccip@2.0.0

Inheritance

  • IERC165

External API

lockOrBurn

function lockOrBurn(
  Pool.LockOrBurnInV1 calldata lockOrBurnIn,
  bytes4 requestedFinalityConfig,
  bytes calldata tokenArgs
) external returns (
  Pool.LockOrBurnOutV1 memory lockOrBurnOut,
  uint256 destTokenAmount
)

Locks or burns tokens on the source chain and prepares data for destination execution.

ParameterTypeDescription
lockOrBurnInPool.LockOrBurnInV1 calldataInput describing the token transfer.
requestedFinalityConfigbytes4Requested finality level for the transfer.
tokenArgsbytes calldataAdditional token-specific configuration.

Returns:

TypeDescription
Pool.LockOrBurnOutV1 memoryData required for destination handling.
uint256Destination token amount after processing.

releaseOrMint

function releaseOrMint(
  Pool.ReleaseOrMintInV1 calldata releaseOrMintIn,
  bytes4 requestedFinalityConfig
) external returns (
  Pool.ReleaseOrMintOutV1 memory releaseOrMintOut
)

Releases or mints tokens on the destination chain.

ParameterTypeDescription
releaseOrMintInPool.ReleaseOrMintInV1 calldataInput describing the operation.
requestedFinalityConfigbytes4Finality configuration applied during execution.

Returns:

TypeDescription
Pool.ReleaseOrMintOutV1 memoryResult of the operation.

getRequiredCCVs

function getRequiredCCVs(
  address localToken,
  uint64 remoteChainSelector,
  uint256 sourceAmount,
  bytes4 requestedFinalityConfig,
  bytes calldata extraData,
  MessageDirection direction
) external view returns (
  address[] memory requiredCCVs
)

Returns the set of verifiers required to validate a transfer based on token, amount, and finality requirements.

ParameterTypeDescription
localTokenaddressToken being transferred.
remoteChainSelectoruint64Destination or source chain.
sourceAmountuint256Amount being transferred.
requestedFinalityConfigbytes4Requested finality level.
extraDatabytes calldataAdditional configuration data.
directionMessageDirectionDirection of transfer (inbound/outbound).

Returns:

TypeDescription
address[] memoryRequired verifier contract addresses.

getTokenTransferFeeConfig

function getTokenTransferFeeConfig(
  address localToken,
  uint64 destChainSelector,
  bytes4 requestedFinalityConfig,
  bytes calldata tokenArgs
) external view returns (
  TokenTransferFeeConfig memory feeConfig
)

Returns fee configuration for a token transfer.

ParameterTypeDescription
localTokenaddressToken being transferred.
destChainSelectoruint64Destination chain.
requestedFinalityConfigbytes4Requested finality level.
tokenArgsbytes calldataAdditional configuration.

Returns:

TypeDescription
TokenTransferFeeConfigFee configuration struct.

getFee

function getFee(
  address localToken,
  uint64 destChainSelector,
  uint256 amount,
  address feeToken,
  bytes4 requestedFinalityConfig,
  bytes calldata tokenArgs
) external view returns (
  uint256 feeUSDCents,
  uint32 destGasOverhead,
  uint32 destBytesOverhead,
  uint16 tokenFeeBps,
  bool isEnabled
)

Returns detailed fee information for a transfer.

ParameterTypeDescription
localTokenaddressToken being transferred.
destChainSelectoruint64Destination chain.
amountuint256Transfer amount.
feeTokenaddressToken used to pay fees.
requestedFinalityConfigbytes4Requested finality level.
tokenArgsbytes calldataAdditional configuration.

Returns:

TypeDescription
uint256Fee value denominated in USD cents (used for internal pricing).
uint32Destination gas overhead.
uint32Destination calldata overhead.
uint16Token fee in basis points.
boolWhether transfers are enabled.
  • If isEnabled is false, transfers for the given configuration are not allowed.

getRemoteToken

function getRemoteToken(uint64 remoteChainSelector) external view returns (bytes memory)

Returns the representation of the token on the remote chain.

ParameterTypeDescription
remoteChainSelectoruint64Remote chain identifier.

Returns:

TypeDescription
bytes memoryEncoded representation of the token on the remote chain.

Notes

  • This interface does not enforce validation or authorization logic.
  • Implementations define how tokens are locked, burned, released, or minted.
  • Implementations must ensure only authorized CCIP components can trigger token movements.
  • Fee calculations depend on the exact input parameters. Changing the message or token configuration requires re-quoting the fee.
  • V2 interfaces introduce configurable verification and finality, which are not present in V1.
  • Incorrect implementation can result in loss of funds or inconsistent cross-chain state.

Get the latest Chainlink content straight to your inbox.