Circle Cross-chain USDC Transfer Protocol V2 (CCTP V2)

(Updated on Nov 19, 2025)

For Circle Cross-Chain USDC Transfer Protocol V2 supported networks, the USDC flow is going through Circle bridge contracts and its attestation service instead of cBridge or peg bridge contracts and SGN.

The following content is an integration tutorial from frontend perspective.

CCTP V2 now supports both Fast Transfer and Standard Transfer, you can read more about how they work and differ in this doc https://developers.circle.com/cctparrow-up-right.

Proxy Contracts

Also you can get the related contract addressed from cBridge gateway api

https://cbridge-prod2.celer.app/v1/circleUsdcConfigarrow-up-right

Quote Fee

Note that the CCTP quote the fees from the proxy contract instead of the cBridge gateway APIs.

For example, bridging USDC from Ethereum to Avalanch by totalFeearrow-up-right method.

Inputs

amount: Your bridging amount with decimal, for example, 3000000 = 30USDC

dstChid: The destination chain you wanna send, in this case is 43114

Outputs

Output data is an array of fees [fee, txFee, percFe].

fee: total fee, txFee+percFee

txFee: transaction fee

percFee: percentage fee

For this bridging mode, the bridge rate is 1.

Bridge by depositForBurn

From the front-end side, lock the USDC to source proxy contract by the method depositForBurnarrow-up-right. Circle attestation will bridge the assets to the destination chain in a trustless way. For more details refer to this:https://developers.circle.com/stablecoin/docs/cctp-protocol-contractarrow-up-right

Contract Parameters

Field
Des

amount

Bridging amount with decimal

dstChid

Bridging destination chain id

mintRecipient

Receiver address

burnToken

USDC token address in source chain, you can read the token address from this configuration: https://cbridge-prod2.celer.app/v1/circleUsdcConfigarrow-up-right

Once this depositForBurn happened on the source chain, you can get the source chain Deposited event.

Searching destination transaction status

Searching the final destination chain status by the gateway API: GetTransferStatus.

The API requires a tracking field transferId for the status queries.

  • For API v2: Use the source chain transaction hash as the transferId value.

  • For API v1: Refer to the following example implemented with ethers.js:

API reference

Gateway: GetTransferStatuschevron-right

Last updated