From 0137ccdb7c985802a6b98cbfba1d93c2e7c9a433 Mon Sep 17 00:00:00 2001 From: Wazabie <48911235+Wazabie@users.noreply.github.com> Date: Wed, 18 Mar 2026 11:11:10 +0100 Subject: [PATCH 1/7] Fee Vault Upgrade Template --- src/template/FeeVaultUpgradeTemplate.sol | 242 ++++++++++++++++++ test/tasks/Regression.t.sol | 37 +++ .../sep/034-arena-z-fee-vault-upgrade/.env | 3 + .../034-arena-z-fee-vault-upgrade/config.toml | 45 ++++ 4 files changed, 327 insertions(+) create mode 100644 src/template/FeeVaultUpgradeTemplate.sol create mode 100644 test/tasks/example/sep/034-arena-z-fee-vault-upgrade/.env create mode 100644 test/tasks/example/sep/034-arena-z-fee-vault-upgrade/config.toml diff --git a/src/template/FeeVaultUpgradeTemplate.sol b/src/template/FeeVaultUpgradeTemplate.sol new file mode 100644 index 000000000..3c8364e87 --- /dev/null +++ b/src/template/FeeVaultUpgradeTemplate.sol @@ -0,0 +1,242 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.15; + +import {VmSafe} from "forge-std/Vm.sol"; +import {stdToml} from "forge-std/StdToml.sol"; + +import {L2TaskBase} from "src/tasks/types/L2TaskBase.sol"; +import {SuperchainAddressRegistry} from "src/SuperchainAddressRegistry.sol"; +import {Action} from "src/libraries/MultisigTypes.sol"; +import {MultisigTaskPrinter} from "src/libraries/MultisigTaskPrinter.sol"; +import {FeeVaultUpgrader} from "src/libraries/FeeVaultUpgrader.sol"; +import {RevShareCommon} from "src/libraries/RevShareCommon.sol"; +import {Utils} from "src/libraries/Utils.sol"; +import {IFeeVault} from "src/interfaces/IFeeVault.sol"; +import {IProxyAdmin} from "@eth-optimism-bedrock/interfaces/universal/IProxyAdmin.sol"; + +/// @notice Template for upgrading L2 fee vault predeploys to a new implementation with a +/// configurable fee recipient and withdrawal network. Calls are made via +/// OptimismPortal2.depositTransaction(), so no separate on-chain upgrader contract is needed. +/// +/// The vault list is config-driven (modular): each run can target any subset of the four +/// known fee-vault predeploys: +/// - SequencerFeeVault 0x4200000000000000000000000000000000000011 +/// - BaseFeeVault 0x4200000000000000000000000000000000000019 +/// - L1FeeVault 0x420000000000000000000000000000000000001a +/// - OperatorFeeVault 0x420000000000000000000000000000000000001b (U18+) +/// +/// BaseFeeVault and L1FeeVault share the same implementation bytecode; a single +/// CREATE2 deployment is made for both. +/// +/// @dev Uses `L2TaskBase` (direct portal calls), not `OPCMTaskBase` (delegatecall to upgrader). +/// Safe → Multicall3.aggregate3Value → portal.depositTransaction × N +contract FeeVaultUpgradeTemplate is L2TaskBase { + using stdToml for string; + + // ------------------------------------------------------------------------- + // Config state + // ------------------------------------------------------------------------- + + /// @notice Predeploy addresses to upgrade, read from TOML `vaultProxies`. + address[] public vaultProxies; + + /// @notice Fee recipient per chain (index aligned with l2chains), read from TOML `recipients`. + address[] public recipients; + + /// @notice Withdrawal network per chain (0 = L1, 1 = L2), read from TOML `networks`. + uint256[] public networks; + + /// @notice Minimum withdrawal amount per chain, read from TOML `minWithdrawalAmounts`. + uint256[] public minWithdrawalAmounts; + + // ------------------------------------------------------------------------- + // L2TaskBase overrides + // ------------------------------------------------------------------------- + + /// @notice The Safe that signs this task — the L2 ProxyAdminOwner on L1. + function safeAddressString() public pure override returns (string memory) { + return "ProxyAdminOwner"; + } + + /// @notice OptimismPortal storage is written when `depositTransaction` is called. + function _taskStorageWrites() internal pure override returns (string[] memory) { + string[] memory writes = new string[](1); + writes[0] = "OptimismPortalProxy"; + return writes; + } + + /// @notice No ETH balance changes expected. + function _taskBalanceChanges() internal pure override returns (string[] memory) {} + + // ------------------------------------------------------------------------- + // Template lifecycle + // ------------------------------------------------------------------------- + + /// @notice Reads and validates all config from the TOML file. + function _templateSetup(string memory _taskConfigFilePath, address _rootSafe) internal override { + SuperchainAddressRegistry.ChainInfo[] memory chains = superchainAddrRegistry.getChains(); + string memory toml = vm.readFile(_taskConfigFilePath); + + // --- vault proxies (shared across all chains) --- + vaultProxies = abi.decode(toml.parseRaw(".vaultProxies"), (address[])); + require(vaultProxies.length > 0, "FeeVaultUpgradeTemplate: vaultProxies must not be empty"); + for (uint256 i; i < vaultProxies.length; i++) { + _requireKnownVault(vaultProxies[i]); + } + + // --- per-chain arrays --- + recipients = abi.decode(toml.parseRaw(".recipients"), (address[])); + networks = abi.decode(toml.parseRaw(".networks"), (uint256[])); + minWithdrawalAmounts = abi.decode(toml.parseRaw(".minWithdrawalAmounts"), (uint256[])); + + require( + recipients.length == chains.length && networks.length == chains.length + && minWithdrawalAmounts.length == chains.length, + "FeeVaultUpgradeTemplate: per-chain arrays must have the same length as l2chains" + ); + + for (uint256 i; i < chains.length; i++) { + require( + recipients[i] != address(0), "FeeVaultUpgradeTemplate: recipient cannot be the zero address" + ); + require(networks[i] <= 1, "FeeVaultUpgradeTemplate: network must be 0 (L1) or 1 (L2)"); + } + + super._templateSetup(_taskConfigFilePath, _rootSafe); + } + + /// @notice Builds portal deposit calls: for each chain × vault, deploy the implementation + /// (if not already queued) and call ProxyAdmin.upgradeAndCall to re-initialize. + function _build(address) internal override { + SuperchainAddressRegistry.ChainInfo[] memory chains = superchainAddrRegistry.getChains(); + + for (uint256 c; c < chains.length; c++) { + address portal = superchainAddrRegistry.getAddress("OptimismPortalProxy", chains[c].chainId); + address recipient = recipients[c]; + IFeeVault.WithdrawalNetwork network = IFeeVault.WithdrawalNetwork(networks[c]); + uint256 minWithdrawal = minWithdrawalAmounts[c]; + + // Track salts that have already been submitted for deployment on this chain + // to avoid duplicate CREATE2 calls (BaseFeeVault + L1FeeVault share one impl). + bytes32[] memory deployedSalts = new bytes32[](vaultProxies.length); + uint256 deployedCount = 0; + + for (uint256 v; v < vaultProxies.length; v++) { + (bytes memory creationCode, string memory saltName) = _getVaultImpl(vaultProxies[v]); + bytes32 salt = RevShareCommon.getSalt(saltName); + address impl = Utils.getCreate2Address(salt, creationCode, RevShareCommon.CREATE2_DEPLOYER); + + // Deploy the implementation only once per unique salt per chain. + if (!_saltDeployed(deployedSalts, deployedCount, salt)) { + RevShareCommon.depositCreate2( + portal, FeeVaultUpgrader.FEE_VAULTS_DEPLOYMENT_GAS_LIMIT, salt, creationCode + ); + deployedSalts[deployedCount++] = salt; + } + + // Upgrade the vault proxy and initialize with the new config. + // Pre-encode to avoid stack-too-deep in the nested abi.encodeCall. + bytes memory initData = abi.encodeCall(IFeeVault.initialize, (recipient, minWithdrawal, network)); + bytes memory upgradeData = + abi.encodeCall(IProxyAdmin.upgradeAndCall, (payable(vaultProxies[v]), impl, initData)); + RevShareCommon.depositCall( + portal, address(RevShareCommon.PROXY_ADMIN), RevShareCommon.UPGRADE_GAS_LIMIT, upgradeData + ); + } + } + } + + /// @notice Validates that the actions generated match the expected portal deposit pattern. + function _validate(VmSafe.AccountAccess[] memory, Action[] memory _actions, address) internal view override { + SuperchainAddressRegistry.ChainInfo[] memory chains = superchainAddrRegistry.getChains(); + + uint256 uniqueDeployments = _countUniqueDeployments(); + uint256 actionsPerChain = uniqueDeployments + vaultProxies.length; + uint256 expectedTotal = chains.length * actionsPerChain; + + require( + _actions.length == expectedTotal, + string.concat( + "FeeVaultUpgradeTemplate: expected ", + vm.toString(expectedTotal), + " actions, got ", + vm.toString(_actions.length) + ) + ); + + uint256 idx = 0; + for (uint256 c; c < chains.length; c++) { + address portal = superchainAddrRegistry.getAddress("OptimismPortalProxy", chains[c].chainId); + for (uint256 a; a < actionsPerChain; a++) { + require( + _actions[idx].target == portal, + "FeeVaultUpgradeTemplate: action target must be OptimismPortalProxy" + ); + require(_actions[idx].value == 0, "FeeVaultUpgradeTemplate: action value must be 0"); + idx++; + } + } + + MultisigTaskPrinter.printTitle("FeeVaultUpgradeTemplate: validated portal deposit actions"); + } + + /// @notice No code-length exceptions are required. + function _getCodeExceptions() internal view override returns (address[] memory) { + return new address[](0); + } + + // ------------------------------------------------------------------------- + // Internal helpers + // ------------------------------------------------------------------------- + + /// @notice Returns the CREATE2 creation code and salt name for a given vault predeploy address. + /// BaseFeeVault and L1FeeVault share the same implementation; both use the "BaseFeeVault" salt. + function _getVaultImpl(address _vault) + internal + pure + returns (bytes memory creationCode, string memory saltName) + { + if (_vault == FeeVaultUpgrader.SEQUENCER_FEE_WALLET) { + return (FeeVaultUpgrader.sequencerFeeVaultCreationCode, "SequencerFeeVault"); + } else if (_vault == FeeVaultUpgrader.BASE_FEE_VAULT) { + return (FeeVaultUpgrader.defaultFeeVaultCreationCode, "BaseFeeVault"); + } else if (_vault == FeeVaultUpgrader.L1_FEE_VAULT) { + // L1FeeVault reuses the same implementation as BaseFeeVault. + return (FeeVaultUpgrader.defaultFeeVaultCreationCode, "BaseFeeVault"); + } else if (_vault == FeeVaultUpgrader.OPERATOR_FEE_VAULT) { + return (FeeVaultUpgrader.operatorFeeVaultCreationCode, "OperatorFeeVault"); + } else { + revert("FeeVaultUpgradeTemplate: unknown vault address"); + } + } + + /// @notice Reverts if `_vault` is not one of the four known fee-vault predeploys. + function _requireKnownVault(address _vault) internal pure { + if ( + _vault != FeeVaultUpgrader.SEQUENCER_FEE_WALLET && _vault != FeeVaultUpgrader.BASE_FEE_VAULT + && _vault != FeeVaultUpgrader.L1_FEE_VAULT && _vault != FeeVaultUpgrader.OPERATOR_FEE_VAULT + ) { + revert("FeeVaultUpgradeTemplate: unknown vault address"); + } + } + + /// @notice Returns true if `_salt` is already present in the first `_count` entries of `_salts`. + function _saltDeployed(bytes32[] memory _salts, uint256 _count, bytes32 _salt) internal pure returns (bool) { + for (uint256 i; i < _count; i++) { + if (_salts[i] == _salt) return true; + } + return false; + } + + /// @notice Counts the number of unique CREATE2 salts across all configured vault proxies. + function _countUniqueDeployments() internal view returns (uint256 count) { + bytes32[] memory seen = new bytes32[](vaultProxies.length); + for (uint256 i; i < vaultProxies.length; i++) { + (, string memory saltName) = _getVaultImpl(vaultProxies[i]); + bytes32 salt = RevShareCommon.getSalt(saltName); + if (!_saltDeployed(seen, count, salt)) { + seen[count++] = salt; + } + } + } +} diff --git a/test/tasks/Regression.t.sol b/test/tasks/Regression.t.sol index bb33d71a5..aa6b8455d 100644 --- a/test/tasks/Regression.t.sol +++ b/test/tasks/Regression.t.sol @@ -46,6 +46,7 @@ import {AddGameTypeTemplate} from "src/template/AddGameTypeTemplate.sol"; import {MigrateToLiveness2} from "src/template/MigrateToLiveness2.sol"; import {RevShareUpgradeAndSetup} from "src/template/RevShareUpgradeAndSetup.sol"; import {RevShareSetup} from "src/template/RevShareSetup.sol"; +import {FeeVaultUpgradeTemplate} from "src/template/FeeVaultUpgradeTemplate.sol"; /// @notice Ensures that simulating the task consistently produces the same call data and data to sign. /// This guarantees determinism if a bug is introduced in the task logic, the call data or data to sign @@ -1273,4 +1274,40 @@ contract RegressionTest is Test { rootSafe, rootSafeCalldata, expectedDataToSign, rootSafeNonce, MULTICALL3_ADDRESS ); } + + /// @notice Expected call data and data to sign generated by manually running the FeeVaultUpgradeTemplate + /// at block 10435718 on Sepolia. + /// Simulate from task directory (test/tasks/example/sep/034-arena-z-fee-vault-upgrade/) with: + /// SIMULATE_WITHOUT_LEDGER=1 just --dotenv-path $(pwd)/.env --justfile ../../../../../src/justfile simulate foundation + /// + /// TODO: run the simulation on a Sepolia fork, capture the printed calldata and data-to-sign, + /// then replace the placeholder strings below and remove the vm.skip() call. + function testRegressionCallDataMatches_FeeVaultUpgradeTemplate() public { + // Skip until expected calldata is generated from a live Sepolia fork simulation. + vm.skip(true); + + string memory taskConfigFilePath = "test/tasks/example/sep/034-arena-z-fee-vault-upgrade/config.toml"; + + // TODO: replace with output of `just simulate foundation` at block 10435718 on Sepolia. + string memory expectedCallData = "0x"; + + MultisigTask multisigTask = new FeeVaultUpgradeTemplate(); + + // Arena Z testnet ProxyAdminOwner is the Sepolia L1PAO — a nested 2-of-2 multisig. + address rootSafe = address(0x1Eb2FfC903729a0F03966b117003800b145f56E2); // Sepolia L1PAO + address foundationChildMultisig = address(0xDEe57160aAfCF04c34C887B5962D0a69676d3C8B); // Foundation Upgrades Safe (Sepolia) + address[] memory allSafes = MultisigTaskTestHelper.getAllSafes(rootSafe, foundationChildMultisig); + + (Action[] memory actions, uint256[] memory allOriginalNonces) = + _setupAndSimulate(taskConfigFilePath, 10435718, "sepolia", multisigTask, allSafes); + + _assertCallDataMatches(multisigTask, actions, allSafes, allOriginalNonces, expectedCallData); + + string[] memory expectedDataToSign = new string[](2); + // TODO: replace with output of `just simulate foundation` at block 10435718. + expectedDataToSign[0] = "0x"; // Foundation + expectedDataToSign[1] = "0x"; // Security Council + + _assertDataToSignNestedMultisig(multisigTask, actions, expectedDataToSign, MULTICALL3_ADDRESS, rootSafe); + } } diff --git a/test/tasks/example/sep/034-arena-z-fee-vault-upgrade/.env b/test/tasks/example/sep/034-arena-z-fee-vault-upgrade/.env new file mode 100644 index 000000000..7e2d9657f --- /dev/null +++ b/test/tasks/example/sep/034-arena-z-fee-vault-upgrade/.env @@ -0,0 +1,3 @@ +TENDERLY_GAS=16700000 +FORK_BLOCK_NUMBER=10435718 +NESTED_SAFE_NAME_DEPTH_1=foundation diff --git a/test/tasks/example/sep/034-arena-z-fee-vault-upgrade/config.toml b/test/tasks/example/sep/034-arena-z-fee-vault-upgrade/config.toml new file mode 100644 index 000000000..d2bcb2dc1 --- /dev/null +++ b/test/tasks/example/sep/034-arena-z-fee-vault-upgrade/config.toml @@ -0,0 +1,45 @@ +# Fee Vault Upgrade — Arena Z Testnet (Gelato → AltLayer migration) +# +# Upgrades SequencerFeeVault, BaseFeeVault, and L1FeeVault on Arena Z testnet +# to new v1.6.0 implementations, re-initializing the fee recipient to AltLayer's +# address and setting WithdrawalNetwork = L1 (0). +# +# Chain details: https://github.com/ethereum-optimism/superchain-registry/blob/main/superchain/configs/sepolia/arena-z.toml + +templateName = "FeeVaultUpgradeTemplate" + +l2chains = [ + {name = "arena-z-testnet", chainId = 9899} +] + +# Which fee vault predeploys to upgrade — modular, same addresses on every OP Stack chain. +vaultProxies = [ + "0x4200000000000000000000000000000000000011", # SequencerFeeVault + "0x4200000000000000000000000000000000000019", # BaseFeeVault + "0x420000000000000000000000000000000000001a", # L1FeeVault +] + +# Per-chain config (one entry per entry in l2chains, in the same order). +recipients = ["0xE75f598754A552841E65f43197C85028874A96a4"] # AltLayer testnet fee recipient +networks = [0] # 0 = WithdrawalNetwork.L1 — fees are withdrawn to L1 +minWithdrawalAmounts = [0] + +[addresses] +# source: superchain-registry sepolia/arena-z.toml +ProxyAdminOwner = "0x1Eb2fFc903729a0F03966B117003800b145F56E2" +OptimismPortalProxy = "0x90FdCE6eFFF020605462150cdE42257193d1e558" + +[stateOverrides] +# L1PAO — override nonce (slot 5) to match the live value at the fork block used in the regression test. +# Update this value together with the fork block number whenever the regression test is re-generated. +0x1Eb2fFc903729a0F03966B117003800b145F56E2 = [ + {key = "0x0000000000000000000000000000000000000000000000000000000000000005", value = 50} +] +# Foundation Upgrades Safe +0xDEe57160aAfCF04c34C887B5962D0a69676d3C8B = [ + {key = "0x0000000000000000000000000000000000000000000000000000000000000005", value = 68} +] +# Security Council +0xf64bc17485f0B4Ea5F06A96514182FC4cB561977 = [ + {key = "0x0000000000000000000000000000000000000000000000000000000000000005", value = 63} +] From 251b100b27dcebb4d24c84e961dfe0537292ee39 Mon Sep 17 00:00:00 2001 From: Wazabie <48911235+Wazabie@users.noreply.github.com> Date: Wed, 18 Mar 2026 12:00:44 +0100 Subject: [PATCH 2/7] Update test task --- src/template/FeeVaultUpgradeTemplate.sol | 2 +- test/tasks/Regression.t.sol | 11 +++-------- .../sep/034-arena-z-fee-vault-upgrade/config.toml | 10 +++++----- 3 files changed, 9 insertions(+), 14 deletions(-) diff --git a/src/template/FeeVaultUpgradeTemplate.sol b/src/template/FeeVaultUpgradeTemplate.sol index 3c8364e87..dfdf94ab9 100644 --- a/src/template/FeeVaultUpgradeTemplate.sol +++ b/src/template/FeeVaultUpgradeTemplate.sol @@ -181,7 +181,7 @@ contract FeeVaultUpgradeTemplate is L2TaskBase { } /// @notice No code-length exceptions are required. - function _getCodeExceptions() internal view override returns (address[] memory) { + function _getCodeExceptions() internal pure override returns (address[] memory) { return new address[](0); } diff --git a/test/tasks/Regression.t.sol b/test/tasks/Regression.t.sol index aa6b8455d..c2ed209e9 100644 --- a/test/tasks/Regression.t.sol +++ b/test/tasks/Regression.t.sol @@ -1279,17 +1279,12 @@ contract RegressionTest is Test { /// at block 10435718 on Sepolia. /// Simulate from task directory (test/tasks/example/sep/034-arena-z-fee-vault-upgrade/) with: /// SIMULATE_WITHOUT_LEDGER=1 just --dotenv-path $(pwd)/.env --justfile ../../../../../src/justfile simulate foundation - /// - /// TODO: run the simulation on a Sepolia fork, capture the printed calldata and data-to-sign, - /// then replace the placeholder strings below and remove the vm.skip() call. function testRegressionCallDataMatches_FeeVaultUpgradeTemplate() public { // Skip until expected calldata is generated from a live Sepolia fork simulation. - vm.skip(true); - string memory taskConfigFilePath = "test/tasks/example/sep/034-arena-z-fee-vault-upgrade/config.toml"; // TODO: replace with output of `just simulate foundation` at block 10435718 on Sepolia. - string memory expectedCallData = "0x"; + string memory expectedCallData = "0x174dea710000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000124000000000000000000000000000000000000000000000000000000000000014e00000000000000000000000000000000000000000000000000000000000002680000000000000000000000000000000000000000000000000000000000000292000000000000000000000000090fdce6efff020605462150cde42257193d1e55800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000010e4e9e05c4200000000000000000000000013b0d85ccb8bf860b6b79af3029fca081ae9bef200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000124f80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000100466cfa05700000000000000000000000000000000000000000000000000000000000000004fa8a8543794afa043f760cecea0554a60b9d906bf502a5cb45b0fe25a5915c000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000f6e6080604052348015600e575f80fd5b5060156019565b60c9565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560685760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c65780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610e98806100d65f395ff3fe6080604052600436106100dc575f3560e01c80638312f1491161007c578063b49dc74111610057578063b49dc741146102a0578063d0e12f90146102bf578063d3e5792b146102ee578063d4ff9218146100e7575f80fd5b80638312f1491461025857806384411d651461026d57806385b5b14d14610281575f80fd5b80633ccfd60b116100b75780633ccfd60b1461017757806354fd4d501461019957806366d003ac146101ee57806382356d8a1461021a575f80fd5b80630d9019e1146100e7578063307f2962146101375780633bbed4a014610158575f80fd5b366100e357005b5f80fd5b3480156100f2575f80fd5b5060025473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b348015610142575f80fd5b50610156610151366004610c65565b610302565b005b348015610163575f80fd5b50610156610172366004610ca2565b610485565b348015610182575f80fd5b5061018b6105e9565b60405190815260200161012e565b3480156101a4575f80fd5b506101e16040518060400160405280600581526020017f312e362e3000000000000000000000000000000000000000000000000000000081525081565b60405161012e9190610cbd565b3480156101f9575f80fd5b5060025461010d9073ffffffffffffffffffffffffffffffffffffffff1681565b348015610225575f80fd5b5060025461024b9074010000000000000000000000000000000000000000900460ff1681565b60405161012e9190610d76565b348015610263575f80fd5b5061018b60015481565b348015610278575f80fd5b5061018b5f5481565b34801561028c575f80fd5b5061015661029b366004610d8a565b6108f7565b3480156102ab575f80fd5b506101566102ba366004610da1565b610a1a565b3480156102ca575f80fd5b5060025474010000000000000000000000000000000000000000900460ff1661024b565b3480156102f9575f80fd5b5060015461018b565b73420000000000000000000000000000000000001873ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561035f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103839190610ddc565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146103e7576040517f7cd7e09f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547401000000000000000000000000000000000000000080820460ff1692849290917fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff9091169083600181111561044357610443610d10565b02179055507ff2ec44eb1c3b3acd547b76333eb2c4b27eee311860c57a9fdb04c95f62398fc88183604051610479929190610df7565b60405180910390a15050565b73420000000000000000000000000000000000001873ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104e2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105069190610ddc565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461056a576040517f7cd7e09f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604080519190921680825260208201939093527f62e69886a5df0ba8ffcacbfc1388754e7abd9bde24b036354c561f1acd4e45939101610479565b5f6001544710156106a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f4665655661756c743a207769746864726177616c20616d6f756e74206d75737460448201527f2062652067726561746572207468616e206d696e696d756d207769746864726160648201527f77616c20616d6f756e7400000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b479050805f808282546106ba9190610e12565b90915550506002546040805183815273ffffffffffffffffffffffffffffffffffffffff909216602083018190523383830152905190917fc8a211cc64b6ed1b50595a9fcb1932b6d1e5a6e8ef15b60e5b1f988ea9086bba919081900360600190a16002546040517f38e04cbeb8c10f8f568618aa75be0f10b6729b8b4237743b4de20cbcde2839ee9161076f9185918591339174010000000000000000000000000000000000000000900460ff1690610e4a565b60405180910390a1600160025474010000000000000000000000000000000000000000900460ff1660018111156107a8576107a8610d10565b0361084c575f6107b88284610c2e565b905080610847576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4665655661756c743a206661696c656420746f2073656e642045544820746f2060448201527f4c322066656520726563697069656e7400000000000000000000000000000000606482015260840161069e565b505090565b6040517fc2b3e5ac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015262061a806024820152606060448201525f60648201527342000000000000000000000000000000000000169063c2b3e5ac9084906084015f604051808303818588803b1580156108dc575f80fd5b505af11580156108ee573d5f803e3d5ffd5b50505050505090565b73420000000000000000000000000000000000001873ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610954573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109789190610ddc565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146109dc576040517f7cd7e09f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180549082905560408051828152602081018490527f895a067c78583e800418fabf3da26a9496aab2ff3429cebdf7fefa642b2e42039101610479565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff165f81158015610a645750825b90505f8267ffffffffffffffff166001148015610a805750303b155b905081158015610a8e575080155b15610ac5576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315610b265784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6002805473ffffffffffffffffffffffffffffffffffffffff8a167fffffffffffffffffffffffff000000000000000000000000000000000000000082168117835560018a81558993927fffffffffffffffffffffff000000000000000000000000000000000000000000169091179074010000000000000000000000000000000000000000908490811115610bbe57610bbe610d10565b02179055508315610c245784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b5f610c3a835a84610c41565b9392505050565b5f805f805f858888f1949350505050565b803560028110610c60575f80fd5b919050565b5f60208284031215610c75575f80fd5b610c3a82610c52565b73ffffffffffffffffffffffffffffffffffffffff81168114610c9f575f80fd5b50565b5f60208284031215610cb2575f80fd5b8135610c3a81610c7e565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b60028110610d72577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b9052565b60208101610d848284610d3d565b92915050565b5f60208284031215610d9a575f80fd5b5035919050565b5f805f60608486031215610db3575f80fd5b8335610dbe81610c7e565b925060208401359150610dd360408501610c52565b90509250925092565b5f60208284031215610dec575f80fd5b8151610c3a81610c7e565b60408101610e058285610d3d565b610c3a6020830184610d3d565b80820180821115610d84577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b84815273ffffffffffffffffffffffffffffffffffffffff84811660208301528316604082015260808101610e826060830184610d3d565b9594505050505056fea164736f6c6343000819000a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090fdce6efff020605462150cde42257193d1e55800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001e4e9e05c420000000000000000000000004200000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000249f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001049623609d00000000000000000000000042000000000000000000000000000000000000110000000000000000000000009d9cde227188e5d0a006ba3c52abc05cbed059ad00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064b49dc741000000000000000000000000e75f598754a552841e65f43197c85028874a96a40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090fdce6efff020605462150cde42257193d1e55800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000010e4e9e05c4200000000000000000000000013b0d85ccb8bf860b6b79af3029fca081ae9bef200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000124f80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000100466cfa0570000000000000000000000000000000000000000000000000000000000000000d33efbfeb2582f6fcf12d66f4d4332f9b42af77140e158ae3fc4b3b8ac26438000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000f636080604052348015600e575f80fd5b5060156019565b60c9565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560685760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c65780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610e8d806100d65f395ff3fe6080604052600436106100d1575f3560e01c806382356d8a1161007c57806385b5b14d1161005757806385b5b14d14610276578063b49dc74114610295578063d0e12f90146102b4578063d3e5792b146102e3575f80fd5b806382356d8a1461020f5780638312f1491461024d57806384411d6514610262575f80fd5b80633ccfd60b116100ac5780633ccfd60b1461016c57806354fd4d501461018e57806366d003ac146101e3575f80fd5b80630d9019e1146100dc578063307f29621461012c5780633bbed4a01461014d575f80fd5b366100d857005b5f80fd5b3480156100e7575f80fd5b5060025473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b348015610137575f80fd5b5061014b610146366004610c5a565b6102f7565b005b348015610158575f80fd5b5061014b610167366004610c97565b61047a565b348015610177575f80fd5b506101806105de565b604051908152602001610123565b348015610199575f80fd5b506101d66040518060400160405280600581526020017f312e362e3000000000000000000000000000000000000000000000000000000081525081565b6040516101239190610cb2565b3480156101ee575f80fd5b506002546101029073ffffffffffffffffffffffffffffffffffffffff1681565b34801561021a575f80fd5b506002546102409074010000000000000000000000000000000000000000900460ff1681565b6040516101239190610d6b565b348015610258575f80fd5b5061018060015481565b34801561026d575f80fd5b506101805f5481565b348015610281575f80fd5b5061014b610290366004610d7f565b6108ec565b3480156102a0575f80fd5b5061014b6102af366004610d96565b610a0f565b3480156102bf575f80fd5b5060025474010000000000000000000000000000000000000000900460ff16610240565b3480156102ee575f80fd5b50600154610180565b73420000000000000000000000000000000000001873ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610354573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103789190610dd1565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146103dc576040517f7cd7e09f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547401000000000000000000000000000000000000000080820460ff1692849290917fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff9091169083600181111561043857610438610d05565b02179055507ff2ec44eb1c3b3acd547b76333eb2c4b27eee311860c57a9fdb04c95f62398fc8818360405161046e929190610dec565b60405180910390a15050565b73420000000000000000000000000000000000001873ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104d7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104fb9190610dd1565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461055f576040517f7cd7e09f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604080519190921680825260208201939093527f62e69886a5df0ba8ffcacbfc1388754e7abd9bde24b036354c561f1acd4e4593910161046e565b5f60015447101561069c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f4665655661756c743a207769746864726177616c20616d6f756e74206d75737460448201527f2062652067726561746572207468616e206d696e696d756d207769746864726160648201527f77616c20616d6f756e7400000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b479050805f808282546106af9190610e07565b90915550506002546040805183815273ffffffffffffffffffffffffffffffffffffffff909216602083018190523383830152905190917fc8a211cc64b6ed1b50595a9fcb1932b6d1e5a6e8ef15b60e5b1f988ea9086bba919081900360600190a16002546040517f38e04cbeb8c10f8f568618aa75be0f10b6729b8b4237743b4de20cbcde2839ee916107649185918591339174010000000000000000000000000000000000000000900460ff1690610e3f565b60405180910390a1600160025474010000000000000000000000000000000000000000900460ff16600181111561079d5761079d610d05565b03610841575f6107ad8284610c23565b90508061083c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4665655661756c743a206661696c656420746f2073656e642045544820746f2060448201527f4c322066656520726563697069656e74000000000000000000000000000000006064820152608401610693565b505090565b6040517fc2b3e5ac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015262061a806024820152606060448201525f60648201527342000000000000000000000000000000000000169063c2b3e5ac9084906084015f604051808303818588803b1580156108d1575f80fd5b505af11580156108e3573d5f803e3d5ffd5b50505050505090565b73420000000000000000000000000000000000001873ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610949573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061096d9190610dd1565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146109d1576040517f7cd7e09f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180549082905560408051828152602081018490527f895a067c78583e800418fabf3da26a9496aab2ff3429cebdf7fefa642b2e4203910161046e565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff165f81158015610a595750825b90505f8267ffffffffffffffff166001148015610a755750303b155b905081158015610a83575080155b15610aba576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315610b1b5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6002805473ffffffffffffffffffffffffffffffffffffffff8a167fffffffffffffffffffffffff000000000000000000000000000000000000000082168117835560018a81558993927fffffffffffffffffffffff000000000000000000000000000000000000000000169091179074010000000000000000000000000000000000000000908490811115610bb357610bb3610d05565b02179055508315610c195784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b5f610c2f835a84610c36565b9392505050565b5f805f805f858888f1949350505050565b803560028110610c55575f80fd5b919050565b5f60208284031215610c6a575f80fd5b610c2f82610c47565b73ffffffffffffffffffffffffffffffffffffffff81168114610c94575f80fd5b50565b5f60208284031215610ca7575f80fd5b8135610c2f81610c73565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b60028110610d67577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b9052565b60208101610d798284610d32565b92915050565b5f60208284031215610d8f575f80fd5b5035919050565b5f805f60608486031215610da8575f80fd5b8335610db381610c73565b925060208401359150610dc860408501610c47565b90509250925092565b5f60208284031215610de1575f80fd5b8151610c2f81610c73565b60408101610dfa8285610d32565b610c2f6020830184610d32565b80820180821115610d79577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b84815273ffffffffffffffffffffffffffffffffffffffff84811660208301528316604082015260808101610e776060830184610d32565b9594505050505056fea164736f6c6343000819000a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090fdce6efff020605462150cde42257193d1e55800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001e4e9e05c420000000000000000000000004200000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000249f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001049623609d0000000000000000000000004200000000000000000000000000000000000019000000000000000000000000c091f83510f842383ac8964602981f2e429bf8f200000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064b49dc741000000000000000000000000e75f598754a552841e65f43197c85028874a96a40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090fdce6efff020605462150cde42257193d1e55800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001e4e9e05c420000000000000000000000004200000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000249f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001049623609d000000000000000000000000420000000000000000000000000000000000001a000000000000000000000000c091f83510f842383ac8964602981f2e429bf8f200000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064b49dc741000000000000000000000000e75f598754a552841e65f43197c85028874a96a400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; MultisigTask multisigTask = new FeeVaultUpgradeTemplate(); @@ -1305,8 +1300,8 @@ contract RegressionTest is Test { string[] memory expectedDataToSign = new string[](2); // TODO: replace with output of `just simulate foundation` at block 10435718. - expectedDataToSign[0] = "0x"; // Foundation - expectedDataToSign[1] = "0x"; // Security Council + expectedDataToSign[0] = "0x190137e1f5dd3b92a004a23589b741196c8a214629d4ea3a690ec8e41ae45c689cbbc004d8e876ee867225ea82dd859962e9efecfe4a92c67b327a9fab61f4fc48f3"; // Foundation + expectedDataToSign[1] = "0x1901be081970e9fc104bd1ea27e375cd21ec7bb1eec56bfe43347c3e36c5d27b8533977ac1f067a3d224ba79be1d33a30d863e3ebcad68b337a48f02c2ff6c02ad1e"; // Security Council _assertDataToSignNestedMultisig(multisigTask, actions, expectedDataToSign, MULTICALL3_ADDRESS, rootSafe); } diff --git a/test/tasks/example/sep/034-arena-z-fee-vault-upgrade/config.toml b/test/tasks/example/sep/034-arena-z-fee-vault-upgrade/config.toml index d2bcb2dc1..cd09102af 100644 --- a/test/tasks/example/sep/034-arena-z-fee-vault-upgrade/config.toml +++ b/test/tasks/example/sep/034-arena-z-fee-vault-upgrade/config.toml @@ -26,20 +26,20 @@ minWithdrawalAmounts = [0] [addresses] # source: superchain-registry sepolia/arena-z.toml -ProxyAdminOwner = "0x1Eb2fFc903729a0F03966B117003800b145F56E2" +ProxyAdminOwner = "0x1Eb2fFc903729a0F03966B917003800b145F56E2" OptimismPortalProxy = "0x90FdCE6eFFF020605462150cdE42257193d1e558" [stateOverrides] # L1PAO — override nonce (slot 5) to match the live value at the fork block used in the regression test. # Update this value together with the fork block number whenever the regression test is re-generated. -0x1Eb2fFc903729a0F03966B117003800b145F56E2 = [ - {key = "0x0000000000000000000000000000000000000000000000000000000000000005", value = 50} +0x1Eb2fFc903729a0F03966B917003800b145F56E2 = [ + {key = "0x0000000000000000000000000000000000000000000000000000000000000005", value = 48} ] # Foundation Upgrades Safe 0xDEe57160aAfCF04c34C887B5962D0a69676d3C8B = [ - {key = "0x0000000000000000000000000000000000000000000000000000000000000005", value = 68} + {key = "0x0000000000000000000000000000000000000000000000000000000000000005", value = 67} ] # Security Council 0xf64bc17485f0B4Ea5F06A96514182FC4cB561977 = [ - {key = "0x0000000000000000000000000000000000000000000000000000000000000005", value = 63} + {key = "0x0000000000000000000000000000000000000000000000000000000000000005", value = 62} ] From cfca94078719200e65771f3a839382c4dc17e532 Mon Sep 17 00:00:00 2001 From: Wazabie <48911235+Wazabie@users.noreply.github.com> Date: Wed, 18 Mar 2026 12:04:08 +0100 Subject: [PATCH 3/7] Update Regression.t.sol --- test/tasks/Regression.t.sol | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/test/tasks/Regression.t.sol b/test/tasks/Regression.t.sol index c2ed209e9..ee7ce5f24 100644 --- a/test/tasks/Regression.t.sol +++ b/test/tasks/Regression.t.sol @@ -1300,8 +1300,10 @@ contract RegressionTest is Test { string[] memory expectedDataToSign = new string[](2); // TODO: replace with output of `just simulate foundation` at block 10435718. - expectedDataToSign[0] = "0x190137e1f5dd3b92a004a23589b741196c8a214629d4ea3a690ec8e41ae45c689cbbc004d8e876ee867225ea82dd859962e9efecfe4a92c67b327a9fab61f4fc48f3"; // Foundation - expectedDataToSign[1] = "0x1901be081970e9fc104bd1ea27e375cd21ec7bb1eec56bfe43347c3e36c5d27b8533977ac1f067a3d224ba79be1d33a30d863e3ebcad68b337a48f02c2ff6c02ad1e"; // Security Council + expectedDataToSign[0] = + "0x190137e1f5dd3b92a004a23589b741196c8a214629d4ea3a690ec8e41ae45c689cbbc004d8e876ee867225ea82dd859962e9efecfe4a92c67b327a9fab61f4fc48f3"; // Foundation + expectedDataToSign[1] = + "0x1901be081970e9fc104bd1ea27e375cd21ec7bb1eec56bfe43347c3e36c5d27b8533977ac1f067a3d224ba79be1d33a30d863e3ebcad68b337a48f02c2ff6c02ad1e"; // Security Council _assertDataToSignNestedMultisig(multisigTask, actions, expectedDataToSign, MULTICALL3_ADDRESS, rootSafe); } From 09898db5901cfdec8b92a45473d4f18a74a6f513 Mon Sep 17 00:00:00 2001 From: Wazabie <48911235+Wazabie@users.noreply.github.com> Date: Wed, 18 Mar 2026 12:09:08 +0100 Subject: [PATCH 4/7] Update Regression.t.sol --- test/tasks/Regression.t.sol | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/tasks/Regression.t.sol b/test/tasks/Regression.t.sol index ee7ce5f24..0f1b1e69e 100644 --- a/test/tasks/Regression.t.sol +++ b/test/tasks/Regression.t.sol @@ -1300,9 +1300,9 @@ contract RegressionTest is Test { string[] memory expectedDataToSign = new string[](2); // TODO: replace with output of `just simulate foundation` at block 10435718. - expectedDataToSign[0] = + expectedDataToSign[0] = "0x190137e1f5dd3b92a004a23589b741196c8a214629d4ea3a690ec8e41ae45c689cbbc004d8e876ee867225ea82dd859962e9efecfe4a92c67b327a9fab61f4fc48f3"; // Foundation - expectedDataToSign[1] = + expectedDataToSign[1] = "0x1901be081970e9fc104bd1ea27e375cd21ec7bb1eec56bfe43347c3e36c5d27b8533977ac1f067a3d224ba79be1d33a30d863e3ebcad68b337a48f02c2ff6c02ad1e"; // Security Council _assertDataToSignNestedMultisig(multisigTask, actions, expectedDataToSign, MULTICALL3_ADDRESS, rootSafe); From a6eead7b7b58f813f97f4d21d0560f404d576a89 Mon Sep 17 00:00:00 2001 From: Wazabie <48911235+Wazabie@users.noreply.github.com> Date: Wed, 18 Mar 2026 12:19:57 +0100 Subject: [PATCH 5/7] update fmt --- src/template/FeeVaultUpgradeTemplate.sol | 15 +++------------ test/tasks/Regression.t.sol | 3 ++- 2 files changed, 5 insertions(+), 13 deletions(-) diff --git a/src/template/FeeVaultUpgradeTemplate.sol b/src/template/FeeVaultUpgradeTemplate.sol index dfdf94ab9..99852593c 100644 --- a/src/template/FeeVaultUpgradeTemplate.sol +++ b/src/template/FeeVaultUpgradeTemplate.sol @@ -96,9 +96,7 @@ contract FeeVaultUpgradeTemplate is L2TaskBase { ); for (uint256 i; i < chains.length; i++) { - require( - recipients[i] != address(0), "FeeVaultUpgradeTemplate: recipient cannot be the zero address" - ); + require(recipients[i] != address(0), "FeeVaultUpgradeTemplate: recipient cannot be the zero address"); require(networks[i] <= 1, "FeeVaultUpgradeTemplate: network must be 0 (L1) or 1 (L2)"); } @@ -168,10 +166,7 @@ contract FeeVaultUpgradeTemplate is L2TaskBase { for (uint256 c; c < chains.length; c++) { address portal = superchainAddrRegistry.getAddress("OptimismPortalProxy", chains[c].chainId); for (uint256 a; a < actionsPerChain; a++) { - require( - _actions[idx].target == portal, - "FeeVaultUpgradeTemplate: action target must be OptimismPortalProxy" - ); + require(_actions[idx].target == portal,"FeeVaultUpgradeTemplate: action target must be OptimismPortalProxy"); require(_actions[idx].value == 0, "FeeVaultUpgradeTemplate: action value must be 0"); idx++; } @@ -191,11 +186,7 @@ contract FeeVaultUpgradeTemplate is L2TaskBase { /// @notice Returns the CREATE2 creation code and salt name for a given vault predeploy address. /// BaseFeeVault and L1FeeVault share the same implementation; both use the "BaseFeeVault" salt. - function _getVaultImpl(address _vault) - internal - pure - returns (bytes memory creationCode, string memory saltName) - { + function _getVaultImpl(address _vault) internal pure returns (bytes memory creationCode, string memory saltName) { if (_vault == FeeVaultUpgrader.SEQUENCER_FEE_WALLET) { return (FeeVaultUpgrader.sequencerFeeVaultCreationCode, "SequencerFeeVault"); } else if (_vault == FeeVaultUpgrader.BASE_FEE_VAULT) { diff --git a/test/tasks/Regression.t.sol b/test/tasks/Regression.t.sol index 0f1b1e69e..1f8740a2f 100644 --- a/test/tasks/Regression.t.sol +++ b/test/tasks/Regression.t.sol @@ -1284,7 +1284,8 @@ contract RegressionTest is Test { string memory taskConfigFilePath = "test/tasks/example/sep/034-arena-z-fee-vault-upgrade/config.toml"; // TODO: replace with output of `just simulate foundation` at block 10435718 on Sepolia. - string memory expectedCallData = "0x174dea710000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000124000000000000000000000000000000000000000000000000000000000000014e00000000000000000000000000000000000000000000000000000000000002680000000000000000000000000000000000000000000000000000000000000292000000000000000000000000090fdce6efff020605462150cde42257193d1e55800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000010e4e9e05c4200000000000000000000000013b0d85ccb8bf860b6b79af3029fca081ae9bef200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000124f80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000100466cfa05700000000000000000000000000000000000000000000000000000000000000004fa8a8543794afa043f760cecea0554a60b9d906bf502a5cb45b0fe25a5915c000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000f6e6080604052348015600e575f80fd5b5060156019565b60c9565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560685760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c65780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610e98806100d65f395ff3fe6080604052600436106100dc575f3560e01c80638312f1491161007c578063b49dc74111610057578063b49dc741146102a0578063d0e12f90146102bf578063d3e5792b146102ee578063d4ff9218146100e7575f80fd5b80638312f1491461025857806384411d651461026d57806385b5b14d14610281575f80fd5b80633ccfd60b116100b75780633ccfd60b1461017757806354fd4d501461019957806366d003ac146101ee57806382356d8a1461021a575f80fd5b80630d9019e1146100e7578063307f2962146101375780633bbed4a014610158575f80fd5b366100e357005b5f80fd5b3480156100f2575f80fd5b5060025473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b348015610142575f80fd5b50610156610151366004610c65565b610302565b005b348015610163575f80fd5b50610156610172366004610ca2565b610485565b348015610182575f80fd5b5061018b6105e9565b60405190815260200161012e565b3480156101a4575f80fd5b506101e16040518060400160405280600581526020017f312e362e3000000000000000000000000000000000000000000000000000000081525081565b60405161012e9190610cbd565b3480156101f9575f80fd5b5060025461010d9073ffffffffffffffffffffffffffffffffffffffff1681565b348015610225575f80fd5b5060025461024b9074010000000000000000000000000000000000000000900460ff1681565b60405161012e9190610d76565b348015610263575f80fd5b5061018b60015481565b348015610278575f80fd5b5061018b5f5481565b34801561028c575f80fd5b5061015661029b366004610d8a565b6108f7565b3480156102ab575f80fd5b506101566102ba366004610da1565b610a1a565b3480156102ca575f80fd5b5060025474010000000000000000000000000000000000000000900460ff1661024b565b3480156102f9575f80fd5b5060015461018b565b73420000000000000000000000000000000000001873ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561035f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103839190610ddc565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146103e7576040517f7cd7e09f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547401000000000000000000000000000000000000000080820460ff1692849290917fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff9091169083600181111561044357610443610d10565b02179055507ff2ec44eb1c3b3acd547b76333eb2c4b27eee311860c57a9fdb04c95f62398fc88183604051610479929190610df7565b60405180910390a15050565b73420000000000000000000000000000000000001873ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104e2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105069190610ddc565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461056a576040517f7cd7e09f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604080519190921680825260208201939093527f62e69886a5df0ba8ffcacbfc1388754e7abd9bde24b036354c561f1acd4e45939101610479565b5f6001544710156106a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f4665655661756c743a207769746864726177616c20616d6f756e74206d75737460448201527f2062652067726561746572207468616e206d696e696d756d207769746864726160648201527f77616c20616d6f756e7400000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b479050805f808282546106ba9190610e12565b90915550506002546040805183815273ffffffffffffffffffffffffffffffffffffffff909216602083018190523383830152905190917fc8a211cc64b6ed1b50595a9fcb1932b6d1e5a6e8ef15b60e5b1f988ea9086bba919081900360600190a16002546040517f38e04cbeb8c10f8f568618aa75be0f10b6729b8b4237743b4de20cbcde2839ee9161076f9185918591339174010000000000000000000000000000000000000000900460ff1690610e4a565b60405180910390a1600160025474010000000000000000000000000000000000000000900460ff1660018111156107a8576107a8610d10565b0361084c575f6107b88284610c2e565b905080610847576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4665655661756c743a206661696c656420746f2073656e642045544820746f2060448201527f4c322066656520726563697069656e7400000000000000000000000000000000606482015260840161069e565b505090565b6040517fc2b3e5ac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015262061a806024820152606060448201525f60648201527342000000000000000000000000000000000000169063c2b3e5ac9084906084015f604051808303818588803b1580156108dc575f80fd5b505af11580156108ee573d5f803e3d5ffd5b50505050505090565b73420000000000000000000000000000000000001873ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610954573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109789190610ddc565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146109dc576040517f7cd7e09f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180549082905560408051828152602081018490527f895a067c78583e800418fabf3da26a9496aab2ff3429cebdf7fefa642b2e42039101610479565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff165f81158015610a645750825b90505f8267ffffffffffffffff166001148015610a805750303b155b905081158015610a8e575080155b15610ac5576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315610b265784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6002805473ffffffffffffffffffffffffffffffffffffffff8a167fffffffffffffffffffffffff000000000000000000000000000000000000000082168117835560018a81558993927fffffffffffffffffffffff000000000000000000000000000000000000000000169091179074010000000000000000000000000000000000000000908490811115610bbe57610bbe610d10565b02179055508315610c245784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b5f610c3a835a84610c41565b9392505050565b5f805f805f858888f1949350505050565b803560028110610c60575f80fd5b919050565b5f60208284031215610c75575f80fd5b610c3a82610c52565b73ffffffffffffffffffffffffffffffffffffffff81168114610c9f575f80fd5b50565b5f60208284031215610cb2575f80fd5b8135610c3a81610c7e565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b60028110610d72577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b9052565b60208101610d848284610d3d565b92915050565b5f60208284031215610d9a575f80fd5b5035919050565b5f805f60608486031215610db3575f80fd5b8335610dbe81610c7e565b925060208401359150610dd360408501610c52565b90509250925092565b5f60208284031215610dec575f80fd5b8151610c3a81610c7e565b60408101610e058285610d3d565b610c3a6020830184610d3d565b80820180821115610d84577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b84815273ffffffffffffffffffffffffffffffffffffffff84811660208301528316604082015260808101610e826060830184610d3d565b9594505050505056fea164736f6c6343000819000a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090fdce6efff020605462150cde42257193d1e55800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001e4e9e05c420000000000000000000000004200000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000249f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001049623609d00000000000000000000000042000000000000000000000000000000000000110000000000000000000000009d9cde227188e5d0a006ba3c52abc05cbed059ad00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064b49dc741000000000000000000000000e75f598754a552841e65f43197c85028874a96a40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090fdce6efff020605462150cde42257193d1e55800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000010e4e9e05c4200000000000000000000000013b0d85ccb8bf860b6b79af3029fca081ae9bef200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000124f80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000100466cfa0570000000000000000000000000000000000000000000000000000000000000000d33efbfeb2582f6fcf12d66f4d4332f9b42af77140e158ae3fc4b3b8ac26438000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000f636080604052348015600e575f80fd5b5060156019565b60c9565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560685760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c65780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610e8d806100d65f395ff3fe6080604052600436106100d1575f3560e01c806382356d8a1161007c57806385b5b14d1161005757806385b5b14d14610276578063b49dc74114610295578063d0e12f90146102b4578063d3e5792b146102e3575f80fd5b806382356d8a1461020f5780638312f1491461024d57806384411d6514610262575f80fd5b80633ccfd60b116100ac5780633ccfd60b1461016c57806354fd4d501461018e57806366d003ac146101e3575f80fd5b80630d9019e1146100dc578063307f29621461012c5780633bbed4a01461014d575f80fd5b366100d857005b5f80fd5b3480156100e7575f80fd5b5060025473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b348015610137575f80fd5b5061014b610146366004610c5a565b6102f7565b005b348015610158575f80fd5b5061014b610167366004610c97565b61047a565b348015610177575f80fd5b506101806105de565b604051908152602001610123565b348015610199575f80fd5b506101d66040518060400160405280600581526020017f312e362e3000000000000000000000000000000000000000000000000000000081525081565b6040516101239190610cb2565b3480156101ee575f80fd5b506002546101029073ffffffffffffffffffffffffffffffffffffffff1681565b34801561021a575f80fd5b506002546102409074010000000000000000000000000000000000000000900460ff1681565b6040516101239190610d6b565b348015610258575f80fd5b5061018060015481565b34801561026d575f80fd5b506101805f5481565b348015610281575f80fd5b5061014b610290366004610d7f565b6108ec565b3480156102a0575f80fd5b5061014b6102af366004610d96565b610a0f565b3480156102bf575f80fd5b5060025474010000000000000000000000000000000000000000900460ff16610240565b3480156102ee575f80fd5b50600154610180565b73420000000000000000000000000000000000001873ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610354573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103789190610dd1565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146103dc576040517f7cd7e09f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547401000000000000000000000000000000000000000080820460ff1692849290917fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff9091169083600181111561043857610438610d05565b02179055507ff2ec44eb1c3b3acd547b76333eb2c4b27eee311860c57a9fdb04c95f62398fc8818360405161046e929190610dec565b60405180910390a15050565b73420000000000000000000000000000000000001873ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104d7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104fb9190610dd1565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461055f576040517f7cd7e09f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604080519190921680825260208201939093527f62e69886a5df0ba8ffcacbfc1388754e7abd9bde24b036354c561f1acd4e4593910161046e565b5f60015447101561069c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f4665655661756c743a207769746864726177616c20616d6f756e74206d75737460448201527f2062652067726561746572207468616e206d696e696d756d207769746864726160648201527f77616c20616d6f756e7400000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b479050805f808282546106af9190610e07565b90915550506002546040805183815273ffffffffffffffffffffffffffffffffffffffff909216602083018190523383830152905190917fc8a211cc64b6ed1b50595a9fcb1932b6d1e5a6e8ef15b60e5b1f988ea9086bba919081900360600190a16002546040517f38e04cbeb8c10f8f568618aa75be0f10b6729b8b4237743b4de20cbcde2839ee916107649185918591339174010000000000000000000000000000000000000000900460ff1690610e3f565b60405180910390a1600160025474010000000000000000000000000000000000000000900460ff16600181111561079d5761079d610d05565b03610841575f6107ad8284610c23565b90508061083c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4665655661756c743a206661696c656420746f2073656e642045544820746f2060448201527f4c322066656520726563697069656e74000000000000000000000000000000006064820152608401610693565b505090565b6040517fc2b3e5ac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015262061a806024820152606060448201525f60648201527342000000000000000000000000000000000000169063c2b3e5ac9084906084015f604051808303818588803b1580156108d1575f80fd5b505af11580156108e3573d5f803e3d5ffd5b50505050505090565b73420000000000000000000000000000000000001873ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610949573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061096d9190610dd1565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146109d1576040517f7cd7e09f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180549082905560408051828152602081018490527f895a067c78583e800418fabf3da26a9496aab2ff3429cebdf7fefa642b2e4203910161046e565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff165f81158015610a595750825b90505f8267ffffffffffffffff166001148015610a755750303b155b905081158015610a83575080155b15610aba576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315610b1b5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6002805473ffffffffffffffffffffffffffffffffffffffff8a167fffffffffffffffffffffffff000000000000000000000000000000000000000082168117835560018a81558993927fffffffffffffffffffffff000000000000000000000000000000000000000000169091179074010000000000000000000000000000000000000000908490811115610bb357610bb3610d05565b02179055508315610c195784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b5f610c2f835a84610c36565b9392505050565b5f805f805f858888f1949350505050565b803560028110610c55575f80fd5b919050565b5f60208284031215610c6a575f80fd5b610c2f82610c47565b73ffffffffffffffffffffffffffffffffffffffff81168114610c94575f80fd5b50565b5f60208284031215610ca7575f80fd5b8135610c2f81610c73565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b60028110610d67577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b9052565b60208101610d798284610d32565b92915050565b5f60208284031215610d8f575f80fd5b5035919050565b5f805f60608486031215610da8575f80fd5b8335610db381610c73565b925060208401359150610dc860408501610c47565b90509250925092565b5f60208284031215610de1575f80fd5b8151610c2f81610c73565b60408101610dfa8285610d32565b610c2f6020830184610d32565b80820180821115610d79577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b84815273ffffffffffffffffffffffffffffffffffffffff84811660208301528316604082015260808101610e776060830184610d32565b9594505050505056fea164736f6c6343000819000a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090fdce6efff020605462150cde42257193d1e55800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001e4e9e05c420000000000000000000000004200000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000249f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001049623609d0000000000000000000000004200000000000000000000000000000000000019000000000000000000000000c091f83510f842383ac8964602981f2e429bf8f200000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064b49dc741000000000000000000000000e75f598754a552841e65f43197c85028874a96a40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090fdce6efff020605462150cde42257193d1e55800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001e4e9e05c420000000000000000000000004200000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000249f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001049623609d000000000000000000000000420000000000000000000000000000000000001a000000000000000000000000c091f83510f842383ac8964602981f2e429bf8f200000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064b49dc741000000000000000000000000e75f598754a552841e65f43197c85028874a96a400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + string memory expectedCallData = + "0x174dea710000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000124000000000000000000000000000000000000000000000000000000000000014e00000000000000000000000000000000000000000000000000000000000002680000000000000000000000000000000000000000000000000000000000000292000000000000000000000000090fdce6efff020605462150cde42257193d1e55800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000010e4e9e05c4200000000000000000000000013b0d85ccb8bf860b6b79af3029fca081ae9bef200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000124f80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000100466cfa05700000000000000000000000000000000000000000000000000000000000000004fa8a8543794afa043f760cecea0554a60b9d906bf502a5cb45b0fe25a5915c000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000f6e6080604052348015600e575f80fd5b5060156019565b60c9565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560685760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c65780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610e98806100d65f395ff3fe6080604052600436106100dc575f3560e01c80638312f1491161007c578063b49dc74111610057578063b49dc741146102a0578063d0e12f90146102bf578063d3e5792b146102ee578063d4ff9218146100e7575f80fd5b80638312f1491461025857806384411d651461026d57806385b5b14d14610281575f80fd5b80633ccfd60b116100b75780633ccfd60b1461017757806354fd4d501461019957806366d003ac146101ee57806382356d8a1461021a575f80fd5b80630d9019e1146100e7578063307f2962146101375780633bbed4a014610158575f80fd5b366100e357005b5f80fd5b3480156100f2575f80fd5b5060025473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b348015610142575f80fd5b50610156610151366004610c65565b610302565b005b348015610163575f80fd5b50610156610172366004610ca2565b610485565b348015610182575f80fd5b5061018b6105e9565b60405190815260200161012e565b3480156101a4575f80fd5b506101e16040518060400160405280600581526020017f312e362e3000000000000000000000000000000000000000000000000000000081525081565b60405161012e9190610cbd565b3480156101f9575f80fd5b5060025461010d9073ffffffffffffffffffffffffffffffffffffffff1681565b348015610225575f80fd5b5060025461024b9074010000000000000000000000000000000000000000900460ff1681565b60405161012e9190610d76565b348015610263575f80fd5b5061018b60015481565b348015610278575f80fd5b5061018b5f5481565b34801561028c575f80fd5b5061015661029b366004610d8a565b6108f7565b3480156102ab575f80fd5b506101566102ba366004610da1565b610a1a565b3480156102ca575f80fd5b5060025474010000000000000000000000000000000000000000900460ff1661024b565b3480156102f9575f80fd5b5060015461018b565b73420000000000000000000000000000000000001873ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561035f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103839190610ddc565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146103e7576040517f7cd7e09f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547401000000000000000000000000000000000000000080820460ff1692849290917fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff9091169083600181111561044357610443610d10565b02179055507ff2ec44eb1c3b3acd547b76333eb2c4b27eee311860c57a9fdb04c95f62398fc88183604051610479929190610df7565b60405180910390a15050565b73420000000000000000000000000000000000001873ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104e2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105069190610ddc565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461056a576040517f7cd7e09f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604080519190921680825260208201939093527f62e69886a5df0ba8ffcacbfc1388754e7abd9bde24b036354c561f1acd4e45939101610479565b5f6001544710156106a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f4665655661756c743a207769746864726177616c20616d6f756e74206d75737460448201527f2062652067726561746572207468616e206d696e696d756d207769746864726160648201527f77616c20616d6f756e7400000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b479050805f808282546106ba9190610e12565b90915550506002546040805183815273ffffffffffffffffffffffffffffffffffffffff909216602083018190523383830152905190917fc8a211cc64b6ed1b50595a9fcb1932b6d1e5a6e8ef15b60e5b1f988ea9086bba919081900360600190a16002546040517f38e04cbeb8c10f8f568618aa75be0f10b6729b8b4237743b4de20cbcde2839ee9161076f9185918591339174010000000000000000000000000000000000000000900460ff1690610e4a565b60405180910390a1600160025474010000000000000000000000000000000000000000900460ff1660018111156107a8576107a8610d10565b0361084c575f6107b88284610c2e565b905080610847576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4665655661756c743a206661696c656420746f2073656e642045544820746f2060448201527f4c322066656520726563697069656e7400000000000000000000000000000000606482015260840161069e565b505090565b6040517fc2b3e5ac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015262061a806024820152606060448201525f60648201527342000000000000000000000000000000000000169063c2b3e5ac9084906084015f604051808303818588803b1580156108dc575f80fd5b505af11580156108ee573d5f803e3d5ffd5b50505050505090565b73420000000000000000000000000000000000001873ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610954573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109789190610ddc565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146109dc576040517f7cd7e09f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180549082905560408051828152602081018490527f895a067c78583e800418fabf3da26a9496aab2ff3429cebdf7fefa642b2e42039101610479565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff165f81158015610a645750825b90505f8267ffffffffffffffff166001148015610a805750303b155b905081158015610a8e575080155b15610ac5576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315610b265784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6002805473ffffffffffffffffffffffffffffffffffffffff8a167fffffffffffffffffffffffff000000000000000000000000000000000000000082168117835560018a81558993927fffffffffffffffffffffff000000000000000000000000000000000000000000169091179074010000000000000000000000000000000000000000908490811115610bbe57610bbe610d10565b02179055508315610c245784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b5f610c3a835a84610c41565b9392505050565b5f805f805f858888f1949350505050565b803560028110610c60575f80fd5b919050565b5f60208284031215610c75575f80fd5b610c3a82610c52565b73ffffffffffffffffffffffffffffffffffffffff81168114610c9f575f80fd5b50565b5f60208284031215610cb2575f80fd5b8135610c3a81610c7e565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b60028110610d72577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b9052565b60208101610d848284610d3d565b92915050565b5f60208284031215610d9a575f80fd5b5035919050565b5f805f60608486031215610db3575f80fd5b8335610dbe81610c7e565b925060208401359150610dd360408501610c52565b90509250925092565b5f60208284031215610dec575f80fd5b8151610c3a81610c7e565b60408101610e058285610d3d565b610c3a6020830184610d3d565b80820180821115610d84577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b84815273ffffffffffffffffffffffffffffffffffffffff84811660208301528316604082015260808101610e826060830184610d3d565b9594505050505056fea164736f6c6343000819000a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090fdce6efff020605462150cde42257193d1e55800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001e4e9e05c420000000000000000000000004200000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000249f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001049623609d00000000000000000000000042000000000000000000000000000000000000110000000000000000000000009d9cde227188e5d0a006ba3c52abc05cbed059ad00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064b49dc741000000000000000000000000e75f598754a552841e65f43197c85028874a96a40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090fdce6efff020605462150cde42257193d1e55800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000010e4e9e05c4200000000000000000000000013b0d85ccb8bf860b6b79af3029fca081ae9bef200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000124f80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000100466cfa0570000000000000000000000000000000000000000000000000000000000000000d33efbfeb2582f6fcf12d66f4d4332f9b42af77140e158ae3fc4b3b8ac26438000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000f636080604052348015600e575f80fd5b5060156019565b60c9565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560685760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c65780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610e8d806100d65f395ff3fe6080604052600436106100d1575f3560e01c806382356d8a1161007c57806385b5b14d1161005757806385b5b14d14610276578063b49dc74114610295578063d0e12f90146102b4578063d3e5792b146102e3575f80fd5b806382356d8a1461020f5780638312f1491461024d57806384411d6514610262575f80fd5b80633ccfd60b116100ac5780633ccfd60b1461016c57806354fd4d501461018e57806366d003ac146101e3575f80fd5b80630d9019e1146100dc578063307f29621461012c5780633bbed4a01461014d575f80fd5b366100d857005b5f80fd5b3480156100e7575f80fd5b5060025473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b348015610137575f80fd5b5061014b610146366004610c5a565b6102f7565b005b348015610158575f80fd5b5061014b610167366004610c97565b61047a565b348015610177575f80fd5b506101806105de565b604051908152602001610123565b348015610199575f80fd5b506101d66040518060400160405280600581526020017f312e362e3000000000000000000000000000000000000000000000000000000081525081565b6040516101239190610cb2565b3480156101ee575f80fd5b506002546101029073ffffffffffffffffffffffffffffffffffffffff1681565b34801561021a575f80fd5b506002546102409074010000000000000000000000000000000000000000900460ff1681565b6040516101239190610d6b565b348015610258575f80fd5b5061018060015481565b34801561026d575f80fd5b506101805f5481565b348015610281575f80fd5b5061014b610290366004610d7f565b6108ec565b3480156102a0575f80fd5b5061014b6102af366004610d96565b610a0f565b3480156102bf575f80fd5b5060025474010000000000000000000000000000000000000000900460ff16610240565b3480156102ee575f80fd5b50600154610180565b73420000000000000000000000000000000000001873ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610354573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103789190610dd1565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146103dc576040517f7cd7e09f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547401000000000000000000000000000000000000000080820460ff1692849290917fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff9091169083600181111561043857610438610d05565b02179055507ff2ec44eb1c3b3acd547b76333eb2c4b27eee311860c57a9fdb04c95f62398fc8818360405161046e929190610dec565b60405180910390a15050565b73420000000000000000000000000000000000001873ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104d7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104fb9190610dd1565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461055f576040517f7cd7e09f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604080519190921680825260208201939093527f62e69886a5df0ba8ffcacbfc1388754e7abd9bde24b036354c561f1acd4e4593910161046e565b5f60015447101561069c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f4665655661756c743a207769746864726177616c20616d6f756e74206d75737460448201527f2062652067726561746572207468616e206d696e696d756d207769746864726160648201527f77616c20616d6f756e7400000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b479050805f808282546106af9190610e07565b90915550506002546040805183815273ffffffffffffffffffffffffffffffffffffffff909216602083018190523383830152905190917fc8a211cc64b6ed1b50595a9fcb1932b6d1e5a6e8ef15b60e5b1f988ea9086bba919081900360600190a16002546040517f38e04cbeb8c10f8f568618aa75be0f10b6729b8b4237743b4de20cbcde2839ee916107649185918591339174010000000000000000000000000000000000000000900460ff1690610e3f565b60405180910390a1600160025474010000000000000000000000000000000000000000900460ff16600181111561079d5761079d610d05565b03610841575f6107ad8284610c23565b90508061083c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4665655661756c743a206661696c656420746f2073656e642045544820746f2060448201527f4c322066656520726563697069656e74000000000000000000000000000000006064820152608401610693565b505090565b6040517fc2b3e5ac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015262061a806024820152606060448201525f60648201527342000000000000000000000000000000000000169063c2b3e5ac9084906084015f604051808303818588803b1580156108d1575f80fd5b505af11580156108e3573d5f803e3d5ffd5b50505050505090565b73420000000000000000000000000000000000001873ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610949573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061096d9190610dd1565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146109d1576040517f7cd7e09f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180549082905560408051828152602081018490527f895a067c78583e800418fabf3da26a9496aab2ff3429cebdf7fefa642b2e4203910161046e565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff165f81158015610a595750825b90505f8267ffffffffffffffff166001148015610a755750303b155b905081158015610a83575080155b15610aba576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315610b1b5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6002805473ffffffffffffffffffffffffffffffffffffffff8a167fffffffffffffffffffffffff000000000000000000000000000000000000000082168117835560018a81558993927fffffffffffffffffffffff000000000000000000000000000000000000000000169091179074010000000000000000000000000000000000000000908490811115610bb357610bb3610d05565b02179055508315610c195784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b5f610c2f835a84610c36565b9392505050565b5f805f805f858888f1949350505050565b803560028110610c55575f80fd5b919050565b5f60208284031215610c6a575f80fd5b610c2f82610c47565b73ffffffffffffffffffffffffffffffffffffffff81168114610c94575f80fd5b50565b5f60208284031215610ca7575f80fd5b8135610c2f81610c73565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b60028110610d67577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b9052565b60208101610d798284610d32565b92915050565b5f60208284031215610d8f575f80fd5b5035919050565b5f805f60608486031215610da8575f80fd5b8335610db381610c73565b925060208401359150610dc860408501610c47565b90509250925092565b5f60208284031215610de1575f80fd5b8151610c2f81610c73565b60408101610dfa8285610d32565b610c2f6020830184610d32565b80820180821115610d79577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b84815273ffffffffffffffffffffffffffffffffffffffff84811660208301528316604082015260808101610e776060830184610d32565b9594505050505056fea164736f6c6343000819000a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090fdce6efff020605462150cde42257193d1e55800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001e4e9e05c420000000000000000000000004200000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000249f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001049623609d0000000000000000000000004200000000000000000000000000000000000019000000000000000000000000c091f83510f842383ac8964602981f2e429bf8f200000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064b49dc741000000000000000000000000e75f598754a552841e65f43197c85028874a96a40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090fdce6efff020605462150cde42257193d1e55800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001e4e9e05c420000000000000000000000004200000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000249f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001049623609d000000000000000000000000420000000000000000000000000000000000001a000000000000000000000000c091f83510f842383ac8964602981f2e429bf8f200000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064b49dc741000000000000000000000000e75f598754a552841e65f43197c85028874a96a400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; MultisigTask multisigTask = new FeeVaultUpgradeTemplate(); From 588552d7fdf6da1718e6f55a5d22955ad2907479 Mon Sep 17 00:00:00 2001 From: Wazabie <48911235+Wazabie@users.noreply.github.com> Date: Wed, 18 Mar 2026 12:22:29 +0100 Subject: [PATCH 6/7] Update FeeVaultUpgradeTemplate.sol --- src/template/FeeVaultUpgradeTemplate.sol | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/template/FeeVaultUpgradeTemplate.sol b/src/template/FeeVaultUpgradeTemplate.sol index 99852593c..5d033d18c 100644 --- a/src/template/FeeVaultUpgradeTemplate.sol +++ b/src/template/FeeVaultUpgradeTemplate.sol @@ -166,7 +166,9 @@ contract FeeVaultUpgradeTemplate is L2TaskBase { for (uint256 c; c < chains.length; c++) { address portal = superchainAddrRegistry.getAddress("OptimismPortalProxy", chains[c].chainId); for (uint256 a; a < actionsPerChain; a++) { - require(_actions[idx].target == portal,"FeeVaultUpgradeTemplate: action target must be OptimismPortalProxy"); + require( + _actions[idx].target == portal,"FeeVaultUpgradeTemplate: action target must be OptimismPortalProxy" + ); require(_actions[idx].value == 0, "FeeVaultUpgradeTemplate: action value must be 0"); idx++; } From 186806c23c7c6327ead52f3e7b0a2c83b082128e Mon Sep 17 00:00:00 2001 From: Wazabie <48911235+Wazabie@users.noreply.github.com> Date: Wed, 18 Mar 2026 12:26:23 +0100 Subject: [PATCH 7/7] Update FeeVaultUpgradeTemplate.sol --- src/template/FeeVaultUpgradeTemplate.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/template/FeeVaultUpgradeTemplate.sol b/src/template/FeeVaultUpgradeTemplate.sol index 5d033d18c..c286a1589 100644 --- a/src/template/FeeVaultUpgradeTemplate.sol +++ b/src/template/FeeVaultUpgradeTemplate.sol @@ -167,7 +167,7 @@ contract FeeVaultUpgradeTemplate is L2TaskBase { address portal = superchainAddrRegistry.getAddress("OptimismPortalProxy", chains[c].chainId); for (uint256 a; a < actionsPerChain; a++) { require( - _actions[idx].target == portal,"FeeVaultUpgradeTemplate: action target must be OptimismPortalProxy" + _actions[idx].target == portal, "FeeVaultUpgradeTemplate: action target must be OptimismPortalProxy" ); require(_actions[idx].value == 0, "FeeVaultUpgradeTemplate: action value must be 0"); idx++;