Skip to main content
Circle’s Cross-Chain Transfer Protocol (CCTP) uses a burn-and-mint model to transfer native USDC between blockchains without wrapped or bridged token variants. Arc’s CCTP domain is 26. Transfers into Arc mint USDC directly to your recipient address; transfers out burn USDC and mint on the destination blockchain. Because Arc has instant finality, outbound transfers reach attestation faster than transfers from blockchains that require multiple confirmations.

Prerequisites

Before you begin, ensure you have:
  • An RPC endpoint for Arc Testnet (https://rpc.testnet.arc.io)
  • An RPC endpoint for the source or destination blockchain (for example, Ethereum Sepolia)
  • USDC balance on the sending blockchain
  • Familiarity with the CCTP developer docs
  • A TypeScript environment with viem installed

Contract addresses

For CCTP contract addresses on other blockchains, see the CCTP contract addresses reference.

Bridge USDC between Arc and other blockchains

Use the inbound workflow to fund your exchange hot wallet on Arc from another blockchain, and the outbound workflow to rebalance liquidity from Arc to another blockchain.

Step 1. Format the recipient address

CCTP requires the recipient as a bytes32 value. Left-pad the 20-byte Ethereum address with zeros:

Step 2. Approve USDC on the source blockchain

Approve the source blockchain’s TokenMessengerV2 contract to spend your USDC:

Step 3. Call depositForBurn on the source blockchain

Burn USDC on the source blockchain, targeting Arc (domain 26):

Step 4. Retrieve the message hash

After the burn transaction confirms, extract the MessageSent event to get the message hash:

Step 5. Wait for attestation

Poll Circle’s attestation service until the attestation is available:
Attestation typically takes approximately 60 seconds but varies based on the source blockchain’s finality time. Transfers from blockchains with longer finality (such as Ethereum) take longer than those from blockchains with fast finality.

Step 6. Call receiveMessage on Arc

Submit the message and attestation to Arc’s MessageTransmitterV2 to mint USDC:
Once the transaction confirms, USDC is minted to the recipient address on Arc.

Monitor transfer status

Track a CCTP transfer by polling the attestation API:
Each CCTP message can only be received once. If receiveMessage reverts, verify that the message has not already been processed by checking the usedNonces mapping on the destination MessageTransmitterV2 contract.

CCTP V2 depositForBurnWithHook

CCTP V2 introduces depositForBurnWithHook, which allows you to specify a destination caller and attach a hook for post-mint actions. This is useful for triggering automated workflows (such as depositing into a vault) immediately after USDC is minted:
When destinationCaller is set to a non-zero value, only that address can call receiveMessage for this transfer on the destination blockchain. Set it to 0x000000 to allow any address to complete the transfer.

See also