async function usdcCrossChainTransfer(amount: number, destinationAddress: string) {
   // Deposit USDC tokens for burn and obtain transaction hash
   const burnUsdcTx = await ethTokenMessengerContract.depositForBurn(amount, AVAX_DESTINATION_DOMAIN, destinationAddress, USDC_ETH_CONTRACT_ADDRESS).send();
   // Extract message from burn transaction and calculate messageHash
   const { messageBytes, messageHash } = extractMessageAndHash(burnUsdcTx);
   // Retrieve attestation for message hash and mint USDC on AVAX tokens on the destination chain
   const { attestation } = await fetch(`https://iris-api-sandbox.circle.com/attestations/${messageHash}`).json();
   // Mint the USDC on AVAX tokens on the destination chain using the burn transaction message and attestation
   await avaxMessageTransmitterContract.receiveMessage(messageBytes, attestation).send();
}

Natively interoperable USDC

Cross-Chain Transfer Protocol (CCTP) is a permissionless on-chain utility that facilitates USDC transfers securely between blockchains via native burning and minting.

Maximum capital efficiency

CCTP solves the issues of liquidity fragmentation and poor user experiences caused by unofficial, bridged forms of USDC floating around the ecosystem.

Apps built on CCTP can essentially teleport USDC from one blockchain to another, providing users with a highly secure and capital-efficient way to transact in a multi-chain world.

Maximum capital efficiency
Permissionless & composable

Permissionless & composable

CCTP is a low-level primitive for developers to leverage and extend. Embed the protocol within your app, wallet, or bridge, and enable users to move any amount of USDC to any supported ecosystem.



In many cases, your app can inherit CCTP functionality from a bridge or wallet SDK that’s already part of your stack.

how it works

Programmatic burning & minting

Initiate transfer on source chain

A user accesses your app to initiate a transfer of USDC from one blockchain to another, and specifies the recipient wallet address on the destination chain. Your app facilitates a burn of the specified amount of USDC on the source chain.

User's Wallet > App > CCTP > USDC
// Call the TokenMessenger depositForBurn
const transactionReceipt = await web3.eth.getTransactionReceipt(burnTx.transactionHash);
function on the source chain
const burnTx = await
ethTokenMessengerContract.methods.depositForBurn(amount,
AVAX_DESTINATION_DOMAIN, destinationAddressInBytes32,
USDC_ETH_CONTRACT_ADDRESS).send();

Fetch signed attestation from Circle

Circle observes and attests to the burn event on the source chain. Your app requests the attestation from Circle, which provides authorization to mint the specified amount of USDC on the destination chain.

App > Attestation Service > USDC
// Extract the message from the emitted MessageSent event
const transactionReceipt = await web3.eth.getTransactionReceipt(burnTx.transactionHash);
const eventTopic = web3.utils.keccak256('MessageSent(bytes)')
const log = transactionReceipt.logs.find((l) => l.topics[0] === eventTopic)
const messageBytes = web3.eth.abi.decodeParameters(['bytes'])
const messageHash = web3.utils.keccak256(messageBytes);
// Fetch the attestation from Circle's API
let attestationResponse = {status: 'pending'};
while (attestationResponse.status != 'complete') {
  attestationResponse = (await fetch('https://iris-api-sandbox.circle.com/attestations/${messageHash}')).json();
  // Wait 2 seconds in between calls
  await new Promise(r => setTimeout(r, 2000));
}

Complete transfer on destination chain

Your app uses the attestation to trigger the minting of USDC. The specified amount of USDC is minted on the destination chain and sent to the recipient wallet address.

App > User's Wallter , App > CCTP > USDC
// Call the MessageTransmitter

receiveMessage function on the destination chain
const receiveTx = await)
avaxMessageTransmitterContract.receiveMessage(receivingMessageBytes, signature);

ECOSystem

Trusted by the community

Join the leading wallets, bridges, apps, and infrastructure providers integrating CCTP to provide a superior way to send, spend, lend, borrow, and exchange USDC across blockchains.

