26. Transfers into Arc mint tokens directly to your recipient address;
transfers out burn tokens on Arc and mint on the destination blockchain. Because
Arc has deterministic finality, outbound
transfers reach attestation faster than transfers from blockchains that require
multiple confirmations.
Prerequisites
Before you begin, ensure that you’ve:- Obtained an RPC endpoint for Arc Testnet (
https://rpc.testnet.arc.io) - Obtained an RPC endpoint for the source or destination blockchain (for example, Ethereum Sepolia)
- Acquired a USDC or EURC balance on the sending blockchain
- Reviewed the CCTP developer docs
- Installed
viemin your TypeScript environment
Contract addresses
For CCTP contract addresses on other blockchains, see the CCTP contract
addresses
reference.
Bridge USDC and EURC 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.- Inbound (into Arc)
- Outbound (out of Arc)
Step 1. Format the recipient address
CCTP requires the recipient as abytes32 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 theMessageSent 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:Monitor transfer status
Track a CCTP transfer by polling the attestation API: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.