Cross-Chain Transfer Protocol (CCTP) | Circle

Unite the ecosystem

Cross-Chain Transfer Protocol (CCTP) enables USDC to flow natively across blockchains – unifying liquidity in Web3 and simplifying user experience.
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(`${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 versions of USDC floating around the ecosystem.

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


Permissionless and 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 messaging platform that’s already part of your stack.

How it works

Programmatic burning and minting

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

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.

// 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('${messageHash}')).json();   // Wait 2 seconds in between calls   await new Promise(r => setTimeout(r, 2000)); }

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.

// 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();

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.


Trusted by the community

Join the leading wallets, bridges, apps, and messaging protocols integrating CCTP to provide a superior way to send, spend, lend, borrow, and exchange USDC across chains.


Partner SDKs

Developers can leverage partner SDKs powered by CCTP to ship faster and access additional functionality.

Design new real-world 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.

Cross-chain swaps

Enable users to perform cross-chain swaps with digital assets that live on distinct chains, 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.


Cross-chain deposits

Allow users to utilize USDC on Ethereum to open a trading position on a decentralized exchange on Avalanche. Because CCTP can route USDC across chains behind the scenes, users never need to switch wallets or even think about which chain they’re holding USDC on.

NFT Platforms-810x810

Cross-chain purchases

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


Live on 4 chains enabling 12 routes

Developers can integrate with CCTP on Arbitrum, Avalanche, Ethereum, and OP Mainnet. Expansion to additional chains is expected throughout 2023.


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.

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.

CCTP is available now on mainnet for Arbitrum, Avalanche, Ethereum, and OP Mainnet. Expansion to additional chains is expected throughout 2023. Developers can access our developer docs to begin building on CCTP.

Yes, Circle Account 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.

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.

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.