> ## Documentation Index
> Fetch the complete documentation index at: https://docs.calibri.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Deposits from other networks

> Send USDC to your Safe address on Ethereum, Base, Arbitrum or Optimism and it arrives in the same Safe on Polygon — how it works, what it costs, what not to send, and why it stays non-custodial.

Calibri trades on **Polygon**, but you do not have to fund your account from Polygon.
Your Safe has **the same address on every supported network**. Send USDC to that address
on **Ethereum, Base, Arbitrum or Optimism** and it is moved to **the same Safe on
Polygon** automatically, through Circle's own bridge. You sign nothing.

It arrives as an ordinary deposit, exactly as if you had sent it on Polygon.

<Note>
  Sending USDC on **Polygon** is unchanged: no fee, no minimum, usually credited within a minute. Everything on this page is about the other networks.
</Note>

To send USDC the other way — from your Safe to an address on another network — see
[Withdrawals to other networks](/non-custodial/withdrawals-to-other-networks).

## Supported networks

| Network | Minimum before we bridge | Fee | Typical time |
| - | - | - | - |
| **Polygon** | None | None | About a minute |
| **Ethereum** | 20 USDC | Covers network gas — at most 10 USDC and at most 20% | About 15–20 minutes |
| **Base** | 5 USDC | Same rule | About 15–20 minutes |
| **Arbitrum** | 5 USDC | Same rule | About 15–20 minutes |
| **Optimism** | 5 USDC | Same rule | About 15–20 minutes |

The Wallet page shows the current minimum, fee estimate and arrival time for each network.
If it and this page ever disagree, the Wallet page is right.

