How does the migration work technically?
It follows a freeze-then-dump procedure on Mainnet:
- Freeze the L1 at a chosen snapshot block, so it produces no further blocks. That last block is the snapshot block.
- Export the full state at that block and verify it against the block state root and the known total supply.
- Transform that state into the OP Stack L2 genesis, so L2 starts with the complete L1 state already in place.
What changes technically between the L1 and the L2?
| L1 | L2 | |
| Architecture | Execution, consensus, and data in one service | OP Stack: separate execution, data, settlement |
| Consensus | Proof of Authority (single validator) | OP Stack sequencer, operated by WhiteBIT at launch |
| Gas token | WBT | WBT |
| Gas model | Fixed: 10 gwei | EIP-1559 plus an L1 data fee |
| Block time | 2 seconds | 1 second |
| Data and settlement | Standalone | Published and settled on Ethereum via blobs |
| Bridging | Third-party bridge only | Native OP canonical bridge, the Portal, and third-party bridges |
Since the EVM is unchanged, the code of the smart contract runs identically. Two things differ: the fee model changes from a fixed 10 gwei to EIP-1559 plus an L1 data fee, and blocks arrive every 1 second instead of every 2. It is recommended to review any logic that hardcodes a gas price or assumes a block interval.
Please be advised that bytecode, storage, nonces, and addresses are preserved, so contracts exist on L2 at the same addresses. This means that no redeployment is needed; repoint your RPC URL and chain ID, then re-verify the source code of your smart contract on the L2 explorer so users can read it there.