Skip to main content
Bridge native USDC between chains with Circle’s CCTP V2. CCTP burns USDC on the source chain, waits for Circle’s attestation, and mints the same amount on the destination chain. Para authenticates the user and signs on both sides of the route. Bridge Kit handles the approval, burn, attestation, and mint steps. This guide bridges from Ethereum to Arc. The same hooks cover any supported route: change the from and to chains to bridge between EVM chains, or between an EVM chain and Solana.

Choose a route

Para wallets cover the main CCTP chain families. The route you pick determines which Para wallet signs each side and how you submit the transfer. Bridge Kit’s BridgeChain enum lists every chain it can route. A route only needs both chains in that list and an adapter for each side.
Each CCTP network has a protocol domain ID, such as 0 for Ethereum, 5 for Solana, 8 for Sui, 26 for Arc, and 27 for Stellar. Domain IDs are not EVM chain IDs. Bridge Kit’s chain definitions carry the domains and CCTP contract addresses, so the example does not hardcode them.

Before you start

Start with a Next.js app that has ParaProvider, a login flow, and a wallet for each chain family in your route. These Para guides cover that setup:
The wallet needs native USDC on the source chain and gas on both chains. The source chain pays for the approval and burn, and the destination chain pays for the mint. For Ethereum to Arc, that means ETH on Ethereum and USDC on Arc, since Arc uses USDC as its gas token. A Solana destination needs SOL for fees and for the USDC token account if the wallet does not have one yet. Review the transfer amount and network fees with the user before submitting a mainnet transaction.

Install the bridge packages

From your Para Next.js application, install Bridge Kit, Circle’s viem adapter, and the Para viem integration. The versions below are the ones used for this guide.
For routes that start or end on Solana, also install Circle’s Solana adapter and the Para Solana signer.
Set an RPC URL for each chain in your routes, such as NEXT_PUBLIC_ETHEREUM_RPC_URL, NEXT_PUBLIC_BASE_RPC_URL, NEXT_PUBLIC_ARC_RPC_URL, and NEXT_PUBLIC_SOLANA_RPC_URL. The values are public browser configuration, so do not put private RPC credentials in them.

Connect Para to Bridge Kit

Use and inside your existing ParaProvider to check the signed-in Para wallet. Confirm the session with . For EVM chains, selects the EVM wallet, and gives Circle’s ViemAdapter a wallet client for each chain. Every EVM chain uses the same Para account. For Solana, signs the transactions Circle’s Solana adapter builds. createAdapter() returns the adapter that matches a chain’s type.
src/hooks/useCctpAdapter.ts
If every route stays on EVM chains, drop createSolanaAdapter() and the Solana packages. To add another EVM chain, import its definition from @circle-fin/bridge-kit/chains, add it to evmChains, and add its RPC URL to evmRpcUrls.
Keep the authenticated Para session available until the bridge finishes. Do not replace the Para signer with a private-key viem account or Solana keypair: that would bypass Para signing.

Bridge USDC

Call bridgeUsdc() in response to a user action. Bridge Kit uses CCTP V2 to burn USDC on the source chain, waits for Circle’s attestation, then mints USDC on the destination chain. Setting useForwarder: false keeps the destination mint signed by Para. The result contains each step and the overall state. amount is a human-readable USDC amount.
src/hooks/useCctpBridge.ts
In a client component, pass the route from a transfer button. The chain definitions come from @circle-fin/bridge-kit/chains:
bridgeUsdc() returns the Bridge Kit result and a summary with status, failedStep, and the burn and mint transaction hashes and explorer links. Show a transfer as complete only when status is complete. For a failed transfer, read failedStep?.name and failedStep?.errorMessage. Handle errors thrown before Bridge Kit returns a result separately. The fetchAttestation event records progress between the burn and mint; it is not itself an onchain transaction.

Change the route

The route is the only part of the call that changes. Each side uses the Para wallet for that chain’s type, so a single signed-in user can bridge in any direction the app supports.
Between EVM chains, both sides use the same Para EVM address. Between EVM and Solana, the burn and mint use the user’s Para EVM and Solana addresses, so the user needs both wallet types before starting the transfer.

Bridge with Sui or Stellar

CCTP also supports Sui and Stellar, and Para signs on both. Bridge Kit does not include Sui or Stellar in its chain list, so these routes use Circle’s chain-specific CCTP integration instead of bridgeUsdc(). The Para Sui and Stellar signers build and sign those transactions with the user’s Para wallet.
On Stellar, USDC precision and address encoding differ from other CCTP networks. Follow Circle’s Stellar guidance for incoming transfers so the minted USDC reaches the correct recipient.
Circle’s page lists the contracts and features for each network.

Resume an interrupted transfer

If result.state is error, inspect result.steps before asking the user to try again. An approved or burned transfer may already have spent gas or destroyed the source USDC. Keep that result and pass it to resumeTransfer(result) from a separate Resume action. The hook reads the source and destination chains from the result, creates fresh authenticated Para adapters for both, and returns the updated result and status summary. Do not start a second bridge() call to recover a transfer whose burn succeeded. If a retry still fails, keep the burn transaction hash and investigate the failed step before attempting another transaction. A pending result is not a confirmed destination mint.

Check the route

For a production check, record both the source burn transaction and the destination mint transaction from the same Bridge Kit result. The source receipt alone confirms only the burn. The destination explorer receipt confirms the mint. For a testnet trial before using mainnet funds, swap in testnet chain definitions such as EthereumSepolia, BaseSepolia, ArcTestnet, and SolanaDevnet, or follow Circle’s . Circle’s covers fees, supported routes, and recovery behavior.

Keep building with Para

Use the same signed-in Para wallets for other actions on each chain: