ethereum-optimism / ethereum-optimism/optimism

op-deployer manage: `migrate` and `set-interop-dispute-games` neither broadcast nor dump calldata

Open
#21,797 0 comments 0 reactions 0 assignees View on GitHub
A-op-deployer C-feature
Dominant language
Go
Stars
6.5k
Forks
4k
Avg merge
2d 38m
Merged PRs (30d)
164

Description

### Problem

Two `op-deployer manage` subcommands set up a `KeyedBroadcaster` (via `env.DefaultForkedScriptHost`) but never actually broadcast the resulting transaction, nor do they dump the calldata for a multisig/Safe to execute:

- `op-deployer manage migrate` — `op-deployer/pkg/deployer/manage/migrate.go` (broadcaster at `migrate.go:261`, `DefaultForkedScriptHost` at `migrate.go:272`)
- `op-deployer manage set-interop-dispute-games` — `op-deployer/pkg/deployer/manage/set_interop_dispute_games.go` (broadcaster at `set_interop_dispute_games.go:267`, `DefaultForkedScriptHost` at `set_interop_dispute_games.go:278`)

This is fine for the current forked-simulation/testing use, but neither command is production-ready: these operations are executed by the L1 ProxyAdmin owner (governance multisig), so the real flow needs the **calldata** emitted for signing/execution, not a discarded simulated broadcast.

### Desired outcome

Give both commands a uniform way to produce their governance transaction output — preferably dump the target-address + calldata (the delegatecall payload into OPCM) so it can be handed to a Safe/multisig. Handle both commands the same way to keep `manage` subcommands consistent.

### Context

Surfaced during review of #21518 [here](https://github.com/ethereum-optimism/optimism/pull/21518#discussion_r3586239585). Both commands intentionally mirror each other's structure (`DummyCaller` etches the governance caller in the Solidity script), so a shared approach applies to both.

### Related issues

#20447

Contributor guide

Open the contributing guide

Research direction

Start with op-deployer/pkg/deployer/manage/migrate.go and set_interop_dispute_games.go, focusing on the KeyedBroadcaster and env.DefaultForkedScriptHost locations identified in the issue. Compare their mirrored DummyCaller structures and the discussion in #21518, then define a shared governance-output approach. Done means both commands consistently produce the target address and calldata for Safe or multisig execution.

Written by the indexing model from the issue text.

Assessment

Tech stack
go, solidity
Domain
blockchain
Issue type
Feature
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
48/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.