INNOVATE

Design new real-world use cases

Build on CCTP to create mainstream experiences that stack together functions like trading, lending, payments, NFTs, gaming, and more – all while abstracting complexity away from users.

Provide cross-chain swaps

Enable users to swap between digital assets that live on different blockchains, even across L2 rollups (e.g. ARB on Arbitrum for OP on OP Mainnet). In a completely automated way, ARB can be swapped for USDC on Arbitrum, routed by CCTP to OP Mainnet, and swapped for OP.

Enable cross-chain deposits

Allow users to utilize USDC on Ethereum to open a trading position on a decentralized exchange on Base. Because CCTP can route USDC between blockchains behind the scenes, users can onboard to a new app and never need to switch wallets or think about which blockchain they’re holding USDC.

Offer cross-chain purchases

With one click, a user can utilize USDC on Polygon PoS to buy an Avalanche-based NFT on Uniswap and list it for sale on OpenSea. When the user initiates the transaction, CCTP routes their USDC from Polygon PoS to Avalanche to purchase the NFT from Uniswap, then opens the listing on OpenSea.

Optimize cross-chain treasury

Marketplace apps can accept USDC payments on multiple blockchains and use CCTP for bulk transfers behind the scenes. Exchanges and liquidity pool bridges can use CCTP to securely rebalance USDC holdings per blockchain to reduce operational costs and meet withdrawal demand on the fly.

AVAILABILITY

Live on 9 chains enabling 72 routes

CCTP is available on Arbitrum, Avalanche, Base, Ethereum, Noble, OP Mainnet, Polygon PoS, Solana, and Sui. Support for Aptos and Unichain is coming soon.

FAQs

CCTP is a permissionless on-chain utility that enables the flow of USDC across chains through native burning and minting. With CCTP, USDC is effectively teleported from one blockchain to another.

CCTP serves as permissionless infrastructure for developers to build on top of, or integrate into, their existing apps, wallets, and bridges.

No. CCTP is a permissionless on-chain utility for third-party developers.

CCTP is available on mainnet for Arbitrum, Avalanche, Base, Ethereum, Noble, OP Mainnet, Polygon PoS, Solana, and Sui. Support for Aptos and Unichain is coming soon. Developers can access our developer docs to begin building on CCTP.

There would be a gas fee on the source chain and a gas fee on the destination chain. The app that integrates CCTP would be responsible for determining how gas fees are handled and/or passed on to the end-user. There are no additional fees from CCTP.

Yes, Circle Mint and Core API are capable of moving USDC natively across chains. However, those commercial products are only available to qualified businesses approved by Circle.

Centralized exchanges typically hold various native forms of USDC liquidity on their platforms. Users with an account at a centralized exchange can deposit USDC (native to a given chain) into their exchange wallet, and then withdraw USDC (native to a different chain) to their external wallet.

In contrast, CCTP is permissionless. This means it is accessible to any third-party developer to integrate into their app(s), and does not require signing up for an account. Users can move USDC through a CCTP-enabled app to any supported blockchain at any time. Developers can also compose new on-chain experiences on top of CCTP within their apps.

CCTP doesn’t require pooled USDC liquidity to perform cross-chain transfers, increasing capital efficiency and avoiding fees charged by liquidity providers.

All burns of USDC emit an event on the source chain, which is automatically observed by Circle’s attestation service. The app facilitating the burn of USDC is responsible for fetching the signed attestation from Circle, which then enables CCTP to mint USDC on the destination chain.

Yes. Please see our third-party audit documentation conducted by ChainSecurity (view PDF) and Halborn (view PDF) for more details.

No.

Circle’s plans to bring USDC natively to more blockchain networks remain the same and will continue to grow. We envision CCTP establishing USDC as a universal liquidity layer for the internet that is accessible to all.

While its unavailability would temporarily preclude new burn messages from being signed, we anticipate robust uptime and availability similar to how our existing minting services operate today.

CCTP has no direct impact upon existing bridged versions of USDC.