Bridge Tokens Between Chains — Step-by-Step on Using Stargate, Across, and CCTP
Learn exactly how to move assets across chains securely and efficiently. This guide covers three industry-standard options—Stargate, Across, and Circle’s CCTP (for native USDC)—with practical tips, verification steps, and safety best practices.
Why Bridging Matters (and When You Should Do It)
Web3 isn’t a single blockchain. It’s a network of execution layers and app ecosystems—Ethereum mainnet for security and settlement, rollups like Arbitrum and Optimism for cheaper execution, and emerging L2s/L3s such as Base, zkSync, and Linea for new user experiences. To access the best apps, yields, or airdrop campaigns, you often need to move assets (ETH, USDC, wBTC, etc.) across chains. That’s where bridges come in.
At a high level, a bridge either locks and mints a synthetic representation of your asset on the destination chain (canonical or third-party models), or it burns and mints the same token natively across chains (as with Circle’s USDC via CCTP). Each model has different trust assumptions, speed, and fee characteristics. Picking the right tool for your use case can save time, money, and headaches.
Before You Bridge: Setup & Safety Checklist
Set up once, bridge safely forever. Spend five minutes confirming the following before you move funds:
- Wallet installed and updated: Use a reputable wallet (e.g., MetaMask, Rabby, or hardware wallets like Ledger/Trezor with a browser wallet). Ensure you’re on the latest version.
- Add networks via Chainlist: If your destination chain isn’t visible, add it from a trusted source such as
Chainlist.org. Confirm the chain ID matches the official docs. - Gas on both chains: You’ll need the native token for gas on the destination chain too. For example, bridging to Arbitrum requires ARB chain gas (ETH on Arbitrum); bridging to Base requires ETH on Base (basescan.org). Top up a small amount first.
- Verify official URLs: Only use the official apps:
- Stargate: stargate.finance (bridge UI lives at
/transferor “Transfer” inside the site) - Across: across.to
- Circle CCTP (docs/overview): circle.com/cross-chain-transfer-protocol and
developers.circle.com/stablecoins/docs/cctp
- Stargate: stargate.finance (bridge UI lives at
- Contract allowances: If a bridge requires token approvals, use a spender-limit approval (not unlimited), and periodically review with revoke.cash.
- Small test first: Bridge a small amount to confirm routing, speed, and receipt. Scale only after you’ve verified the destination balance and token address.
- Destination address format: Most EVM L2s share the same address format as Ethereum. Always double-check the receiving address in your wallet UI before you sign.
Which Bridge Should You Use?
Each tool shines in a different scenario:
- Stargate (by LayerZero): Great for liquid, single-transaction stablecoin and blue-chip asset transfers across supported chains with deep liquidity. Supports a wide set of networks and tokens. App: stargate.finance
- Across: Optimized for fast, cost-efficient transfers between major L2s and Ethereum using a capital-efficient relayer design. Excellent UX and transparent fee breakdowns. App: across.to
- Circle CCTP: For native USDC only (no wrappers). CCTP burns USDC on the source chain and mints USDC on the destination, so you finish with canonical USDC (not a bridged representation). Overview: Circle CCTP
How to Bridge with Stargate (Step-by-Step)
Stargate is a widely used cross-chain liquidity transport powered by LayerZero. In plain English: you swap assets across chains using unified liquidity pools and a messaging layer, typically in one transaction with predictable finality. Below is a generalized flow (exact screens can vary as the app evolves).
Prerequisites
- Wallet connected to the source chain (e.g., Ethereum, Arbitrum, Optimism, Base).
- Gas on the source chain and (ideally) a little gas on the destination chain.
- The token you intend to bridge (e.g., USDC, USDT, ETH—availability varies by chain).
Step-by-Step
- Open the official app: Navigate to stargate.finance → “Transfer” (or “Bridge”) and connect your wallet.
- Select assets: Choose your source chain and destination chain, then pick the token and amount.
If you see a warning about limited liquidity, consider a smaller test amount. - Check the route and fees: Stargate shows estimated arrival, bridge fee, and minimum received.
If slippage settings are available, set a reasonable tolerance (e.g., 0.1–0.5% for stablecoins). - Approve token (if required): For ERC-20 transfers you’ll often need to approve the token for spending.
Prefer a custom approval equal to your intended amount. Confirm the spender is a Stargate contract. - Execute transfer: Click “Transfer” (or equivalent) and confirm the transaction in your wallet.
You can follow the transaction on a block explorer (e.g., Etherscan, Arbiscan, BaseScan). - Wait for finality: Depending on chains and congestion, arrival can range from seconds to minutes.
Keep the tab open until the status reads “Complete.” - Verify funds: Switch your wallet to the destination chain and check the token balance.
If the token doesn’t appear, import its correct contract address from a trusted explorer (never random websites).
Good Practices with Stargate
- Destination gas: If you arrive broke on gas, transfers are awkward. Keep ~$1–$10 worth of native gas on the target chain when possible.
- Liquidity awareness: Big transfers during low-liquidity hours can add slippage. Break into chunks or compare routes.
- Approvals hygiene: Revoke old allowances periodically via revoke.cash.
How to Bridge with Across (Step-by-Step)
Across is a fast bridge built around a relayer model and an optimistic verification period. In practice, users often experience low fees and quick arrivals when moving assets between major L2s and Ethereum. Across explicitly shows its bridge fee, gas estimate, and time estimate, which is great for planning.
Prerequisites
- Wallet connected (MetaMask, Rabby, hardware + browser combo).
- Source-chain gas and destination-chain gas (for any follow-up transactions).
Step-by-Step
- Open the official app: Visit across.to and connect your wallet.
- Choose route: Select source chain, destination chain, and token. Across commonly supports ETH, USDC, USDT, and other majors on L2s.
- Review quotes: Across will show Bridge Fee, Relay Fee, and Estimated Time.
If you’re flexible, try slightly different amounts to seek a better fee tier. - Approve token (if required): For ERC-20s, approve the minimal amount necessary for the transfer.
- Initiate transfer: Click “Bridge” and sign the transaction.
Some routes finalize in minutes; others may require an optimistic window to settle trustlessly. - Confirm receipt: On completion, switch your wallet to the destination chain and confirm the token balance.
Import a verified token address if you don’t see it in the wallet UI.
When Across Shines
- L2 ↔ L2 or Ethereum ↔ L2 transfers where you want speed and transparent fees.
- Medium-sized moves where slippage control and predictable arrival matter.
- Frequent movers who appreciate a clean UI and concise cost breakdowns.
How to Bridge USDC via CCTP (Native Burn-and-Mint)
Circle’s Cross-Chain Transfer Protocol (CCTP) enables native USDC transfers across supported chains. Instead of “locking” USDC and issuing a wrapped version, CCTP burns USDC on the source chain and mints USDC on the destination chain. The result: you hold canonical, Circle-issued USDC on arrival—no wrappers, no unwrapping.
End-users typically access CCTP through partner UIs (bridges and wallets) that have integrated the protocol. You can learn about the design and partner ecosystem here:
Circle CCTP Overview and
Developer Docs.
Prerequisites
- USDC on the source chain (the Circle-issued version). If you hold a wrapped or bridged USDC (e.g., “USDC.e”), first swap into the canonical USDC on that chain when possible.
- Gas on source and destination chains.
- A CCTP-enabled UI (bridge/wallet aggregator) that supports your chain pair. Many popular bridges and wallets provide a “USDC (CCTP)” route.
Step-by-Step (Generic CCTP Flow via a Partner UI)
- Open a trusted, CCTP-enabled partner UI: From the partner’s website, choose USDC as the asset and select your source and destination chains. (Always confirm you are on the partner’s authentic domain.)
- Enter transfer amount: The UI should label the route as “USDC (CCTP)” or “Native USDC.”
You’ll typically see an estimated arrival time and any service fees (if applicable). - Approve USDC (if needed): As with other ERC-20s, a one-time approval may be required. Prefer exact or bounded approvals.
- Initiate transfer: Confirm the “burn” on the source chain. Behind the scenes, the protocol coordinates a mint on the destination chain.
- Wait for mint finality: Arrival is usually quick, though it can vary based on partner and network conditions.
- Verify canonical USDC: On the destination chain, ensure the token contract matches the official USDC address (use reputable explorers).
If your wallet UI doesn’t show it automatically, add the verified contract address manually.
Why Use CCTP for USDC?
- Native outcome: You end up with canonical USDC, which maximizes compatibility across dApps on the destination chain.
- No wrapper confusion: You avoid “USDC.e” or other bridged variants that sometimes have inferior liquidity.
- Institutional clarity: CCTP is operated by the USDC issuer, making provenance straightforward to reason about.
Stargate vs. Across vs. CCTP — Quick Comparison
| Feature | Stargate | Across | CCTP (USDC only) |
|---|---|---|---|
| Primary Purpose | Unified liquidity for cross-chain swaps/bridges | Fast, low-cost L2/L1 transfers via relayers | Native USDC burn-and-mint across chains |
| Asset Coverage | USDC, USDT, ETH (varies by chain) | ETH, USDC, USDT + majors (varies) | USDC only (canonical) |
| Trust Model | LayerZero messaging + Stargate pools | Optimistic verification + relayers | Issuer-level mint/burn by Circle |
| Typical Speed | Minutes (network-dependent) | Minutes; often very fast on L2s | Usually minutes (partner-dependent) |
| Best Use Cases | Stablecoin/blue-chip moves across many chains | L2↔L2 ETH/stablecoin moves with clear fees | USDC that must remain canonical on arrival |
| Where to Start | stargate.finance | across.to | circle.com/cctp |
Always confirm supported chains/tokens inside each app before starting a transfer.
Fees, Gas, and Slippage — What to Expect
Your all-in cost is a combination of source chain gas, bridge protocol fees, destination chain gas, and occasionally slippage if a pool swap is involved. Ballpark expectations:
- Source gas: On Ethereum mainnet, gas can be expensive during peak hours. L2s are cheaper. Consider off-peak times.
- Bridge fees: Across displays fees clearly; Stargate often embeds them in the quote. CCTP partners may add a service fee.
- Slippage: For stablecoins in deep pools, slippage is usually near zero; for volatile tokens or thin liquidity, set a conservative slippage tolerance.
- Hidden costs: If you arrive without destination gas, you may need an extra swap/bridge to fund gas—plan ahead to avoid this.
Verification Steps You Should Never Skip
- URL authenticity: Use bookmarks or navigate from official Twitter/Docs/GitHub. Beware ads and look-alike domains.
- Token contract address: Copy from reputable explorers (e.g., Etherscan, Arbiscan, Optimism Explorer, BaseScan).
- Approvals: Always confirm the spender contract. If the UI proposes “unlimited,” click “Edit Permission” and set your exact amount.
- Test transfer: Start with a small amount. Confirm arrival, then scale.
- Transaction hash: Save the hash in your notes so you can share proof with support if needed.
Troubleshooting: Common Issues & Fixes
“My funds haven’t arrived yet.”
- Check the bridge UI status. Some routes have an optimistic window or require more confirmations.
- Verify you’re on the destination chain in your wallet.
- Import the correct token contract address if your wallet doesn’t auto-detect it.
- Review your transaction hash on the explorer; ensure it’s confirmed and not pending or reverted.
“I can’t find the token after bridging.”
- Get the canonical token address from a reputable explorer or the project’s official docs.
- Add the token to your wallet manually using the verified address.
“The fee looks way higher than expected.”
- Try a smaller amount or a different route (Across vs. Stargate vs. a CCTP partner) and compare quotes.
- Bridge during off-peak hours to reduce gas.
- Check if slippage is contributing—lower the tolerance within reason.
“I bridged USDC but got USDC.e or a wrapped variant.”
- You likely used a non-CCTP route. If your destination ecosystem prefers canonical USDC, consider swapping into the canonical version (watch price/fees), or bridge back using a CCTP-enabled flow.
“Approval stuck or infinite spinner.”
- Refresh the app; sometimes the UI fails to catch the on-chain approval event. Confirm on the explorer.
- Clear cache or use a different browser profile; re-connect wallet and retry.
- If you approved the wrong spender or an excessive amount, use revoke.cash to fix it.
Advanced Tips: Routing, Aggregators, and Workflows
- Use aggregators for quotes: Multi-route tools can compare Across, Stargate, CCTP partners, and native bridges, often surfacing better fees or ETA. (Examples change over time; always verify legitimacy and permissions.)
- Batch strategy: If you frequently move funds for operations (e.g., paying contributors on L2s), standardize a weekly or monthly “rebalancing” cadence to optimize gas and slippage.
- Destination prep: Add RPCs via Chainlist, pre-fund gas, and bookmark the correct token addresses for your most used chains to minimize errors.
- Security posture: Consider a separate “hot” wallet for bridging and swaps, and a “cold” vault for long-term holdings. Rotate approvals regularly.
- Record-keeping: Maintain a bridging log (date, route, chain pair, tx hash, fees). This pays off during accounting, audits, and incident reviews.
Three Illustrated Walkthroughs
A) USDC from Ethereum → Base via CCTP (native USDC)
- Open a CCTP-enabled partner UI and connect your wallet.
- Select Ethereum (source), Base (destination), asset USDC.
- Enter amount; ensure the route says “USDC (CCTP)” or “Native USDC.”
- Approve (if first time) and then confirm the transfer (burn on source).
- Wait for mint on Base; switch to Base in your wallet and verify USDC balance via BaseScan.
- Optional: Add the official Base USDC token address to your wallet if it didn’t auto-appear.
B) ETH from Arbitrum → Optimism via Across
- Go to across.to and connect your wallet (on Arbitrum).
- Select Arbitrum → Optimism, token ETH.
- Review fee and ETA. If high, try a different amount or time.
- Confirm the transaction. Across relayers typically deliver quickly on L2 routes.
- Switch wallet to Optimism and verify the arrival via Optimism Explorer.
C) USDT from Polygon → Arbitrum via Stargate
- Open stargate.finance, choose “Transfer,” connect wallet on Polygon.
- Select Polygon → Arbitrum, token USDT, enter amount.
- Approve USDT (custom allowance) and execute transfer.
- Wait for finality; switch to Arbitrum and confirm your USDT balance on Arbiscan.
- If the token doesn’t show up, import the verified USDT contract for Arbitrum (from a trusted source).
Security & Operational Risk — What Pros Watch
- Upgradability & keys: Many bridge contracts are upgradeable. Understand who controls upgrades (EOA vs. multisig) and whether timelocks exist.
- Oracle & messaging risk: Bridges depend on external messaging/attestation. Read the docs to understand the trust assumptions (e.g., LayerZero for Stargate).
- Liquidity risk: If a pool is shallow or incentives change, slippage and fees can spike. Check pool health if sending large amounts.
- Phishing & approvals: The #1 failure mode is still signing malicious approvals or txs on fake sites. Slow down. Verify domains. Use hardware wallets when possible.
- Compliance: If you operate a business/DAO, consider policies for chain allow-lists, counterparty risk, and geographic restrictions.
FAQ
Is bridging reversible?
Not automatically. A bridge transfer is a new transaction on the destination chain. To “reverse,” you’d typically perform another bridge back. Always test small first.
Why did I receive less than quoted?
Quotes can change with gas, slippage, or fees. If the difference is material, compare multiple bridges and consider waiting for calmer network conditions.
Do I need to keep the app open?
It’s good practice to keep the tab open until the UI shows “Complete,” although the on-chain transaction will finalize regardless. If you close the tab, you can still check your explorer and wallet.
What’s the safest way to handle approvals?
Approve exactly what you need when possible; avoid unlimited approvals. Use revoke tools to manage old allowances: revoke.cash.
How do I confirm I have canonical USDC on arrival?
Compare the token’s contract address with the official one on a reputable explorer. If you used a route labeled “USDC (CCTP),” you should receive canonical USDC.
Glossary
- Canonical Token: The “official” version issued on a chain (e.g., USDC by Circle) vs. a wrapped/bridged representation.
- Slippage: Price movement between your quote and execution.
- Allowance/Approval: Permission for a contract to spend your tokens.
- Optimistic Window: A delay to allow fraud proofs/disputes in optimistic systems.
- Native Gas: The chain’s base token used to pay transaction fees.
Copy-Paste Quick Checklist (Print This)
- ✅ Official domain verified (bookmark used)
- ✅ Destination chain added via Chainlist
- ✅ Gas on source + destination chains
- ✅ Token contract confirmed for destination
- ✅ Limited approval (exact amount)
- ✅ Small test transfer first
- ✅ Explorer hash saved in notes
