Bridges & Portals
wstGBP bridges to L2s and sidechains using each chain’s own canonical bridge. Every L2 balance is a canonical-bridge representation of the L1 token rather than an OFT, xERC20, or omnichain deployment. That means five different architectures: the OP Stack Standard Bridge (Base, OP Mainnet, Unichain, Ink, Celo, MegaETH), the Arbitrum Nitro gateway (Arbitrum One, Robinhood Chain), the Polygon PoS bridge, the Gnosis OmniBridge, and the zkSync Elastic Network shared bridge (zkSync Era). The L1 token is always the source of truth.
Every address below is verifiable on-chain; confirm on a block explorer before bridging. For Nitro chains, zkSync Era, Polygon exit, and Gnosis exit, the official bridge UI is strongly preferred over hand-rolled calls (gas params and withdrawal proofs are error-prone).
L1 token on Ethereum mainnet (chainId 1)
| Name | Symbol | Decimals | Address |
|---|---|---|---|
| Wren Staked tGBP | wstGBP | 18 | 0x57C3571f10767E49C9d7b60feb6c67804783B7aE |
Live deployments
| Chain | Chain ID | wstGBP (L2) | Bridge UI | Status |
|---|---|---|---|---|
| Base | 8453 | 0xEa4Fcd4dE37eC038947a6834751E71Bb8FE68fff | bridge.base.org , Superbridge | Live |
| OP Mainnet | 10 | 0x5355e007F4875c99e571818b28C9CC9f231D0269 | app.optimism.io , Superbridge | Live |
| Unichain | 130 | 0x8eDe8Ab36BFED06ed6EC491a4E3ba8813C8A21a1 | Superbridge | Live |
| Ink | 57073 | 0x8eDe8Ab36BFED06ed6EC491a4E3ba8813C8A21a1 | Superbridge | Live |
| Celo | 42220 | 0xbAa2F11995aDe2fAB5323fb5884Cd7331CBE575d | Superbridge | Live |
| MegaETH (Frontier) | 4326 | 0x543b44aCf892e190b574780ea5f228f59d26B23c | rabbithole.megaeth.com/bridge | Live |
| Arbitrum One | 42161 | 0x2c8CBe32da6feAECcF99eCeE2900556a17a529ED | portal.arbitrum.io/bridge | Live |
| Robinhood Chain | 4663 | 0x4cE63b5E213337aDF891c2819d0246b15F44BAca | portal.arbitrum.io/bridge | Live |
| Polygon PoS | 137 | 0x3319d8A0A7f742AAC63D586E7bb846a9ee8218Ab | Polygon Portal | Live |
| Gnosis Chain | 100 | 0x68115fFA8bF088289B80B1e17cD486B5752492aA | bridge.gnosischain.com | Live |
| zkSync Era | 324 | 0xa84340Bee7aAA2E9aB0Da89024a4c13144Eaf41d | portal.zksync.io | Live |
Unichain and Ink share the same L2 token address (0x8eDe8A...21a1): both chains run
the same factory version, so the identical CREATE2 inputs produce the identical address.
Same address, different chains, so always check the chainId.
“Portal” means three unrelated things in the bridge ecosystem: the
OptimismPortal, the OP Stack L1 contract beneath the Standard Bridge (users
interact with the L1StandardBridge, not the portal); the Polygon Portal, the
bridge UI at portal.polygon.technology , which is
not a contract; and FxPortal, Polygon’s permissionless mapping, which is not used
here (wstGBP uses the native PoS mapping).
RPC endpoints & explorers
Public, keyless RPC endpoints and block explorers for every chain wstGBP is deployed on. Chains marked (Blockscout) have no Etherscan-family explorer.
| Chain | Chain ID | RPC | Explorer(s) |
|---|---|---|---|
| Ethereum (L1) | 1 | https://ethereum-rpc.publicnode.com | etherscan.io |
| Base | 8453 | https://mainnet.base.org | basescan.org |
| OP Mainnet | 10 | https://mainnet.optimism.io | optimistic.etherscan.io |
| Unichain | 130 | https://mainnet.unichain.org | uniscan.xyz , explorer.unichain.org (Blockscout) |
| Ink | 57073 | https://rpc-gel.inkonchain.com (alt https://rpc-qnd.inkonchain.com) | explorer.inkonchain.com (Blockscout) |
| Celo | 42220 | https://forno.celo.org | celoscan.io , explorer.celo.org (Blockscout) |
| MegaETH (Frontier) | 4326 | https://mainnet.megaeth.com/rpc | megaeth.blockscout.com (Blockscout) |
| Arbitrum One | 42161 | https://arb1.arbitrum.io/rpc | arbiscan.io |
| Robinhood Chain | 4663 | https://rpc.mainnet.chain.robinhood.com | robinhoodchain.blockscout.com (Blockscout) |
| Polygon PoS | 137 | https://polygon-bor-rpc.publicnode.com | polygonscan.com , OKLink |
| Gnosis Chain | 100 | https://rpc.gnosischain.com | gnosisscan.io |
| zkSync Era | 324 | https://mainnet.era.zksync.io | era.zksync.network , explorer.zksync.io (native) |
OP Stack chains
Six deployments (Base, OP Mainnet, Unichain, Ink, Celo, MegaETH) share the OP Stack Standard Bridge architecture. The L2 predeploys are identical on every chain; only the L1 contract set differs.
- Deposit (L1 to L2):
approvethe chain’sL1StandardBridgefor wstGBP, thendepositERC20(l1Token, l2Token, amount, minGasLimit = 200000, extraData = 0x). UsedepositERC20To(..., to, ...)from a contract/Safe or to a different recipient (depositERC20has anonlyEOAguard). Not payable; you pay L1 gas only. Arrives in minutes. - Withdraw (L2 to L1):
bridgeERC20Toon the L2 bridge0x4200...0010, then finalize on L1 after the challenge period.
L1 bridge contracts per chain
| Chain | chainId | L1StandardBridge | OptimismPortal | L1CrossDomainMessenger |
|---|---|---|---|---|
| Base | 8453 | 0x3154Cf16ccdb4C6d922629664174b904d80F2C35 | 0x49048044D57e1C92A77f79988d21Fa8fAF74E97e | 0x866E82a600A1414e583f7F13623F1aC5d58b0Afa |
| OP Mainnet | 10 | 0x99C9fc46f92E8a1c0deC1b1747d010903E884bE1 | 0xbEb5Fc579115071764c7423A4f12eDde41f106Ed | 0x25ace71c97B33Cc4729CF772ae268934F7ab5fA1 |
| Unichain | 130 | 0x81014F44b0a345033bB2b3B21C7a1A308B35fEeA | 0x0bd48f6B86a26D3a217d0Fa6FfE2B491B956A7a2 | 0x9A3D64E386C18Cb1d6d5179a9596A4B5736e98A6 |
| Ink | 57073 | 0x88FF1e5b602916615391F55854588EFcBB7663f0 | 0x5d66C1782664115999C47c9fA5cd031f495D3e4F | 0x69d3Cf86B2Bf1a9e99875B7e2D9B6a84426c171f |
| Celo | 42220 | 0x9C4955b92F34148dbcfDCD82e9c9eCe5CF2badfe | 0xc5c5D157928BDBD2ACf6d0777626b6C75a9EAEDC | 0x1AC1181fc4e4F877963680587AEAa2C90D7EbB95 |
| MegaETH “Frontier” | 4326 | 0x0CA3A2FBC3D770b578223FBB6b062fa875a2eE75 | 0x7f82f57F0Dd546519324392e408b01fcC7D709e8 | 0x6C7198250087B29A8040eC63903Bc130f4831Cc9 |
Users interact with the L1StandardBridge; the OptimismPortal and
L1CrossDomainMessenger come into play when proving and finalizing withdrawals.
Shared L2 predeploys
| Contract | Address (every OP Stack L2) |
|---|---|
| L2StandardBridge | 0x4200000000000000000000000000000000000010 |
| L2CrossDomainMessenger | 0x4200000000000000000000000000000000000007 |
| L2ToL1MessagePasser | 0x4200000000000000000000000000000000000016 |
| OptimismMintableERC20Factory | 0x4200000000000000000000000000000000000012 |
All six chains mint their wstGBP through the factory predeploy 0x4200...0012, except
Base, which runs its own factory 0xF10122D428B4bc8A9d050D06a2037259b4c4B83B
(v1.9.0). Base’s tooling and bridge UI expect tokens from that factory, which is why
Base’s wstGBP address differs from the predeploy-factory chains.
Celo is a custom gas-token OP Stack chain: native gas is CELO
(L1 token 0x057898f3C43F129a17517B9056D23851F124b19f), not ETH. wstGBP bridges
normally, but you need CELO on the L2 to pay gas: withdraw CELO from an exchange
directly to Celo, or bridge the CELO asset on
Superbridge . Any other bridged asset arrives as a plain
ERC-20 and cannot pay gas.
Arbitrum Nitro chains
Two deployments use the Arbitrum Nitro canonical ERC-20 gateway. In both cases the L2
wstGBP is a StandardArbERC20, auto-deployed by the gateway on first deposit (no factory
call, no predeploy), and l1Address() on the L2 token resolves back to L1 wstGBP.
The deposit flow is the same on both: approve the chain’s L1ERC20Gateway (not the
router) for wstGBP, then L1GatewayRouter.outboundTransferCustomRefund(...), a
payable call that needs L2 gas params (maxGas, gasPriceBid, maxSubmissionCost).
Prefer the portal.arbitrum.io/bridge UI or the Arbitrum SDK.
Arbitrum One (chainId 42161)
L2 wstGBP: 0x2c8CBe32da6feAECcF99eCeE2900556a17a529ED
| Contract (Ethereum L1) | Address |
|---|---|
| L1GatewayRouter | 0x72Ce9c846789fdB6fC1f34aC4AD25Dd9ef7031ef |
L1ERC20Gateway (router’s defaultGateway) | 0xa3A7B6F88361F48403514059F1F16C8E78d60EeC |
Robinhood Chain (chainId 4663)
Robinhood Chain is an Arbitrum Orbit L2 that settles directly to Ethereum (Ethereum blobs for DA, ETH as native gas), not an L3 on Arbitrum One. It uses the same Nitro gateway architecture as Arbitrum One but with its own gateway/router set, so bridging runs directly between Ethereum L1 and Robinhood Chain.
| Contract (Ethereum L1) | Address |
|---|---|
| L1GatewayRouter | 0x6a2E3a1e16FC29f27Ce61429746D558d656975bB |
| L1ERC20Gateway (locks wstGBP on deposit) | 0x85001CC4867C5e1C22dA4B79BB8852B9e2a06da0 |
| Contract (Robinhood Chain, 4663) | Address |
|---|---|
wstGBP bridged token (StandardArbERC20) | 0x4cE63b5E213337aDF891c2819d0246b15F44BAca |
L2ERC20Gateway (mints/burns; the token’s l2Gateway()) | 0xfd9b17206278C16DdaacF6AC8f05dBf97EdCb31e |
| L2GatewayRouter | 0x1E324B9316138CA9a73F960213621AD1aaf01B89 |
Polygon PoS bridge (chainId 137)
L2 wstGBP 0x3319d8A0A7f742AAC63D586E7bb846a9ee8218Ab is a native PoS-bridge child ERC-20
(the L1 ERC20Predicate locks, the L2 ChildChainManager mints/burns; backed 1:1).
| Contract (Ethereum L1) | Address |
|---|---|
| RootChainManager (proxy) | 0xA0c68C638235ee32657e8f720a23ceC1bFc77C77 |
| ERC20Predicate (locks wstGBP) | 0x40ec5B33f54e0E8A33A975908C5BA1c14e5BbbDf |
| Contract (Polygon, 137) | Address |
|---|---|
| wstGBP child token | 0x3319d8A0A7f742AAC63D586E7bb846a9ee8218Ab |
ChildChainManager (proxy; holds DEPOSITOR_ROLE) | 0xA6FA4fB5f76172d178d61B04b0ecd319C5d1C0aa |
Deposit (L1 to L2): approve the ERC20Predicate, then
RootChainManager.depositFor(user, wstGBP, abi.encode(amount)). Arrives in about 20-30
minutes via state sync. Withdraw (L2 to L1): withdraw(amount) on the child token to
burn, wait for the next Heimdall checkpoint, then RootChainManager.exit(burnProof) on
L1; the Portal UI assembles the proof.
Gnosis Chain OmniBridge / AMB (chainId 100)
L2 wstGBP 0x68115fFA8bF088289B80B1e17cD486B5752492aA is an ERC677 PermittableToken,
auto-deployed by the Home mediator on first deposit (backed 1:1 by tokens locked on L1).
| Contract (Ethereum L1) | Address |
|---|---|
| OmniBridge Foreign mediator (locks wstGBP) | 0x88ad09518695c6c3712AC10a214bE5109a655671 |
| Contract (Gnosis, 100) | Address |
|---|---|
| wstGBP bridged token (ERC677) | 0x68115fFA8bF088289B80B1e17cD486B5752492aA |
| OmniBridge Home mediator (mints/burns) | 0xf6A78083ca3e2a662D6dd1703c939c8aCE2e268d |
Deposit (L1 to Gnosis): approve the Foreign mediator, then
relayTokens(wstGBP, receiver, amount). Arrives in about 5-15 minutes.
Withdraw (Gnosis to L1): relayTokens(...) on the Home mediator (or ERC677
transferAndCall(homeMediator, amount, "")) to burn, wait for validator signatures, then
submit the signed claim on L1. Gnosis-to-Ethereum messages are not auto-relayed, so
the bridge UI (or you) must pay the L1 claim.
zkSync Era shared bridge (chainId 324)
zkSync Era is a ZK (validity) rollup on the ZK Stack. Its canonical bridge is the
Elastic Network shared-bridge system: on L1, deposits enter through Bridgehub, which
routes them via L1AssetRouter into L1NativeTokenVault; the L2AssetRouter /
L2NativeTokenVault predeploys mirror them on L2. L2 wstGBP
0xa84340Bee7aAA2E9aB0Da89024a4c13144Eaf41d is a BridgedStandardERC20 beacon proxy,
auto-deployed by the L2NativeTokenVault on first deposit. The L1 vault locks wstGBP and
the L2 vault mints/burns, so L2 supply is backed 1:1 by tokens locked in the L1 vault.
originToken() on the L2 token resolves back to L1 wstGBP.
| Contract (Ethereum L1) | Address |
|---|---|
| Bridgehub (proxy; deposit entrypoint) | 0x303a465B659cBB0ab36eE643eA362c509EEb5213 |
| L1AssetRouter | 0x8829AD80E425C646DAB305381ff105169FeEcE56 |
| L1NativeTokenVault (locks wstGBP) | 0xbeD1EB542f9a5aA6419Ff3deb921A372681111f6 |
| L1Nullifier (finalizes withdrawals) | 0xD7f9f54194C633F36CCD5F3da84ad4a1c38cB2cB |
| Contract (zkSync Era, 324) | Address |
|---|---|
wstGBP bridged token (BridgedStandardERC20 beacon proxy) | 0xa84340Bee7aAA2E9aB0Da89024a4c13144Eaf41d |
| L2AssetRouter (predeploy) | 0x0000000000000000000000000000000000010003 |
| L2NativeTokenVault (predeploy; mints/burns) | 0x0000000000000000000000000000000000010004 |
Deposit (L1 to Era): Bridgehub.requestL2TransactionTwoBridges(...) with the
L1AssetRouter as the second bridge, a payable call that needs L2 gas params
(l2GasLimit, l2GasPerPubdataByteLimit) plus an ERC-20 approval for the vault.
The Portal UI assembles the call and the approval.
Arrives in a few minutes. Withdraw (Era to L1): initiate on L2 (the Portal calls the
L2AssetRouter to burn), wait for the batch to be
proven and executed on L1 (Era applies an execution delay, about 24 hours in practice),
then finalize on L1 via the L1Nullifier/L1AssetRouter. The Portal UI assembles and
submits the L1 claim, so prefer the UI for the exit.