cctp-lockup-lic

Unite the ecosystem

Cross-Chain Transfer Protocol (CCTP) enables USDC to flow securely between blockchains – unifying liquidity 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(`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.

CCTP-multi-chain_3.18

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.

cctp-dev-stack

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 wallet SDK that’s already part of your stack.

How it works

Programmatic burning and minting

CCTP-step3n
                            
// 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.

CCTP-step2n
                            
// 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)); }

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.

CCTP-step1n
                          
// 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.

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.

Wallets

Partner SDKs

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

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.
Exchanges-810x810

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.

Blockchain-810x810

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.

NFT Platforms-810x810

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.

chest
 

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 8 chains enabling 56 routes

CCTP is available on Arbitrum, Avalanche, Base, Ethereum, Noble, OP Mainnet, Polygon PoS, and Solana.

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.

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 on mainnet for Arbitrum, Avalanche, Base, Ethereum, Noble, OP Mainnet, Polygon PoS, and Solana. Developers can access our developer docs to begin building on 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.

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.

No.

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.