An open-source, non-custodial reference implementation for transferring native USDC between Arc Mainnet and Base Mainnet with Circle CCTP V2.
The standard bridge is live and mainnet-only. Relay, gasless, refuel, and yield features are intentionally disabled until their separate security and operational requirements are complete.
Mainnet software: Transactions move real USDC and require source-chain gas plus destination-chain gas for minting. This project has not received an independent security audit. Verify all addresses against Circle and Arc's official documentation before using or modifying it.
| Capability | Status |
|---|---|
| Standard Arc ↔ Base CCTP V2 bridge | Enabled |
| Resumable burn, attestation, and mint | Enabled |
| Relay | Disabled pending reviewed deployment and durable payout processing |
| ERC-4337 gasless mode | Disabled pending provider support and paymaster review |
| Gas refuel | Disabled pending payout verification and funded liquidity |
| Yield | Disabled until a real strategy is selected |
| Testnet runtime | Removed |
No application fee is charged by the enabled bridge.
| Network | Chain ID | CCTP domain | Native USDC |
|---|---|---|---|
| Arc Mainnet | 5042 |
26 |
0x3600000000000000000000000000000000000000 |
| Base Mainnet | 8453 |
6 |
0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 |
Circle CCTP V2 mainnet contracts used on both networks:
| Contract | Address |
|---|---|
| TokenMessenger | 0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d |
| MessageTransmitter | 0x81D40F21F12A8F0E3252Bccb954D722d4c464B64 |
Production attestations use https://iris-api.circle.com.
sequenceDiagram
participant User
participant Source as Source TokenMessenger
participant Iris as Circle Iris
participant Destination as Destination MessageTransmitter
User->>Source: approve USDC
User->>Source: depositForBurn (CCTP V2)
Source-->>User: burn transaction receipt + MessageSent
User->>Iris: poll production attestation API
Iris-->>User: message + attestation
User->>Destination: receiveMessage
Destination-->>User: native USDC minted
The app persists an in-progress session as soon as a burn hash exists. If the wallet RPC fails after broadcasting, the app checks the authoritative source RPC and resumes that transfer instead of inviting a duplicate burn.
A real 0.10 USDC Arc → Base → Arc canary completed successfully:
| Stage | Transaction |
|---|---|
| Arc burn | 0x987b…31be |
| Base mint | 0x1878…6462 |
| Base burn | 0x2e48…19d |
| Arc mint | 0x59cc…bc23 |
See Mainnet validation for the tested parameters, recovery guarantees, and limitations.
Requirements: Node.js 20+ and pnpm 10+.
git clone https://github.com/osr21/arc-relay-bridge.git
cd arc-relay-bridge
pnpm install
pnpm --filter @workspace/arc-bridge run devThe standard browser bridge does not need a deployer key, API key, or backend
signer. Optional server and contract-development variables are documented in
.env.example; real values must remain in secret storage.
pnpm --filter @workspace/arc-bridge run typecheck
pnpm --filter @workspace/scripts exec tsx --test \
../artifacts/arc-bridge/src/lib/bridge.mainnet.test.ts- Architecture and product scope
- Mainnet validation
- Technical reference
- Development guide
- Contributing
- Security policy
- Deferred relay protocol
Testnet contracts and experiments may remain in the repository for historical development work, but they are not imported by the mainnet runtime and are not part of this release.
- Connect to Arc
- Circle CCTP contract addresses
- Circle USDC addresses
- Circle CCTP overview
- Base network information
Apache-2.0. See LICENSE.