Cross-Chain Deposits
Deposit USDC from Ethereum or Base into the 7N7D Trading Vault on Arbitrum — without manually bridging.
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 Chain | Destination | CCTP Domain | Status |
|---|---|---|---|
| Ethereum | Arbitrum | 0 → 3 | Testnet |
| Base | Arbitrum | 6 → 3 | Testnet |
| 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
- Approve — User approves the DepositRouter to spend their USDC on the source chain.
- Route — User calls
routeDeposit(amount)on the DepositRouter. The router transfers USDC from the user and calls Circle'sTokenMessenger.depositForBurn(). - Burn — USDC is burned on the source chain. Circle issues an attestation (~15 minutes).
- Mint — Using the attestation, USDC is natively minted to the DepositReceiver contract on Arbitrum.
- 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
| Item | Details |
|---|---|
| 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 fee | None — CCTP is fee-free |
| Minimum deposit | 1 USDC |
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.
| Function | Description |
|---|---|
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.
| Function | Description |
|---|---|
completeDeposit(depositor, amount, sourceDomain, nonce) | Forwards USDC to vault, mints shares to depositor |
getDepositRecord(sourceDomain, nonce) | Look up a completed cross-chain deposit |
totalDepositsCompleted | Counter of all cross-chain deposits |
totalUsdcDeposited | Total 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:
- Source chain — Transaction confirmed, USDC burned. Check the
DepositRoutedevent for your nonce. - Attestation — Wait ~15 minutes for Circle's attestation service.
- Completion — Once
completeDeposit()is called, check theDepositCompletedevent or callgetDepositRecord(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
| Contract | Address |
|---|---|
| TokenMessenger | 0x9f3B8679c73C2Fef8b59B4f3444d4e156fb70AA5 |
| ETH Sepolia domain | 0 |
| Arbitrum Sepolia domain | 3 |
| Base Sepolia domain | 6 |
SDK Support
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.