From 9591da01d1d0d7dbe1698237e6f685f4b57c1918 Mon Sep 17 00:00:00 2001 From: Wazabie <48911235+Wazabie@users.noreply.github.com> Date: Thu, 2 Oct 2025 18:40:37 +0200 Subject: [PATCH 01/19] Adding initial files --- .../sep/034-op-sepolia-fusaka-prestate/.env | 1 + .../034-op-sepolia-fusaka-prestate/README.md | 21 +++ .../VALIDATION.md | 42 +++++ .../config.toml | 27 ++++ src/template/OPCMUpdatePrestateV410.sol | 149 ++++++++++++++++++ test/tasks/Regression.t.sol | 30 ++++ .../sep/028-opcm-update-prestate-v410/.env | 3 + .../028-opcm-update-prestate-v410/config.toml | 27 ++++ 8 files changed, 300 insertions(+) create mode 100644 src/tasks/sep/034-op-sepolia-fusaka-prestate/.env create mode 100644 src/tasks/sep/034-op-sepolia-fusaka-prestate/README.md create mode 100644 src/tasks/sep/034-op-sepolia-fusaka-prestate/VALIDATION.md create mode 100644 src/tasks/sep/034-op-sepolia-fusaka-prestate/config.toml create mode 100644 src/template/OPCMUpdatePrestateV410.sol create mode 100644 test/tasks/example/sep/028-opcm-update-prestate-v410/.env create mode 100644 test/tasks/example/sep/028-opcm-update-prestate-v410/config.toml diff --git a/src/tasks/sep/034-op-sepolia-fusaka-prestate/.env b/src/tasks/sep/034-op-sepolia-fusaka-prestate/.env new file mode 100644 index 0000000000..adf17d369c --- /dev/null +++ b/src/tasks/sep/034-op-sepolia-fusaka-prestate/.env @@ -0,0 +1 @@ +TENDERLY_GAS=15000000 diff --git a/src/tasks/sep/034-op-sepolia-fusaka-prestate/README.md b/src/tasks/sep/034-op-sepolia-fusaka-prestate/README.md new file mode 100644 index 0000000000..ef9771074c --- /dev/null +++ b/src/tasks/sep/034-op-sepolia-fusaka-prestate/README.md @@ -0,0 +1,21 @@ +# 034-op-sepolia-fusaka-prestate + +Status: [DRAFT, NOT READY TO SIGN] + +## Objective + +This task uses `op-contract/v4.1.0` OPContractsManager to update the prestate of OP Sepolia to the Fusaka compatible prestate. + +## Simulation & Signing + +Simulation commands for each safe: +```bash +cd src/tasks/sep/034-op-sepolia-fusaka-prestate +SIMULATE_WITHOUT_LEDGER=1 just --dotenv-path $(pwd)/.env simulate +``` + +Signing commands for each safe: +```bash +cd src/tasks/sep/034-op-sepolia-fusaka-prestate +just --dotenv-path $(pwd)/.env sign +``` diff --git a/src/tasks/sep/034-op-sepolia-fusaka-prestate/VALIDATION.md b/src/tasks/sep/034-op-sepolia-fusaka-prestate/VALIDATION.md new file mode 100644 index 0000000000..ef2e4223ee --- /dev/null +++ b/src/tasks/sep/034-op-sepolia-fusaka-prestate/VALIDATION.md @@ -0,0 +1,42 @@ +# Validation + +This document can be used to validate the inputs and result of the execution of the upgrade transaction which you are +signing. + +The steps are: + +1. [Validate the Domain and Message Hashes](#expected-domain-and-message-hashes) +2. [Verifying the state changes via the normalized state diff hash](#normalized-state-diff-hash-attestation) +3. [Verifying the transaction input](#understanding-task-calldata) +4. [Verifying the state changes](#task-state-changes) + +## Expected Domain and Message Hashes + +First, we need to validate the domain and message hashes. These values should match both the values on your ledger and +the values printed to the terminal when you run the task. + +> [!CAUTION] +> +> Before signing, ensure the below hashes match what is on your ledger. +> +> ### Security Council Safe (`0xf64bc17485f0B4Ea5F06A96514182FC4cB561977`) +> +> - Domain Hash: `0xbe081970e9fc104bd1ea27e375cd21ec7bb1eec56bfe43347c3e36c5d27b8533` +> - Message Hash: `0x1b6cb395dc154facd7d0d557f5cc611c92501af342da198301468e2c0fd16119` +> +> ### Foundation Safe (`0xDEe57160aAfCF04c34C887B5962D0a69676d3C8B`) +> +> - Domain Hash: `0x37e1f5dd3b92a004a23589b741196c8a214629d4ea3a690ec8e41ae45c689cbb` +> - Message Hash: `0xacf43d5932b31e3b4acac045fa597f0b6a0f601b32b9d9361a04da4ec5c3b296` +## Normalized State Diff Hash Attestation + +The normalized state diff hash **MUST** match the hash produced by the state changes attested to in the state diff audit report. As a signer, you are responsible for verifying that this hash is correct. Please compare the hash below with the one in the audit report. If no audit report is available for this task, you must still ensure that the normalized state diff hash matches the output in your terminal. + +**Normalized hash:** `0x04ffa2da5f137b554a1aa3441e85abc43c0bb69083d7f848b2d73e66b640fc0f` + +## Task Calldata + +Calldata: +``` +0x82ad56cb0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000003bb6437aba031afbf9cb3538fa064161e2bf2d780000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a49a72745b00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000034edd2a225f7f429a63e0f1d2084b9e0a93b538000000000000000000000000189abaaaa82dfc015a588a7dbad6f13b1d3485bc03eb07101fbdeaf3f04d9fb76526362c1eea2824e4c6e970bdb19675b72e4fc900000000000000000000000000000000000000000000000000000000 +``` \ No newline at end of file diff --git a/src/tasks/sep/034-op-sepolia-fusaka-prestate/config.toml b/src/tasks/sep/034-op-sepolia-fusaka-prestate/config.toml new file mode 100644 index 0000000000..e78f6a18cd --- /dev/null +++ b/src/tasks/sep/034-op-sepolia-fusaka-prestate/config.toml @@ -0,0 +1,27 @@ +templateName = "OPCMUpdatePrestateV410" + +[[l2chains]] +chainId = 11155420 +name = "OP Sepolia Testnet" + +[[opcmUpgrades]] +chainId = 11155420 +absolutePrestate = "0x03eb07101fbdeaf3f04d9fb76526362c1eea2824e4c6e970bdb19675b72e4fc9" # op-program/v1.6.1 - https://github.com/ethereum-optimism/superchain-registry/blob/47f21fb1291999cb9a46653dd92d7cd55b6e3821/validation/standard/standard-prestates.toml#L6C9-L6C75 +# The above prestate needs to be updated with the correct Fusaka Absolute Prestate +expectedValidationErrors = "" + + +[addresses] +OPCM = "0x3bb6437aba031afbf9cb3538fa064161e2bf2d78" # version 3.2.0 https://github.com/ethereum-optimism/superchain-registry/blob/40526b1288534f6b84b7aae21d13c0b5f5b12f47/validation/standard/standard-versions-sepolia.toml#L23 +StandardValidatorV410 = "0x7b4d2a02d5fa6c7c98d835d819956ebb876ff439" # Sepolia https://github.com/ethereum-optimism/optimism/blob/f79ed8b9c9cbdbf8bb492074f3f98da7f072e21a/op-validator/pkg/validations/addresses.go#L30 + +[stateOverrides] +0x1Eb2fFc903729a0F03966B917003800b145F56E2 = [ # L1PAO + {key = "0x0000000000000000000000000000000000000000000000000000000000000005", value = 37} +] +0xf64bc17485f0B4Ea5F06A96514182FC4cB561977 = [ # SC + {key = "0x0000000000000000000000000000000000000000000000000000000000000005", value = 48} +] +0xDEe57160aAfCF04c34C887B5962D0a69676d3C8B = [ # FUS + {key = "0x0000000000000000000000000000000000000000000000000000000000000005", value = 51} +] diff --git a/src/template/OPCMUpdatePrestateV410.sol b/src/template/OPCMUpdatePrestateV410.sol new file mode 100644 index 0000000000..434e2ef640 --- /dev/null +++ b/src/template/OPCMUpdatePrestateV410.sol @@ -0,0 +1,149 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.15; + +import {ISystemConfig, IProxyAdmin} from "@eth-optimism-bedrock/interfaces/L1/IOPContractsManager.sol"; +import {IOPContractsManager} from "lib/optimism/packages/contracts-bedrock/interfaces/L1/IOPContractsManager.sol"; +import {Claim} from "@eth-optimism-bedrock/src/dispute/lib/Types.sol"; +import {VmSafe} from "forge-std/Vm.sol"; +import {stdToml} from "forge-std/StdToml.sol"; +import {console2 as console} from "forge-std/console2.sol"; +import {LibString} from "solady/utils/LibString.sol"; + +import {SuperchainAddressRegistry} from "src/SuperchainAddressRegistry.sol"; +import {OPCMTaskBase} from "src/tasks/types/OPCMTaskBase.sol"; +import {Action} from "src/libraries/MultisigTypes.sol"; + +/// @notice This template provides OPCM-based absolute prestate updates. +/// Supports: op-contracts/v4.1.0 +contract OPCMUpdatePrestateV410 is OPCMTaskBase { + using stdToml for string; + using LibString for string; + + /// @notice The StandardValidatorV410 address + IStandardValidatorV410 public STANDARD_VALIDATOR_V410; + + /// @notice Struct to store inputs for OPCM.updatePrestate() function per l2 chain + struct OPCMUpgrade { + Claim absolutePrestate; + uint256 chainId; + string expectedValidationErrors; + } + + /// @notice Mapping of l2 chain IDs to their respective prestates + mapping(uint256 => OPCMUpgrade) public upgrades; + + /// @notice Returns the storage write permissions required for this task + function _taskStorageWrites() internal pure virtual override returns (string[] memory) { + string[] memory storageWrites = new string[](1); + storageWrites[0] = "DisputeGameFactoryProxy"; + return storageWrites; + } + + /// @notice Sets up the template with implementation configurations from a TOML file. + function _templateSetup(string memory taskConfigFilePath, address rootSafe) internal override { + super._templateSetup(taskConfigFilePath, rootSafe); + string memory tomlContent = vm.readFile(taskConfigFilePath); + + OPCMUpgrade[] memory _upgrades = abi.decode(tomlContent.parseRaw(".opcmUpgrades"), (OPCMUpgrade[])); + for (uint256 i = 0; i < _upgrades.length; i++) { + console.log("Adding upgrade - chainID: %s, absolutePrestate:", _upgrades[i].chainId); + console.logBytes32(Claim.unwrap(_upgrades[i].absolutePrestate)); + console.log("Expected errors: %s", _upgrades[i].expectedValidationErrors); + upgrades[_upgrades[i].chainId] = _upgrades[i]; + } + + address OPCM = tomlContent.readAddress(".addresses.OPCM"); + OPCM_TARGETS.push(OPCM); + require(IOPContractsManager(OPCM).version().eq("3.2.0"), "Incorrect OPCM - expected version 3.2.0"); + vm.label(OPCM, "OPCM"); + + STANDARD_VALIDATOR_V410 = IStandardValidatorV410(tomlContent.readAddress(".addresses.StandardValidatorV410")); + require( + address(STANDARD_VALIDATOR_V410).code.length > 0, "Incorrect StandardValidatorV410 - no code at address" + ); + require( + STANDARD_VALIDATOR_V410.mipsVersion().eq("1.8.0"), + "Incorrect StandardValidatorV410 - expected mips version 1.8.0" + ); + require( + STANDARD_VALIDATOR_V410.systemConfigVersion().eq("3.7.0"), + "Incorrect StandardValidatorV410 - expected systemConfig version 3.7.0" + ); + vm.label(address(STANDARD_VALIDATOR_V410), "StandardValidatorV410"); + } + + /// @notice Before implementing the `_build` function, template developers must consider the following: + /// 1. Which Multicall contract does this template use — `Multicall3` or `Multicall3Delegatecall`? + /// 2. Based on the contract, should the target be called using `call` or `delegatecall`? + /// 3. Ensure that the call to the target uses the appropriate method (`call` or `delegatecall`) accordingly. + /// Guidelines: + /// - `Multicall3Delegatecall`: + /// If the template inherits from `OPCMTaskBase`, it uses the `Multicall3Delegatecall` contract. + /// In this case, calls to the target **must** use `delegatecall`, e.g.: + /// `(bool success,) = OPCM.delegatecall(abi.encodeWithSelector(IOPCMPrestateUpdate.upgrade.selector, opChainConfigs));` + function _build(address) internal override { + SuperchainAddressRegistry.ChainInfo[] memory chains = superchainAddrRegistry.getChains(); + IOPContractsManager.OpChainConfig[] memory opChainConfigs = + new IOPContractsManager.OpChainConfig[](chains.length); + + for (uint256 i = 0; i < chains.length; i++) { + uint256 chainId = chains[i].chainId; + opChainConfigs[i] = IOPContractsManager.OpChainConfig({ + systemConfigProxy: ISystemConfig(superchainAddrRegistry.getAddress("SystemConfigProxy", chainId)), + proxyAdmin: IProxyAdmin(superchainAddrRegistry.getAddress("ProxyAdmin", chainId)), + absolutePrestate: upgrades[chainId].absolutePrestate + }); + } + + (bool success,) = OPCM_TARGETS[0].delegatecall( + abi.encodeWithSelector(IOPCMPrestateUpdate.updatePrestate.selector, opChainConfigs) + ); + require(success, "OPCM.updatePrestate() failed"); + } + + /// @notice This method performs all validations and assertions that verify the calls executed as expected. + function _validate(VmSafe.AccountAccess[] memory, Action[] memory, address) internal view override { + SuperchainAddressRegistry.ChainInfo[] memory chains = superchainAddrRegistry.getChains(); + + for (uint256 i = 0; i < chains.length; i++) { + uint256 chainId = chains[i].chainId; + bytes32 expAbsolutePrestate = Claim.unwrap(upgrades[chainId].absolutePrestate); + string memory expErrors = upgrades[chainId].expectedValidationErrors; + address proxyAdmin = superchainAddrRegistry.getAddress("ProxyAdmin", chainId); + address sysCfg = superchainAddrRegistry.getAddress("SystemConfigProxy", chainId); + + IStandardValidatorV410.InputV410 memory input = IStandardValidatorV410.InputV410({ + proxyAdmin: proxyAdmin, + sysCfg: sysCfg, + absolutePrestate: expAbsolutePrestate, + l2ChainID: chainId + }); + + string memory errors = STANDARD_VALIDATOR_V410.validate({_input: input, _allowFailure: true}); + + require(errors.eq(expErrors), string.concat("Unexpected errors: ", errors, "; expected: ", expErrors)); + } + } + + /// @notice Override to return a list of addresses that should not be checked for code length. + function _getCodeExceptions() internal view virtual override returns (address[] memory) {} +} + +interface IOPCMPrestateUpdate { + function updatePrestate(IOPContractsManager.OpChainConfig[] memory _prestateUpdateInputs) external; +} + +interface IStandardValidatorV410 { + struct InputV410 { + address proxyAdmin; + address sysCfg; + bytes32 absolutePrestate; + uint256 l2ChainID; + } + + function validate(InputV410 memory _input, bool _allowFailure) external view returns (string memory); + + function mipsVersion() external pure returns (string memory); + + function systemConfigVersion() external pure returns (string memory); +} diff --git a/test/tasks/Regression.t.sol b/test/tasks/Regression.t.sol index b16ffbd3c6..8a89bf6a14 100644 --- a/test/tasks/Regression.t.sol +++ b/test/tasks/Regression.t.sol @@ -11,6 +11,7 @@ import {OPCMUpgradeV200} from "src/template/OPCMUpgradeV200.sol"; import {OPCMUpgradeV300} from "src/template/OPCMUpgradeV300.sol"; import {OPCMUpgradeV400} from "src/template/OPCMUpgradeV400.sol"; import {OPCMUpdatePrestateV300} from "src/template/OPCMUpdatePrestateV300.sol"; +import {OPCMUpdatePrestateV410} from "src/template/OPCMUpdatePrestateV410.sol"; import {SetRespectedGameTypeTemplate} from "src/template/SetRespectedGameTypeTemplate.sol"; import {UpdateRetirementTimestampV200} from "src/template/UpdateRetirementTimestampV200.sol"; import {UpdateRetirementTimestampV400} from "src/template/UpdateRetirementTimestampV400.sol"; @@ -418,6 +419,35 @@ contract RegressionTest is Test { _assertDataToSignNestedMultisig(multisigTask, actions, expectedDataToSign, MULTICALL3_ADDRESS, rootSafe); } + /// @notice Expected call data and data to sign generated by manually running the OPCMUpdatePrestateV410 template at block 8098229 on sepolia + /// Simulate from task directory (test/tasks/example/sep/028-opcm-update-prestate-v410) with: + /// SIMULATE_WITHOUT_LEDGER=1 just --dotenv-path "$(pwd)/.env" --justfile ../../../../../src/justfile simulate + function testRegressionCallDataMatches_OPCMUpdatePrestateV410() public { + string memory taskConfigFilePath = "test/tasks/example/sep/028-opcm-update-prestate-v410/config.toml"; + // Call data generated by manually running the OPCMUpdatePrestateV410 template at block 9327881 on sepolia. + string memory expectedCallData = + "0x82ad56cb0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000003bb6437aba031afbf9cb3538fa064161e2bf2d780000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a49a72745b00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000034edd2a225f7f429a63e0f1d2084b9e0a93b538000000000000000000000000189abaaaa82dfc015a588a7dbad6f13b1d3485bc03eb07101fbdeaf3f04d9fb76526362c1eea2824e4c6e970bdb19675b72e4fc900000000000000000000000000000000000000000000000000000000"; + MultisigTask multisigTask = new OPCMUpdatePrestateV410(); + address rootSafe = address(0x1Eb2fFc903729a0F03966B917003800b145F56E2); + address foundationChildMultisig = 0xDEe57160aAfCF04c34C887B5962D0a69676d3C8B; + address[] memory allSafes = MultisigTaskTestHelper.getAllSafes(rootSafe, foundationChildMultisig); + + (Action[] memory actions, uint256[] memory allOriginalNonces) = + _setupAndSimulate(taskConfigFilePath, 9327881, "sepolia", multisigTask, allSafes); + + _assertCallDataMatches(multisigTask, actions, allSafes, allOriginalNonces, expectedCallData); + + // Data to sign generated by manually running the OPCMUpdatePrestateV410 template at block 9327881 on sepolia. + string[] memory expectedDataToSign = new string[](2); + // Foundation + expectedDataToSign[0] = + "0x190137e1f5dd3b92a004a23589b741196c8a214629d4ea3a690ec8e41ae45c689cbbacf43d5932b31e3b4acac045fa597f0b6a0f601b32b9d9361a04da4ec5c3b296"; + // Security council + expectedDataToSign[1] = + "0x1901be081970e9fc104bd1ea27e375cd21ec7bb1eec56bfe43347c3e36c5d27b85331b6cb395dc154facd7d0d557f5cc611c92501af342da198301468e2c0fd16119"; + _assertDataToSignNestedMultisig(multisigTask, actions, expectedDataToSign, MULTICALL3_ADDRESS, rootSafe); + } + /// @notice Expected call data and data to sign generated by manually running the TransferL2PAOFromL1 template at block 22447773 on mainnet. /// Simulate from task directory (test/tasks/example/eth/008-transfer-l2pao) with: /// SIMULATE_WITHOUT_LEDGER=1 just --dotenv-path $(pwd)/.env --justfile ../../../../../src/nested.just simulate diff --git a/test/tasks/example/sep/028-opcm-update-prestate-v410/.env b/test/tasks/example/sep/028-opcm-update-prestate-v410/.env new file mode 100644 index 0000000000..4387ef676b --- /dev/null +++ b/test/tasks/example/sep/028-opcm-update-prestate-v410/.env @@ -0,0 +1,3 @@ +TENDERLY_GAS=15000000 +FORK_BLOCK_NUMBER=9327881 +NESTED_SAFE_NAME_DEPTH_1=foundation diff --git a/test/tasks/example/sep/028-opcm-update-prestate-v410/config.toml b/test/tasks/example/sep/028-opcm-update-prestate-v410/config.toml new file mode 100644 index 0000000000..e78f6a18cd --- /dev/null +++ b/test/tasks/example/sep/028-opcm-update-prestate-v410/config.toml @@ -0,0 +1,27 @@ +templateName = "OPCMUpdatePrestateV410" + +[[l2chains]] +chainId = 11155420 +name = "OP Sepolia Testnet" + +[[opcmUpgrades]] +chainId = 11155420 +absolutePrestate = "0x03eb07101fbdeaf3f04d9fb76526362c1eea2824e4c6e970bdb19675b72e4fc9" # op-program/v1.6.1 - https://github.com/ethereum-optimism/superchain-registry/blob/47f21fb1291999cb9a46653dd92d7cd55b6e3821/validation/standard/standard-prestates.toml#L6C9-L6C75 +# The above prestate needs to be updated with the correct Fusaka Absolute Prestate +expectedValidationErrors = "" + + +[addresses] +OPCM = "0x3bb6437aba031afbf9cb3538fa064161e2bf2d78" # version 3.2.0 https://github.com/ethereum-optimism/superchain-registry/blob/40526b1288534f6b84b7aae21d13c0b5f5b12f47/validation/standard/standard-versions-sepolia.toml#L23 +StandardValidatorV410 = "0x7b4d2a02d5fa6c7c98d835d819956ebb876ff439" # Sepolia https://github.com/ethereum-optimism/optimism/blob/f79ed8b9c9cbdbf8bb492074f3f98da7f072e21a/op-validator/pkg/validations/addresses.go#L30 + +[stateOverrides] +0x1Eb2fFc903729a0F03966B917003800b145F56E2 = [ # L1PAO + {key = "0x0000000000000000000000000000000000000000000000000000000000000005", value = 37} +] +0xf64bc17485f0B4Ea5F06A96514182FC4cB561977 = [ # SC + {key = "0x0000000000000000000000000000000000000000000000000000000000000005", value = 48} +] +0xDEe57160aAfCF04c34C887B5962D0a69676d3C8B = [ # FUS + {key = "0x0000000000000000000000000000000000000000000000000000000000000005", value = 51} +] From 63770d914191465093922b81c6ae382b84a42006 Mon Sep 17 00:00:00 2001 From: Wazabie <48911235+Wazabie@users.noreply.github.com> Date: Thu, 2 Oct 2025 19:19:29 +0200 Subject: [PATCH 02/19] Add Ink --- src/tasks/sep/034-op-ink-sep-fusaka-prestate/.env | 1 + .../README.md | 8 ++++---- .../VALIDATION.md | 8 ++++---- .../config.toml | 10 ++++++++++ src/tasks/sep/034-op-sepolia-fusaka-prestate/.env | 1 - 5 files changed, 19 insertions(+), 9 deletions(-) create mode 100644 src/tasks/sep/034-op-ink-sep-fusaka-prestate/.env rename src/tasks/sep/{034-op-sepolia-fusaka-prestate => 034-op-ink-sep-fusaka-prestate}/README.md (64%) rename src/tasks/sep/{034-op-sepolia-fusaka-prestate => 034-op-ink-sep-fusaka-prestate}/VALIDATION.md (79%) rename src/tasks/sep/{034-op-sepolia-fusaka-prestate => 034-op-ink-sep-fusaka-prestate}/config.toml (75%) delete mode 100644 src/tasks/sep/034-op-sepolia-fusaka-prestate/.env diff --git a/src/tasks/sep/034-op-ink-sep-fusaka-prestate/.env b/src/tasks/sep/034-op-ink-sep-fusaka-prestate/.env new file mode 100644 index 0000000000..7c96bef7da --- /dev/null +++ b/src/tasks/sep/034-op-ink-sep-fusaka-prestate/.env @@ -0,0 +1 @@ +TENDERLY_GAS=30000000 diff --git a/src/tasks/sep/034-op-sepolia-fusaka-prestate/README.md b/src/tasks/sep/034-op-ink-sep-fusaka-prestate/README.md similarity index 64% rename from src/tasks/sep/034-op-sepolia-fusaka-prestate/README.md rename to src/tasks/sep/034-op-ink-sep-fusaka-prestate/README.md index ef9771074c..3eb41d756f 100644 --- a/src/tasks/sep/034-op-sepolia-fusaka-prestate/README.md +++ b/src/tasks/sep/034-op-ink-sep-fusaka-prestate/README.md @@ -1,21 +1,21 @@ -# 034-op-sepolia-fusaka-prestate +# 034-op-ink-sep-fusaka-prestate Status: [DRAFT, NOT READY TO SIGN] ## Objective -This task uses `op-contract/v4.1.0` OPContractsManager to update the prestate of OP Sepolia to the Fusaka compatible prestate. +This task uses `op-contract/v4.1.0` OPContractsManager to update the prestate of OP Sepolia and Ink Sepolia to the Fusaka compatible prestate. ## Simulation & Signing Simulation commands for each safe: ```bash -cd src/tasks/sep/034-op-sepolia-fusaka-prestate +cd src/tasks/sep/034-op-ink-sep-fusaka-prestate SIMULATE_WITHOUT_LEDGER=1 just --dotenv-path $(pwd)/.env simulate ``` Signing commands for each safe: ```bash -cd src/tasks/sep/034-op-sepolia-fusaka-prestate +cd src/tasks/sep/034-op-ink-sep-fusaka-prestate just --dotenv-path $(pwd)/.env sign ``` diff --git a/src/tasks/sep/034-op-sepolia-fusaka-prestate/VALIDATION.md b/src/tasks/sep/034-op-ink-sep-fusaka-prestate/VALIDATION.md similarity index 79% rename from src/tasks/sep/034-op-sepolia-fusaka-prestate/VALIDATION.md rename to src/tasks/sep/034-op-ink-sep-fusaka-prestate/VALIDATION.md index ef2e4223ee..7a6d54e8c9 100644 --- a/src/tasks/sep/034-op-sepolia-fusaka-prestate/VALIDATION.md +++ b/src/tasks/sep/034-op-ink-sep-fusaka-prestate/VALIDATION.md @@ -22,21 +22,21 @@ the values printed to the terminal when you run the task. > ### Security Council Safe (`0xf64bc17485f0B4Ea5F06A96514182FC4cB561977`) > > - Domain Hash: `0xbe081970e9fc104bd1ea27e375cd21ec7bb1eec56bfe43347c3e36c5d27b8533` -> - Message Hash: `0x1b6cb395dc154facd7d0d557f5cc611c92501af342da198301468e2c0fd16119` +> - Message Hash: `0xe3d326b436776a38346334167728463eb49927b3da6cc982f6e023f396142b59` > > ### Foundation Safe (`0xDEe57160aAfCF04c34C887B5962D0a69676d3C8B`) > > - Domain Hash: `0x37e1f5dd3b92a004a23589b741196c8a214629d4ea3a690ec8e41ae45c689cbb` -> - Message Hash: `0xacf43d5932b31e3b4acac045fa597f0b6a0f601b32b9d9361a04da4ec5c3b296` +> - Message Hash: `0x1856af5483515a38457e9b80f2601ef06277ecff9445dace6681f87329321870` ## Normalized State Diff Hash Attestation The normalized state diff hash **MUST** match the hash produced by the state changes attested to in the state diff audit report. As a signer, you are responsible for verifying that this hash is correct. Please compare the hash below with the one in the audit report. If no audit report is available for this task, you must still ensure that the normalized state diff hash matches the output in your terminal. -**Normalized hash:** `0x04ffa2da5f137b554a1aa3441e85abc43c0bb69083d7f848b2d73e66b640fc0f` +**Normalized hash:** `0x8a34a5ffb93039f259afaac494bde0a5b7f5cecc05a92629d9c03563d76baeb1` ## Task Calldata Calldata: ``` -0x82ad56cb0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000003bb6437aba031afbf9cb3538fa064161e2bf2d780000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a49a72745b00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000034edd2a225f7f429a63e0f1d2084b9e0a93b538000000000000000000000000189abaaaa82dfc015a588a7dbad6f13b1d3485bc03eb07101fbdeaf3f04d9fb76526362c1eea2824e4c6e970bdb19675b72e4fc900000000000000000000000000000000000000000000000000000000 +0x82ad56cb0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000003bb6437aba031afbf9cb3538fa064161e2bf2d780000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001049a72745b00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000034edd2a225f7f429a63e0f1d2084b9e0a93b538000000000000000000000000189abaaaa82dfc015a588a7dbad6f13b1d3485bc03eb07101fbdeaf3f04d9fb76526362c1eea2824e4c6e970bdb19675b72e4fc900000000000000000000000005c993e60179f28bf649a2bb5b00b5f4283bd525000000000000000000000000d7db319a49362b2328cf417a934300cccb442c8d03eb07101fbdeaf3f04d9fb76526362c1eea2824e4c6e970bdb19675b72e4fc900000000000000000000000000000000000000000000000000000000 ``` \ No newline at end of file diff --git a/src/tasks/sep/034-op-sepolia-fusaka-prestate/config.toml b/src/tasks/sep/034-op-ink-sep-fusaka-prestate/config.toml similarity index 75% rename from src/tasks/sep/034-op-sepolia-fusaka-prestate/config.toml rename to src/tasks/sep/034-op-ink-sep-fusaka-prestate/config.toml index e78f6a18cd..c237af7eda 100644 --- a/src/tasks/sep/034-op-sepolia-fusaka-prestate/config.toml +++ b/src/tasks/sep/034-op-ink-sep-fusaka-prestate/config.toml @@ -4,12 +4,22 @@ templateName = "OPCMUpdatePrestateV410" chainId = 11155420 name = "OP Sepolia Testnet" +[[l2chains]] +chainId = 763373 +name = "Ink Sepolia Testnet" + [[opcmUpgrades]] chainId = 11155420 absolutePrestate = "0x03eb07101fbdeaf3f04d9fb76526362c1eea2824e4c6e970bdb19675b72e4fc9" # op-program/v1.6.1 - https://github.com/ethereum-optimism/superchain-registry/blob/47f21fb1291999cb9a46653dd92d7cd55b6e3821/validation/standard/standard-prestates.toml#L6C9-L6C75 # The above prestate needs to be updated with the correct Fusaka Absolute Prestate expectedValidationErrors = "" +[[opcmUpgrades]] +chainId = 763373 +absolutePrestate = "0x03eb07101fbdeaf3f04d9fb76526362c1eea2824e4c6e970bdb19675b72e4fc9" # op-program/v1.6.1 - https://github.com/ethereum-optimism/superchain-registry/blob/47f21fb1291999cb9a46653dd92d7cd55b6e3821/validation/standard/standard-prestates.toml#L6C9-L6C75 +# The above prestate needs to be updated with the correct Fusaka Absolute Prestate +expectedValidationErrors = "" + [addresses] OPCM = "0x3bb6437aba031afbf9cb3538fa064161e2bf2d78" # version 3.2.0 https://github.com/ethereum-optimism/superchain-registry/blob/40526b1288534f6b84b7aae21d13c0b5f5b12f47/validation/standard/standard-versions-sepolia.toml#L23 diff --git a/src/tasks/sep/034-op-sepolia-fusaka-prestate/.env b/src/tasks/sep/034-op-sepolia-fusaka-prestate/.env deleted file mode 100644 index adf17d369c..0000000000 --- a/src/tasks/sep/034-op-sepolia-fusaka-prestate/.env +++ /dev/null @@ -1 +0,0 @@ -TENDERLY_GAS=15000000 From f7c15b24fdaad43e19343ad4fb269101f699f30c Mon Sep 17 00:00:00 2001 From: Wazabie <48911235+Wazabie@users.noreply.github.com> Date: Mon, 6 Oct 2025 06:40:15 -0400 Subject: [PATCH 03/19] Update test/tasks/Regression.t.sol Co-authored-by: mbaxter --- test/tasks/Regression.t.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/tasks/Regression.t.sol b/test/tasks/Regression.t.sol index 8a89bf6a14..aaa3444982 100644 --- a/test/tasks/Regression.t.sol +++ b/test/tasks/Regression.t.sol @@ -419,7 +419,7 @@ contract RegressionTest is Test { _assertDataToSignNestedMultisig(multisigTask, actions, expectedDataToSign, MULTICALL3_ADDRESS, rootSafe); } - /// @notice Expected call data and data to sign generated by manually running the OPCMUpdatePrestateV410 template at block 8098229 on sepolia + /// @notice Expected call data and data to sign generated by manually running the OPCMUpdatePrestateV410 template at block 9327881 on sepolia /// Simulate from task directory (test/tasks/example/sep/028-opcm-update-prestate-v410) with: /// SIMULATE_WITHOUT_LEDGER=1 just --dotenv-path "$(pwd)/.env" --justfile ../../../../../src/justfile simulate function testRegressionCallDataMatches_OPCMUpdatePrestateV410() public { From ef563e995b9eaa1e559c3b6cf2ef583892dbcfb8 Mon Sep 17 00:00:00 2001 From: Wazabie <48911235+Wazabie@users.noreply.github.com> Date: Tue, 7 Oct 2025 16:38:58 +0200 Subject: [PATCH 04/19] Update template, sample and task --- .../034-op-ink-sep-fusaka-prestate/README.md | 4 +- .../config.toml | 8 +- src/template/OPCMUpdatePrestateV410.sol | 76 +++++++++++-------- test/tasks/Regression.t.sol | 6 +- .../028-opcm-update-prestate-v410/config.toml | 3 +- 5 files changed, 56 insertions(+), 41 deletions(-) diff --git a/src/tasks/sep/034-op-ink-sep-fusaka-prestate/README.md b/src/tasks/sep/034-op-ink-sep-fusaka-prestate/README.md index 3eb41d756f..98874bbf3d 100644 --- a/src/tasks/sep/034-op-ink-sep-fusaka-prestate/README.md +++ b/src/tasks/sep/034-op-ink-sep-fusaka-prestate/README.md @@ -11,11 +11,11 @@ This task uses `op-contract/v4.1.0` OPContractsManager to update the prestate of Simulation commands for each safe: ```bash cd src/tasks/sep/034-op-ink-sep-fusaka-prestate -SIMULATE_WITHOUT_LEDGER=1 just --dotenv-path $(pwd)/.env simulate +SIMULATE_WITHOUT_LEDGER=1 SKIP_DECODE_AND_PRINT=1 just --dotenv-path $(pwd)/.env simulate ``` Signing commands for each safe: ```bash cd src/tasks/sep/034-op-ink-sep-fusaka-prestate -just --dotenv-path $(pwd)/.env sign +SKIP_DECODE_AND_PRINT=1 just --dotenv-path $(pwd)/.env sign ``` diff --git a/src/tasks/sep/034-op-ink-sep-fusaka-prestate/config.toml b/src/tasks/sep/034-op-ink-sep-fusaka-prestate/config.toml index c237af7eda..de220da7d3 100644 --- a/src/tasks/sep/034-op-ink-sep-fusaka-prestate/config.toml +++ b/src/tasks/sep/034-op-ink-sep-fusaka-prestate/config.toml @@ -10,14 +10,14 @@ name = "Ink Sepolia Testnet" [[opcmUpgrades]] chainId = 11155420 -absolutePrestate = "0x03eb07101fbdeaf3f04d9fb76526362c1eea2824e4c6e970bdb19675b72e4fc9" # op-program/v1.6.1 - https://github.com/ethereum-optimism/superchain-registry/blob/47f21fb1291999cb9a46653dd92d7cd55b6e3821/validation/standard/standard-prestates.toml#L6C9-L6C75 -# The above prestate needs to be updated with the correct Fusaka Absolute Prestate +absolutePrestate = "0xdead000000000000000000000000000000000000000000000000000000000000" +# The above prestate needs to be updated with the correct Fusaka Absolute Prestate which will be published here https://github.com/ethereum-optimism/superchain-registry/blob/47f21fb1291999cb9a46653dd92d7cd55b6e3821/validation/standard/standard-prestates.toml expectedValidationErrors = "" [[opcmUpgrades]] chainId = 763373 -absolutePrestate = "0x03eb07101fbdeaf3f04d9fb76526362c1eea2824e4c6e970bdb19675b72e4fc9" # op-program/v1.6.1 - https://github.com/ethereum-optimism/superchain-registry/blob/47f21fb1291999cb9a46653dd92d7cd55b6e3821/validation/standard/standard-prestates.toml#L6C9-L6C75 -# The above prestate needs to be updated with the correct Fusaka Absolute Prestate +absolutePrestate = "0xdead000000000000000000000000000000000000000000000000000000000000" +# The above prestate needs to be updated with the correct Fusaka Absolute Prestate which will be published here https://github.com/ethereum-optimism/superchain-registry/blob/47f21fb1291999cb9a46653dd92d7cd55b6e3821/validation/standard/standard-prestates.toml expectedValidationErrors = "" diff --git a/src/template/OPCMUpdatePrestateV410.sol b/src/template/OPCMUpdatePrestateV410.sol index 434e2ef640..14f3ea51f0 100644 --- a/src/template/OPCMUpdatePrestateV410.sol +++ b/src/template/OPCMUpdatePrestateV410.sol @@ -19,9 +19,6 @@ contract OPCMUpdatePrestateV410 is OPCMTaskBase { using stdToml for string; using LibString for string; - /// @notice The StandardValidatorV410 address - IStandardValidatorV410 public STANDARD_VALIDATOR_V410; - /// @notice Struct to store inputs for OPCM.updatePrestate() function per l2 chain struct OPCMUpgrade { Claim absolutePrestate; @@ -32,6 +29,12 @@ contract OPCMUpdatePrestateV410 is OPCMTaskBase { /// @notice Mapping of l2 chain IDs to their respective prestates mapping(uint256 => OPCMUpgrade) public upgrades; + /// @notice The Standard Validator returned by OPCM + IOPContractsManagerStandardValidator public STANDARD_VALIDATOR; + + /// @notice Optional overrides to suppress known deltas (set in _templateSetup if provided) + IOPContractsManagerStandardValidator.ValidationOverrides private VALIDATION_OVERRIDES; + /// @notice Returns the storage write permissions required for this task function _taskStorageWrites() internal pure virtual override returns (string[] memory) { string[] memory storageWrites = new string[](1); @@ -57,19 +60,12 @@ contract OPCMUpdatePrestateV410 is OPCMTaskBase { require(IOPContractsManager(OPCM).version().eq("3.2.0"), "Incorrect OPCM - expected version 3.2.0"); vm.label(OPCM, "OPCM"); - STANDARD_VALIDATOR_V410 = IStandardValidatorV410(tomlContent.readAddress(".addresses.StandardValidatorV410")); - require( - address(STANDARD_VALIDATOR_V410).code.length > 0, "Incorrect StandardValidatorV410 - no code at address" - ); - require( - STANDARD_VALIDATOR_V410.mipsVersion().eq("1.8.0"), - "Incorrect StandardValidatorV410 - expected mips version 1.8.0" - ); - require( - STANDARD_VALIDATOR_V410.systemConfigVersion().eq("3.7.0"), - "Incorrect StandardValidatorV410 - expected systemConfig version 3.7.0" - ); - vm.label(address(STANDARD_VALIDATOR_V410), "StandardValidatorV410"); + // Fetch the validator directly from OPCM so it doesn't need to be configured in TOML + address validatorAddr = address(IOPCM(OPCM).opcmStandardValidator()); + require(validatorAddr != address(0), "OPCM returned zero validator"); + require(validatorAddr.code.length > 0, "Validator has no code"); + STANDARD_VALIDATOR = IOPContractsManagerStandardValidator(validatorAddr); + vm.label(address(STANDARD_VALIDATOR), "OPCMStandardValidator"); } /// @notice Before implementing the `_build` function, template developers must consider the following: @@ -112,15 +108,20 @@ contract OPCMUpdatePrestateV410 is OPCMTaskBase { address proxyAdmin = superchainAddrRegistry.getAddress("ProxyAdmin", chainId); address sysCfg = superchainAddrRegistry.getAddress("SystemConfigProxy", chainId); - IStandardValidatorV410.InputV410 memory input = IStandardValidatorV410.InputV410({ - proxyAdmin: proxyAdmin, - sysCfg: sysCfg, - absolutePrestate: expAbsolutePrestate, - l2ChainID: chainId + IOPContractsManagerStandardValidator.ValidationInput memory input = + IOPContractsManagerStandardValidator.ValidationInput({ + proxyAdmin: IProxyAdmin(proxyAdmin), + sysCfg: ISystemConfig(sysCfg), + absolutePrestate: expAbsolutePrestate, + l2ChainID: chainId + }); + + string memory errors = STANDARD_VALIDATOR.validateWithOverrides({ + _input: input, + _allowFailure: true, + _overrides: VALIDATION_OVERRIDES }); - string memory errors = STANDARD_VALIDATOR_V410.validate({_input: input, _allowFailure: true}); - require(errors.eq(expErrors), string.concat("Unexpected errors: ", errors, "; expected: ", expErrors)); } } @@ -133,17 +134,32 @@ interface IOPCMPrestateUpdate { function updatePrestate(IOPContractsManager.OpChainConfig[] memory _prestateUpdateInputs) external; } -interface IStandardValidatorV410 { - struct InputV410 { - address proxyAdmin; - address sysCfg; +/// @notice Interface to retrieve the standard validator from OPCM. +interface IOPCM { + function opcmStandardValidator() external view returns (IOPContractsManagerStandardValidator); +} + +/// @notice Validator interface for validateWithOverrides usage. +interface IOPContractsManagerStandardValidator { + struct ValidationInput { + IProxyAdmin proxyAdmin; + ISystemConfig sysCfg; bytes32 absolutePrestate; uint256 l2ChainID; } - function validate(InputV410 memory _input, bool _allowFailure) external view returns (string memory); + struct ValidationOverrides { + address l1PAOMultisig; + address challenger; + } + + function validate(ValidationInput memory _input, bool _allowFailure) external view returns (string memory); - function mipsVersion() external pure returns (string memory); + function validateWithOverrides( + ValidationInput memory _input, + bool _allowFailure, + ValidationOverrides memory _overrides + ) external view returns (string memory); - function systemConfigVersion() external pure returns (string memory); + function version() external view returns (string memory); } diff --git a/test/tasks/Regression.t.sol b/test/tasks/Regression.t.sol index aaa3444982..f700e709c3 100644 --- a/test/tasks/Regression.t.sol +++ b/test/tasks/Regression.t.sol @@ -426,7 +426,7 @@ contract RegressionTest is Test { string memory taskConfigFilePath = "test/tasks/example/sep/028-opcm-update-prestate-v410/config.toml"; // Call data generated by manually running the OPCMUpdatePrestateV410 template at block 9327881 on sepolia. string memory expectedCallData = - "0x82ad56cb0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000003bb6437aba031afbf9cb3538fa064161e2bf2d780000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a49a72745b00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000034edd2a225f7f429a63e0f1d2084b9e0a93b538000000000000000000000000189abaaaa82dfc015a588a7dbad6f13b1d3485bc03eb07101fbdeaf3f04d9fb76526362c1eea2824e4c6e970bdb19675b72e4fc900000000000000000000000000000000000000000000000000000000"; + "0x82ad56cb0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000003bb6437aba031afbf9cb3538fa064161e2bf2d780000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a49a72745b00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000034edd2a225f7f429a63e0f1d2084b9e0a93b538000000000000000000000000189abaaaa82dfc015a588a7dbad6f13b1d3485bcdead00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; MultisigTask multisigTask = new OPCMUpdatePrestateV410(); address rootSafe = address(0x1Eb2fFc903729a0F03966B917003800b145F56E2); address foundationChildMultisig = 0xDEe57160aAfCF04c34C887B5962D0a69676d3C8B; @@ -441,10 +441,10 @@ contract RegressionTest is Test { string[] memory expectedDataToSign = new string[](2); // Foundation expectedDataToSign[0] = - "0x190137e1f5dd3b92a004a23589b741196c8a214629d4ea3a690ec8e41ae45c689cbbacf43d5932b31e3b4acac045fa597f0b6a0f601b32b9d9361a04da4ec5c3b296"; + "0x190137e1f5dd3b92a004a23589b741196c8a214629d4ea3a690ec8e41ae45c689cbb08ad152c64b380ea271693325a628e4a7aa2d70ff311f22cc0ceff34c34d9877"; // Security council expectedDataToSign[1] = - "0x1901be081970e9fc104bd1ea27e375cd21ec7bb1eec56bfe43347c3e36c5d27b85331b6cb395dc154facd7d0d557f5cc611c92501af342da198301468e2c0fd16119"; + "0x1901be081970e9fc104bd1ea27e375cd21ec7bb1eec56bfe43347c3e36c5d27b8533766facb22395ca23edfd1485fd285bfeb3c25354a43ebd02ef6f8d072c69aa14"; _assertDataToSignNestedMultisig(multisigTask, actions, expectedDataToSign, MULTICALL3_ADDRESS, rootSafe); } diff --git a/test/tasks/example/sep/028-opcm-update-prestate-v410/config.toml b/test/tasks/example/sep/028-opcm-update-prestate-v410/config.toml index e78f6a18cd..16dfb2e539 100644 --- a/test/tasks/example/sep/028-opcm-update-prestate-v410/config.toml +++ b/test/tasks/example/sep/028-opcm-update-prestate-v410/config.toml @@ -6,8 +6,7 @@ name = "OP Sepolia Testnet" [[opcmUpgrades]] chainId = 11155420 -absolutePrestate = "0x03eb07101fbdeaf3f04d9fb76526362c1eea2824e4c6e970bdb19675b72e4fc9" # op-program/v1.6.1 - https://github.com/ethereum-optimism/superchain-registry/blob/47f21fb1291999cb9a46653dd92d7cd55b6e3821/validation/standard/standard-prestates.toml#L6C9-L6C75 -# The above prestate needs to be updated with the correct Fusaka Absolute Prestate +absolutePrestate = "0xdead000000000000000000000000000000000000000000000000000000000000" # Dummy test prestate expectedValidationErrors = "" From 3c3fc5431eb3b97a31fdde59c3054e682d226081 Mon Sep 17 00:00:00 2001 From: Wazabie <48911235+Wazabie@users.noreply.github.com> Date: Tue, 7 Oct 2025 16:43:13 +0200 Subject: [PATCH 05/19] Update env gas --- src/tasks/sep/034-op-ink-sep-fusaka-prestate/.env | 2 +- src/template/OPCMUpdatePrestateV410.sol | 13 ++++++------- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/tasks/sep/034-op-ink-sep-fusaka-prestate/.env b/src/tasks/sep/034-op-ink-sep-fusaka-prestate/.env index 7c96bef7da..adf17d369c 100644 --- a/src/tasks/sep/034-op-ink-sep-fusaka-prestate/.env +++ b/src/tasks/sep/034-op-ink-sep-fusaka-prestate/.env @@ -1 +1 @@ -TENDERLY_GAS=30000000 +TENDERLY_GAS=15000000 diff --git a/src/template/OPCMUpdatePrestateV410.sol b/src/template/OPCMUpdatePrestateV410.sol index 14f3ea51f0..945e0c117e 100644 --- a/src/template/OPCMUpdatePrestateV410.sol +++ b/src/template/OPCMUpdatePrestateV410.sol @@ -108,13 +108,12 @@ contract OPCMUpdatePrestateV410 is OPCMTaskBase { address proxyAdmin = superchainAddrRegistry.getAddress("ProxyAdmin", chainId); address sysCfg = superchainAddrRegistry.getAddress("SystemConfigProxy", chainId); - IOPContractsManagerStandardValidator.ValidationInput memory input = - IOPContractsManagerStandardValidator.ValidationInput({ - proxyAdmin: IProxyAdmin(proxyAdmin), - sysCfg: ISystemConfig(sysCfg), - absolutePrestate: expAbsolutePrestate, - l2ChainID: chainId - }); + IOPContractsManagerStandardValidator.ValidationInput memory input = IOPContractsManagerStandardValidator.ValidationInput({ + proxyAdmin: IProxyAdmin(proxyAdmin), + sysCfg: ISystemConfig(sysCfg), + absolutePrestate: expAbsolutePrestate, + l2ChainID: chainId + }); string memory errors = STANDARD_VALIDATOR.validateWithOverrides({ _input: input, From 8196511eaecce36b38406719a4b67c73e2ef582f Mon Sep 17 00:00:00 2001 From: Wazabie <48911235+Wazabie@users.noreply.github.com> Date: Tue, 7 Oct 2025 16:46:07 +0200 Subject: [PATCH 06/19] Update OPCMUpdatePrestateV410.sol --- src/template/OPCMUpdatePrestateV410.sol | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/template/OPCMUpdatePrestateV410.sol b/src/template/OPCMUpdatePrestateV410.sol index 945e0c117e..55074357e1 100644 --- a/src/template/OPCMUpdatePrestateV410.sol +++ b/src/template/OPCMUpdatePrestateV410.sol @@ -108,7 +108,8 @@ contract OPCMUpdatePrestateV410 is OPCMTaskBase { address proxyAdmin = superchainAddrRegistry.getAddress("ProxyAdmin", chainId); address sysCfg = superchainAddrRegistry.getAddress("SystemConfigProxy", chainId); - IOPContractsManagerStandardValidator.ValidationInput memory input = IOPContractsManagerStandardValidator.ValidationInput({ + IOPContractsManagerStandardValidator.ValidationInput memory input = IOPContractsManagerStandardValidator + .ValidationInput({ proxyAdmin: IProxyAdmin(proxyAdmin), sysCfg: ISystemConfig(sysCfg), absolutePrestate: expAbsolutePrestate, From 24857a279ddf70e7e96877e28394e30b9d63e97c Mon Sep 17 00:00:00 2001 From: Wazabie <48911235+Wazabie@users.noreply.github.com> Date: Tue, 7 Oct 2025 16:48:09 +0200 Subject: [PATCH 07/19] Update OPCMUpdatePrestateV410.sol --- src/template/OPCMUpdatePrestateV410.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/template/OPCMUpdatePrestateV410.sol b/src/template/OPCMUpdatePrestateV410.sol index 55074357e1..062aad9118 100644 --- a/src/template/OPCMUpdatePrestateV410.sol +++ b/src/template/OPCMUpdatePrestateV410.sol @@ -109,7 +109,7 @@ contract OPCMUpdatePrestateV410 is OPCMTaskBase { address sysCfg = superchainAddrRegistry.getAddress("SystemConfigProxy", chainId); IOPContractsManagerStandardValidator.ValidationInput memory input = IOPContractsManagerStandardValidator - .ValidationInput({ + .ValidationInput({ proxyAdmin: IProxyAdmin(proxyAdmin), sysCfg: ISystemConfig(sysCfg), absolutePrestate: expAbsolutePrestate, From a3f5de795a63fb6ab4fc68149238346d42bf424b Mon Sep 17 00:00:00 2001 From: Wazabie <48911235+Wazabie@users.noreply.github.com> Date: Tue, 7 Oct 2025 17:13:03 +0200 Subject: [PATCH 08/19] Update prestates --- src/tasks/sep/034-op-ink-sep-fusaka-prestate/.env | 2 +- .../sep/034-op-ink-sep-fusaka-prestate/VALIDATION.md | 8 ++++---- src/tasks/sep/034-op-ink-sep-fusaka-prestate/config.toml | 8 ++------ .../example/sep/028-opcm-update-prestate-v410/config.toml | 2 -- 4 files changed, 7 insertions(+), 13 deletions(-) diff --git a/src/tasks/sep/034-op-ink-sep-fusaka-prestate/.env b/src/tasks/sep/034-op-ink-sep-fusaka-prestate/.env index adf17d369c..7c96bef7da 100644 --- a/src/tasks/sep/034-op-ink-sep-fusaka-prestate/.env +++ b/src/tasks/sep/034-op-ink-sep-fusaka-prestate/.env @@ -1 +1 @@ -TENDERLY_GAS=15000000 +TENDERLY_GAS=30000000 diff --git a/src/tasks/sep/034-op-ink-sep-fusaka-prestate/VALIDATION.md b/src/tasks/sep/034-op-ink-sep-fusaka-prestate/VALIDATION.md index 7a6d54e8c9..167b708264 100644 --- a/src/tasks/sep/034-op-ink-sep-fusaka-prestate/VALIDATION.md +++ b/src/tasks/sep/034-op-ink-sep-fusaka-prestate/VALIDATION.md @@ -22,21 +22,21 @@ the values printed to the terminal when you run the task. > ### Security Council Safe (`0xf64bc17485f0B4Ea5F06A96514182FC4cB561977`) > > - Domain Hash: `0xbe081970e9fc104bd1ea27e375cd21ec7bb1eec56bfe43347c3e36c5d27b8533` -> - Message Hash: `0xe3d326b436776a38346334167728463eb49927b3da6cc982f6e023f396142b59` +> - Message Hash: `0x69bc91c2ec439121bf05777e8608ae30e765a0c649a1bbd9b53cd5f4c9df4e05` > > ### Foundation Safe (`0xDEe57160aAfCF04c34C887B5962D0a69676d3C8B`) > > - Domain Hash: `0x37e1f5dd3b92a004a23589b741196c8a214629d4ea3a690ec8e41ae45c689cbb` -> - Message Hash: `0x1856af5483515a38457e9b80f2601ef06277ecff9445dace6681f87329321870` +> - Message Hash: `0x07e3464b3c48e8a9b06d42e80b528e79f7bbfc82b8fe5b9e079502356e2d8ef4` ## Normalized State Diff Hash Attestation The normalized state diff hash **MUST** match the hash produced by the state changes attested to in the state diff audit report. As a signer, you are responsible for verifying that this hash is correct. Please compare the hash below with the one in the audit report. If no audit report is available for this task, you must still ensure that the normalized state diff hash matches the output in your terminal. -**Normalized hash:** `0x8a34a5ffb93039f259afaac494bde0a5b7f5cecc05a92629d9c03563d76baeb1` +**Normalized hash:** `0x679f72c6cb577c35320e6d9fc2c2d45cd7b3ff3c9add31e90e0e599ca4e5fe6b` ## Task Calldata Calldata: ``` -0x82ad56cb0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000003bb6437aba031afbf9cb3538fa064161e2bf2d780000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001049a72745b00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000034edd2a225f7f429a63e0f1d2084b9e0a93b538000000000000000000000000189abaaaa82dfc015a588a7dbad6f13b1d3485bc03eb07101fbdeaf3f04d9fb76526362c1eea2824e4c6e970bdb19675b72e4fc900000000000000000000000005c993e60179f28bf649a2bb5b00b5f4283bd525000000000000000000000000d7db319a49362b2328cf417a934300cccb442c8d03eb07101fbdeaf3f04d9fb76526362c1eea2824e4c6e970bdb19675b72e4fc900000000000000000000000000000000000000000000000000000000 +0x82ad56cb0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000003bb6437aba031afbf9cb3538fa064161e2bf2d780000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001049a72745b00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000034edd2a225f7f429a63e0f1d2084b9e0a93b538000000000000000000000000189abaaaa82dfc015a588a7dbad6f13b1d3485bc03f05793ed3abc475137f73b68c80593cbbf40f5d1059d2ad9b8bfcb97fa892900000000000000000000000005c993e60179f28bf649a2bb5b00b5f4283bd525000000000000000000000000d7db319a49362b2328cf417a934300cccb442c8d03f05793ed3abc475137f73b68c80593cbbf40f5d1059d2ad9b8bfcb97fa892900000000000000000000000000000000000000000000000000000000 ``` \ No newline at end of file diff --git a/src/tasks/sep/034-op-ink-sep-fusaka-prestate/config.toml b/src/tasks/sep/034-op-ink-sep-fusaka-prestate/config.toml index de220da7d3..99f9bd1caa 100644 --- a/src/tasks/sep/034-op-ink-sep-fusaka-prestate/config.toml +++ b/src/tasks/sep/034-op-ink-sep-fusaka-prestate/config.toml @@ -10,20 +10,16 @@ name = "Ink Sepolia Testnet" [[opcmUpgrades]] chainId = 11155420 -absolutePrestate = "0xdead000000000000000000000000000000000000000000000000000000000000" -# The above prestate needs to be updated with the correct Fusaka Absolute Prestate which will be published here https://github.com/ethereum-optimism/superchain-registry/blob/47f21fb1291999cb9a46653dd92d7cd55b6e3821/validation/standard/standard-prestates.toml +absolutePrestate = "0x03f05793ed3abc475137f73b68c80593cbbf40f5d1059d2ad9b8bfcb97fa8929" # Fusaka Absolute Prestate published here https://github.com/ethereum-optimism/superchain-registry/blob/64dd80477fc855a4931b129cd1e2ba1c18da61c7/validation/standard/standard-prestates.toml#L6C7-L6C73 expectedValidationErrors = "" [[opcmUpgrades]] chainId = 763373 -absolutePrestate = "0xdead000000000000000000000000000000000000000000000000000000000000" -# The above prestate needs to be updated with the correct Fusaka Absolute Prestate which will be published here https://github.com/ethereum-optimism/superchain-registry/blob/47f21fb1291999cb9a46653dd92d7cd55b6e3821/validation/standard/standard-prestates.toml +absolutePrestate = "0x03f05793ed3abc475137f73b68c80593cbbf40f5d1059d2ad9b8bfcb97fa8929" # Fusaka Absolute Prestate published here https://github.com/ethereum-optimism/superchain-registry/blob/64dd80477fc855a4931b129cd1e2ba1c18da61c7/validation/standard/standard-prestates.toml#L6C7-L6C73 expectedValidationErrors = "" - [addresses] OPCM = "0x3bb6437aba031afbf9cb3538fa064161e2bf2d78" # version 3.2.0 https://github.com/ethereum-optimism/superchain-registry/blob/40526b1288534f6b84b7aae21d13c0b5f5b12f47/validation/standard/standard-versions-sepolia.toml#L23 -StandardValidatorV410 = "0x7b4d2a02d5fa6c7c98d835d819956ebb876ff439" # Sepolia https://github.com/ethereum-optimism/optimism/blob/f79ed8b9c9cbdbf8bb492074f3f98da7f072e21a/op-validator/pkg/validations/addresses.go#L30 [stateOverrides] 0x1Eb2fFc903729a0F03966B917003800b145F56E2 = [ # L1PAO diff --git a/test/tasks/example/sep/028-opcm-update-prestate-v410/config.toml b/test/tasks/example/sep/028-opcm-update-prestate-v410/config.toml index 16dfb2e539..b71d03d803 100644 --- a/test/tasks/example/sep/028-opcm-update-prestate-v410/config.toml +++ b/test/tasks/example/sep/028-opcm-update-prestate-v410/config.toml @@ -9,10 +9,8 @@ chainId = 11155420 absolutePrestate = "0xdead000000000000000000000000000000000000000000000000000000000000" # Dummy test prestate expectedValidationErrors = "" - [addresses] OPCM = "0x3bb6437aba031afbf9cb3538fa064161e2bf2d78" # version 3.2.0 https://github.com/ethereum-optimism/superchain-registry/blob/40526b1288534f6b84b7aae21d13c0b5f5b12f47/validation/standard/standard-versions-sepolia.toml#L23 -StandardValidatorV410 = "0x7b4d2a02d5fa6c7c98d835d819956ebb876ff439" # Sepolia https://github.com/ethereum-optimism/optimism/blob/f79ed8b9c9cbdbf8bb492074f3f98da7f072e21a/op-validator/pkg/validations/addresses.go#L30 [stateOverrides] 0x1Eb2fFc903729a0F03966B917003800b145F56E2 = [ # L1PAO From 5e327a9c3ac768c398a3afe676958d9f4066c761 Mon Sep 17 00:00:00 2001 From: Wazabie <48911235+Wazabie@users.noreply.github.com> Date: Tue, 7 Oct 2025 23:25:08 +0200 Subject: [PATCH 09/19] Update VALIDATION.md --- src/tasks/sep/034-op-ink-sep-fusaka-prestate/VALIDATION.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tasks/sep/034-op-ink-sep-fusaka-prestate/VALIDATION.md b/src/tasks/sep/034-op-ink-sep-fusaka-prestate/VALIDATION.md index 167b708264..22091287bd 100644 --- a/src/tasks/sep/034-op-ink-sep-fusaka-prestate/VALIDATION.md +++ b/src/tasks/sep/034-op-ink-sep-fusaka-prestate/VALIDATION.md @@ -32,7 +32,7 @@ the values printed to the terminal when you run the task. The normalized state diff hash **MUST** match the hash produced by the state changes attested to in the state diff audit report. As a signer, you are responsible for verifying that this hash is correct. Please compare the hash below with the one in the audit report. If no audit report is available for this task, you must still ensure that the normalized state diff hash matches the output in your terminal. -**Normalized hash:** `0x679f72c6cb577c35320e6d9fc2c2d45cd7b3ff3c9add31e90e0e599ca4e5fe6b` +**Normalized hash:** `0x679f72c6cb577c35320e6d9fc2c2d45cd7b3ff3c9add31e90e0e599ca4e5fe6a` ## Task Calldata From 4bdf75c3efe5efd383bd4f6980d16a368400004c Mon Sep 17 00:00:00 2001 From: Wazabie <48911235+Wazabie@users.noreply.github.com> Date: Tue, 7 Oct 2025 23:31:22 +0200 Subject: [PATCH 10/19] Update VALIDATION.md --- src/tasks/sep/034-op-ink-sep-fusaka-prestate/VALIDATION.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tasks/sep/034-op-ink-sep-fusaka-prestate/VALIDATION.md b/src/tasks/sep/034-op-ink-sep-fusaka-prestate/VALIDATION.md index 22091287bd..167b708264 100644 --- a/src/tasks/sep/034-op-ink-sep-fusaka-prestate/VALIDATION.md +++ b/src/tasks/sep/034-op-ink-sep-fusaka-prestate/VALIDATION.md @@ -32,7 +32,7 @@ the values printed to the terminal when you run the task. The normalized state diff hash **MUST** match the hash produced by the state changes attested to in the state diff audit report. As a signer, you are responsible for verifying that this hash is correct. Please compare the hash below with the one in the audit report. If no audit report is available for this task, you must still ensure that the normalized state diff hash matches the output in your terminal. -**Normalized hash:** `0x679f72c6cb577c35320e6d9fc2c2d45cd7b3ff3c9add31e90e0e599ca4e5fe6a` +**Normalized hash:** `0x679f72c6cb577c35320e6d9fc2c2d45cd7b3ff3c9add31e90e0e599ca4e5fe6b` ## Task Calldata From d48bb6c3b84f8ae405aa545bcf5cfd2e1b12d2f9 Mon Sep 17 00:00:00 2001 From: Wazabie <48911235+Wazabie@users.noreply.github.com> Date: Wed, 8 Oct 2025 17:54:01 +0200 Subject: [PATCH 11/19] Update prestates --- .../sep/034-op-ink-sep-fusaka-prestate/VALIDATION.md | 8 ++++---- .../sep/034-op-ink-sep-fusaka-prestate/config.toml | 8 ++++---- src/template/OPCMUpdatePrestateV410.sol | 11 +++++++---- 3 files changed, 15 insertions(+), 12 deletions(-) diff --git a/src/tasks/sep/034-op-ink-sep-fusaka-prestate/VALIDATION.md b/src/tasks/sep/034-op-ink-sep-fusaka-prestate/VALIDATION.md index 167b708264..6228ec8d76 100644 --- a/src/tasks/sep/034-op-ink-sep-fusaka-prestate/VALIDATION.md +++ b/src/tasks/sep/034-op-ink-sep-fusaka-prestate/VALIDATION.md @@ -22,21 +22,21 @@ the values printed to the terminal when you run the task. > ### Security Council Safe (`0xf64bc17485f0B4Ea5F06A96514182FC4cB561977`) > > - Domain Hash: `0xbe081970e9fc104bd1ea27e375cd21ec7bb1eec56bfe43347c3e36c5d27b8533` -> - Message Hash: `0x69bc91c2ec439121bf05777e8608ae30e765a0c649a1bbd9b53cd5f4c9df4e05` +> - Message Hash: `0xa311fd9776ab0338d1680920fd903a3eeb8127b6157a7d8adb9c9250c51a3552` > > ### Foundation Safe (`0xDEe57160aAfCF04c34C887B5962D0a69676d3C8B`) > > - Domain Hash: `0x37e1f5dd3b92a004a23589b741196c8a214629d4ea3a690ec8e41ae45c689cbb` -> - Message Hash: `0x07e3464b3c48e8a9b06d42e80b528e79f7bbfc82b8fe5b9e079502356e2d8ef4` +> - Message Hash: `0x0100ad527dc0a5bfde1487c1e459f345375c236cdcdd25855dbe4ce4a1ea023e` ## Normalized State Diff Hash Attestation The normalized state diff hash **MUST** match the hash produced by the state changes attested to in the state diff audit report. As a signer, you are responsible for verifying that this hash is correct. Please compare the hash below with the one in the audit report. If no audit report is available for this task, you must still ensure that the normalized state diff hash matches the output in your terminal. -**Normalized hash:** `0x679f72c6cb577c35320e6d9fc2c2d45cd7b3ff3c9add31e90e0e599ca4e5fe6b` +**Normalized hash:** `0x46c2ce3b0ad59afaa4b38c2240580cd823c763fc52dccb3b4e3631b7e500409e` ## Task Calldata Calldata: ``` -0x82ad56cb0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000003bb6437aba031afbf9cb3538fa064161e2bf2d780000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001049a72745b00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000034edd2a225f7f429a63e0f1d2084b9e0a93b538000000000000000000000000189abaaaa82dfc015a588a7dbad6f13b1d3485bc03f05793ed3abc475137f73b68c80593cbbf40f5d1059d2ad9b8bfcb97fa892900000000000000000000000005c993e60179f28bf649a2bb5b00b5f4283bd525000000000000000000000000d7db319a49362b2328cf417a934300cccb442c8d03f05793ed3abc475137f73b68c80593cbbf40f5d1059d2ad9b8bfcb97fa892900000000000000000000000000000000000000000000000000000000 +0x82ad56cb0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000003bb6437aba031afbf9cb3538fa064161e2bf2d780000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001049a72745b00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000034edd2a225f7f429a63e0f1d2084b9e0a93b538000000000000000000000000189abaaaa82dfc015a588a7dbad6f13b1d3485bc0339db503776757491b9f3038bf6f1d37b7988a2f75e823fe2656c1352ef2f9100000000000000000000000005c993e60179f28bf649a2bb5b00b5f4283bd525000000000000000000000000d7db319a49362b2328cf417a934300cccb442c8d0339db503776757491b9f3038bf6f1d37b7988a2f75e823fe2656c1352ef2f9100000000000000000000000000000000000000000000000000000000 ``` \ No newline at end of file diff --git a/src/tasks/sep/034-op-ink-sep-fusaka-prestate/config.toml b/src/tasks/sep/034-op-ink-sep-fusaka-prestate/config.toml index 99f9bd1caa..c484b30b2a 100644 --- a/src/tasks/sep/034-op-ink-sep-fusaka-prestate/config.toml +++ b/src/tasks/sep/034-op-ink-sep-fusaka-prestate/config.toml @@ -10,13 +10,13 @@ name = "Ink Sepolia Testnet" [[opcmUpgrades]] chainId = 11155420 -absolutePrestate = "0x03f05793ed3abc475137f73b68c80593cbbf40f5d1059d2ad9b8bfcb97fa8929" # Fusaka Absolute Prestate published here https://github.com/ethereum-optimism/superchain-registry/blob/64dd80477fc855a4931b129cd1e2ba1c18da61c7/validation/standard/standard-prestates.toml#L6C7-L6C73 -expectedValidationErrors = "" +absolutePrestate = "0x0339db503776757491b9f3038bf6f1d37b7988a2f75e823fe2656c1352ef2f91" # Fusaka Absolute Prestate published here https://github.com/ethereum-optimism/superchain-registry/blob/df5d4feb51f5d698d043a72ac2c6dfa9ce2a4afa/validation/standard/standard-prestates.toml#L6C7-L6C73 +expectedValidationErrors = "OVERRIDES-L1PAOMULTISIG,OVERRIDES-CHALLENGER" [[opcmUpgrades]] chainId = 763373 -absolutePrestate = "0x03f05793ed3abc475137f73b68c80593cbbf40f5d1059d2ad9b8bfcb97fa8929" # Fusaka Absolute Prestate published here https://github.com/ethereum-optimism/superchain-registry/blob/64dd80477fc855a4931b129cd1e2ba1c18da61c7/validation/standard/standard-prestates.toml#L6C7-L6C73 -expectedValidationErrors = "" +absolutePrestate = "0x0339db503776757491b9f3038bf6f1d37b7988a2f75e823fe2656c1352ef2f91" # Fusaka Absolute Prestate published here https://github.com/ethereum-optimism/superchain-registry/blob/df5d4feb51f5d698d043a72ac2c6dfa9ce2a4afa/validation/standard/standard-prestates.toml#L6C7-L6C73 +expectedValidationErrors = "OVERRIDES-L1PAOMULTISIG,OVERRIDES-CHALLENGER" [addresses] OPCM = "0x3bb6437aba031afbf9cb3538fa064161e2bf2d78" # version 3.2.0 https://github.com/ethereum-optimism/superchain-registry/blob/40526b1288534f6b84b7aae21d13c0b5f5b12f47/validation/standard/standard-versions-sepolia.toml#L23 diff --git a/src/template/OPCMUpdatePrestateV410.sol b/src/template/OPCMUpdatePrestateV410.sol index 062aad9118..2177767b09 100644 --- a/src/template/OPCMUpdatePrestateV410.sol +++ b/src/template/OPCMUpdatePrestateV410.sol @@ -32,9 +32,6 @@ contract OPCMUpdatePrestateV410 is OPCMTaskBase { /// @notice The Standard Validator returned by OPCM IOPContractsManagerStandardValidator public STANDARD_VALIDATOR; - /// @notice Optional overrides to suppress known deltas (set in _templateSetup if provided) - IOPContractsManagerStandardValidator.ValidationOverrides private VALIDATION_OVERRIDES; - /// @notice Returns the storage write permissions required for this task function _taskStorageWrites() internal pure virtual override returns (string[] memory) { string[] memory storageWrites = new string[](1); @@ -116,10 +113,16 @@ contract OPCMUpdatePrestateV410 is OPCMTaskBase { l2ChainID: chainId }); + IOPContractsManagerStandardValidator.ValidationOverrides memory overrides_ = IOPContractsManagerStandardValidator + .ValidationOverrides({ + l1PAOMultisig: superchainAddrRegistry.getAddress("ProxyAdminOwner", chainId), + challenger: superchainAddrRegistry.getAddress("Challenger", chainId) + }); + string memory errors = STANDARD_VALIDATOR.validateWithOverrides({ _input: input, _allowFailure: true, - _overrides: VALIDATION_OVERRIDES + _overrides: overrides_ }); require(errors.eq(expErrors), string.concat("Unexpected errors: ", errors, "; expected: ", expErrors)); From 145c2c24a202c953cf728d8ed473adbce9c46592 Mon Sep 17 00:00:00 2001 From: Wazabie <48911235+Wazabie@users.noreply.github.com> Date: Wed, 8 Oct 2025 18:00:33 +0200 Subject: [PATCH 12/19] Update OPCMUpdatePrestateV410.sol --- src/template/OPCMUpdatePrestateV410.sol | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/template/OPCMUpdatePrestateV410.sol b/src/template/OPCMUpdatePrestateV410.sol index 2177767b09..c911574a1b 100644 --- a/src/template/OPCMUpdatePrestateV410.sol +++ b/src/template/OPCMUpdatePrestateV410.sol @@ -113,16 +113,14 @@ contract OPCMUpdatePrestateV410 is OPCMTaskBase { l2ChainID: chainId }); - IOPContractsManagerStandardValidator.ValidationOverrides memory overrides_ = IOPContractsManagerStandardValidator - .ValidationOverrides({ + IOPContractsManagerStandardValidator.ValidationOverrides memory overrides_ = + IOPContractsManagerStandardValidator.ValidationOverrides({ l1PAOMultisig: superchainAddrRegistry.getAddress("ProxyAdminOwner", chainId), - challenger: superchainAddrRegistry.getAddress("Challenger", chainId) + challenger: superchainAddrRegistry.getAddress("Challenger", chainId) }); - string memory errors = STANDARD_VALIDATOR.validateWithOverrides({ - _input: input, - _allowFailure: true, - _overrides: overrides_ + string memory errors = + STANDARD_VALIDATOR.validateWithOverrides({ _input: input, _allowFailure: true, _overrides: overrides_ }); require(errors.eq(expErrors), string.concat("Unexpected errors: ", errors, "; expected: ", expErrors)); From d093469d54294da02d558898fb011682cd7b955a Mon Sep 17 00:00:00 2001 From: Wazabie <48911235+Wazabie@users.noreply.github.com> Date: Wed, 8 Oct 2025 18:02:48 +0200 Subject: [PATCH 13/19] Update OPCMUpdatePrestateV410.sol --- src/template/OPCMUpdatePrestateV410.sol | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/template/OPCMUpdatePrestateV410.sol b/src/template/OPCMUpdatePrestateV410.sol index c911574a1b..84a2b4c867 100644 --- a/src/template/OPCMUpdatePrestateV410.sol +++ b/src/template/OPCMUpdatePrestateV410.sol @@ -113,15 +113,14 @@ contract OPCMUpdatePrestateV410 is OPCMTaskBase { l2ChainID: chainId }); - IOPContractsManagerStandardValidator.ValidationOverrides memory overrides_ = + IOPContractsManagerStandardValidator.ValidationOverrides memory overrides_ = IOPContractsManagerStandardValidator.ValidationOverrides({ l1PAOMultisig: superchainAddrRegistry.getAddress("ProxyAdminOwner", chainId), challenger: superchainAddrRegistry.getAddress("Challenger", chainId) }); string memory errors = - STANDARD_VALIDATOR.validateWithOverrides({ _input: input, _allowFailure: true, _overrides: overrides_ - }); + STANDARD_VALIDATOR.validateWithOverrides({ _input: input, _allowFailure: true, _overrides: overrides_}); require(errors.eq(expErrors), string.concat("Unexpected errors: ", errors, "; expected: ", expErrors)); } From db0b7d04195d3039e27de309320269d0e6a861eb Mon Sep 17 00:00:00 2001 From: Wazabie <48911235+Wazabie@users.noreply.github.com> Date: Wed, 8 Oct 2025 18:06:28 +0200 Subject: [PATCH 14/19] Update OPCMUpdatePrestateV410.sol --- src/template/OPCMUpdatePrestateV410.sol | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/template/OPCMUpdatePrestateV410.sol b/src/template/OPCMUpdatePrestateV410.sol index 84a2b4c867..36c5bd89dc 100644 --- a/src/template/OPCMUpdatePrestateV410.sol +++ b/src/template/OPCMUpdatePrestateV410.sol @@ -119,8 +119,8 @@ contract OPCMUpdatePrestateV410 is OPCMTaskBase { challenger: superchainAddrRegistry.getAddress("Challenger", chainId) }); - string memory errors = - STANDARD_VALIDATOR.validateWithOverrides({ _input: input, _allowFailure: true, _overrides: overrides_}); + string memory errors = + STANDARD_VALIDATOR.validateWithOverrides({ _input: input, _allowFailure: true, _overrides: overrides_ }); require(errors.eq(expErrors), string.concat("Unexpected errors: ", errors, "; expected: ", expErrors)); } From fbc1f1ac882cb25a401c07c3fd5660b1d9951398 Mon Sep 17 00:00:00 2001 From: Wazabie <48911235+Wazabie@users.noreply.github.com> Date: Wed, 8 Oct 2025 18:09:28 +0200 Subject: [PATCH 15/19] Update OPCMUpdatePrestateV410.sol --- src/template/OPCMUpdatePrestateV410.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/template/OPCMUpdatePrestateV410.sol b/src/template/OPCMUpdatePrestateV410.sol index 36c5bd89dc..04d5586bd8 100644 --- a/src/template/OPCMUpdatePrestateV410.sol +++ b/src/template/OPCMUpdatePrestateV410.sol @@ -120,7 +120,7 @@ contract OPCMUpdatePrestateV410 is OPCMTaskBase { }); string memory errors = - STANDARD_VALIDATOR.validateWithOverrides({ _input: input, _allowFailure: true, _overrides: overrides_ }); + STANDARD_VALIDATOR.validateWithOverrides({ _input: input, _allowFailure: true, _overrides: overrides_}); require(errors.eq(expErrors), string.concat("Unexpected errors: ", errors, "; expected: ", expErrors)); } From bdfea45a7a36de22588647b2829f83f3739867ce Mon Sep 17 00:00:00 2001 From: Wazabie <48911235+Wazabie@users.noreply.github.com> Date: Wed, 8 Oct 2025 18:09:51 +0200 Subject: [PATCH 16/19] Update OPCMUpdatePrestateV410.sol --- src/template/OPCMUpdatePrestateV410.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/template/OPCMUpdatePrestateV410.sol b/src/template/OPCMUpdatePrestateV410.sol index 04d5586bd8..723bf4082c 100644 --- a/src/template/OPCMUpdatePrestateV410.sol +++ b/src/template/OPCMUpdatePrestateV410.sol @@ -120,7 +120,7 @@ contract OPCMUpdatePrestateV410 is OPCMTaskBase { }); string memory errors = - STANDARD_VALIDATOR.validateWithOverrides({ _input: input, _allowFailure: true, _overrides: overrides_}); + STANDARD_VALIDATOR.validateWithOverrides({_input: input, _allowFailure: true, _overrides: overrides_}); require(errors.eq(expErrors), string.concat("Unexpected errors: ", errors, "; expected: ", expErrors)); } From 5d99279c71bebdeb3f847bdfe04fa509a93ce4b9 Mon Sep 17 00:00:00 2001 From: Wazabie <48911235+Wazabie@users.noreply.github.com> Date: Wed, 8 Oct 2025 18:18:37 +0200 Subject: [PATCH 17/19] Update config.toml --- .../tasks/example/sep/028-opcm-update-prestate-v410/config.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/tasks/example/sep/028-opcm-update-prestate-v410/config.toml b/test/tasks/example/sep/028-opcm-update-prestate-v410/config.toml index b71d03d803..40838be0ab 100644 --- a/test/tasks/example/sep/028-opcm-update-prestate-v410/config.toml +++ b/test/tasks/example/sep/028-opcm-update-prestate-v410/config.toml @@ -7,7 +7,7 @@ name = "OP Sepolia Testnet" [[opcmUpgrades]] chainId = 11155420 absolutePrestate = "0xdead000000000000000000000000000000000000000000000000000000000000" # Dummy test prestate -expectedValidationErrors = "" +expectedValidationErrors = "OVERRIDES-L1PAOMULTISIG,OVERRIDES-CHALLENGER" [addresses] OPCM = "0x3bb6437aba031afbf9cb3538fa064161e2bf2d78" # version 3.2.0 https://github.com/ethereum-optimism/superchain-registry/blob/40526b1288534f6b84b7aae21d13c0b5f5b12f47/validation/standard/standard-versions-sepolia.toml#L23 From a2d1c77566c9bc26afc566d96549549bba37890a Mon Sep 17 00:00:00 2001 From: Wazabie <48911235+Wazabie@users.noreply.github.com> Date: Wed, 8 Oct 2025 18:23:03 +0200 Subject: [PATCH 18/19] Update config.toml --- .../tasks/example/sep/028-opcm-update-prestate-v410/config.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/tasks/example/sep/028-opcm-update-prestate-v410/config.toml b/test/tasks/example/sep/028-opcm-update-prestate-v410/config.toml index 40838be0ab..5fe50931a4 100644 --- a/test/tasks/example/sep/028-opcm-update-prestate-v410/config.toml +++ b/test/tasks/example/sep/028-opcm-update-prestate-v410/config.toml @@ -7,7 +7,7 @@ name = "OP Sepolia Testnet" [[opcmUpgrades]] chainId = 11155420 absolutePrestate = "0xdead000000000000000000000000000000000000000000000000000000000000" # Dummy test prestate -expectedValidationErrors = "OVERRIDES-L1PAOMULTISIG,OVERRIDES-CHALLENGER" +expectedValidationErrors = "OVERRIDES-L1PAOMULTISIG,OVERRIDES-CHALLENGER" # The template provides PAO and Challenger overrides to the validator from the SCR. These simply indicate overrides were used. [addresses] OPCM = "0x3bb6437aba031afbf9cb3538fa064161e2bf2d78" # version 3.2.0 https://github.com/ethereum-optimism/superchain-registry/blob/40526b1288534f6b84b7aae21d13c0b5f5b12f47/validation/standard/standard-versions-sepolia.toml#L23 From 331268ca90b0a100ffa27eac4013518c0027aa8f Mon Sep 17 00:00:00 2001 From: Wazabie <48911235+Wazabie@users.noreply.github.com> Date: Wed, 8 Oct 2025 18:34:16 +0200 Subject: [PATCH 19/19] Update config.toml --- src/tasks/sep/034-op-ink-sep-fusaka-prestate/config.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/tasks/sep/034-op-ink-sep-fusaka-prestate/config.toml b/src/tasks/sep/034-op-ink-sep-fusaka-prestate/config.toml index c484b30b2a..4cd40df065 100644 --- a/src/tasks/sep/034-op-ink-sep-fusaka-prestate/config.toml +++ b/src/tasks/sep/034-op-ink-sep-fusaka-prestate/config.toml @@ -11,12 +11,12 @@ name = "Ink Sepolia Testnet" [[opcmUpgrades]] chainId = 11155420 absolutePrestate = "0x0339db503776757491b9f3038bf6f1d37b7988a2f75e823fe2656c1352ef2f91" # Fusaka Absolute Prestate published here https://github.com/ethereum-optimism/superchain-registry/blob/df5d4feb51f5d698d043a72ac2c6dfa9ce2a4afa/validation/standard/standard-prestates.toml#L6C7-L6C73 -expectedValidationErrors = "OVERRIDES-L1PAOMULTISIG,OVERRIDES-CHALLENGER" +expectedValidationErrors = "OVERRIDES-L1PAOMULTISIG,OVERRIDES-CHALLENGER" # The template provides PAO and Challenger overrides to the validator from the SCR. These simply indicate overrides were used. [[opcmUpgrades]] chainId = 763373 absolutePrestate = "0x0339db503776757491b9f3038bf6f1d37b7988a2f75e823fe2656c1352ef2f91" # Fusaka Absolute Prestate published here https://github.com/ethereum-optimism/superchain-registry/blob/df5d4feb51f5d698d043a72ac2c6dfa9ce2a4afa/validation/standard/standard-prestates.toml#L6C7-L6C73 -expectedValidationErrors = "OVERRIDES-L1PAOMULTISIG,OVERRIDES-CHALLENGER" +expectedValidationErrors = "OVERRIDES-L1PAOMULTISIG,OVERRIDES-CHALLENGER" # The template provides PAO and Challenger overrides to the validator from the SCR. These simply indicate overrides were used. [addresses] OPCM = "0x3bb6437aba031afbf9cb3538fa064161e2bf2d78" # version 3.2.0 https://github.com/ethereum-optimism/superchain-registry/blob/40526b1288534f6b84b7aae21d13c0b5f5b12f47/validation/standard/standard-versions-sepolia.toml#L23