Skip to content

feat: eth/052 deputy pause key rotation#1399

Open
Ethnical wants to merge 18 commits intomainfrom
feat/deputy-pause-key-rotation-eth
Open

feat: eth/052 deputy pause key rotation#1399
Ethnical wants to merge 18 commits intomainfrom
feat/deputy-pause-key-rotation-eth

Conversation

@Ethnical
Copy link
Copy Markdown
Contributor

Summary

Split from #1396 — this PR contains only the Mainnet deputy pause key rotation task, plus the src/addresses.toml entry it depends on.

  • src/tasks/eth/052-deputy-pause-key-rotation/ — rotates DeputyPauseModule Deputy EOA on OP Mainnet from 0x352f1defb49718e7ea411687e850aa8d6299f7ac to 0x2fA150379bF32b6d79Eeb4ff9bD280E76049a87c via setDeputy() on the DeputyPauseModule at 0x126a736B18E0a64fBA19D421647A530E327E112C.
  • src/addresses.toml — registers DeputyPauseModule under [eth] (sep already had its own entry).
  • Signed by the FoundationOperationsSafe (0x9BA6e03D8B90dE867373Db8cF1A58d2F7F006b3A).

Sepolia counterpart: #1398. Recommended order: sign/execute sepolia first, confirm, then proceed with mainnet here.

Original PR: #1396 (to be closed once both splits land).
Authored by @JosepBove, split into separate PRs at review request.

Test plan

  • Simulate with just simulate src/tasks/eth/052-deputy-pause-key-rotation and confirm the logs say Using script .../DeputyPauseKeyRotationTemplate.sol
  • Verify the Tenderly state diff matches VALIDATION.md:
    • nonce bump on 0x9ba6e03d8b90de867373db8cf1a58d2f7f006b3a (118 → 119)
    • deputy storage slot 0x2 on 0x126a736b18e0a64fba19d421647a530e327e112c updated
  • Confirm domain/message hashes on the ledger match VALIDATION.md
  • Sepolia (feat: sep/074 deputy pause key rotation #1398) has been executed and verified first

Rotates the DeputyPauseModule Deputy EOA on OP Mainnet from
0x352f1defb49718e7ea411687e850aa8d6299f7ac to
0x2fA150379bF32b6d79Eeb4ff9bD280E76049a87c via setDeputy() on the
DeputyPauseModule at 0x126a736B18E0a64fBA19D421647A530E327E112C.

Also registers the mainnet DeputyPauseModule address under [eth] in
src/addresses.toml (sep already had its entry).

Split from #1396 so mainnet can proceed independently of sepolia.

Co-Authored-By: Tom <tom@oplabs.co>
@Ethnical Ethnical requested review from a team as code owners April 16, 2026 22:23
@Ethnical Ethnical requested a review from maurelian April 16, 2026 22:23
@JosepBove
Copy link
Copy Markdown
Member

Rebase and LGTM

Comment thread src/addresses.toml Outdated
SuperchainConfig = "0x95703e0982140D16f8ebA6d158FccEde42f04a4C"
ProtocolVersions = "0x8062AbC286f5e7D9428a0Ccb9AbD71e50d93b935" # Cannot be found by chain discovery in SuperchainAddressRegistry.sol
DeputyGuardianModule = "0xc6901F65369FC59fC1B4D6D6bE7A2318Ff38dB5B"
DeputyPauseModule = "0x126a736B18E0a64fBA19D421647A530E327E112C"
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

DPM should be the instead -> 0x76fC2F971FB355D0453cF9F64d3F9E4f640E1754

Ethnical and others added 17 commits April 22, 2026 22:48
…radeSafe

Correct the mainnet DeputyPauseModule address and swap the executing safe
from the FoundationOperationsSafe to the FoundationUpgradeSafe, consistent
with the sepolia fix in #1402.

  - src/addresses.toml:
      DeputyPauseModule (eth):
        0x126a736B18E0a64fBA19D421647A530E327E112C (wrong)
        → 0x76fC2F971FB355D0453cF9F64d3F9E4f640E1754 (current mainnet DPM)
  - src/tasks/eth/052-deputy-pause-key-rotation/README.md:
      DPM reference updated; signing safe switched from
      [FoundationOperationsSafe](0x9BA6e03D...) →
      [FoundationUpgradeSafe](0x847B5c17...).
  - src/tasks/eth/052-deputy-pause-key-rotation/config.toml:
      [stateOverrides] target switched from 0x9BA6e03D... → 0x847B5c17....
  - src/tasks/eth/052-deputy-pause-key-rotation/VALIDATION.md:
      State-override section, state-change section, labels, and
      lowercase/mixed-case addresses updated to reference the FoundationUpgradeSafe
      and the current DPM 0x76fC2F971FB355D0453cF9F64d3F9E4f640E1754.

Follow-up required before this task can be signed:
  - `newDeputySignature` in config.toml was signed against the old DPM's
    domain separator; regenerate against 0x76fC2F97... (e.g. with
    `just auth-sig 0x76fC2F971FB355D0453cF9F64d3F9E4f640E1754` in
    Superchain-pause-execution).
  - The nonce value (118 → 119) in config.toml + VALIDATION.md is the
    FoS nonce; replace with the FoundationUpgradeSafe's current nonce on
    mainnet before signing.
  - Domain Hash + Message Hash in VALIDATION.md must be recomputed once
    the new signature is in place.
… override

Set safeAddressString = "FoundationUpgradeSafe" in config.toml. The framework
(MultisigTask.loadSafeAddressString) picks this up and overrides the template's
hardcoded "FoundationOperationsSafe" — no template edit needed. Sepolia keeps
the default FOS; Mainnet routes through FuS as required.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Earlier branch commits (1ea27ed, 5671ff9) added an empty state variable
_safeAddressString to DeputyPauseKeyRotationTemplate.sol and returned it from
safeAddressString(). But _templateSetup never populated it, so _taskStorageWrites()
pushed "" into allowedStorageKeys, causing SimpleAddressRegistry.get("") to
revert during simulation.

The template never needed to change — MultisigTask.loadSafeAddressString
already reads .safeAddressString from config.toml and overrides the template's
hardcoded return. Restored template to match origin/main (hardcodes
"FoundationUpgradeSafe", the mainnet default). Mainnet task config keeps its
explicit safeAddressString override for readability even though it matches
the template default.

Also fixed a typo in the sep test config: "FoundationOperationSafe" (missing s)
→ "FoundationOperationsSafe" — this is the canonical identifier in addresses.toml.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Post-rebuild: new deputy signature and corresponding domain/message hashes
from the FuS-signed rotation. Concatenated EIP-712 preimage verified:
0x1901 | a4a9c312...b732672 | 172732de...23306cc

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Commit ea8fa2a ("bump: correct signature for the new Deputy") overwrote the
sepolia test fixture's signature with the mainnet FuS signature by mistake.
The regression test testRegressionCallDataMatches_DeputyPauseKeyRotationTemplate
pins block 8092613 and asserts calldata that embeds the original FOS-signed
0x3efc7828...1b signature, so any other value breaks the calldata check.

Restoring the canonical sepolia signature (same one in the executed
sep/009 production task).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…eum-optimism/superchain-ops into feat/deputy-pause-key-rotation-eth
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants