Overview
The burn, attest, mint flow that every transfer follows.
This page explains what actually happens when you bridge, so the rest of the docs make sense. If you only want to call the API, skip to Bridging.
Native USDC, not a wrapper
USDC is issued natively on many chains. CCTP V2 is Circle's protocol for moving it between them. It does not lock and wrap. It burns real USDC on the source chain and mints real USDC on the destination chain. The amount that leaves is the amount that arrives, minus a small Circle fee.
The three steps
Every transfer, in every direction, follows the same shape.
- Burn. On the source chain, USDC is burned through Circle's
TokenMessengerV2(or SorobanTokenMessengeron Stellar). This emits a cross chain message. - Attest. Circle's off chain service, Iris, watches the source chain. Once the burn is final, Iris signs an attestation over the message.
- Mint. On the destination chain, the message and the attestation are submitted to Circle's
MessageTransmitterV2(orCctpForwarder.mint_and_forwardon Stellar). It verifies the signature and mints USDC to the recipient.
The SDK builds all three transactions for you as unsigned RawTransaction objects. You sign and broadcast them with your own wallet library.
Fast versus standard finality
A transfer can wait for soft finality (fast, small fee) or full finality (slower, free). You choose this per request with minFinalityThreshold.
import { FinalityThreshold } from "@zethub/bridge";
FinalityThreshold.FAST; // 1000 (soft finality, ~30s, small fee)
FinalityThreshold.STANDARD; // 2000 (full finality, minutes to hours, free)