Cross-chain USDC bridge supporting EVM ↔ EVM, EVM → Solana, and Solana → EVM transfers using Circle's CCTP v2 protocol.
Built with Next.js App Router, Wagmi/RainbowKit (EVM), Solana Wallet Adapter, Zustand, and a custom CCTP library.
bun install # Install dependencies
bun run dev # Start dev server (localhost:3000)
bun run lint # Run TypeScript checks (auto-creates placeholder generated metadata if missing)
bun run build # Build production bundle
bun run metadata:refresh # Regenerate CCTP metadata + validated RPC candidates| Source | Destination | Implementation |
|---|---|---|
| EVM | EVM | Direct CCTP v2 (custom library) |
| EVM | Solana | Direct CCTP v2 (custom library) |
| Solana | EVM | Direct CCTP v2 (custom library) |
NEXT_PUBLIC_BRIDGEKIT_ENV=testnet|mainnet # Chain environment (default: testnet)
NEXT_PUBLIC_BRIDGEKIT_CUSTOM_FEE=<amount> # Optional integrator fee (USDC)
NEXT_PUBLIC_BRIDGEKIT_CUSTOM_FEE_RECIPIENT=<addr> # Fee recipient address
NEXT_PUBLIC_DISABLE_META_ANALYTICS=1 # Optional: disable verified bridge analytics emission
CORS_ORIGIN=https://your-app-domain.example # Required in CI for RPC validation; local fallback defaults to https://cctp.ioBridge analytics events are emitted server-side from /bridge/<source>/<id> only after Iris-based transaction recovery succeeds.
Deprecated variables NEXT_PUBLIC_BRIDGEKIT_RPC_OVERRIDES and NEXT_PUBLIC_BRIDGEKIT_TRANSFER_SPEED are ignored and now emit runtime warnings when present.
lib/cctp/— Custom CCTP v2 library with unified interfaces for EVM and Solanalib/metadata/— metadata loaders/types (generated JSON lives under.generated/metadata/)lib/rpc/— app-owned wallet-first RPC routing and rotating fallback transportslib/bridgeKit.ts— compatibility facade backed by local metadata + RPC modulescomponents/bridging-state/— Modular bridge progress UI (decomposed into hooks + sub-components)
/— bridge setup form and pre-burn pending (query-driven)/bridge— add pending transaction form (history button destination, query-prefill viaid,hash,error)/bridge/<source_chain_id>/<tx_hash_or_nonce>— shareable tracking route; invalid or unrecoverable IDs redirect to/bridgewith prefilled query params
scripts/generate-cctp-metadata.tsbuilds.generated/metadata/cctp.generated.jsonfrom BridgeKit.scripts/generate-rpc-candidates.tsfetches Chainlist RPCs, runs CORS validation withOrigin: $CORS_ORIGIN, and writes:.generated/metadata/rpc.generated.json.generated/reports/rpc-validation-report.json
bun run buildrunsmetadata:refreshautomatically viaprebuild.
See CLAUDE.md for detailed architecture documentation.