Skip to content

osr21/arc-bridge

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 

Repository files navigation

Arc Bridge

A USDC cross-chain bridge built on Arc Network using Circle's Cross-Chain Transfer Protocol (CCTP) — the burn-and-mint protocol for native USDC transfers.

Live App: https://arc-bridge.replit.app


What it does

Arc Bridge lets users move native USDC between blockchains without wrapped tokens or liquidity pools. USDC is burned on the source chain, attested by Circle, and minted natively on the destination chain.

Supported Chains

Chain CCTP Domain Status
Ethereum Sepolia 0 Live
Avalanche Fuji 1 Live
Arbitrum Sepolia 3 Live
Base Sepolia 6 Live
Arc Testnet 9 Coming Soon

Features

  • Native USDC bridging — no wrapped assets, no liquidity pools
  • 0.1% protocol fee — collected at bridge time, sent to treasury wallet
  • Transaction recovery tool — resume interrupted bridges by pasting the burn tx hash
  • WalletConnect + MetaMask — 350+ wallets supported via RainbowKit
  • Wallet-signed transactions — no private keys in the app, your wallet stays in control

How CCTP Works

1. User approves USDC to TokenMessenger on source chain
2. TokenMessenger burns USDC and emits MessageSent event
3. Circle's Iris API attests the burn (signs the message)
4. MessageTransmitter on destination chain verifies attestation and mints USDC

Getting Started

Prerequisites

  • Node.js 20+
  • pnpm 9+
  • A browser wallet (MetaMask recommended)
  • Testnet USDC from faucet.circle.com

Installation

git clone https://github.com/osr21/arc-bridge.git
cd arc-bridge
pnpm install

Environment Variables

VITE_WALLETCONNECT_PROJECT_ID=your_project_id_from_cloud_reown_com

Get a free WalletConnect project ID at cloud.reown.com.

Run Locally

pnpm --filter @workspace/cctp-bridge run dev

Project Structure

artifacts/
└── cctp-bridge/
    └── src/
        ├── lib/
        │   ├── cctp-config.ts     # Chain configs, contract addresses, ABIs
        │   ├── cctp-bridge.ts     # Core bridge logic (approve/burn/attest/mint)
        │   └── wagmi-config.ts    # Wagmi + RainbowKit configuration
        └── pages/
            ├── bridge/            # Main bridge UI
            └── recover/           # Transaction recovery tool

Fee Structure

A 0.1% protocol fee is collected on each bridge before the USDC burn:

User sends:    1,000 USDC
Protocol fee:      1 USDC  → treasury wallet
Bridged:         999 USDC  → burned via CCTP → minted on destination

Minimum fee: 0.01 USDC. If 0.1% of the amount is less than the minimum, the minimum is charged instead.


Transaction Recovery

If a bridge is interrupted after the burn (e.g. browser closed), USDC is not lost. Use the recovery tool at /recover:

  1. Select source and destination chains
  2. Paste the burn transaction hash
  3. The app fetches Circle's attestation and completes the mint

Stack

  • React + Vite — frontend
  • wagmi v2 + viem v2 — Ethereum interactions
  • RainbowKit v2 — wallet connection UI
  • TanStack Query — async state management
  • shadcn/ui + Tailwind CSS — UI components
  • pnpm workspaces — monorepo

Contract Addresses (Testnet)

Ethereum Sepolia

Contract Address
USDC 0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238
TokenMessenger 0x9f3B8679c73C2Fef8b59B4f3444d4e156fb70AA5
MessageTransmitter 0x7865fAfC2db2093669d92c0197Ab6dd7d88d3E8

Avalanche Fuji

Contract Address
USDC 0x5425890298aed601595a70AB815c96711a31Bc65
TokenMessenger 0xeb08f243E5d3FCFF26A9E38Ae5520A669f4019d
MessageTransmitter 0xa9fB1b3009DCb79E2fe346c16a604B8Fa8aE0a79

Arbitrum Sepolia

Contract Address
USDC 0x75faf114eafb1BDbe2F0316DF893fd58CE46AA4d
TokenMessenger 0x9f3B8679c73C2Fef8b59B4f3444d4e156fb70AA5
MessageTransmitter 0xaCF1ceeF35caAc005e15888dDb8A3515C41B4872

Base Sepolia

Contract Address
USDC 0x036CbD53842c5426634e7929541eC2318f3dCF7e
TokenMessenger 0x9f3B8679c73C2Fef8b59B4f3444d4e156fb70AA5
MessageTransmitter 0x7865fAfC2db2093669d92c0197Ab6dd7d88d3E8

Security

  • No private keys stored in the app — all transactions signed by user's wallet at runtime
  • Recipient address validated with isAddress() before any transaction
  • Coming-soon chains blocked at both UI and logic level
  • Minimum bridge amount enforced (1 USDC)
  • Same-chain bridging blocked

Roadmap

  • Arc Testnet support (pending Circle CCTP deployment)
  • On-chain fee contract (Option 2 — institutional-grade)
  • Revenue dashboard
  • CCTP v2 fast finality support
  • Mainnet deployment

License

MIT

About

USDC Cross-Chain Bridge on Arc Network — built with CCTP burn-and-mint protocol

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors