Skip to main content

Cross-Chain Deposits

Deposit USDC from Ethereum or Base into the 7N7D Trading Vault on Arbitrum — without manually bridging.

Circle CCTP

Cross-chain deposits use Circle CCTP (Cross-Chain Transfer Protocol), the official native USDC bridge. Your USDC is burned on the source chain and minted natively on Arbitrum — no wrapped tokens, no third-party bridges.

Supported Chains

Source ChainDestinationCCTP DomainStatus
EthereumArbitrum0 → 3Testnet
BaseArbitrum6 → 3Testnet
Arbitrum (direct)ArbitrumLive

Direct Arbitrum deposits go straight to the vault — no bridging needed. See Deposit & Withdraw.

How It Works

Source Chain (ETH / Base)              Arbitrum
┌──────────────────────┐ ┌──────────────────────┐
│ │ │ │
│ 1. User sends USDC │ │ 4. CCTP mints USDC │
│ to DepositRouter │ │ to DepositReceiver│
│ │ │ │
│ 2. Router calls │ Circle │ 5. Receiver deposits │
│ CCTP burn ───────┼──attestation─┼──► into TradingVault │
│ │ (~15 min) │ │
│ 3. USDC burned │ │ 6. User gets vault │
│ on source chain │ │ shares │
│ │ │ │
└──────────────────────┘ └──────────────────────┘

Step-by-Step Flow

  1. Approve — User approves the DepositRouter to spend their USDC on the source chain.
  2. Route — User calls routeDeposit(amount) on the DepositRouter. The router transfers USDC from the user and calls Circle's TokenMessenger.depositForBurn().
  3. Burn — USDC is burned on the source chain. Circle issues an attestation (~15 minutes).
  4. Mint — Using the attestation, USDC is natively minted to the DepositReceiver contract on Arbitrum.
  5. Complete — Anyone can call completeDeposit() on the DepositReceiver. The receiver deposits the USDC into the TradingVault (ERC-4626) and vault shares are minted directly to the depositor's address.

Timing & Fees

ItemDetails
Bridge time~15 minutes (Circle attestation)
Source chain gas~$1–5 on Ethereum, ~$0.01 on Base
Destination gas~$0.20 on Arbitrum (for completeDeposit)
Bridge feeNone — CCTP is fee-free
Minimum deposit1 USDC
Use Base for Cheaper Deposits

Depositing from Base costs a fraction of Ethereum gas. If you have USDC on Base, it's the cheapest path to the vault.

Contracts

DepositRouter (Source Chains)

Deployed on Ethereum and Base. Accepts USDC and routes it to Arbitrum via CCTP.

FunctionDescription
routeDeposit(amount)Burns USDC via CCTP, returns a nonce for tracking
addressToBytes32(addr)Helper to convert address for CCTP mint recipient

Security features:

  • ReentrancyGuard on deposits
  • Pausable by owner (emergency only)
  • Minimum deposit enforcement (1 USDC)
  • rescueTokens() for accidentally sent tokens

DepositReceiver (Arbitrum)

Receives CCTP-minted USDC and deposits into the TradingVault.

FunctionDescription
completeDeposit(depositor, amount, sourceDomain, nonce)Forwards USDC to vault, mints shares to depositor
getDepositRecord(sourceDomain, nonce)Look up a completed cross-chain deposit
totalDepositsCompletedCounter of all cross-chain deposits
totalUsdcDepositedTotal USDC received cross-chain

Security features:

  • ReentrancyGuard on completions
  • Duplicate deposit prevention (nonce-based)
  • Balance verification before vault deposit
  • Pausable by owner (emergency only)
  • rescueTokens() for accidentally sent tokens

Tracking Your Deposit

Each cross-chain deposit returns a nonce from CCTP. You can track the deposit through its lifecycle:

  1. Source chain — Transaction confirmed, USDC burned. Check the DepositRouted event for your nonce.
  2. Attestation — Wait ~15 minutes for Circle's attestation service.
  3. Completion — Once completeDeposit() is called, check the DepositCompleted event or call getDepositRecord(sourceDomain, nonce).

Limitations

  • Testnet only — Cross-chain deposits are currently available on Sepolia, Base Sepolia, and Arbitrum Sepolia testnets.
  • USDC only — Other tokens must be swapped to USDC before depositing.
  • Attestation delay — The ~15 minute wait for Circle attestation is not under our control.
  • Manual completion — Someone must call completeDeposit() on Arbitrum after CCTP mints the USDC. This will be automated in a future release.

Circle CCTP Testnet Addresses

ContractAddress
TokenMessenger0x9f3B8679c73C2Fef8b59B4f3444d4e156fb70AA5
ETH Sepolia domain0
Arbitrum Sepolia domain3
Base Sepolia domain6

SDK Support

Coming Soon

The SDK does not yet include cross-chain deposit methods. For now, interact with the DepositRouter contract directly. SDK support (client.vault.crossChainDeposit()) is planned.


Next: Understand the Fee Structure.