Technical

Cross-Chain Transfers Explained: How Circle CCTP Works

Fivo
Fivo Team
·3 min read

One of the biggest challenges in crypto payments is chain fragmentation. Your customer has USDC on Arbitrum, but your wallet is on Polygon. Traditionally, this means the customer can't pay you — or has to use a third-party bridge with extra fees and risk. Circle CCTP solves this.

What is CCTP?

Cross-Chain Transfer Protocol (CCTP) is an on-chain protocol built by Circle that enables native USDC transfers between blockchains. Unlike third-party bridges that use wrapped tokens, CCTP burns USDC on the source chain and mints fresh, native USDC on the destination chain. The result is a trustless, 1:1 transfer with no wrapped token risk.

CCTP is not a bridge in the traditional sense. There are no liquidity pools, no wrapped tokens, and no bridge operator risk. Circle itself authorizes the mint on the destination chain via a cryptographic attestation.

How does CCTP work?

The CCTP flow has three stages: burn, attest, and mint. Here's what happens under the hood:

1. Burn (source chain)

The user calls depositForBurn() on the TokenMessenger contract on the source chain. This burns the specified amount of USDC and emits a message containing the burn details: amount, destination chain, and recipient address.

2. Attest (off-chain)

Circle's attestation service observes the burn event and, once confirmed, produces a signed attestation. This attestation is the cryptographic proof that the burn happened and authorizes the corresponding mint. Fivo's attestation poller checks for this attestation automatically.

3. Mint (destination chain)

Once the attestation is available, anyone can call receiveMessage() on the MessageTransmitter contract on the destination chain, passing the original message and the attestation. The contract verifies the signature and mints fresh USDC to the recipient.

CCTP flow
Source Chain                Circle                Destination Chain
    |                        |                         |
    |-- depositForBurn() --> |                         |
    |   (burns USDC)         |                         |
    |                        |-- attestation ready -->  |
    |                        |                         |
    |                        |    <-- receiveMessage()--|
    |                        |        (mints USDC)      |

How Fivo uses CCTP

When a customer pays a Fivo merchant, the payment widget detects whether the customer's chain matches the merchant's receiving chain. If it doesn't, the widget automatically routes the payment through CCTP:

  • Customer initiates a cross-chain payment through the Fivo widget
  • Bridge Kit handles the burn on the source chain and attestation from Circle
  • Bridge Kit automatically mints USDC on the destination chain
  • USDC arrives directly in the merchant's wallet — no intermediaries
The entire cross-chain flow is invisible to the merchant. From their perspective, a payment simply appears in their wallet. The customer doesn't need to know which chain the merchant uses either — the widget handles everything.

CCTP domains supported by Fivo

Fivo supports 9 CCTP-enabled EVM chains. Each chain has a unique CCTP domain identifier:

  • Domain 0 — Ethereum
  • Domain 1 — Avalanche
  • Domain 2 — Optimism
  • Domain 3 — Arbitrum
  • Domain 6 — Base
  • Domain 7 — Polygon
  • Domain 10 — Unichain
  • Domain 11 — Linea
  • Domain 13 — Sonic

CCTP limitations

  • USDC only — CCTP currently supports USDC. EURC payments are same-chain only.
  • Attestation time — Circle attestation typically takes 30-90 seconds. Bridge Kit handles this automatically.
  • Gas on destination — Bridge Kit handles gas management on the destination chain automatically.

Why CCTP matters for merchants

Without CCTP, merchants would either need to deploy wallets on every chain (complex and expensive) or restrict customers to a single chain (limits your audience). CCTP lets you accept payments from customers on any chain while receiving funds on your preferred chain. It's the key technology that makes multi-chain payments practical.

Want to learn more? Read the CCTP technical documentation or create a merchant account to see it in action.

Share this article

Related articles

Stay updated

Get the latest articles on stablecoin payments, product updates, and industry insights delivered to your inbox.

Ready to get started?

Create your merchant account and start accepting USDC and EURC payments.