bridging
v1.0.2008Bridge assets to and from Celo. Use when transferring tokens between Celo and other chains like Ethereum.
Installation
Bridging to Celo
This skill covers bridging assets between Celo and other blockchains, including native bridges and third-party solutions.
When to Use
- Transferring assets from Ethereum to Celo
- Bridging tokens from Celo to other chains
- Integrating cross-chain functionality
- Building multi-chain applications
Bridge Options
Native Bridge
| Bridge | Mainnet | Testnet |
|---|---|---|
| Superbridge | https://superbridge.app/celo | https://testnets.superbridge.app |
Native bridge provides direct transfers between Celo L2 and Ethereum L1 via the OP Stack standard bridge.
Source: https://docs.celo.org/tooling/bridges
Third-Party Bridges
| Bridge | URL | Description |
|---|---|---|
| Squid Router V2 | https://v2.app.squidrouter.com | Cross-chain routing via Axelar |
| LayerZero | https://layerzero.network | Omnichain interoperability protocol |
| Jumper Exchange | https://jumper.exchange | Multi-chain DEX aggregator |
| Portal (Wormhole) | https://portalbridge.com | Decentralized interoperability layer |
| AllBridge | https://app.allbridge.io/bridge | EVM and non-EVM chains |
| Satellite (Axelar) | https://satellite.money | Axelar network bridge |
| Transporter (CCIP) | https://www.transporter.io | Chainlink CCIP bridge |
| Layerswap | https://layerswap.io/app | 60+ chains, 15+ CEX integrations |
| Hyperlane Nexus | https://www.usenexus.org | Messaging and interoperability |
| Mach Exchange | https://www.mach.exchange | Cross-chain exchange |
| Galaxy | https://galaxy.exchange/swap | Native DEX on Celo |
| SmolRefuel | https://smolrefuel.com | Gasless refueling |
| USDT0 | https://usdt0.to | Native USDT via LayerZero OFT |
Source: https://docs.celo.org/home/bridged-tokens/bridges
Native ETH Bridging
Bridge native ETH from Ethereum to Celo as WETH.
Contract Addresses
Ethereum Mainnet → Celo:
| Contract | Address |
|---|---|
| SuperBridgeETHWrapper (L1) | 0x3bC7C4f8Afe7C8d514c9d4a3A42fb8176BE33c1e |
| L1 Standard Bridge | 0x9C4955b92F34148dbcfDCD82e9c9eCe5CF2badfe |
| L1 WETH | 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 |
| L2 WETH (Celo) | 0xD221812de1BD094f35587EE8E174B07B6167D9Af |
Sepolia Testnet → Celo Sepolia:
| Contract | Address |
|---|---|
| SuperBridgeETHWrapper (L1) | 0x523e358dFd0c4e98F3401DAc7b1879445d377e37 |
| L1 Standard Bridge | 0xec18a3c30131a0db4246e785355fbc16e2eaf408 |
| L1 WETH | 0x7b79995e5f793A07Bc00c21412e50Ecae098E7f9 |
| L2 WETH (Celo Sepolia) | 0x2cE73DC897A3E10b3FF3F86470847c36ddB735cf |
Bridge ETH to Celo
import { createWalletClient, custom, parseEther } from "viem";
import { mainnet } from "viem/chains";
const SUPERBRIDGE_WRAPPER = "0x3bC7C4f8Afe7C8d514c9d4a3A42fb8176BE33c1e";
const WRAPPER_ABI = [
{
name: "wrapAndBridge",
type: "function",
stateMutability: "payable",
inputs: [
{ name: "_minGasLimit", type: "uint32" },
{ name: "_extraData", type: "bytes" },
],
outputs: [],
},
] as const;
async function bridgeETHToCelo(amount: string): Promise<string> {
const walletClient = createWalletClient({
chain: mainnet,
transport: custom(window.ethereum),
});
const [address] = await walletClient.getAddresses();
const hash = await walletClient.writeContract({
address: SUPERBRIDGE_WRAPPER,
abi: WRAPPER_ABI,
functionName: "wrapAndBridge",
args: [200000, "0x"],
value: parseEther(amount),
});
return hash;
}
Natively Bridged Tokens
These tokens have official bridges from Ethereum via native bridge:
| Token | L1 Address (Ethereum) | L2 Address (Celo) |
|---|---|---|
| WETH | 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 | 0xD221812de1BD094f35587EE8E174B07B6167D9Af |
| WBTC | 0x2260fac5e5542a773aa44fbcfedf7c193bc2c599 | 0x8aC2901Dd8A1F17a1A4768A6bA4C3751e3995B2D |
| DAI | 0x6B175474E89094C44Da98b954EedeAC495271d0F | 0xac177de2439bd0c7659c61f373dbf247d1f41abe |
| AAVE | 0x7Fc66500c84A76Ad7e9c93437bFc5Ac33E2DDaE9 | 0xF6A54aff8c97f7AF3CC86dbaeE88aF6a7AaB6288 |
| LINK | 0x514910771af9ca656af840dff83e8264ecf986ca | 0xf630876008a4ed9249fb4cac978ba16827f52e91 |
| UNI | 0x1f9840a85d5af5bf1d1762f925bdaddc4201f984 | 0xeE571697998ec64e32B57D754D700c4dda2f2a0e |
| CRV | 0xD533a949740bb3306d119CC777fa900bA034cd52 | 0x75184c282e55a7393053f0b8F4F3E7BeAE067fdC |
| rETH | 0xae78736cd615f374d3085123a210448e74fc6393 | 0x55f3d16e6bd2b8b8e6599df6ef4593ce9dcae9ed |
Source: https://docs.celo.org/home/bridged-tokens
Cross-Chain Messaging Protocols
For building cross-chain dApps:
| Protocol | URL | Celo Support |
|---|---|---|
| Chainlink CCIP | https://chain.link/cross-chain | Mainnet |
| Hyperlane | https://www.hyperlane.xyz | Mainnet, Sepolia |
| Wormhole | https://wormhole.com | Mainnet |
| LayerZero | https://layerzero.network | Mainnet |
| Axelar Network | https://axelar.network | Mainnet |
Source: https://docs.celo.org/tooling/bridges/cross-chain-messaging
Using LI.FI SDK
For cross-chain swaps and bridges:
import { createConfig, getQuote, executeRoute } from "@lifi/sdk";
// Initialize LI.FI
createConfig({
integrator: "your-app-name",
});
// Get bridge quote
const quote = await getQuote({
fromChain: 1, // Ethereum
toChain: 42220, // Celo
fromToken: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", // USDC on Ethereum
toToken: "0xcebA9300f2b948710d2653dD7B07f33A8B32118C", // USDC on Celo
fromAmount: "1000000000", // 1000 USDC (6 decimals)
fromAddress: userAddress,
});
// Execute the bridge
const result = await executeRoute(quote, {
updateRouteHook: (route) => {
console.log("Route updated:", route);
},
});
Bridge Considerations
Security
- Native bridges (Superbridge) are the most secure
- Third-party bridges rely on their own security models
- Always verify contract addresses before bridging
Timing
- Native L1→L2 bridges: ~15-20 minutes
- L2→L1 withdrawals: 7 days (challenge period)
- Third-party bridges: varies (minutes to hours)
Fees
- Native bridges: gas fees only
- Third-party bridges: gas + bridge fees
Dependencies
{
"dependencies": {
"viem": "^2.0.0"
}
}
For LI.FI integration:
{
"dependencies": {
"@lifi/sdk": "^3.0.0"
}
}
Additional Resources
- bridge-contracts.md - All bridge contract addresses
- bridged-tokens.md - Complete list of bridged tokens