CCIP v2.0.0 CCTPVerifier API Reference
CCTPVerifier validates cross-chain USDC messages using Circle CCTP.
If you use this verifier, it confirms that a message and attestation are valid by calling the configured CCTP MessageTransmitter and enforcing domain and sender checks.
Use this verifier when integrating CCIP with CCTP-based USDC transfers.
Applications do not call this contract directly. It is invoked by CCIP pools and routing components during message verification.
This verifier is specific to USDC transfers using Circle CCTP and is not a general-purpose verifier.
Usage Boundary
You do not call this contract directly.
- CCIP infrastructure invokes this verifier during message processing.
- You configure this verifier as part of a pool or cross-chain verification setup.
- You are responsible for ensuring correct domain mappings and trusted senders.
- Only authorized callers can invoke
verify. Unauthorized calls will revert.
Contract
verifiers/CCTPVerifier.sol
Import
import {CCTPVerifier} from "chainlink-ccip/verifiers/CCTPVerifier.sol";
If you have not installed the package:
npm install @chainlink/contracts-ccip@2.0.0
Inheritance
BaseVerifierICrossChainVerifierV1
Constructor
constructor(
address messageTransmitterProxy,
address usdcToken,
uint32 localDomainIdentifier,
address[] memory allowedCallers
)
| Parameter | Type | Description |
|---|---|---|
messageTransmitterProxy | address | Trusted CCTP MessageTransmitter used to validate messages. |
usdcToken | address | Address of the USDC token contract. |
localDomainIdentifier | uint32 | Domain identifier for the local chain. |
allowedCallers | address[] memory | Contracts allowed to invoke verification. |
External API
verify
function verify(bytes calldata message, bytes calldata attestation) external returns (bytes memory)
Validates a CCTP message and attestation.
Returns verified message data that downstream CCIP components use for execution.
- Calls the configured
MessageTransmitterto verify the message - Confirms the message originates from an allowed domain and sender
Reverts if:
- the attestation is invalid
- the message ID does not match
- the sender is not authorized
- the MessageTransmitter call fails
setDynamicConfig
Owner-only.
Updates verifier configuration such as attester or transmitter settings.
Emits DynamicConfigSet.
setDomains
Owner-only.
Configures allowed sender addresses for remote domains.
Emits DomainsSet.
Events
event StaticConfigSet(address tokenMessenger, address messageTransmitterProxy, address usdcToken, uint32 localDomainIdentifier);
event DynamicConfigSet(DynamicConfig dynamicConfig);
event DomainsSet(SetDomainArgs[] domains);
For a cross-contract event index, see Events.
Errors
error InvalidVerifierResults();
error InvalidMessageId(bytes32 expected, bytes32 got);
error InvalidMessageSender(bytes32 expected, bytes32 got);
error ReceiveMessageCallFailed();
For a cross-contract error index, see Errors.
Security model
-
Trusts the Circle CCTP
MessageTransmitterto validate message authenticity -
Enforces strict validation of:
- message ID
- sender address
- domain mapping
-
Owner controls:
- dynamic configuration (attester/transmitter)
- allowed domain mappings
-
Fails closed if verification fails at any step
Notes
- This verifier relies on the CCTP
MessageTransmittercontract for message validation. - If domain mappings or allowed senders are misconfigured, valid cross-chain messages will fail verification.
- This verifier determines whether a message is accepted, but does not control how tokens are minted or released.