Context
The L2 genesis embeds the L1 proxy addresses for L1CrossDomainMessenger, L1StandardBridge, L1ERC721Bridge, OptimismPortal, and SystemConfig. Since these contracts don't exist yet when the genesis is built, their addresses must be predicted. OPCM uses CREATE2 for every proxy, so the addresses are deterministic given the salt inputs. Add a pipeline stage that calls OPCM's deploy() as a non-broadcasting eth_call through a reusable Solidity script and reads the returned ChainContracts struct, then persists the addresses to state.
OPCM mixes msg.sender into the CREATE2 salt for every proxy, so the dry-run must be sent from the same key that will eventually broadcast the real deploy transaction. A dry-run from a different from produces different predicted addresses, and the L2 genesis built from them would be invalid.
Definition of Done
Weekly Updates
[2026-MM-DD]
[2026-07-07] Already addressed the review comments and should be ready for a re-review.
[2026-06-30] A PR draft has been opened here.
[2026-06-23] Work has already started, expecting to open a draft PR pretty soon.
Context
The L2 genesis embeds the L1 proxy addresses for
L1CrossDomainMessenger,L1StandardBridge,L1ERC721Bridge,OptimismPortal, andSystemConfig. Since these contracts don't exist yet when the genesis is built, their addresses must be predicted. OPCM usesCREATE2for every proxy, so the addresses are deterministic given the salt inputs. Add a pipeline stage that calls OPCM'sdeploy()as a non-broadcastingeth_callthrough a reusable Solidity script and reads the returnedChainContractsstruct, then persists the addresses to state.Definition of Done
preparecommandop-deployeruses this script for permissionless deploymentsWeekly Updates
[2026-MM-DD]
[2026-07-07] Already addressed the review comments and should be ready for a re-review.
[2026-06-30] A PR draft has been opened here.
[2026-06-23] Work has already started, expecting to open a draft PR pretty soon.