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)Arbitrum—Live

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.