Circle CCTP v1 on Ethereum

Deployments

NameAddress
TokenMessenger0xBd3fa81B58Ba92a82136038B25aDec7066af3155 (opens in a new tab)
MessageTransmitter0x0a992d191DEeC32aFe36203Ad87D7d289a738F81 (opens in a new tab)
USDC0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48 (opens in a new tab)

Action: bridge

Parameters

NameTypeDescription
targetsstring[] (required)Destination Chains prefixes | Chains descriptions
recipientstring (required)Recipient address on the destination chain(s)
🚫

The source and destination blockchains cannot be the same. If the same blockchain is provided in the targets parameter, an error will be thrown.

USDC · approve

Approve TokenMessenger to spend USDC tokens on behalf of the avatar.

  • Contract: USDC

  • Function: approve(address,uint256)

    ParameterConstraint
    spenderequal to TokenMessenger
    amount-

TokenMessenger · depositForBurn

Bridge USDC tokens to the recipient address on the destination blockchain.

  • Contract: TokenMessenger

  • Function: depositForBurn(uint256,uint32,bytes32,address)

    ParameterConstraint
    amount-
    destinationDomainequal to DOMAIN (see reference table below)
    mintRecipientequal to recipient (left-padded with zeros to 32 bytes)
    burnTokenequal to USDC

Blockchain-to-Domain Mapping:

BlockchainDomain
Ethereum0
Optimism2
Arbitrum3
Base6

Action: receive

Parameters

NameTypeDescription
targetsstring[] (required)Source Chains prefixes | Chains descriptions
senderstring (required)Sender address on the source chain(s)
recipientstring (required)Recipient address on the destination chain(s)
🚫

The source and destination blockchains cannot be the same. If the same blockchain is provided in the targets parameter, an error will be thrown.

TokenMessenger · receiveMessage

Claim USDC tokens for the recipient address on the destination blockchain.

  • Contract: TokenMessenger
  • Function: receiveMessage(bytes,bytes)
ParameterConstraint
messageSee breakdown below
attestation-

Breakdown of message Parameter Scoping
The message parameter contains structured data that is scoped to enforce specific values. The table below details how each part is extracted and validated.

FieldBytes (from/to)ScopedDescription
Version0-3NoMessage format version
Source Domain4-7YesExpected source blockchain domain
Destination Domain8-11YesExpected destination blockchain domain
Nonce12-19NoUnique transaction identifier
Source Token Messenger Address20-51YesToken Messenger on the source blockchain (12-byte zero-padding + 20-byte address)
Destination Token Messenger Address52-83YesToken Messenger on the destination blockchain (12-byte zero-padding + 20-byte address)
Selector84-87NoFunction selector
Padding Chunk88-119No32-byte zero-padding
Bridged Token Address (USDC)120-151YesUSDC token address on the source blockchain (12-byte zero-padding + 20-byte address)
Recipient Address152-183YesActual recipient address (12-byte zero-padding + 20-byte address)
Amount184-215NoBridged amount
Sender Address216-247YesActual sender address (12-byte zero-padding + 20-byte address)