Skip to main content

Overview

Whitechain settles on Ethereum via the OP Stack canonical bridge. Assets and arbitrary messages move between L1 (Ethereum) and L2 (Whitechain) through Optimism-standard bridge contracts: deposits arrive on L2 within minutes, and withdrawals back to L1 complete after a 7-day challenge window.
An official Whitechain bridge UI is in active development. Today, bridging is performed programmatically against the canonical contracts. This page describes the contracts and flows you need to use them directly.

Ethereum to Whitechain

Deposits (L1 to L2)

A deposit takes about 2 minutes. You initiate the deposit on L1 and the op-node automatically finalizes it on L2. No further action is required on L2 once the deposit is confirmed.
  • ETH call the depositETH function on the L1StandardBridge with the amount as msg.value.
  • ERC20 tokens first approve the L1StandardBridge to spend your tokens, then call depositERC20 with the L1 token, the matching L2 representation, and the amount. The L2 token must already be deployed (see For token issuers).
  • NFTs (ERC721) approve the L1ERC721Bridge, then call bridgeERC721. Only L1-origin NFTs are supported by the standard bridge.
  • Arbitrary messages use L1CrossDomainMessenger.sendMessage. This has replay support if the L2 transaction runs out of gas. Do not use OptimismPortal2.depositTransaction directly for contract calls, it has no replay.

Withdrawals (L2 to L1)

A withdrawal takes 7 to 14 days because of the mandatory dispute window. The flow has five steps:
  1. Initiate on L2 call L2StandardBridge.bridgeETH or bridgeERC20. Tokens are burned (for L1-origin tokens) or escrowed (for L2-native tokens).
  2. Wait for an output proposal (about 1 hour) the op-proposer publishes an output root on L1 via the DisputeGameFactory.
  3. Prove the withdrawal on L1 call OptimismPortal2.proveWithdrawalTransaction with the dispute game index and a Merkle proof from L2 storage. Tools such as the OP SDK or op-withdrawer compute the proof for you.
  4. Wait for the challenge window (7 days) the dispute game must resolve in favor of the proposer. If it is successfully challenged, you must re-prove against a different game.
  5. Finalize on L1 call OptimismPortal2.finalizeWithdrawalTransaction to release the funds to L1.
The 7-day challenge window is non-negotiable. Plan treasury operations and time-sensitive flows accordingly. For urgent exits, see When NOT to use the canonical bridge.

Programmatic bridging

Because there is no UI today, applications interact with the bridge contracts directly. Common paths:
  • OP SDK the @eth-optimism/sdk package abstracts deposits, prove, and finalize calls into high-level helpers.
  • op-withdrawer the op-withdrawer CLI handles the prove and finalize steps for L2 to L1 withdrawals.
  • Direct contract calls any Ethereum-compatible library (viem, ethers, web3.js) can call the bridge contracts shown in Contract addresses.

Contract addresses

Contract addresses are organized by network. Testnet and mainnet addresses will be added as those networks become available.

Testnet

ContractL1L2
L1StandardBridgeTBDn/a
OptimismPortalTBDn/a
DisputeGameFactoryProxyTBDn/a
L2StandardBridgen/aTBD
OptimismMintableERC20Factoryn/aTBD

Mainnet

ContractL1L2
L1StandardBridgeTBDn/a
OptimismPortalTBDn/a
DisputeGameFactoryProxyTBDn/a
L2StandardBridgen/aTBD
OptimismMintableERC20Factoryn/aTBD

When NOT to use the canonical bridge

The canonical bridge is the safest and most trust-minimized path between L1 and L2, but it does not fit every use case.
ScenarioWhy the canonical bridge does not workAlternative
Need to exit to L1 in under 7 daysThe 7-day challenge window is mandatory and cannot be skippedA third-party liquidity bridge (for example Across) once integrated
Token has transfer fees or rebasing logicThe standard bridge does not account for balance changes during transferA custom bridge contract designed for the token
Token has a blocklist or pausable transferFinalization may revert permanently, leaving funds stuckA custom bridge contract
L2-native NFTs going to L1The standard L2ERC721Bridge only supports L1-origin NFTsA custom NFT bridge
Very large amounts with time-sensitivityFunds are locked for the entire challenge windowStage the transfer in advance, or use a third-party bridge

For token issuers

To make an L1 ERC20 bridgeable to Whitechain, deploy an OptimismMintableERC20 on L2 that mirrors the L1 token. Use the OptimismMintableERC20Factory.createOptimismMintableERC20WithDecimals function with the L1 token address, the name and symbol you want on L2, and the decimals. Verify the pairing before sending real value: L1StandardBridge.deposits(l1Token, l2Token) must return a non-zero value, or query the factory to confirm the L2 contract was created. Tokens with transfer fees, rebasing logic, blocklists, or pausable transfers are not compatible with the standard bridge. Use a custom bridge solution for those cases.

Disclaimer

  • Always test with a small amount before bridging large balances.
  • Verify every contract address against this page or the official Whitechain Explorer before submitting a transaction.
  • Withdrawals are non-reversible once finalized on L1.