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
vieminstalled
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.- 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.See also
- Contract addresses: full list of CCTP and other deployed contracts on Arc
- CCTP developer docs: attestation API reference and supported domains
- Exchange integration overview: deposits, withdrawals, and liquidity management
- Deterministic finality: how Arc’s instant finality affects crosschain transfers