Skip to main content

What It Does

Move USDC between chains without leaving your Product Account. Compass integrates Circle’s Cross-Chain Transfer Protocol (CCTP) V2, enabling secure, native USDC transfers between Ethereum, Arbitrum, and Base. Unlike wrapped token bridges, CCTP burns USDC on the source chain and mints native USDC on the destination—no liquidity pools, no slippage, no wrapped tokens.

Supported Chains

ChainCCTP Domain
Ethereum0
Arbitrum3
Base6

Transfer Modes

CCTP V2 offers two transfer speeds:
ModeSpeedFee
Standard~15-19 minFree
Fast~30 seconds~0.01%
Fast mode uses confirmed finality for near-instant transfers. The fee is automatically calculated based on Circle’s current rates.

How It Works

Bridging happens in two steps: burn on the source chain, then mint on the destination chain.

Step 1: Burn USDC

Call the burn endpoint to get a transaction that burns USDC from the Product Account on the source chain.
POST /v2/cctp/burn
{
  "owner": "0x...",
  "chain": "ethereum",
  "amount": 1000,
  "destination_chain": "base",
  "destination_owner": "0x...",
  "transfer_mode": "fast"
}
The response includes:
  • A transaction to sign and broadcast (or eip_712 typed data if using gas sponsorship)
  • A bridge_id to track the transfer

Step 2: Mint USDC

After the burn transaction confirms, Circle’s attestation service validates the transfer. Call the mint endpoint with the bridge_id and burn_tx_hash to get the mint transaction.
POST /v2/cctp/mint
{
  "bridge_id": "...",
  "burn_tx_hash": "0x...",
  "gas_sponsorship": false
}
Response codes:
  • 200 OK: Attestation ready, mint transaction included
  • 202 Accepted: Attestation pending, poll again shortly
  • 404 Not Found: Bridge ID not found
For standard transfers, attestation takes ~15-19 minutes. For fast transfers, it’s typically under 30 seconds.

Implementation Example

This example demonstrates bridging 1 USDC from Base to Arbitrum without gas sponsorship.
Note

Prerequisites

1

Install Dependencies

Install the required packages.
2

Set Environment Variables

Create a .env file:

Implementation

1

Import Libraries & Initialize SDK

2

Burn USDC on Source Chain

Request and broadcast the burn transaction on Base.
3

Wait for Circle Attestation

Poll the mint endpoint until Circle’s attestation is ready.
4

Mint USDC on Destination Chain

Execute the mint transaction on Arbitrum.

Gas Sponsorship

Both burn and mint transactions support gas sponsorship. Set gas_sponsorship=true to receive EIP-712 typed data instead of an unsigned transaction. The owner signs the typed data off-chain, then you submit the signature to /gas_sponsorship/prepare to get a transaction that the sender broadcasts.

Prerequisites

Before bridging:
  1. The owner must have a Product Account on both chains
  2. USDC must be in the Product Account on the source chain (use /earn/transfer to deposit)

Use Cases

Cross-chain yield optimization: Move USDC to the chain with the best yield opportunities, then deposit into vaults or Aave markets. Multi-chain treasury management: Consolidate funds across chains or distribute to different chains based on operational needs. User onboarding: Let users bridge funds from any supported chain to where your application operates.