github ethereum-optimism/optimism op-deployer/v0.8.0

3 hours ago

Overview

Important

This is the op-deployer release for op-contracts/v8.0.0 (Upgrade 20). Use it to deploy new chains with op-contracts/v8.0.0. It contains a new staged prepare / prestate / continue deployment workflow, Super Root dispute games for new chains, Karst at genesis by default, more reliable gas estimation, and several breaking command and flag removals.

Breaking changes

  • upgrade command removed (#21945). op-deployer upgrade and all its version subcommands (v2.0.0 through v6.0.0-rc.2, and embedded) are gone, and op-deployer no longer upgrades existing chains from any earlier op-contracts release.
  • manage migrate command removed (#21929). The super-root migration command and its flags (--starting-respected-game-type, --dispute-game-type, --dispute-game-enabled and others) are gone, with no replacement in op-deployer.
  • Contract verification is on by default; --verify removed (#21947). apply, bootstrap superchain and bootstrap implementations now verify contracts unless --no-verify (DEPLOYER_NO_VERIFY) is set. Remove --verify / DEPLOYER_VERIFY from scripts — op-deployer rejects it as unknown. The --verifier default changes from etherscan to etherscan,blockscout, and a verification failure is now logged with a retry command instead of failing a successful deployment.
  • apply --validate and op-validator removed (#21308). Remove --validate / DEPLOYER_VALIDATE and run op-deployer validate auto after apply instead.
  • --op-program-svc-url removed (#21299). Remove --op-program-svc-url / DEPLOYER_OP_PROGRAM_SVC_URL. op-deployer no longer fetches prestates from an op-program service, and state.json no longer carries prestateManifest; existing state files still load. For permissionless games, record the prestate with the new prestate command.
  • New chains deploy Super Root dispute games (#21689, #22128, #21720). The default respectedGameType changes from 1 (PERMISSIONED_CANNON) to 5 (SUPER_PERMISSIONED). An intent that sets respectedGameType = 1 now fails with DeployOPChain: dispute game type does not match OPCM super root mode; remove the override or set it to 5. A new permissionless chain can start on SUPER_CANNON_KONA (9) through the prepare workflow, with SUPER_PERMISSIONED registered as its fallback.
  • manage add-game-type-v2 config for Super Root games (#20641, #20363). Game type 5 (SUPER_PERMISSIONED) now takes superPermissionedDisputeGameConfig: {proposer} instead of permissionedDisputeGameConfig, and game type 4 (SUPER_CANNON) is rejected.
  • Interop hardfork renamed to Lagoon (#21105, #21370). The intent override l2GenesisInteropTimeOffset is now l2GenesisLagoonTimeOffset; the old key is silently ignored, so rename it in any intent that schedules the fork. The generated rollup config key interop_time becomes lagoon_time, and the L2 genesis key interopTime becomes lagoonTime.

Other changes

Staged deployment workflow

  • New prepare, prestate and continue commands split a chain deployment into reviewable stages (#21560, #21600, #21611, #21897, #21963, #21974, #22082, #22337):
    • prepare pins an existing OPCM (opcmAddress and superchainConfigProxy are required in the intent), anchors each chain at the L1 safe block, dry-runs the deployment against an L1 fork and records the predicted addresses, L2 genesis and starting anchor root in state.json. It sends no transactions. --genesis-time-offset (DEPLOYER_GENESIS_TIME_OFFSET, default 21600s, minimum 3600s) sets the L2 genesis time after the anchor block. inspect genesis and inspect rollup work on a prepared state.
    • prestate --dispute-absolute-prestate (DEPLOYER_DISPUTE_ABSOLUTE_PRESTATE) records the absolute prestate for each pending CANNON_KONA or SUPER_CANNON_KONA chain.
    • continue refuses to run if the intent, deployer, OPCM, anchor or artifacts changed since prepare (rerun prepare instead), simulates every chain before broadcasting, checkpoints each chain as it lands and can be rerun after a failure.
    • apply remains the single-step path for permissioned chains. apply and prepare each refuse a state file produced by the other.

Deploy

  • init --intent-type standard* and the standard intent checks now target the op-contracts/v8.0.0 OPCM from the superchain registry (#22703)
  • Broadcasts from apply, bootstrap, manage and continue now let the L1 node estimate gas for each transaction instead of reusing gas limits from op-deployer's own script simulation, and send transactions one at a time, stopping at the first failure. Deployments are slower but no longer fail when L1 gas costs are repriced, as with EIP-8037 in Glamsterdam. Gas estimation also no longer caps the estimate at 2^24, so the L1 node applies its own fork's limit (#21728, #22217)
  • When an intent sets only opcmAddress, the SuperchainConfig proxy is now read from the OPCM onchain rather than looked up in the superchain registry, so deployments against an OPCM on an L1 outside the registry work (#22252)
  • bootstrap superchain and the apply superchain stage no longer deploy ProtocolVersions. The protocolVersionsProxyAddress and protocolVersionsImplAddress fields are gone from the bootstrap outputs, and the matching fields are gone from superchainContracts in state.json (#20527)

Genesis

  • New chains now activate every hardfork up to the newest one active on OP Mainnet at genesis, read from the embedded superchain registry. In this release that is Karst; previously it was Jovian. Override the schedule with the l2Genesis*TimeOffset fields in the intent (#21633, #21664)
  • New deploy config field keepKarstUpgradeGas (default false), written to the rollup config as keep_karst_upgrade_gas (#21441)
  • apply now validates the generated L2 genesis allocs and fails with L2 genesis allocs failed validation if an account is unexpected or a proxy's admin and implementation slots are inconsistent (#21345)
  • The generated L2 genesis no longer leaves the L2 ProxyAdmin owner account with a nonzero nonce (#21343)
  • L1 dev genesis (--deployment-target genesis) now applies bpo2TimeOffset, which was previously ignored, and accepts new l1DevGenesisParams fields bpo3TimeOffset, bpo4TimeOffset, bpo5TimeOffset and amsterdamTimeOffset (#21920)
  • L2 genesis generation for --deployment-target genesis now accepts contract artifacts above the EIP-170 code-size limit, such as unoptimized development builds (#21936)

Bug fixes

  • Fixed a revision id N cannot be reverted panic during script execution when the revision id did not start with 1, hit on the OPCM v2 upgrade path (#21396)
  • A spurious Transaction receipt not found err="context canceled" warning is no longer logged after a transaction confirms (#21317)

Miscellaneous

  • The artifact download progress bar is now a single line, Downloading... NN% (x/y), updated once per second, and is hidden when stderr is not a terminal (#20988)

Security

  • Built with Go 1.26.5 (previously 1.24.13), picking up Go standard library security fixes (#21452, #21854)

Full Changelog: op-deployer/v0.7.1...op-deployer/v0.8.0

🚢 Docker Image:

Don't miss a new optimism release

NewReleases is sending notifications on new releases.