When gas costs more than those caps allow — mostly on Ethereum — nothing is charged above
them without your say-so: the deposit waits and the Wallet page asks you. See
[When Ethereum gas is high](#when-ethereum-gas-is-high).

<Warning>
  **Only USDC, and only on the networks above.** Other tokens — ETH, USDT, or bridged versions of USDC such as USDC.e — and USDC on any other network, **including Solana**, are **not recovered automatically**. See [What not to send](#what-not-to-send).
</Warning>

## How it works

<Steps>
  <Step title="You send USDC to your Safe address">
    On Ethereum, Base, Arbitrum or Optimism — from an exchange or any wallet. It is the
    same address as on Polygon, and the same one the Wallet page shows.
  </Step>

  <Step title="We wait for the minimum">
    Below the minimum for that network, the USDC waits at your address. Send more and the
    deposits are combined; once the total reaches the minimum, it all moves together, for
    one fee.
  </Step>

  <Step title="Your Safe is created on that network, if needed">
    Your Safe's address is fixed in advance, but the contract only exists on a network once
    something needs it. On your first bridge from a network, Calibri creates it there —
    owned by exactly the same owner as your Safe on Polygon, and nobody else.
  </Step>

  <Step title="The USDC is bridged">
    One transaction on that network pays the fee and hands the rest to **Circle's
    Cross-Chain Transfer Protocol (CCTP)**, which burns it there with your Safe's own
    Polygon address as the only recipient.
  </Step>

  <Step title="Circle attests the burn">
    Circle waits for the burn to be final on Ethereum and signs an attestation. This is
    most of the wait — it is Circle's **Standard** transfer, which Circle does not charge
    for today.
  </Step>

  <Step title="It arrives on Polygon">
    The attestation is submitted on Polygon and Circle mints the same amount of native
    USDC directly into your Safe there.
  </Step>

  <Step title="It is credited as a normal deposit">
    The mint lands in your Safe like any other Polygon deposit, and is credited to your
    balance the same way. From here on it is ordinary USDC in your Safe.
  </Step>
</Steps>

## What the Wallet page shows

* **A network picker** above your deposit address — Polygon first, then the other
  networks. The address itself **does not change** when you switch; it is labelled
  *Same address on every network*. Only the notes under it change: the network's
  **minimum**, its **fee** estimate with the cap, and **roughly how long it takes**.
* If you use your own wallet, the same address is under **Deposit from another network**,
  below the deposit form.
* **From other networks** — each USDC transfer on its way in, with four steps:
  **Received on (network) → Bridging → Arriving on Polygon → Credited**. A transfer
  below the minimum says how much more to send. Each one links to its transactions on the
  block explorers: your deposit, the bridge, and the arrival on Polygon.
* **A transfer waiting on gas** — when bridging it would cost more than the standard fee,
  it says *Ethereum gas is high right now* and shows the amount, the fee and what you
  would receive, with **Bridge now** and **Wait for lower gas**. One too small to cover
  the cost at current gas says so, and how much the cost is. See
  [When Ethereum gas is high](#when-ethereum-gas-is-high).
* **Credited** is shown only once the Polygon deposit has been accepted into your
  balance. Transfers stay under **History** afterwards.

If a transfer stops, it says so and gives you a reference. Contact support and quote it.

<Note>
  If the Wallet page offers only Polygon, deposits from other networks are not available for your wallet. Send USDC on Polygon.
</Note>

## Fees, minimums and timing

**The fee covers the network gas** of moving your USDC — the bridge transaction, the
delivery on Polygon, and, on your first bridge from a network, creating your Safe there.
It is not a trading fee and it is not a percentage we set per deposit. The standard fee is
capped by the contract itself:

* **At most 10 USDC**, and
* **At most 20% of the amount** being bridged,
* **One fee per bridge.** Deposits combined while waiting for the minimum are bridged
  together, for one fee.

The fee is taken **before** the burn, in USDC, on the network you sent from. The rest is
what arrives on Polygon. Circle charges nothing for Standard transfers today; if that ever
changes, Circle's own fee would come out of the amount it mints.

| You send | Fee can be at most | You receive at least |
| - | - | - |
| 5 USDC on an L2 | 1.00 USDC (20%) | 4.00 USDC |
| 20 USDC on Ethereum | 4.00 USDC (20%) | 16.00 USDC |
| 100 USDC on any network | 10.00 USDC (the absolute cap) | 90.00 USDC |

Those are the standard fee's ceilings, not estimates, and they assume Circle still charges
nothing. The fee charged is the gas cost at the time, and the Wallet page shows the current
estimate before you send. A fee above them is charged only if you accept it for that
deposit — see [When Ethereum gas is high](#when-ethereum-gas-is-high).

**Minimums** are Calibri's, not the contract's: 20 USDC on Ethereum, where gas is
expensive, and 5 USDC on the L2s. Below it nothing is lost — the USDC waits at your address
until more arrives. You can also move it yourself at any time for no fee (see
[Moving it yourself](#moving-it-yourself)).

**Timing.** About 15–20 minutes from any of the four networks. That time is **Circle's
finality wait, not ours**: a Standard transfer is attested only once the burn is final on
Ethereum — and Base, Arbitrum and Optimism settle to Ethereum, so they take about as long.
Below the minimum, the clock starts when the total reaches it.

## When Ethereum gas is high

Sometimes moving a deposit costs more than the standard fee is allowed to cover. This is
mostly Ethereum: at ordinary Ethereum gas prices it applies to most deposits there,
especially small ones and your first from Ethereum, which also creates your Safe there. On
Base, Arbitrum and Optimism it is rare.

Calibri does not cover the difference, and does not charge above the cap without asking. The
deposit waits at your address, and the Wallet page shows it with the **amount**, the
**fee** it would cost now, and what **you receive**. You choose:

* **Bridge now** — accept the fee shown. It is taken from that deposit, in USDC, and the
  rest is bridged to your Safe on Polygon as usual. If the fee is more than half the
  amount, the app asks you to confirm separately that you will receive only what is shown.
* **Wait for lower gas** — do nothing. We re-check every 10 minutes and bridge
  automatically, at the standard fee, as soon as it covers the cost.

The offer shows how long it is valid for. If it lapses, or gas rises before the bridge is
sent, you are shown the new fee and asked again. You are never charged more than the fee
you accepted.

**A deposit too small to cover the cost** at current gas cannot be offered at all: the fee
would be the whole amount or more. It waits at your address. Send more USDC to the same
address — it is combined with what is there — or wait for gas to drop; either one brings it
back to the choice above, or bridges it automatically at the standard fee.

We email you and send a notification when a deposit first needs your decision, and remind
you at most once a day while it waits. A changed fee on its own does not trigger another
message.

**Timing.** The 15–20 minutes start when the bridge is sent — when you accept, or when gas
drops. A deposit waiting for lower gas can wait hours or longer; it is safe at your address
the whole time, and you can [move it yourself](#moving-it-yourself) for no fee.

<Note>
  **Deposit on Polygon to avoid this fee.** USDC sent on Polygon is credited directly, with no bridge, no fee and no minimum.
</Note>

### How your acceptance is checked

Above the standard cap, a fee is charged only after you accept it in the app. The
acceptance is countersigned by a dedicated Calibri key and checked by the module on-chain;
the fee charged is exactly the signed amount, tied to that deposit, and expires within an
hour. Calibri could, if that key were misused, charge a fee up to the full amount of a
deposit it countersigns — the same class of trust as the relayer key; you can always
bridge yourself for free with your own ETH.

In practice:

* **Tied to that deposit.** A countersigned fee names your Safe and the balance you were
  quoted, and is spent once. If the Safe is bridged in the meantime by anyone — including
  you, for free — it can no longer be used, so it can never be reused on USDC you send
  after that deposit has moved.
* **Not the relayer's key.** The key that countersigns is separate from the relayer that
  sends the bridge. The relayer alone can still take at most the standard capped fee.
* **The destination does not change.** Whatever the fee, the rest goes only to your own
  Safe on Polygon.

## What not to send

<Warning>
  **Only native USDC, issued by Circle, on Ethereum, Base, Arbitrum or Optimism** is moved automatically. Anything else sent to your Safe address on those networks stays there:

  * **Other tokens** — ETH, USDT, or bridged USDC such as USDC.e.
  * **USDC on any network not listed** — including **Solana**, which has a different address format altogether.

  None of it is recovered automatically. If you use a **passkey**, it cannot be moved at all today (see [The caveats](#the-caveats)). If you use **your own wallet**, you can move it yourself by signing a Safe transaction on that network.
</Warning>

## Why this is still non-custodial

Moving money between networks without asking you to sign sounds like the one thing a
non-custodial service should not be able to do. Here is exactly what makes it possible,
and exactly what it is limited to.

### One module, one job

Every Safe is created with one **module** enabled — the **CctpBridgeModule**. A Safe module
is a contract the Safe allows to act without owner signatures, so everything depends on
what the module's own code allows. That code is immutable, and it can do **exactly one
thing**: move that network's USDC through Circle to **the same Safe address on Polygon**.

| The module can | The module cannot |
| - | - |
| Move that network's **USDC** out of your Safe | Move any other token, or ETH |
| Send it through **Circle's CCTP**, to **your own Safe address on Polygon** | Send it anywhere else — the destination is fixed in code, never a parameter, never a setting |
| Pay **one capped fee** to Calibri's treasury, only when Calibri's relayer is the caller | Take more than 10 USDC, or more than 20% of the amount, per bridge — unless you accepted a higher fee for that deposit (see [How your acceptance is checked](#how-your-acceptance-is-checked)) |
| — | Delegatecall, or change your Safe's owners or settings |

There is no argument to point the funds somewhere else, no stored destination, and no
admin switch that changes it. The mint recipient is the address of the Safe the USDC came
out of.

### It is there from the start

The module is switched on **when the Safe is created**, in the same transaction, by the
Safe factory. There is never a moment when your Safe exists without it, and nobody can
create your Safe differently first. Your Safe on Polygon has it too; there it does nothing,
because there is no route from Polygon to itself.

### The fee is bounded in code

Three addresses are configurable — the **relayer** allowed to charge the fee, the
**treasury** it is paid to, and the dedicated **consent key** that countersigns a fee you
accepted above the cap — and only by the fee-configuration admin. Everything that
decides where your money ends up is not configurable at all: the destination, the token,
Circle's contract and the fee caps are fixed in the module. Changing any of them would take
a new module at a new address, and so a different Safe address.

### Anyone can move it — including you

Anyone may call the bridge with **a zero fee**. That is deliberate. If Calibri
disappeared, you — or anyone — could still move USDC stranded on another network to your
Safe on Polygon, and the worst a stranger could do is move your USDC to where you meant it
to go. See [Moving it yourself](#moving-it-yourself).

### Calibri never holds a key

Calibri creates your Safe on the other network through a **permissionless** factory:
`createProxyFor(owner)` makes a Safe owned solely by `owner`, whoever pays for it. The
owner is your own — your wallet, or your passkey's signer — exactly as on Polygon.
Calibri is never an owner, on any network, and holds no key that could sign for your Safe.

### Who can do what

| Who | Can | Cannot |
| - | - | - |
| **Anyone** | Bridge your Safe's USDC with no fee; create your Safe on another network | Send it anywhere but your Safe on Polygon; take a fee; touch other tokens or ETH |
| **Calibri's relayer** | The above, plus **one** fee per bridge of the whole balance, capped at 10 USDC and 20%; and send a higher fee you accepted, once it is countersigned | Take a fee on part of the balance; exceed the caps without a countersigned acceptance; redirect the USDC or the fee |
| **Calibri's consent key** | Countersign a fee above the cap for one deposit, once; with the relayer, that fee can be up to the deposit's full amount | Send a bridge itself; redirect the USDC or the fee |
| **Fee-configuration admin** | Change the relayer, the treasury and the consent key | Change the caps, the destination, the token or Circle's contract |
| **You** (your wallet) | Anything a Safe owner can do, on every network — including switching the module off | — |
| **You** (a passkey) | Everything on Polygon | Sign anything on another network — see below |
| **Circle** | Operate the bridge: burn on one side, mint to the recipient on the other | — |

Circle is trusted here in the same way it is trusted with USDC itself: it issues the
token, and it runs the bridge that burns and mints it.

## The caveats

<Warning>
  **Passkey wallets: on other networks, the module is the only way out.** Your passkey's signer contract exists only on Polygon. On any other network your Safe's owner is an address with no contract behind it, so **no signature from you can ever be verified there**. That means:

  * The module **cannot be switched off** on those networks.
  * It is the **only** way USDC there can move — which is why it is limited to sending it to your own Safe, and why anyone can trigger it.
  * **Anything other than USDC** sent to your address there needs your signature to move, and that signature **cannot be produced today**. Treat it as lost.
</Warning>

* **Signing keys and owner changes do not carry over.** Your Safe on another network is
  created with the owner your Polygon Safe was created with. A
  [signing key](/non-custodial/signing-keys) you add on Polygon cannot sign there, and if
  the original owner is later replaced on Polygon, it still controls the Safe on the other
  networks. The module still moves USDC there to Polygon either way.
* **Someone can bridge before we do.** Anyone can call the bridge with no fee ahead of
  Calibri's relayer. You lose nothing — the USDC still goes only to your Safe on Polygon,
  and no fee is charged on what they move.
* **Anyone can trigger the bridge.** USDC sitting in your Safe on another network can be
  bridged by anyone, even if you wanted it to stay there. It can only ever go to your own
  Safe on Polygon. If you use your own wallet and object, you can switch the module off on
  that network — automatic bridging from it then stops.
* **If Calibri's relayer key were stolen**, the most it could do is bridge a Safe's whole
  USDC balance to that same Safe on Polygon, taking one capped fee — at most 10 USDC and 20%
  — per bridge. It could not redirect the USDC or the fee, and could not drain a Safe
  through repeated small calls. Charging more takes the separate consent key as well (see
  [How your acceptance is checked](#how-your-acceptance-is-checked)).

## Moving it yourself

You never need Calibri to move USDC from another network to your Safe on Polygon. Anyone
with a little gas on that network can call the module with no fee. The steps are on
[Withdrawing without Calibri](/non-custodial/withdraw-without-calibri#usdc-on-another-network).

## Related

<CardGroup cols={2}>
  <Card title="Funding your account" href="/wallet-deposits">
    The deposit address, the network picker, and what to send.
  </Card>

  <Card title="The Safe" href="/non-custodial/the-safe">
    What your Safe is, and what can act on it.
  </Card>

  <Card title="Withdrawals to other networks" href="/non-custodial/withdrawals-to-other-networks">
    The other direction: from your Safe to an address on another network.
  </Card>

  <Card title="Fees" href="/concepts/fees">
    The trading fee, and the bridge fee on other networks.
  </Card>

  <Card title="Smart Contracts" href="/smart-contracts/overview">
    The bridge contracts and their trust model.
  </Card>
</CardGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.