CCIP v2.0.0 CCTPMessageTransmitterProxy API Reference
Summary
CCTPMessageTransmitterProxy is a forwarding proxy that restricts access to Circle’s IMessageTransmitter.receiveMessage while keeping a stable onchain address.
It:
- Resolves and stores the local
MessageTransmitterat construction time. - Restricts
receiveMessagecalls using[AuthorizedCallers](/ccip/evm/api-reference/v2.0.0/authorized-callers). - Forwards calls using
call. - Does not use
delegatecall.
This proxy is used to stabilize the caller address required by CCTP integrations while allowing outer systems to upgrade independently.
Contract
chains/evm/contracts/pools/USDC/CCTPMessageTransmitterProxy.sol
Check out the complete code on GitHub.
Import
import {CCTPMessageTransmitterProxy} from "chainlink-ccip/chains/evm/contracts/pools/USDC/CCTPMessageTransmitterProxy.sol";
Target + upgrade model
-
The underlying transmitter address is resolved once in the constructor via:
tokenMessenger.localMessageTransmitter() -
The resolved transmitter is stored as an immutable.
-
No
delegatecallis used. -
Calls are forwarded via standard
call. -
Only authorized callers may invoke
receiveMessage.
This is not an upgradeable storage proxy.
Inheritance
AuthorizedCallersITypeAndVersion
typeAndVersion
string public constant override typeAndVersion =
"CCTPMessageTransmitterProxy 2.0.0";
State
Constants
None declared.
Immutables
IMessageTransmitter public immutable i_cctpTransmitter;
Resolved at construction time.
Storage
No additional storage declared.
Allowlist state is inherited from AuthorizedCallers.
Constructor
constructor(
ITokenMessenger tokenMessenger
)
AuthorizedCallers(new address)
Behavior:
-
Resolves transmitter:
tokenMessenger.localMessageTransmitter() -
Reverts with:
error TransmitterCannotBeZero();if the resolved transmitter is
address(0). -
Stores the transmitter in
i_cctpTransmitter.
External API (forwarded surface)
receiveMessage
function receiveMessage(
bytes calldata message,
bytes calldata attestation
)
external
onlyAuthorizedCallers
returns (bool success)
Behavior:
-
Enforces
onlyAuthorizedCallers. -
Forwards call to:
i_cctpTransmitter.receiveMessage(message, attestation); -
Returns the boolean result from the underlying transmitter.
Events
No events declared in this contract.
Events from AuthorizedCallers may be emitted during allowlist updates.
Errors
error TransmitterCannotBeZero();
Inherited errors from AuthorizedCallers may also surface.
Security model
- Only allowlisted addresses may call
receiveMessage. - Underlying transmitter is immutable and cannot be changed post-deployment.
- No delegatecall; no storage collision risk.
- If allowlist is misconfigured, legitimate CCTP flows will fail.
- Transmitter resolution is validated at deployment.