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 MessageTransmitter at construction time.
  • Restricts receiveMessage calls 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


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 delegatecall is used.

  • Calls are forwarded via standard call.

  • Only authorized callers may invoke receiveMessage.

This is not an upgradeable storage proxy.


Inheritance

  • AuthorizedCallers
  • ITypeAndVersion

typeAndVersion

string public constant override typeAndVersion =
  "CCTPMessageTransmitterProxy 2.0.0-dev";

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:

  1. Resolves transmitter:

    tokenMessenger.localMessageTransmitter()
    
  2. Reverts with:

    error TransmitterCannotBeZero();
    

    if the resolved transmitter is address(0).

  3. 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.

Get the latest Chainlink content straight to your inbox.