Skip to content

Bridge to Arc

Goal: a user with funds elsewhere ends up with USDC on Arc, ready to trade.

CCTP (/v1/bridge2/*) LI.FI (/v1/crosschain/*)
Moves USDC only, native burn and mint any token the provider routes, swapped and bridged
From Ethereum, Base, Arbitrum, OP Mainnet, Polygon, Avalanche, Monad and the other CCTP domains 60+ chains including Monad and Robinhood Chain (Arc as a destination is subject to provider support)
Speed fast transfer, seconds to a few minutes route-dependent, minutes
Gas on Arc none for the user — Chord’s relayer submits the mint destination gas handled by the route
Fee Circle’s fee (/bridge2/fee) provider fee + the app fee in /crosschain/config

USDC in, Arc out: use CCTP. Anything else: LI.FI.

  1. Read the table. GET /bridge2/config — the chains with their CCTP domains and USDC addresses, the TokenMessenger and MessageTransmitter contracts, and the relayer (address, Arc balance, enabled).
  2. Quote the fee. GET /bridge2/fee?src=6&dst=26 → fastBps and standardBps.
  3. Burn on the source chain. The user approves USDC to contracts.tokenMessengerV2 and calls depositForBurn with the Arc domain (arcDomain), the recipient as a 32-byte address, and the fast-finality threshold from fastFinalityThreshold. This is the only signature.
  4. Poll the attestation. GET /bridge2/status?srcDomain=6&tx=0x… until status: "complete".
  5. Relay the mint. POST /bridge2/relay { "srcDomain": 6, "tx": "0x…" } — Chord’s relayer submits receiveMessage on Arc and returns the mint hash. 409 NOT_ATTESTED means poll longer; 429 DAILY_CAP means relay it yourself with the message and attestation from step 4.

The user never needs USDC on Arc for gas, because the relayer pays the mint.

  1. Chains and tokens. GET /crosschain/config?provider=lifi lists destinations; GET /crosschain/currencies?chainId=8453&q=usdc&provider=lifi lists bridgeable tokens on a chain.
  2. Quote. POST /crosschain/quote with user, originChainId, destinationChainId, originCurrency, destinationCurrency, amount (smallest unit), slippageBps and provider: "lifi". The answer carries the provider’s steps and fees and the transactions to sign on the origin chain; an approve step is prepended when the origin token is an ERC-20.
  3. Sign in order and keep the deposit hash.
  4. Poll. GET /crosschain/status?requestId={depositHash}&provider=lifi&fromChain=8453&toChain=5042 until success, or refund / failure. depositing → pending → submitted → success is the happy path; delayed is a route waiting on the bridge.

The Chord app embeds the LI.FI widget for this flow; the endpoints above are the same contract for a custom UI.

The user holds USDC on Arc as the predeploy balance, which is also their gas. Quote a trade with inputMint=0x3600000000000000000000000000000000000000 and follow the Swap recipe.