UnitFlow LogoUnitFlow Docs

ArcSuite

ArcSuite is a unified cross-chain operations hub built into UnitFlow. It consolidates four distinct actions (bridge, swap, send, and cross-chain swap) into a single tabbed interface, all powered by Circle's App Kit SDK (@circle-fin/app-kit).

ℹ️
ArcSuite is available at /arcsuite in the UnitFlow app. It operates on Arc Testnet and the other chains supported by Circle's CCTP.

Key Highlights

FeatureDetail
Sub-second finalityArc L1 settles transactions in under 1 second
USDC-native gasGas fees paid in USDC, no separate native token required
CCTP bridgingCircle's Cross-Chain Transfer Protocol for secure USDC transfers
Protocol feeInclusive fee on every transaction (bridge: min($0.01, 1%); swap: 1 bps)

Tabs

Bridge

Transfers USDC between any two supported chains via CCTP. The bridge flow executes four on-chain steps:

  1. Approve USDC - grants the TokenMessenger allowance.
  2. Burn on source chain - calls depositForBurn via the App Kit.
  3. Await CCTP attestation - polls Circle's attestation service until the burn is signed.
  4. Mint on destination chain - calls receiveMessage on the destination MessageTransmitter.

Both the source and destination chains are automatically added to the user's wallet if not already present. A step-by-step progress tracker is shown during the transaction.

The fee is inclusive: the protocol deducts min($0.01, 1% of amount) from the entered amount so the user's total wallet debit equals exactly what they typed. The fee is forwarded to the protocol fee recipient via AppKit.bridge({ config: { customFee: { value, recipientAddress } } }).

Swap

Swaps stablecoins on Arc Testnet using the App Kit's kit.swap() method. Currently supports USDC / EURC on Arc Testnet.

Before executing, the UI calls kit.estimateSwap() on blur to show the estimated output, minimum received, and protocol fee breakdown. The swap call is proxied through a local Next.js API route to avoid CORS restrictions on Circle's API.

ParameterValue
ChainArc Testnet (Arc_Testnet)
Supported tokensUSDC, EURC
Fee100 bps (1%) via customFee.percentageBps

Send

Sends USDC, EURC, or the native token to any wallet address on a supported chain using kit.send(). The recipient address is validated as a checksummed EVM address before submission.

FieldDetail
Supported tokensUSDC, EURC, NATIVE
Supported chainsAll chains in BRIDGE_TESTNET_CHAINS
Address validationViem isAddress() check before enabling submit

Cross-Chain Swap

Combines a swap and a bridge into a single two-step flow:

  1. Swap on Arc Testnet - swaps the input token (EURC or USDC) to USDC using kit.swap().
  2. Bridge to destination - bridges the USDC output from Arc Testnet to the chosen destination chain via CCTP using kit.bridge().

Both Arc Testnet and the destination chain are added to the wallet automatically before execution begins. The UI shows separate progress trackers for each step. The bridge amount is taken directly from the swap's amountOut, with the inclusive bridge fee deducted before the CCTP call.

Supported Chains

ChainChain IDBridge Kit NameUSDC Decimals
Arc Testnet5042002Arc_Testnet18
Ethereum Sepolia11155111Ethereum_Sepolia6
Avalanche Fuji43113Avalanche_Fuji6
Arbitrum Sepolia421614Arbitrum_Sepolia6
Base Sepolia84532Base_Sepolia6
Optimism Sepolia11155420Optimism_Sepolia6
Polygon Amoy80002Polygon_Amoy_Testnet6
Codex Testnet80085Codex_Testnet6
Ink Testnet763373Ink_Testnet6
Linea Sepolia59141Linea_Sepolia6
Plume Testnet161221135Plume_Testnet6
Solana Devnetn/aSolana_Devnet6
ℹ️
Arc Testnet uses 18 decimal places for native USDC. All other chains use 6. The App Kit handles decimal conversion internally.

SDK Integration

ArcSuite uses two Circle packages:

  • @circle-fin/app-kit - provides the AppKit class with bridge(), swap(), estimateSwap(), and send() methods.
  • @circle-fin/adapter-viem-v2 - wraps the connected wallet's EIP-1193 provider into a viem-compatible adapter via createViemAdapterFromProvider().

The EIP-1193 provider is obtained from the active wagmi connector using a getEIP1193Provider(connector, walletClient) helper that handles both injected and WalletConnect connectors.

Fee Configuration

ParameterValueUsed in
FEE_RECIPIENT0x3682652cd0995e6972ccf7245a1caea95c2955b8Bridge, Swap, Cross-Chain Swap
Bridge feemin($0.01, 1% of amount) - inclusive flat feeBridge, Cross-Chain Swap (bridge leg)
Swap fee100 bps (1%) via percentageBpsSwap, Cross-Chain Swap (swap leg)

Component Structure

FilePurpose
src/app/arcsuite/page.tsxRoute entry, renders ArcSuiteHub inside a Suspense boundary
src/components/arcsuite/ArcSuiteHub.tsxTab container with feature highlight cards and footer links
src/components/arcsuite/ArcSuiteBridge.tsxBridge tab, CCTP bridge via App Kit
src/components/arcsuite/ArcSuiteSwap.tsxSwap tab, stablecoin swap on Arc Testnet
src/components/arcsuite/ArcSuiteSend.tsxSend tab, token transfer to any address
src/components/arcsuite/ArcSuiteCrossChainSwap.tsxCross-Chain Swap tab, swap then bridge in one flow
src/config/appKit.tsKit key, fee recipient, and fee constants
src/config/bridgeKit.tsChain registry (BRIDGE_TESTNET_CHAINS) with RPC, explorer, and USDC addresses