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.
| Parameter | Type | Description |
|---|---|---|
lockOrBurnIn | Pool.LockOrBurnInV1 calldata | Input describing the token transfer. |
requestedFinalityConfig | bytes4 | Requested finality level for the transfer. |
tokenArgs | bytes calldata | Additional token-specific configuration. |
Returns:
| Type | Description |
|---|---|
Pool.LockOrBurnOutV1 memory | Data required for destination handling. |
uint256 | Destination 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.
| Parameter | Type | Description |
|---|---|---|
releaseOrMintIn | Pool.ReleaseOrMintInV1 calldata | Input describing the operation. |
requestedFinalityConfig | bytes4 | Finality configuration applied during execution. |
Returns:
| Type | Description |
|---|---|
Pool.ReleaseOrMintOutV1 memory | Result 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.
| Parameter | Type | Description |
|---|---|---|
localToken | address | Token being transferred. |
remoteChainSelector | uint64 | Destination or source chain. |
sourceAmount | uint256 | Amount being transferred. |
requestedFinalityConfig | bytes4 | Requested finality level. |
extraData | bytes calldata | Additional configuration data. |
direction | MessageDirection | Direction of transfer (inbound/outbound). |
Returns:
| Type | Description |
|---|---|
address[] memory | Required 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.
| Parameter | Type | Description |
|---|---|---|
localToken | address | Token being transferred. |
destChainSelector | uint64 | Destination chain. |
requestedFinalityConfig | bytes4 | Requested finality level. |
tokenArgs | bytes calldata | Additional configuration. |
Returns:
| Type | Description |
|---|---|
TokenTransferFeeConfig | Fee 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.
| Parameter | Type | Description |
|---|---|---|
localToken | address | Token being transferred. |
destChainSelector | uint64 | Destination chain. |
amount | uint256 | Transfer amount. |
feeToken | address | Token used to pay fees. |
requestedFinalityConfig | bytes4 | Requested finality level. |
tokenArgs | bytes calldata | Additional configuration. |
Returns:
| Type | Description |
|---|---|
uint256 | Fee value denominated in USD cents (used for internal pricing). |
uint32 | Destination gas overhead. |
uint32 | Destination calldata overhead. |
uint16 | Token fee in basis points. |
bool | Whether transfers are enabled. |
- If
isEnabledis 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.
| Parameter | Type | Description |
|---|---|---|
remoteChainSelector | uint64 | Remote chain identifier. |
Returns:
| Type | Description |
|---|---|
bytes memory | Encoded 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.