We recommend checking back regularly for the most up-to-date information.
Interoperable ETH
InteroperableETH enables seamless ETH transfers across Superchain blockchains. It is implemented using three key contracts:
SuperchainWETH
(opens in a new tab): A bridge contract that facilitates ETH transfers between Superchain blockchains.ETHLiquidity
(opens in a new tab): A liquidity provider for ETH transfers.SuperchainWETH
uses this contract as a liquidity repository to ensure ETH availability on the destination chain.L2ToL2CrossDomainMessenger
(opens in a new tab): A messaging contract that facilitates cross-chain communication.
InteroperableETH deposits ETH into the ETHLiquidity
contract on the source chain and withdraws an equivalent amount on the destination chain.
This mechanism improves capital efficiency and eliminates liquidity fragmentation and poor user experiences caused by asset wrapping or reliance on liquidity pools.
Features and benefits
- Enables seamless ETH transfers across different chains in the Superchain
- Maintains fungibility of ETH across the Superchain
- Provides liquidity for cross-chain transactions
- Improves user experience by abstracting complex bridging processes
How it works
Initiating message
-
The user (or a contract operating on a user's behalf) calls
SuperchainWETH.sendETH
with a destination address and a chainId. ETH, in the amount to transfer must be attached to this call. -
SuperchainWETH
transfers the specified ETH amount toETHLiquidity
, removing it from circulation on the source chain. -
SuperchainWETH
on the source chain sends arelayETH
(opens in a new tab) message toSuperchainWETH
on the destination chain using theL2ToL2CrossDomainMessenger
.
Executing message
-
An off-chain entity submits a transaction to execute the message. Any address can submit this transaction, but it must have ETH on the destination chain. Typically, a relayer submits the transaction, since the user does not yet have ETH on the destination chain.
-
L2ToL2CrossDomainMessenger
on the destination chain callsSuperchainWETH
with the following details:
-
Source of the ETH
-
Destination address
-
Amount of ETH
SuperchainWETH
performs several sanity checks:- The
relayETH
call must originate fromL2ToL2CrossDomainMessenger
. - The interop message must have been sent by
SuperchainWETH
- The
-
SuperchainWETH
withdraws the specified amount of ETH fromETHLiquidity
. OnlySuperchainWETH
can withdraw fromETHLiquidity
, ensuring that the ETH is correctly reintroduced into circulation on the destination chain. -
SuperchainWETH
usesSafeSend
(opens in a new tab) to send ETH. This ensures that even if the destination is a smart contract, its custom logic is not executed. This behavior differs from standard ETH transfers (opens in a new tab), where smart contracts can trigger custom logic upon receiving ETH.
L1 Treasury
Every ETH in circulation on the Superchain—excluding ETH held by ETHLiquidity
—must be backed by ETH on L1.
This is enforced by a lockbox contract on L1, which holds all ETH bridged to Superchain interop cluster chains that has not yet been withdrawn. New ETH can only be minted on L2 when it is locked on L1, and it is burned on L2 before it can be released from the lockbox.
Here is an example of how this works.
Step | User on L1 | Lockbox | User on chain A | ETHLiquidity on chain A | User on chain B | ETHLiquidity on chain B |
---|---|---|---|---|---|---|
1 | 7 | 200 | 0 | 100000 | 0 | 100000 |
2 | 4 | 203 | 3 | 100000 | 0 | 100000 |
3 | 4 | 203 | 2 | 100001 | 0 | 100000 |
4 | 4 | 203 | 2 | 100001 | 1 | 99999 |
5 | 4 | 203 | 2 | 100001 | 0 | 99999 |
6 | 5 | 202 | 2 | 100001 | 0 | 99999 |
-
The initial state. The user has 7 ETH on L1, and nothing on chains A and B.
-
The user bridges 3 ETH to chain A. The user sends 3 ETH on L1 to the bridge, which is locked in the lockbox. The bridge on chain A then mints 3 ETH for the user.
-
The user sent the initiating message to
SuperchainWETH
on chain A, along with 1 ETH to bridge to chain B. This 1 ETH is sent toETHLiquidity
on chain A. -
Somebody (the user, a relayer action on behalf of the user, etc.) sent the corresponding executing message to chain B.
SuperchainWETH
transfers 1 ETH fromETHLiquidity
on chain B to the user. -
The user decides to withdraw 1 ETH from chain B back into L1. Normally, a user would do this through a third-party bridge, which is faster and usually cheaper, but for illustration purposes this user uses the standard OP bridge. The user starts with an initiating message on chain B, which burns 1 ETH and sends a message to L1.
-
After the week long challenge period, the user finalizes the withdrawal on L1. The lock box releases 1 ETH, which is then sent to the user.
Next steps
- Explore the
SuperchainWETH
specs (opens in a new tab) for in-depth implementation details. - Read the interop message passing page for more information about how
L2ToL2CrossDomainMessenger
passes messages.