From 7fea7f145fa88fd20ba8454cf5be786ad569119a Mon Sep 17 00:00:00 2001 From: geoknee Date: Tue, 26 Nov 2024 13:35:37 +0000 Subject: [PATCH 01/28] add Seb's input from Clabby's tool --- .../OVERVIEW.md | 21 ++++++++++ .../README.md | 42 +++++++++++++++++++ .../VALIDATION.md | 19 +++++++++ .../input.json | 38 +++++++++++++++++ 4 files changed, 120 insertions(+) create mode 100644 tasks/sep/020-holocene-system-config-upgrade-multi-chain/OVERVIEW.md create mode 100644 tasks/sep/020-holocene-system-config-upgrade-multi-chain/README.md create mode 100644 tasks/sep/020-holocene-system-config-upgrade-multi-chain/VALIDATION.md create mode 100644 tasks/sep/020-holocene-system-config-upgrade-multi-chain/input.json diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/OVERVIEW.md b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/OVERVIEW.md new file mode 100644 index 000000000..a0d93bfc7 --- /dev/null +++ b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/OVERVIEW.md @@ -0,0 +1,21 @@ +# Holocene Hardfork - SystemConfig Upgrade +Upgrades the `SystemConfig.sol` contract for Holocene. + +The batch will be executed on chain ID `11155111`, and contains `1` transactions. + +## Tx #1: Upgrade `SystemConfig` proxy +Upgrades the `SystemConfig` proxy to the new implementation, featuring configurable EIP-1559 parameters. + +**Function Signature:** `upgrade(address,address)` + +**To:** `0x189aBAAaa82DfC015A588A7dbaD6F13b1D3485Bc` + +**Value:** `0 WEI` + +**Raw Input Data:** `0x99a88ec4000000000000000000000000034edd2a225f7f429a63e0f1d2084b9e0a93b53800000000000000000000000029d06ed7105c7552efd9f29f3e0d250e5df412cd` + +### Inputs +**_implementation:** `0x29d06Ed7105c7552EFD9f29f3e0d250e5df412CD` + +**_proxy:** `0x034edD2A225f7f429A63E0f1D2084B9E0A93b538` + diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/README.md b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/README.md new file mode 100644 index 000000000..30580e049 --- /dev/null +++ b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/README.md @@ -0,0 +1,42 @@ +# Holocene Hardfork Upgrade - `SystemConfig` + +Status: DRAFT, NOT READY TO SIGN + +## Objective + +Upgrades the `SystemConfig` for the Holocene hardfork. + +The proposal was: + +- [ ] Posted on the governance forum. +- [ ] Approved by Token House voting. +- [ ] Not vetoed by the Citizens' house. +- [ ] Executed on OP Mainnet. + +The governance proposal should be treated as the source of truth and used to verify the correctness of the onchain operations. + +Governance post of the upgrade can be found at . + +This upgrades the `SystemConfig` in the +[op-contracts/v1.8.0](https://github.com/ethereum-optimism/optimism/tree/op-contracts/v1.8.0-rc.1) release. + +## Pre-deployments + +- `SystemConfig` - `0x29d06Ed7105c7552EFD9f29f3e0d250e5df412CD` + +## Simulation + +Please see the "Simulating and Verifying the Transaction" instructions in [NESTED.md](../../../NESTED.md). +When simulating, ensure the logs say `Using script /your/path/to/superchain-ops/tasks//NestedSignFromJson.s.sol`. +This ensures all safety checks are run. If the default `NestedSignFromJson.s.sol` script is shown (without the full path), something is wrong and the safety checks will not run. + +## State Validation + +Please see the instructions for [validation](./VALIDATION.md). + +## Execution + +This upgrade +* Changes the implementation of the `SystemConfig` to hold EIP-1559 parameters for the + +See the [overview](./OVERVIEW.md) and `input.json` bundle for more details. diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/VALIDATION.md b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/VALIDATION.md new file mode 100644 index 000000000..107cce7a8 --- /dev/null +++ b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/VALIDATION.md @@ -0,0 +1,19 @@ +# Validation + +This document can be used to validate the state diff resulting from the execution of the upgrade +transaction. + +For each contract listed in the state diff, please verify that no contracts or state changes shown in the Tenderly diff are missing from this document. Additionally, please verify that for each contract: + +- The following state changes (and none others) are made to that contract. This validates that no unexpected state changes occur. +- All addresses (in section headers and storage values) match the provided name, using the Etherscan and Superchain Registry links provided. This validates the bytecode deployed at the addresses contains the correct logic. +- All key values match the semantic meaning provided, which can be validated using the storage layout links provided. + +## State Changes + +### `0x034edD2A225f7f429A63E0f1D2084B9E0A93b538` (`SystemConfigProxy`) + +- **Key**: `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc` + **Before**: `0x000000000000000000000000ccdd86d581e40fb5a1c77582247bc493b6c8b169` + **After**: `0x00000000000000000000000029d06ed7105c7552efd9f29f3e0d250e5df412cd` + **Meaning**: Updates the `SystemConfig` proxy implementation. diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/input.json b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/input.json new file mode 100644 index 000000000..09144bc2a --- /dev/null +++ b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/input.json @@ -0,0 +1,38 @@ +{ + "chainId": 11155111, + "metadata": { + "name": "Holocene Hardfork - SystemConfig Upgrade", + "description": "Upgrades the `SystemConfig.sol` contract for Holocene." + }, + "transactions": [ + { + "metadata": { + "name": "Upgrade `SystemConfig` proxy", + "description": "Upgrades the `SystemConfig` proxy to the new implementation, featuring configurable EIP-1559 parameters." + }, + "to": "0x189aBAAaa82DfC015A588A7dbaD6F13b1D3485Bc", + "value": "0x0", + "data": "0x99a88ec4000000000000000000000000034edd2a225f7f429a63e0f1d2084b9e0a93b53800000000000000000000000029d06ed7105c7552efd9f29f3e0d250e5df412cd", + "contractMethod": { + "type": "function", + "name": "upgrade", + "inputs": [ + { + "name": "_proxy", + "type": "address" + }, + { + "name": "_implementation", + "type": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + "contractInputsValues": { + "_proxy": "0x034edD2A225f7f429A63E0f1D2084B9E0A93b538", + "_implementation": "0x29d06Ed7105c7552EFD9f29f3e0d250e5df412CD" + } + } + ] +} From 648c335458dea81248f8ee1cccac1273827a392e Mon Sep 17 00:00:00 2001 From: geoknee Date: Tue, 26 Nov 2024 15:40:12 +0000 Subject: [PATCH 02/28] move task into subfolder, and populate additional folders for MMZB --- .../base/.env.example | 6 +++ .../base/OVERVIEW.md | 21 ++++++++++ .../{ => base}/README.md | 0 .../base/VALIDATION.md | 19 +++++++++ .../base/input.json | 38 +++++++++++++++++ .../metal/.env.example | 6 +++ .../metal/OVERVIEW.md | 21 ++++++++++ .../metal/README.md | 42 +++++++++++++++++++ .../metal/VALIDATION.md | 19 +++++++++ .../metal/input.json | 38 +++++++++++++++++ .../mode/.env.example | 6 +++ .../mode/OVERVIEW.md | 21 ++++++++++ .../mode/README.md | 42 +++++++++++++++++++ .../mode/VALIDATION.md | 19 +++++++++ .../mode/input.json | 38 +++++++++++++++++ .../{ => op}/OVERVIEW.md | 0 .../op/README.md | 42 +++++++++++++++++++ .../{ => op}/VALIDATION.md | 0 .../{ => op}/input.json | 0 .../zora/.env.example | 6 +++ .../zora/OVERVIEW.md | 21 ++++++++++ .../zora/README.md | 42 +++++++++++++++++++ .../zora/VALIDATION.md | 19 +++++++++ .../zora/input.json | 38 +++++++++++++++++ 24 files changed, 504 insertions(+) create mode 100644 tasks/sep/020-holocene-system-config-upgrade-multi-chain/base/.env.example create mode 100644 tasks/sep/020-holocene-system-config-upgrade-multi-chain/base/OVERVIEW.md rename tasks/sep/020-holocene-system-config-upgrade-multi-chain/{ => base}/README.md (100%) create mode 100644 tasks/sep/020-holocene-system-config-upgrade-multi-chain/base/VALIDATION.md create mode 100644 tasks/sep/020-holocene-system-config-upgrade-multi-chain/base/input.json create mode 100644 tasks/sep/020-holocene-system-config-upgrade-multi-chain/metal/.env.example create mode 100644 tasks/sep/020-holocene-system-config-upgrade-multi-chain/metal/OVERVIEW.md create mode 100644 tasks/sep/020-holocene-system-config-upgrade-multi-chain/metal/README.md create mode 100644 tasks/sep/020-holocene-system-config-upgrade-multi-chain/metal/VALIDATION.md create mode 100644 tasks/sep/020-holocene-system-config-upgrade-multi-chain/metal/input.json create mode 100644 tasks/sep/020-holocene-system-config-upgrade-multi-chain/mode/.env.example create mode 100644 tasks/sep/020-holocene-system-config-upgrade-multi-chain/mode/OVERVIEW.md create mode 100644 tasks/sep/020-holocene-system-config-upgrade-multi-chain/mode/README.md create mode 100644 tasks/sep/020-holocene-system-config-upgrade-multi-chain/mode/VALIDATION.md create mode 100644 tasks/sep/020-holocene-system-config-upgrade-multi-chain/mode/input.json rename tasks/sep/020-holocene-system-config-upgrade-multi-chain/{ => op}/OVERVIEW.md (100%) create mode 100644 tasks/sep/020-holocene-system-config-upgrade-multi-chain/op/README.md rename tasks/sep/020-holocene-system-config-upgrade-multi-chain/{ => op}/VALIDATION.md (100%) rename tasks/sep/020-holocene-system-config-upgrade-multi-chain/{ => op}/input.json (100%) create mode 100644 tasks/sep/020-holocene-system-config-upgrade-multi-chain/zora/.env.example create mode 100644 tasks/sep/020-holocene-system-config-upgrade-multi-chain/zora/OVERVIEW.md create mode 100644 tasks/sep/020-holocene-system-config-upgrade-multi-chain/zora/README.md create mode 100644 tasks/sep/020-holocene-system-config-upgrade-multi-chain/zora/VALIDATION.md create mode 100644 tasks/sep/020-holocene-system-config-upgrade-multi-chain/zora/input.json diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/base/.env.example b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/base/.env.example new file mode 100644 index 000000000..ba2beff7f --- /dev/null +++ b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/base/.env.example @@ -0,0 +1,6 @@ +ETH_RPC_URL= +SUPERCHAIN_CONFIG_ADDR= +COUNCIL_SAFE= +FOUNDATION_SAFE= +OWNER_SAFE= +SAFE_NONCE= diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/base/OVERVIEW.md b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/base/OVERVIEW.md new file mode 100644 index 000000000..b5c33abb4 --- /dev/null +++ b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/base/OVERVIEW.md @@ -0,0 +1,21 @@ +# Holocene Hardfork - SystemConfig Upgrade +Upgrades the `SystemConfig.sol` contract for Holocene. + +The batch will be executed on chain ID `11155111`, and contains `1` transactions. + +## Tx #1: Upgrade `SystemConfig` proxy +Upgrades the `SystemConfig` proxy to the new implementation, featuring configurable EIP-1559 parameters. + +**Function Signature:** `upgrade(address,address)` + +**To:** `0x0389E59Aa0a41E4A413Ae70f0008e76CAA34b1F3` + +**Value:** `0 WEI` + +**Raw Input Data:** `0x99a88ec4000000000000000000000000f272670eb55e895584501d564afeb048bed2619400000000000000000000000029d06ed7105c7552efd9f29f3e0d250e5df412cd` + +### Inputs +**_implementation:** `0x29d06Ed7105c7552EFD9f29f3e0d250e5df412CD` + +**_proxy:** `0xf272670eb55e895584501d564AfEB048bEd26194` + diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/README.md b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/base/README.md similarity index 100% rename from tasks/sep/020-holocene-system-config-upgrade-multi-chain/README.md rename to tasks/sep/020-holocene-system-config-upgrade-multi-chain/base/README.md diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/base/VALIDATION.md b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/base/VALIDATION.md new file mode 100644 index 000000000..9bc7b7a91 --- /dev/null +++ b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/base/VALIDATION.md @@ -0,0 +1,19 @@ +# Validation + +This document can be used to validate the state diff resulting from the execution of the upgrade +transaction. + +For each contract listed in the state diff, please verify that no contracts or state changes shown in the Tenderly diff are missing from this document. Additionally, please verify that for each contract: + +- The following state changes (and none others) are made to that contract. This validates that no unexpected state changes occur. +- All addresses (in section headers and storage values) match the provided name, using the Etherscan and Superchain Registry links provided. This validates the bytecode deployed at the addresses contains the correct logic. +- All key values match the semantic meaning provided, which can be validated using the storage layout links provided. + +## State Changes + +### `0xf272670eb55e895584501d564AfEB048bEd26194` (`SystemConfigProxy`) + +- **Key**: `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc` + **Before**: `0x000000000000000000000000ccdd86d581e40fb5a1c77582247bc493b6c8b169` + **After**: `0x00000000000000000000000029d06ed7105c7552efd9f29f3e0d250e5df412cd` + **Meaning**: Updates the `SystemConfig` proxy implementation. diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/base/input.json b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/base/input.json new file mode 100644 index 000000000..f94cd2aaf --- /dev/null +++ b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/base/input.json @@ -0,0 +1,38 @@ +{ + "chainId": 11155111, + "metadata": { + "name": "Holocene Hardfork - SystemConfig Upgrade", + "description": "Upgrades the `SystemConfig.sol` contract for Holocene." + }, + "transactions": [ + { + "metadata": { + "name": "Upgrade `SystemConfig` proxy", + "description": "Upgrades the `SystemConfig` proxy to the new implementation, featuring configurable EIP-1559 parameters." + }, + "to": "0x0389E59Aa0a41E4A413Ae70f0008e76CAA34b1F3", + "value": "0x0", + "data": "0x99a88ec4000000000000000000000000f272670eb55e895584501d564afeb048bed2619400000000000000000000000029d06ed7105c7552efd9f29f3e0d250e5df412cd", + "contractMethod": { + "type": "function", + "name": "upgrade", + "inputs": [ + { + "name": "_proxy", + "type": "address" + }, + { + "name": "_implementation", + "type": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + "contractInputsValues": { + "_proxy": "0xf272670eb55e895584501d564AfEB048bEd26194", + "_implementation": "0x29d06Ed7105c7552EFD9f29f3e0d250e5df412CD" + } + } + ] +} diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/metal/.env.example b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/metal/.env.example new file mode 100644 index 000000000..ba2beff7f --- /dev/null +++ b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/metal/.env.example @@ -0,0 +1,6 @@ +ETH_RPC_URL= +SUPERCHAIN_CONFIG_ADDR= +COUNCIL_SAFE= +FOUNDATION_SAFE= +OWNER_SAFE= +SAFE_NONCE= diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/metal/OVERVIEW.md b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/metal/OVERVIEW.md new file mode 100644 index 000000000..fc7b4ca8c --- /dev/null +++ b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/metal/OVERVIEW.md @@ -0,0 +1,21 @@ +# Holocene Hardfork - SystemConfig Upgrade +Upgrades the `SystemConfig.sol` contract for Holocene. + +The batch will be executed on chain ID `11155111`, and contains `1` transactions. + +## Tx #1: Upgrade `SystemConfig` proxy +Upgrades the `SystemConfig` proxy to the new implementation, featuring configurable EIP-1559 parameters. + +**Function Signature:** `upgrade(address,address)` + +**To:** `0xF7Bc4b3a78C7Dd8bE9B69B3128EEB0D6776Ce18A` + +**Value:** `0 WEI` + +**Raw Input Data:** `0x99a88ec40000000000000000000000005d63a8dc2737ce771aa4a6510d063b6ba2c4f6f200000000000000000000000029d06ed7105c7552efd9f29f3e0d250e5df412cd` + +### Inputs +**_proxy:** `0x5D63A8Dc2737cE771aa4a6510D063b6Ba2c4f6F2` + +**_implementation:** `0x29d06Ed7105c7552EFD9f29f3e0d250e5df412CD` + diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/metal/README.md b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/metal/README.md new file mode 100644 index 000000000..30580e049 --- /dev/null +++ b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/metal/README.md @@ -0,0 +1,42 @@ +# Holocene Hardfork Upgrade - `SystemConfig` + +Status: DRAFT, NOT READY TO SIGN + +## Objective + +Upgrades the `SystemConfig` for the Holocene hardfork. + +The proposal was: + +- [ ] Posted on the governance forum. +- [ ] Approved by Token House voting. +- [ ] Not vetoed by the Citizens' house. +- [ ] Executed on OP Mainnet. + +The governance proposal should be treated as the source of truth and used to verify the correctness of the onchain operations. + +Governance post of the upgrade can be found at . + +This upgrades the `SystemConfig` in the +[op-contracts/v1.8.0](https://github.com/ethereum-optimism/optimism/tree/op-contracts/v1.8.0-rc.1) release. + +## Pre-deployments + +- `SystemConfig` - `0x29d06Ed7105c7552EFD9f29f3e0d250e5df412CD` + +## Simulation + +Please see the "Simulating and Verifying the Transaction" instructions in [NESTED.md](../../../NESTED.md). +When simulating, ensure the logs say `Using script /your/path/to/superchain-ops/tasks//NestedSignFromJson.s.sol`. +This ensures all safety checks are run. If the default `NestedSignFromJson.s.sol` script is shown (without the full path), something is wrong and the safety checks will not run. + +## State Validation + +Please see the instructions for [validation](./VALIDATION.md). + +## Execution + +This upgrade +* Changes the implementation of the `SystemConfig` to hold EIP-1559 parameters for the + +See the [overview](./OVERVIEW.md) and `input.json` bundle for more details. diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/metal/VALIDATION.md b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/metal/VALIDATION.md new file mode 100644 index 000000000..7ad25a6df --- /dev/null +++ b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/metal/VALIDATION.md @@ -0,0 +1,19 @@ +# Validation + +This document can be used to validate the state diff resulting from the execution of the upgrade +transaction. + +For each contract listed in the state diff, please verify that no contracts or state changes shown in the Tenderly diff are missing from this document. Additionally, please verify that for each contract: + +- The following state changes (and none others) are made to that contract. This validates that no unexpected state changes occur. +- All addresses (in section headers and storage values) match the provided name, using the Etherscan and Superchain Registry links provided. This validates the bytecode deployed at the addresses contains the correct logic. +- All key values match the semantic meaning provided, which can be validated using the storage layout links provided. + +## State Changes + +### `0x5D63A8Dc2737cE771aa4a6510D063b6Ba2c4f6F2` (`SystemConfigProxy`) + +- **Key**: `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc` + **Before**: `0x000000000000000000000000ba2492e52f45651b60b8b38d4ea5e2390c64ffb1` + **After**: `0x00000000000000000000000029d06ed7105c7552efd9f29f3e0d250e5df412cd` + **Meaning**: Updates the `SystemConfig` proxy implementation. diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/metal/input.json b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/metal/input.json new file mode 100644 index 000000000..88b353e85 --- /dev/null +++ b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/metal/input.json @@ -0,0 +1,38 @@ +{ + "chainId": 11155111, + "metadata": { + "name": "Holocene Hardfork - SystemConfig Upgrade", + "description": "Upgrades the `SystemConfig.sol` contract for Holocene." + }, + "transactions": [ + { + "metadata": { + "name": "Upgrade `SystemConfig` proxy", + "description": "Upgrades the `SystemConfig` proxy to the new implementation, featuring configurable EIP-1559 parameters." + }, + "to": "0xF7Bc4b3a78C7Dd8bE9B69B3128EEB0D6776Ce18A", + "value": "0x0", + "data": "0x99a88ec40000000000000000000000005d63a8dc2737ce771aa4a6510d063b6ba2c4f6f200000000000000000000000029d06ed7105c7552efd9f29f3e0d250e5df412cd", + "contractMethod": { + "type": "function", + "name": "upgrade", + "inputs": [ + { + "name": "_proxy", + "type": "address" + }, + { + "name": "_implementation", + "type": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + "contractInputsValues": { + "_proxy": "0x5D63A8Dc2737cE771aa4a6510D063b6Ba2c4f6F2", + "_implementation": "0x29d06Ed7105c7552EFD9f29f3e0d250e5df412CD" + } + } + ] +} diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/mode/.env.example b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/mode/.env.example new file mode 100644 index 000000000..ba2beff7f --- /dev/null +++ b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/mode/.env.example @@ -0,0 +1,6 @@ +ETH_RPC_URL= +SUPERCHAIN_CONFIG_ADDR= +COUNCIL_SAFE= +FOUNDATION_SAFE= +OWNER_SAFE= +SAFE_NONCE= diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/mode/OVERVIEW.md b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/mode/OVERVIEW.md new file mode 100644 index 000000000..699e97a40 --- /dev/null +++ b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/mode/OVERVIEW.md @@ -0,0 +1,21 @@ +# Holocene Hardfork - SystemConfig Upgrade +Upgrades the `SystemConfig.sol` contract for Holocene. + +The batch will be executed on chain ID `11155111`, and contains `1` transactions. + +## Tx #1: Upgrade `SystemConfig` proxy +Upgrades the `SystemConfig` proxy to the new implementation, featuring configurable EIP-1559 parameters. + +**Function Signature:** `upgrade(address,address)` + +**To:** `0xE7413127F29E050Df65ac3FC9335F85bB10091AE` + +**Value:** `0 WEI` + +**Raw Input Data:** `0x99a88ec400000000000000000000000015cd4f6e0ce3b4832b33cb9c6f6fe6fc246754c200000000000000000000000029d06ed7105c7552efd9f29f3e0d250e5df412cd` + +### Inputs +**_proxy:** `0x15cd4f6e0CE3B4832B33cB9c6f6Fe6fc246754c2` + +**_implementation:** `0x29d06Ed7105c7552EFD9f29f3e0d250e5df412CD` + diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/mode/README.md b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/mode/README.md new file mode 100644 index 000000000..30580e049 --- /dev/null +++ b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/mode/README.md @@ -0,0 +1,42 @@ +# Holocene Hardfork Upgrade - `SystemConfig` + +Status: DRAFT, NOT READY TO SIGN + +## Objective + +Upgrades the `SystemConfig` for the Holocene hardfork. + +The proposal was: + +- [ ] Posted on the governance forum. +- [ ] Approved by Token House voting. +- [ ] Not vetoed by the Citizens' house. +- [ ] Executed on OP Mainnet. + +The governance proposal should be treated as the source of truth and used to verify the correctness of the onchain operations. + +Governance post of the upgrade can be found at . + +This upgrades the `SystemConfig` in the +[op-contracts/v1.8.0](https://github.com/ethereum-optimism/optimism/tree/op-contracts/v1.8.0-rc.1) release. + +## Pre-deployments + +- `SystemConfig` - `0x29d06Ed7105c7552EFD9f29f3e0d250e5df412CD` + +## Simulation + +Please see the "Simulating and Verifying the Transaction" instructions in [NESTED.md](../../../NESTED.md). +When simulating, ensure the logs say `Using script /your/path/to/superchain-ops/tasks//NestedSignFromJson.s.sol`. +This ensures all safety checks are run. If the default `NestedSignFromJson.s.sol` script is shown (without the full path), something is wrong and the safety checks will not run. + +## State Validation + +Please see the instructions for [validation](./VALIDATION.md). + +## Execution + +This upgrade +* Changes the implementation of the `SystemConfig` to hold EIP-1559 parameters for the + +See the [overview](./OVERVIEW.md) and `input.json` bundle for more details. diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/mode/VALIDATION.md b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/mode/VALIDATION.md new file mode 100644 index 000000000..6a722cbac --- /dev/null +++ b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/mode/VALIDATION.md @@ -0,0 +1,19 @@ +# Validation + +This document can be used to validate the state diff resulting from the execution of the upgrade +transaction. + +For each contract listed in the state diff, please verify that no contracts or state changes shown in the Tenderly diff are missing from this document. Additionally, please verify that for each contract: + +- The following state changes (and none others) are made to that contract. This validates that no unexpected state changes occur. +- All addresses (in section headers and storage values) match the provided name, using the Etherscan and Superchain Registry links provided. This validates the bytecode deployed at the addresses contains the correct logic. +- All key values match the semantic meaning provided, which can be validated using the storage layout links provided. + +## State Changes + +### `0x15cd4f6e0CE3B4832B33cB9c6f6Fe6fc246754c2` (`SystemConfigProxy`) + +- **Key**: `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc` + **Before**: `0x000000000000000000000000ba2492e52f45651b60b8b38d4ea5e2390c64ffb1` + **After**: `0x00000000000000000000000029d06ed7105c7552efd9f29f3e0d250e5df412cd` + **Meaning**: Updates the `SystemConfig` proxy implementation. diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/mode/input.json b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/mode/input.json new file mode 100644 index 000000000..10f237508 --- /dev/null +++ b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/mode/input.json @@ -0,0 +1,38 @@ +{ + "chainId": 11155111, + "metadata": { + "name": "Holocene Hardfork - SystemConfig Upgrade", + "description": "Upgrades the `SystemConfig.sol` contract for Holocene." + }, + "transactions": [ + { + "metadata": { + "name": "Upgrade `SystemConfig` proxy", + "description": "Upgrades the `SystemConfig` proxy to the new implementation, featuring configurable EIP-1559 parameters." + }, + "to": "0xE7413127F29E050Df65ac3FC9335F85bB10091AE", + "value": "0x0", + "data": "0x99a88ec400000000000000000000000015cd4f6e0ce3b4832b33cb9c6f6fe6fc246754c200000000000000000000000029d06ed7105c7552efd9f29f3e0d250e5df412cd", + "contractMethod": { + "type": "function", + "name": "upgrade", + "inputs": [ + { + "name": "_proxy", + "type": "address" + }, + { + "name": "_implementation", + "type": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + "contractInputsValues": { + "_proxy": "0x15cd4f6e0CE3B4832B33cB9c6f6Fe6fc246754c2", + "_implementation": "0x29d06Ed7105c7552EFD9f29f3e0d250e5df412CD" + } + } + ] +} diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/OVERVIEW.md b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/op/OVERVIEW.md similarity index 100% rename from tasks/sep/020-holocene-system-config-upgrade-multi-chain/OVERVIEW.md rename to tasks/sep/020-holocene-system-config-upgrade-multi-chain/op/OVERVIEW.md diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/op/README.md b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/op/README.md new file mode 100644 index 000000000..30580e049 --- /dev/null +++ b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/op/README.md @@ -0,0 +1,42 @@ +# Holocene Hardfork Upgrade - `SystemConfig` + +Status: DRAFT, NOT READY TO SIGN + +## Objective + +Upgrades the `SystemConfig` for the Holocene hardfork. + +The proposal was: + +- [ ] Posted on the governance forum. +- [ ] Approved by Token House voting. +- [ ] Not vetoed by the Citizens' house. +- [ ] Executed on OP Mainnet. + +The governance proposal should be treated as the source of truth and used to verify the correctness of the onchain operations. + +Governance post of the upgrade can be found at . + +This upgrades the `SystemConfig` in the +[op-contracts/v1.8.0](https://github.com/ethereum-optimism/optimism/tree/op-contracts/v1.8.0-rc.1) release. + +## Pre-deployments + +- `SystemConfig` - `0x29d06Ed7105c7552EFD9f29f3e0d250e5df412CD` + +## Simulation + +Please see the "Simulating and Verifying the Transaction" instructions in [NESTED.md](../../../NESTED.md). +When simulating, ensure the logs say `Using script /your/path/to/superchain-ops/tasks//NestedSignFromJson.s.sol`. +This ensures all safety checks are run. If the default `NestedSignFromJson.s.sol` script is shown (without the full path), something is wrong and the safety checks will not run. + +## State Validation + +Please see the instructions for [validation](./VALIDATION.md). + +## Execution + +This upgrade +* Changes the implementation of the `SystemConfig` to hold EIP-1559 parameters for the + +See the [overview](./OVERVIEW.md) and `input.json` bundle for more details. diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/VALIDATION.md b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/op/VALIDATION.md similarity index 100% rename from tasks/sep/020-holocene-system-config-upgrade-multi-chain/VALIDATION.md rename to tasks/sep/020-holocene-system-config-upgrade-multi-chain/op/VALIDATION.md diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/input.json b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/op/input.json similarity index 100% rename from tasks/sep/020-holocene-system-config-upgrade-multi-chain/input.json rename to tasks/sep/020-holocene-system-config-upgrade-multi-chain/op/input.json diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/zora/.env.example b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/zora/.env.example new file mode 100644 index 000000000..ba2beff7f --- /dev/null +++ b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/zora/.env.example @@ -0,0 +1,6 @@ +ETH_RPC_URL= +SUPERCHAIN_CONFIG_ADDR= +COUNCIL_SAFE= +FOUNDATION_SAFE= +OWNER_SAFE= +SAFE_NONCE= diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/zora/OVERVIEW.md b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/zora/OVERVIEW.md new file mode 100644 index 000000000..b6cec6ea2 --- /dev/null +++ b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/zora/OVERVIEW.md @@ -0,0 +1,21 @@ +# Holocene Hardfork - SystemConfig Upgrade +Upgrades the `SystemConfig.sol` contract for Holocene. + +The batch will be executed on chain ID `11155111`, and contains `1` transactions. + +## Tx #1: Upgrade `SystemConfig` proxy +Upgrades the `SystemConfig` proxy to the new implementation, featuring configurable EIP-1559 parameters. + +**Function Signature:** `upgrade(address,address)` + +**To:** `0xE17071F4C216Eb189437fbDBCc16Bb79c4efD9c2` + +**Value:** `0 WEI` + +**Raw Input Data:** `0x99a88ec4000000000000000000000000b54c7bfc223058773cf9b739cc5bd4095184fb0800000000000000000000000029d06ed7105c7552efd9f29f3e0d250e5df412cd` + +### Inputs +**_proxy:** `0xB54c7BFC223058773CF9b739cC5bd4095184Fb08` + +**_implementation:** `0x29d06Ed7105c7552EFD9f29f3e0d250e5df412CD` + diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/zora/README.md b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/zora/README.md new file mode 100644 index 000000000..30580e049 --- /dev/null +++ b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/zora/README.md @@ -0,0 +1,42 @@ +# Holocene Hardfork Upgrade - `SystemConfig` + +Status: DRAFT, NOT READY TO SIGN + +## Objective + +Upgrades the `SystemConfig` for the Holocene hardfork. + +The proposal was: + +- [ ] Posted on the governance forum. +- [ ] Approved by Token House voting. +- [ ] Not vetoed by the Citizens' house. +- [ ] Executed on OP Mainnet. + +The governance proposal should be treated as the source of truth and used to verify the correctness of the onchain operations. + +Governance post of the upgrade can be found at . + +This upgrades the `SystemConfig` in the +[op-contracts/v1.8.0](https://github.com/ethereum-optimism/optimism/tree/op-contracts/v1.8.0-rc.1) release. + +## Pre-deployments + +- `SystemConfig` - `0x29d06Ed7105c7552EFD9f29f3e0d250e5df412CD` + +## Simulation + +Please see the "Simulating and Verifying the Transaction" instructions in [NESTED.md](../../../NESTED.md). +When simulating, ensure the logs say `Using script /your/path/to/superchain-ops/tasks//NestedSignFromJson.s.sol`. +This ensures all safety checks are run. If the default `NestedSignFromJson.s.sol` script is shown (without the full path), something is wrong and the safety checks will not run. + +## State Validation + +Please see the instructions for [validation](./VALIDATION.md). + +## Execution + +This upgrade +* Changes the implementation of the `SystemConfig` to hold EIP-1559 parameters for the + +See the [overview](./OVERVIEW.md) and `input.json` bundle for more details. diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/zora/VALIDATION.md b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/zora/VALIDATION.md new file mode 100644 index 000000000..7465be251 --- /dev/null +++ b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/zora/VALIDATION.md @@ -0,0 +1,19 @@ +# Validation + +This document can be used to validate the state diff resulting from the execution of the upgrade +transaction. + +For each contract listed in the state diff, please verify that no contracts or state changes shown in the Tenderly diff are missing from this document. Additionally, please verify that for each contract: + +- The following state changes (and none others) are made to that contract. This validates that no unexpected state changes occur. +- All addresses (in section headers and storage values) match the provided name, using the Etherscan and Superchain Registry links provided. This validates the bytecode deployed at the addresses contains the correct logic. +- All key values match the semantic meaning provided, which can be validated using the storage layout links provided. + +## State Changes + +### `0xB54c7BFC223058773CF9b739cC5bd4095184Fb08` (`SystemConfigProxy`) + +- **Key**: `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc` + **Before**: `0x000000000000000000000000ba2492e52f45651b60b8b38d4ea5e2390c64ffb1` + **After**: `0x00000000000000000000000029d06ed7105c7552efd9f29f3e0d250e5df412cd` + **Meaning**: Updates the `SystemConfig` proxy implementation. diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/zora/input.json b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/zora/input.json new file mode 100644 index 000000000..5dd17e72d --- /dev/null +++ b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/zora/input.json @@ -0,0 +1,38 @@ +{ + "chainId": 11155111, + "metadata": { + "name": "Holocene Hardfork - SystemConfig Upgrade", + "description": "Upgrades the `SystemConfig.sol` contract for Holocene." + }, + "transactions": [ + { + "metadata": { + "name": "Upgrade `SystemConfig` proxy", + "description": "Upgrades the `SystemConfig` proxy to the new implementation, featuring configurable EIP-1559 parameters." + }, + "to": "0xE17071F4C216Eb189437fbDBCc16Bb79c4efD9c2", + "value": "0x0", + "data": "0x99a88ec4000000000000000000000000b54c7bfc223058773cf9b739cc5bd4095184fb0800000000000000000000000029d06ed7105c7552efd9f29f3e0d250e5df412cd", + "contractMethod": { + "type": "function", + "name": "upgrade", + "inputs": [ + { + "name": "_proxy", + "type": "address" + }, + { + "name": "_implementation", + "type": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + "contractInputsValues": { + "_proxy": "0xB54c7BFC223058773CF9b739cC5bd4095184Fb08", + "_implementation": "0x29d06Ed7105c7552EFD9f29f3e0d250e5df412CD" + } + } + ] +} From 896e26f6eb2bc4917fce36feaf50b52405eec794 Mon Sep 17 00:00:00 2001 From: geoknee Date: Tue, 26 Nov 2024 15:50:54 +0000 Subject: [PATCH 03/28] consolidate 5 ops into 1 --- .../{base => }/.env.example | 0 .../OVERVIEW.md | 85 ++++++++++ .../{mode => }/README.md | 2 +- .../VALIDATION.md | 49 ++++++ .../base/OVERVIEW.md | 21 --- .../base/README.md | 42 ----- .../base/VALIDATION.md | 19 --- .../base/input.json | 38 ----- .../input.json | 154 ++++++++++++++++++ .../metal/.env.example | 6 - .../metal/OVERVIEW.md | 21 --- .../metal/README.md | 42 ----- .../metal/VALIDATION.md | 19 --- .../metal/input.json | 38 ----- .../mode/.env.example | 6 - .../mode/OVERVIEW.md | 21 --- .../mode/VALIDATION.md | 19 --- .../mode/input.json | 38 ----- .../op/OVERVIEW.md | 21 --- .../op/README.md | 42 ----- .../op/VALIDATION.md | 19 --- .../op/input.json | 38 ----- .../zora/.env.example | 6 - .../zora/OVERVIEW.md | 21 --- .../zora/README.md | 42 ----- .../zora/VALIDATION.md | 19 --- .../zora/input.json | 38 ----- 27 files changed, 289 insertions(+), 577 deletions(-) rename tasks/sep/020-holocene-system-config-upgrade-multi-chain/{base => }/.env.example (100%) create mode 100644 tasks/sep/020-holocene-system-config-upgrade-multi-chain/OVERVIEW.md rename tasks/sep/020-holocene-system-config-upgrade-multi-chain/{mode => }/README.md (93%) create mode 100644 tasks/sep/020-holocene-system-config-upgrade-multi-chain/VALIDATION.md delete mode 100644 tasks/sep/020-holocene-system-config-upgrade-multi-chain/base/OVERVIEW.md delete mode 100644 tasks/sep/020-holocene-system-config-upgrade-multi-chain/base/README.md delete mode 100644 tasks/sep/020-holocene-system-config-upgrade-multi-chain/base/VALIDATION.md delete mode 100644 tasks/sep/020-holocene-system-config-upgrade-multi-chain/base/input.json create mode 100644 tasks/sep/020-holocene-system-config-upgrade-multi-chain/input.json delete mode 100644 tasks/sep/020-holocene-system-config-upgrade-multi-chain/metal/.env.example delete mode 100644 tasks/sep/020-holocene-system-config-upgrade-multi-chain/metal/OVERVIEW.md delete mode 100644 tasks/sep/020-holocene-system-config-upgrade-multi-chain/metal/README.md delete mode 100644 tasks/sep/020-holocene-system-config-upgrade-multi-chain/metal/VALIDATION.md delete mode 100644 tasks/sep/020-holocene-system-config-upgrade-multi-chain/metal/input.json delete mode 100644 tasks/sep/020-holocene-system-config-upgrade-multi-chain/mode/.env.example delete mode 100644 tasks/sep/020-holocene-system-config-upgrade-multi-chain/mode/OVERVIEW.md delete mode 100644 tasks/sep/020-holocene-system-config-upgrade-multi-chain/mode/VALIDATION.md delete mode 100644 tasks/sep/020-holocene-system-config-upgrade-multi-chain/mode/input.json delete mode 100644 tasks/sep/020-holocene-system-config-upgrade-multi-chain/op/OVERVIEW.md delete mode 100644 tasks/sep/020-holocene-system-config-upgrade-multi-chain/op/README.md delete mode 100644 tasks/sep/020-holocene-system-config-upgrade-multi-chain/op/VALIDATION.md delete mode 100644 tasks/sep/020-holocene-system-config-upgrade-multi-chain/op/input.json delete mode 100644 tasks/sep/020-holocene-system-config-upgrade-multi-chain/zora/.env.example delete mode 100644 tasks/sep/020-holocene-system-config-upgrade-multi-chain/zora/OVERVIEW.md delete mode 100644 tasks/sep/020-holocene-system-config-upgrade-multi-chain/zora/README.md delete mode 100644 tasks/sep/020-holocene-system-config-upgrade-multi-chain/zora/VALIDATION.md delete mode 100644 tasks/sep/020-holocene-system-config-upgrade-multi-chain/zora/input.json diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/base/.env.example b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/.env.example similarity index 100% rename from tasks/sep/020-holocene-system-config-upgrade-multi-chain/base/.env.example rename to tasks/sep/020-holocene-system-config-upgrade-multi-chain/.env.example diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/OVERVIEW.md b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/OVERVIEW.md new file mode 100644 index 000000000..d4c562962 --- /dev/null +++ b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/OVERVIEW.md @@ -0,0 +1,85 @@ +# Holocene Hardfork - SystemConfig Upgrade +Upgrades the `SystemConfig.sol` contract for Holocene. + +The batch will be executed on chain ID `11155111`, and contains `5` transactions. + +## Tx #1: Upgrade `SystemConfig` proxy for OP Sepolia +Upgrades the `SystemConfig` proxy to the new implementation, featuring configurable EIP-1559 parameters. + +**Function Signature:** `upgrade(address,address)` + +**To:** `0x189aBAAaa82DfC015A588A7dbaD6F13b1D3485Bc` + +**Value:** `0 WEI` + +**Raw Input Data:** `0x99a88ec4000000000000000000000000034edd2a225f7f429a63e0f1d2084b9e0a93b53800000000000000000000000029d06ed7105c7552efd9f29f3e0d250e5df412cd` + +### Inputs +**_implementation:** `0x29d06Ed7105c7552EFD9f29f3e0d250e5df412CD` + +**_proxy:** `0x034edD2A225f7f429A63E0f1D2084B9E0A93b538` + +## Tx #2: Upgrade `SystemConfig` proxy on Mode Sepolia +Upgrades the `SystemConfig` proxy to the new implementation, featuring configurable EIP-1559 parameters. + +**Function Signature:** `upgrade(address,address)` + +**To:** `0xE7413127F29E050Df65ac3FC9335F85bB10091AE` + +**Value:** `0 WEI` + +**Raw Input Data:** `0x99a88ec400000000000000000000000015cd4f6e0ce3b4832b33cb9c6f6fe6fc246754c200000000000000000000000029d06ed7105c7552efd9f29f3e0d250e5df412cd` + +### Inputs +**_proxy:** `0x15cd4f6e0CE3B4832B33cB9c6f6Fe6fc246754c2` + +**_implementation:** `0x29d06Ed7105c7552EFD9f29f3e0d250e5df412CD` + +## Tx #3: Upgrade `SystemConfig` proxy on Metal Sepolia +Upgrades the `SystemConfig` proxy to the new implementation, featuring configurable EIP-1559 parameters. + +**Function Signature:** `upgrade(address,address)` + +**To:** `0xF7Bc4b3a78C7Dd8bE9B69B3128EEB0D6776Ce18A` + +**Value:** `0 WEI` + +**Raw Input Data:** `0x99a88ec40000000000000000000000005d63a8dc2737ce771aa4a6510d063b6ba2c4f6f200000000000000000000000029d06ed7105c7552efd9f29f3e0d250e5df412cd` + +### Inputs +**_proxy:** `0x5D63A8Dc2737cE771aa4a6510D063b6Ba2c4f6F2` + +**_implementation:** `0x29d06Ed7105c7552EFD9f29f3e0d250e5df412CD` + +## Tx #4: Upgrade `SystemConfig` proxy on Zora Sepolia +Upgrades the `SystemConfig` proxy to the new implementation, featuring configurable EIP-1559 parameters. + +**Function Signature:** `upgrade(address,address)` + +**To:** `0xE17071F4C216Eb189437fbDBCc16Bb79c4efD9c2` + +**Value:** `0 WEI` + +**Raw Input Data:** `0x99a88ec4000000000000000000000000b54c7bfc223058773cf9b739cc5bd4095184fb0800000000000000000000000029d06ed7105c7552efd9f29f3e0d250e5df412cd` + +### Inputs +**_proxy:** `0xB54c7BFC223058773CF9b739cC5bd4095184Fb08` + +**_implementation:** `0x29d06Ed7105c7552EFD9f29f3e0d250e5df412CD` + +## Tx #5: Upgrade `SystemConfig` proxy on Base Sepolia +Upgrades the `SystemConfig` proxy to the new implementation, featuring configurable EIP-1559 parameters. + +**Function Signature:** `upgrade(address,address)` + +**To:** `0x0389E59Aa0a41E4A413Ae70f0008e76CAA34b1F3` + +**Value:** `0 WEI` + +**Raw Input Data:** `0x99a88ec4000000000000000000000000f272670eb55e895584501d564afeb048bed2619400000000000000000000000029d06ed7105c7552efd9f29f3e0d250e5df412cd` + +### Inputs +**_implementation:** `0x29d06Ed7105c7552EFD9f29f3e0d250e5df412CD` + +**_proxy:** `0xf272670eb55e895584501d564AfEB048bEd26194` + diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/mode/README.md b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/README.md similarity index 93% rename from tasks/sep/020-holocene-system-config-upgrade-multi-chain/mode/README.md rename to tasks/sep/020-holocene-system-config-upgrade-multi-chain/README.md index 30580e049..249d2e3bf 100644 --- a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/mode/README.md +++ b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/README.md @@ -4,7 +4,7 @@ Status: DRAFT, NOT READY TO SIGN ## Objective -Upgrades the `SystemConfig` for the Holocene hardfork. +Upgrades the `SystemConfig` for the Holocene hardfork for Sepolia/{OP,Mode,Metal,Zora,Base} The proposal was: diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/VALIDATION.md b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/VALIDATION.md new file mode 100644 index 000000000..f06ef1625 --- /dev/null +++ b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/VALIDATION.md @@ -0,0 +1,49 @@ +# Validation + +This document can be used to validate the state diff resulting from the execution of the upgrade +transaction. + +For each contract listed in the state diff, please verify that no contracts or state changes shown in the Tenderly diff are missing from this document. Additionally, please verify that for each contract: + +- The following state changes (and none others) are made to that contract. This validates that no unexpected state changes occur. +- All addresses (in section headers and storage values) match the provided name, using the Etherscan and Superchain Registry links provided. This validates the bytecode deployed at the addresses contains the correct logic. +- All key values match the semantic meaning provided, which can be validated using the storage layout links provided. + +## State Changes + +### `0x034edD2A225f7f429A63E0f1D2084B9E0A93b538` (`SystemConfigProxy`) for OP Sepolia + +- **Key**: `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc` + **Before**: `0x000000000000000000000000ccdd86d581e40fb5a1c77582247bc493b6c8b169` + **After**: `0x00000000000000000000000029d06ed7105c7552efd9f29f3e0d250e5df412cd` + **Meaning**: Updates the `SystemConfig` proxy implementation. + + +### `0x15cd4f6e0CE3B4832B33cB9c6f6Fe6fc246754c2` (`SystemConfigProxy`) for Mode Sepolia + +- **Key**: `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc` + **Before**: `0x000000000000000000000000ba2492e52f45651b60b8b38d4ea5e2390c64ffb1` + **After**: `0x00000000000000000000000029d06ed7105c7552efd9f29f3e0d250e5df412cd` + **Meaning**: Updates the `SystemConfig` proxy implementation. + + +### `0x5D63A8Dc2737cE771aa4a6510D063b6Ba2c4f6F2` (`SystemConfigProxy`) for Metal Sepolia + +- **Key**: `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc` + **Before**: `0x000000000000000000000000ba2492e52f45651b60b8b38d4ea5e2390c64ffb1` + **After**: `0x00000000000000000000000029d06ed7105c7552efd9f29f3e0d250e5df412cd` + **Meaning**: Updates the `SystemConfig` proxy implementation. + +### `0xB54c7BFC223058773CF9b739cC5bd4095184Fb08` (`SystemConfigProxy`) for Zora Sepolia + +- **Key**: `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc` + **Before**: `0x000000000000000000000000ba2492e52f45651b60b8b38d4ea5e2390c64ffb1` + **After**: `0x00000000000000000000000029d06ed7105c7552efd9f29f3e0d250e5df412cd` + **Meaning**: Updates the `SystemConfig` proxy implementation. + +### `0xf272670eb55e895584501d564AfEB048bEd26194` (`SystemConfigProxy`) for Base Sepolia + +- **Key**: `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc` + **Before**: `0x000000000000000000000000ccdd86d581e40fb5a1c77582247bc493b6c8b169` + **After**: `0x00000000000000000000000029d06ed7105c7552efd9f29f3e0d250e5df412cd` + **Meaning**: Updates the `SystemConfig` proxy implementation. diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/base/OVERVIEW.md b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/base/OVERVIEW.md deleted file mode 100644 index b5c33abb4..000000000 --- a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/base/OVERVIEW.md +++ /dev/null @@ -1,21 +0,0 @@ -# Holocene Hardfork - SystemConfig Upgrade -Upgrades the `SystemConfig.sol` contract for Holocene. - -The batch will be executed on chain ID `11155111`, and contains `1` transactions. - -## Tx #1: Upgrade `SystemConfig` proxy -Upgrades the `SystemConfig` proxy to the new implementation, featuring configurable EIP-1559 parameters. - -**Function Signature:** `upgrade(address,address)` - -**To:** `0x0389E59Aa0a41E4A413Ae70f0008e76CAA34b1F3` - -**Value:** `0 WEI` - -**Raw Input Data:** `0x99a88ec4000000000000000000000000f272670eb55e895584501d564afeb048bed2619400000000000000000000000029d06ed7105c7552efd9f29f3e0d250e5df412cd` - -### Inputs -**_implementation:** `0x29d06Ed7105c7552EFD9f29f3e0d250e5df412CD` - -**_proxy:** `0xf272670eb55e895584501d564AfEB048bEd26194` - diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/base/README.md b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/base/README.md deleted file mode 100644 index 30580e049..000000000 --- a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/base/README.md +++ /dev/null @@ -1,42 +0,0 @@ -# Holocene Hardfork Upgrade - `SystemConfig` - -Status: DRAFT, NOT READY TO SIGN - -## Objective - -Upgrades the `SystemConfig` for the Holocene hardfork. - -The proposal was: - -- [ ] Posted on the governance forum. -- [ ] Approved by Token House voting. -- [ ] Not vetoed by the Citizens' house. -- [ ] Executed on OP Mainnet. - -The governance proposal should be treated as the source of truth and used to verify the correctness of the onchain operations. - -Governance post of the upgrade can be found at . - -This upgrades the `SystemConfig` in the -[op-contracts/v1.8.0](https://github.com/ethereum-optimism/optimism/tree/op-contracts/v1.8.0-rc.1) release. - -## Pre-deployments - -- `SystemConfig` - `0x29d06Ed7105c7552EFD9f29f3e0d250e5df412CD` - -## Simulation - -Please see the "Simulating and Verifying the Transaction" instructions in [NESTED.md](../../../NESTED.md). -When simulating, ensure the logs say `Using script /your/path/to/superchain-ops/tasks//NestedSignFromJson.s.sol`. -This ensures all safety checks are run. If the default `NestedSignFromJson.s.sol` script is shown (without the full path), something is wrong and the safety checks will not run. - -## State Validation - -Please see the instructions for [validation](./VALIDATION.md). - -## Execution - -This upgrade -* Changes the implementation of the `SystemConfig` to hold EIP-1559 parameters for the - -See the [overview](./OVERVIEW.md) and `input.json` bundle for more details. diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/base/VALIDATION.md b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/base/VALIDATION.md deleted file mode 100644 index 9bc7b7a91..000000000 --- a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/base/VALIDATION.md +++ /dev/null @@ -1,19 +0,0 @@ -# Validation - -This document can be used to validate the state diff resulting from the execution of the upgrade -transaction. - -For each contract listed in the state diff, please verify that no contracts or state changes shown in the Tenderly diff are missing from this document. Additionally, please verify that for each contract: - -- The following state changes (and none others) are made to that contract. This validates that no unexpected state changes occur. -- All addresses (in section headers and storage values) match the provided name, using the Etherscan and Superchain Registry links provided. This validates the bytecode deployed at the addresses contains the correct logic. -- All key values match the semantic meaning provided, which can be validated using the storage layout links provided. - -## State Changes - -### `0xf272670eb55e895584501d564AfEB048bEd26194` (`SystemConfigProxy`) - -- **Key**: `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc` - **Before**: `0x000000000000000000000000ccdd86d581e40fb5a1c77582247bc493b6c8b169` - **After**: `0x00000000000000000000000029d06ed7105c7552efd9f29f3e0d250e5df412cd` - **Meaning**: Updates the `SystemConfig` proxy implementation. diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/base/input.json b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/base/input.json deleted file mode 100644 index f94cd2aaf..000000000 --- a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/base/input.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "chainId": 11155111, - "metadata": { - "name": "Holocene Hardfork - SystemConfig Upgrade", - "description": "Upgrades the `SystemConfig.sol` contract for Holocene." - }, - "transactions": [ - { - "metadata": { - "name": "Upgrade `SystemConfig` proxy", - "description": "Upgrades the `SystemConfig` proxy to the new implementation, featuring configurable EIP-1559 parameters." - }, - "to": "0x0389E59Aa0a41E4A413Ae70f0008e76CAA34b1F3", - "value": "0x0", - "data": "0x99a88ec4000000000000000000000000f272670eb55e895584501d564afeb048bed2619400000000000000000000000029d06ed7105c7552efd9f29f3e0d250e5df412cd", - "contractMethod": { - "type": "function", - "name": "upgrade", - "inputs": [ - { - "name": "_proxy", - "type": "address" - }, - { - "name": "_implementation", - "type": "address" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - "contractInputsValues": { - "_proxy": "0xf272670eb55e895584501d564AfEB048bEd26194", - "_implementation": "0x29d06Ed7105c7552EFD9f29f3e0d250e5df412CD" - } - } - ] -} diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/input.json b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/input.json new file mode 100644 index 000000000..100bdce29 --- /dev/null +++ b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/input.json @@ -0,0 +1,154 @@ +{ + "chainId": 11155111, + "metadata": { + "name": "Holocene Hardfork - SystemConfig Upgrade", + "description": "Upgrades the `SystemConfig.sol` contract for Holocene for Sepolia/{OP,Base,Mode,Metal,Zora}." + }, + "transactions": [ + { + "metadata": { + "name": "Upgrade `SystemConfig` proxy on OP Sepolia", + "description": "Upgrades the `SystemConfig` proxy to the new implementation, featuring configurable EIP-1559 parameters." + }, + "to": "0x189aBAAaa82DfC015A588A7dbaD6F13b1D3485Bc", + "value": "0x0", + "data": "0x99a88ec4000000000000000000000000034edd2a225f7f429a63e0f1d2084b9e0a93b53800000000000000000000000029d06ed7105c7552efd9f29f3e0d250e5df412cd", + "contractMethod": { + "type": "function", + "name": "upgrade", + "inputs": [ + { + "name": "_proxy", + "type": "address" + }, + { + "name": "_implementation", + "type": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + "contractInputsValues": { + "_proxy": "0x034edD2A225f7f429A63E0f1D2084B9E0A93b538", + "_implementation": "0x29d06Ed7105c7552EFD9f29f3e0d250e5df412CD" + } + }, + { + "metadata": { + "name": "Upgrade `SystemConfig` proxy on Mode Sepolia", + "description": "Upgrades the `SystemConfig` proxy to the new implementation, featuring configurable EIP-1559 parameters." + }, + "to": "0xE7413127F29E050Df65ac3FC9335F85bB10091AE", + "value": "0x0", + "data": "0x99a88ec400000000000000000000000015cd4f6e0ce3b4832b33cb9c6f6fe6fc246754c200000000000000000000000029d06ed7105c7552efd9f29f3e0d250e5df412cd", + "contractMethod": { + "type": "function", + "name": "upgrade", + "inputs": [ + { + "name": "_proxy", + "type": "address" + }, + { + "name": "_implementation", + "type": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + "contractInputsValues": { + "_proxy": "0x15cd4f6e0CE3B4832B33cB9c6f6Fe6fc246754c2", + "_implementation": "0x29d06Ed7105c7552EFD9f29f3e0d250e5df412CD" + } + }, + { + "metadata": { + "name": "Upgrade `SystemConfig` proxy on Metal Sepolia", + "description": "Upgrades the `SystemConfig` proxy to the new implementation, featuring configurable EIP-1559 parameters." + }, + "to": "0xF7Bc4b3a78C7Dd8bE9B69B3128EEB0D6776Ce18A", + "value": "0x0", + "data": "0x99a88ec40000000000000000000000005d63a8dc2737ce771aa4a6510d063b6ba2c4f6f200000000000000000000000029d06ed7105c7552efd9f29f3e0d250e5df412cd", + "contractMethod": { + "type": "function", + "name": "upgrade", + "inputs": [ + { + "name": "_proxy", + "type": "address" + }, + { + "name": "_implementation", + "type": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + "contractInputsValues": { + "_proxy": "0x5D63A8Dc2737cE771aa4a6510D063b6Ba2c4f6F2", + "_implementation": "0x29d06Ed7105c7552EFD9f29f3e0d250e5df412CD" + } + }, + { + "metadata": { + "name": "Upgrade `SystemConfig` proxy on Zora Sepolia", + "description": "Upgrades the `SystemConfig` proxy to the new implementation, featuring configurable EIP-1559 parameters." + }, + "to": "0xE17071F4C216Eb189437fbDBCc16Bb79c4efD9c2", + "value": "0x0", + "data": "0x99a88ec4000000000000000000000000b54c7bfc223058773cf9b739cc5bd4095184fb0800000000000000000000000029d06ed7105c7552efd9f29f3e0d250e5df412cd", + "contractMethod": { + "type": "function", + "name": "upgrade", + "inputs": [ + { + "name": "_proxy", + "type": "address" + }, + { + "name": "_implementation", + "type": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + "contractInputsValues": { + "_proxy": "0xB54c7BFC223058773CF9b739cC5bd4095184Fb08", + "_implementation": "0x29d06Ed7105c7552EFD9f29f3e0d250e5df412CD" + } + }, + { + "metadata": { + "name": "Upgrade `SystemConfig` proxy on Base Sepolia", + "description": "Upgrades the `SystemConfig` proxy to the new implementation, featuring configurable EIP-1559 parameters." + }, + "to": "0x0389E59Aa0a41E4A413Ae70f0008e76CAA34b1F3", + "value": "0x0", + "data": "0x99a88ec4000000000000000000000000f272670eb55e895584501d564afeb048bed2619400000000000000000000000029d06ed7105c7552efd9f29f3e0d250e5df412cd", + "contractMethod": { + "type": "function", + "name": "upgrade", + "inputs": [ + { + "name": "_proxy", + "type": "address" + }, + { + "name": "_implementation", + "type": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + "contractInputsValues": { + "_proxy": "0xf272670eb55e895584501d564AfEB048bEd26194", + "_implementation": "0x29d06Ed7105c7552EFD9f29f3e0d250e5df412CD" + } + } + ] +} diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/metal/.env.example b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/metal/.env.example deleted file mode 100644 index ba2beff7f..000000000 --- a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/metal/.env.example +++ /dev/null @@ -1,6 +0,0 @@ -ETH_RPC_URL= -SUPERCHAIN_CONFIG_ADDR= -COUNCIL_SAFE= -FOUNDATION_SAFE= -OWNER_SAFE= -SAFE_NONCE= diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/metal/OVERVIEW.md b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/metal/OVERVIEW.md deleted file mode 100644 index fc7b4ca8c..000000000 --- a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/metal/OVERVIEW.md +++ /dev/null @@ -1,21 +0,0 @@ -# Holocene Hardfork - SystemConfig Upgrade -Upgrades the `SystemConfig.sol` contract for Holocene. - -The batch will be executed on chain ID `11155111`, and contains `1` transactions. - -## Tx #1: Upgrade `SystemConfig` proxy -Upgrades the `SystemConfig` proxy to the new implementation, featuring configurable EIP-1559 parameters. - -**Function Signature:** `upgrade(address,address)` - -**To:** `0xF7Bc4b3a78C7Dd8bE9B69B3128EEB0D6776Ce18A` - -**Value:** `0 WEI` - -**Raw Input Data:** `0x99a88ec40000000000000000000000005d63a8dc2737ce771aa4a6510d063b6ba2c4f6f200000000000000000000000029d06ed7105c7552efd9f29f3e0d250e5df412cd` - -### Inputs -**_proxy:** `0x5D63A8Dc2737cE771aa4a6510D063b6Ba2c4f6F2` - -**_implementation:** `0x29d06Ed7105c7552EFD9f29f3e0d250e5df412CD` - diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/metal/README.md b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/metal/README.md deleted file mode 100644 index 30580e049..000000000 --- a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/metal/README.md +++ /dev/null @@ -1,42 +0,0 @@ -# Holocene Hardfork Upgrade - `SystemConfig` - -Status: DRAFT, NOT READY TO SIGN - -## Objective - -Upgrades the `SystemConfig` for the Holocene hardfork. - -The proposal was: - -- [ ] Posted on the governance forum. -- [ ] Approved by Token House voting. -- [ ] Not vetoed by the Citizens' house. -- [ ] Executed on OP Mainnet. - -The governance proposal should be treated as the source of truth and used to verify the correctness of the onchain operations. - -Governance post of the upgrade can be found at . - -This upgrades the `SystemConfig` in the -[op-contracts/v1.8.0](https://github.com/ethereum-optimism/optimism/tree/op-contracts/v1.8.0-rc.1) release. - -## Pre-deployments - -- `SystemConfig` - `0x29d06Ed7105c7552EFD9f29f3e0d250e5df412CD` - -## Simulation - -Please see the "Simulating and Verifying the Transaction" instructions in [NESTED.md](../../../NESTED.md). -When simulating, ensure the logs say `Using script /your/path/to/superchain-ops/tasks//NestedSignFromJson.s.sol`. -This ensures all safety checks are run. If the default `NestedSignFromJson.s.sol` script is shown (without the full path), something is wrong and the safety checks will not run. - -## State Validation - -Please see the instructions for [validation](./VALIDATION.md). - -## Execution - -This upgrade -* Changes the implementation of the `SystemConfig` to hold EIP-1559 parameters for the - -See the [overview](./OVERVIEW.md) and `input.json` bundle for more details. diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/metal/VALIDATION.md b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/metal/VALIDATION.md deleted file mode 100644 index 7ad25a6df..000000000 --- a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/metal/VALIDATION.md +++ /dev/null @@ -1,19 +0,0 @@ -# Validation - -This document can be used to validate the state diff resulting from the execution of the upgrade -transaction. - -For each contract listed in the state diff, please verify that no contracts or state changes shown in the Tenderly diff are missing from this document. Additionally, please verify that for each contract: - -- The following state changes (and none others) are made to that contract. This validates that no unexpected state changes occur. -- All addresses (in section headers and storage values) match the provided name, using the Etherscan and Superchain Registry links provided. This validates the bytecode deployed at the addresses contains the correct logic. -- All key values match the semantic meaning provided, which can be validated using the storage layout links provided. - -## State Changes - -### `0x5D63A8Dc2737cE771aa4a6510D063b6Ba2c4f6F2` (`SystemConfigProxy`) - -- **Key**: `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc` - **Before**: `0x000000000000000000000000ba2492e52f45651b60b8b38d4ea5e2390c64ffb1` - **After**: `0x00000000000000000000000029d06ed7105c7552efd9f29f3e0d250e5df412cd` - **Meaning**: Updates the `SystemConfig` proxy implementation. diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/metal/input.json b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/metal/input.json deleted file mode 100644 index 88b353e85..000000000 --- a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/metal/input.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "chainId": 11155111, - "metadata": { - "name": "Holocene Hardfork - SystemConfig Upgrade", - "description": "Upgrades the `SystemConfig.sol` contract for Holocene." - }, - "transactions": [ - { - "metadata": { - "name": "Upgrade `SystemConfig` proxy", - "description": "Upgrades the `SystemConfig` proxy to the new implementation, featuring configurable EIP-1559 parameters." - }, - "to": "0xF7Bc4b3a78C7Dd8bE9B69B3128EEB0D6776Ce18A", - "value": "0x0", - "data": "0x99a88ec40000000000000000000000005d63a8dc2737ce771aa4a6510d063b6ba2c4f6f200000000000000000000000029d06ed7105c7552efd9f29f3e0d250e5df412cd", - "contractMethod": { - "type": "function", - "name": "upgrade", - "inputs": [ - { - "name": "_proxy", - "type": "address" - }, - { - "name": "_implementation", - "type": "address" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - "contractInputsValues": { - "_proxy": "0x5D63A8Dc2737cE771aa4a6510D063b6Ba2c4f6F2", - "_implementation": "0x29d06Ed7105c7552EFD9f29f3e0d250e5df412CD" - } - } - ] -} diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/mode/.env.example b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/mode/.env.example deleted file mode 100644 index ba2beff7f..000000000 --- a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/mode/.env.example +++ /dev/null @@ -1,6 +0,0 @@ -ETH_RPC_URL= -SUPERCHAIN_CONFIG_ADDR= -COUNCIL_SAFE= -FOUNDATION_SAFE= -OWNER_SAFE= -SAFE_NONCE= diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/mode/OVERVIEW.md b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/mode/OVERVIEW.md deleted file mode 100644 index 699e97a40..000000000 --- a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/mode/OVERVIEW.md +++ /dev/null @@ -1,21 +0,0 @@ -# Holocene Hardfork - SystemConfig Upgrade -Upgrades the `SystemConfig.sol` contract for Holocene. - -The batch will be executed on chain ID `11155111`, and contains `1` transactions. - -## Tx #1: Upgrade `SystemConfig` proxy -Upgrades the `SystemConfig` proxy to the new implementation, featuring configurable EIP-1559 parameters. - -**Function Signature:** `upgrade(address,address)` - -**To:** `0xE7413127F29E050Df65ac3FC9335F85bB10091AE` - -**Value:** `0 WEI` - -**Raw Input Data:** `0x99a88ec400000000000000000000000015cd4f6e0ce3b4832b33cb9c6f6fe6fc246754c200000000000000000000000029d06ed7105c7552efd9f29f3e0d250e5df412cd` - -### Inputs -**_proxy:** `0x15cd4f6e0CE3B4832B33cB9c6f6Fe6fc246754c2` - -**_implementation:** `0x29d06Ed7105c7552EFD9f29f3e0d250e5df412CD` - diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/mode/VALIDATION.md b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/mode/VALIDATION.md deleted file mode 100644 index 6a722cbac..000000000 --- a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/mode/VALIDATION.md +++ /dev/null @@ -1,19 +0,0 @@ -# Validation - -This document can be used to validate the state diff resulting from the execution of the upgrade -transaction. - -For each contract listed in the state diff, please verify that no contracts or state changes shown in the Tenderly diff are missing from this document. Additionally, please verify that for each contract: - -- The following state changes (and none others) are made to that contract. This validates that no unexpected state changes occur. -- All addresses (in section headers and storage values) match the provided name, using the Etherscan and Superchain Registry links provided. This validates the bytecode deployed at the addresses contains the correct logic. -- All key values match the semantic meaning provided, which can be validated using the storage layout links provided. - -## State Changes - -### `0x15cd4f6e0CE3B4832B33cB9c6f6Fe6fc246754c2` (`SystemConfigProxy`) - -- **Key**: `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc` - **Before**: `0x000000000000000000000000ba2492e52f45651b60b8b38d4ea5e2390c64ffb1` - **After**: `0x00000000000000000000000029d06ed7105c7552efd9f29f3e0d250e5df412cd` - **Meaning**: Updates the `SystemConfig` proxy implementation. diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/mode/input.json b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/mode/input.json deleted file mode 100644 index 10f237508..000000000 --- a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/mode/input.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "chainId": 11155111, - "metadata": { - "name": "Holocene Hardfork - SystemConfig Upgrade", - "description": "Upgrades the `SystemConfig.sol` contract for Holocene." - }, - "transactions": [ - { - "metadata": { - "name": "Upgrade `SystemConfig` proxy", - "description": "Upgrades the `SystemConfig` proxy to the new implementation, featuring configurable EIP-1559 parameters." - }, - "to": "0xE7413127F29E050Df65ac3FC9335F85bB10091AE", - "value": "0x0", - "data": "0x99a88ec400000000000000000000000015cd4f6e0ce3b4832b33cb9c6f6fe6fc246754c200000000000000000000000029d06ed7105c7552efd9f29f3e0d250e5df412cd", - "contractMethod": { - "type": "function", - "name": "upgrade", - "inputs": [ - { - "name": "_proxy", - "type": "address" - }, - { - "name": "_implementation", - "type": "address" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - "contractInputsValues": { - "_proxy": "0x15cd4f6e0CE3B4832B33cB9c6f6Fe6fc246754c2", - "_implementation": "0x29d06Ed7105c7552EFD9f29f3e0d250e5df412CD" - } - } - ] -} diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/op/OVERVIEW.md b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/op/OVERVIEW.md deleted file mode 100644 index a0d93bfc7..000000000 --- a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/op/OVERVIEW.md +++ /dev/null @@ -1,21 +0,0 @@ -# Holocene Hardfork - SystemConfig Upgrade -Upgrades the `SystemConfig.sol` contract for Holocene. - -The batch will be executed on chain ID `11155111`, and contains `1` transactions. - -## Tx #1: Upgrade `SystemConfig` proxy -Upgrades the `SystemConfig` proxy to the new implementation, featuring configurable EIP-1559 parameters. - -**Function Signature:** `upgrade(address,address)` - -**To:** `0x189aBAAaa82DfC015A588A7dbaD6F13b1D3485Bc` - -**Value:** `0 WEI` - -**Raw Input Data:** `0x99a88ec4000000000000000000000000034edd2a225f7f429a63e0f1d2084b9e0a93b53800000000000000000000000029d06ed7105c7552efd9f29f3e0d250e5df412cd` - -### Inputs -**_implementation:** `0x29d06Ed7105c7552EFD9f29f3e0d250e5df412CD` - -**_proxy:** `0x034edD2A225f7f429A63E0f1D2084B9E0A93b538` - diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/op/README.md b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/op/README.md deleted file mode 100644 index 30580e049..000000000 --- a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/op/README.md +++ /dev/null @@ -1,42 +0,0 @@ -# Holocene Hardfork Upgrade - `SystemConfig` - -Status: DRAFT, NOT READY TO SIGN - -## Objective - -Upgrades the `SystemConfig` for the Holocene hardfork. - -The proposal was: - -- [ ] Posted on the governance forum. -- [ ] Approved by Token House voting. -- [ ] Not vetoed by the Citizens' house. -- [ ] Executed on OP Mainnet. - -The governance proposal should be treated as the source of truth and used to verify the correctness of the onchain operations. - -Governance post of the upgrade can be found at . - -This upgrades the `SystemConfig` in the -[op-contracts/v1.8.0](https://github.com/ethereum-optimism/optimism/tree/op-contracts/v1.8.0-rc.1) release. - -## Pre-deployments - -- `SystemConfig` - `0x29d06Ed7105c7552EFD9f29f3e0d250e5df412CD` - -## Simulation - -Please see the "Simulating and Verifying the Transaction" instructions in [NESTED.md](../../../NESTED.md). -When simulating, ensure the logs say `Using script /your/path/to/superchain-ops/tasks//NestedSignFromJson.s.sol`. -This ensures all safety checks are run. If the default `NestedSignFromJson.s.sol` script is shown (without the full path), something is wrong and the safety checks will not run. - -## State Validation - -Please see the instructions for [validation](./VALIDATION.md). - -## Execution - -This upgrade -* Changes the implementation of the `SystemConfig` to hold EIP-1559 parameters for the - -See the [overview](./OVERVIEW.md) and `input.json` bundle for more details. diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/op/VALIDATION.md b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/op/VALIDATION.md deleted file mode 100644 index 107cce7a8..000000000 --- a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/op/VALIDATION.md +++ /dev/null @@ -1,19 +0,0 @@ -# Validation - -This document can be used to validate the state diff resulting from the execution of the upgrade -transaction. - -For each contract listed in the state diff, please verify that no contracts or state changes shown in the Tenderly diff are missing from this document. Additionally, please verify that for each contract: - -- The following state changes (and none others) are made to that contract. This validates that no unexpected state changes occur. -- All addresses (in section headers and storage values) match the provided name, using the Etherscan and Superchain Registry links provided. This validates the bytecode deployed at the addresses contains the correct logic. -- All key values match the semantic meaning provided, which can be validated using the storage layout links provided. - -## State Changes - -### `0x034edD2A225f7f429A63E0f1D2084B9E0A93b538` (`SystemConfigProxy`) - -- **Key**: `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc` - **Before**: `0x000000000000000000000000ccdd86d581e40fb5a1c77582247bc493b6c8b169` - **After**: `0x00000000000000000000000029d06ed7105c7552efd9f29f3e0d250e5df412cd` - **Meaning**: Updates the `SystemConfig` proxy implementation. diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/op/input.json b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/op/input.json deleted file mode 100644 index 09144bc2a..000000000 --- a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/op/input.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "chainId": 11155111, - "metadata": { - "name": "Holocene Hardfork - SystemConfig Upgrade", - "description": "Upgrades the `SystemConfig.sol` contract for Holocene." - }, - "transactions": [ - { - "metadata": { - "name": "Upgrade `SystemConfig` proxy", - "description": "Upgrades the `SystemConfig` proxy to the new implementation, featuring configurable EIP-1559 parameters." - }, - "to": "0x189aBAAaa82DfC015A588A7dbaD6F13b1D3485Bc", - "value": "0x0", - "data": "0x99a88ec4000000000000000000000000034edd2a225f7f429a63e0f1d2084b9e0a93b53800000000000000000000000029d06ed7105c7552efd9f29f3e0d250e5df412cd", - "contractMethod": { - "type": "function", - "name": "upgrade", - "inputs": [ - { - "name": "_proxy", - "type": "address" - }, - { - "name": "_implementation", - "type": "address" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - "contractInputsValues": { - "_proxy": "0x034edD2A225f7f429A63E0f1D2084B9E0A93b538", - "_implementation": "0x29d06Ed7105c7552EFD9f29f3e0d250e5df412CD" - } - } - ] -} diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/zora/.env.example b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/zora/.env.example deleted file mode 100644 index ba2beff7f..000000000 --- a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/zora/.env.example +++ /dev/null @@ -1,6 +0,0 @@ -ETH_RPC_URL= -SUPERCHAIN_CONFIG_ADDR= -COUNCIL_SAFE= -FOUNDATION_SAFE= -OWNER_SAFE= -SAFE_NONCE= diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/zora/OVERVIEW.md b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/zora/OVERVIEW.md deleted file mode 100644 index b6cec6ea2..000000000 --- a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/zora/OVERVIEW.md +++ /dev/null @@ -1,21 +0,0 @@ -# Holocene Hardfork - SystemConfig Upgrade -Upgrades the `SystemConfig.sol` contract for Holocene. - -The batch will be executed on chain ID `11155111`, and contains `1` transactions. - -## Tx #1: Upgrade `SystemConfig` proxy -Upgrades the `SystemConfig` proxy to the new implementation, featuring configurable EIP-1559 parameters. - -**Function Signature:** `upgrade(address,address)` - -**To:** `0xE17071F4C216Eb189437fbDBCc16Bb79c4efD9c2` - -**Value:** `0 WEI` - -**Raw Input Data:** `0x99a88ec4000000000000000000000000b54c7bfc223058773cf9b739cc5bd4095184fb0800000000000000000000000029d06ed7105c7552efd9f29f3e0d250e5df412cd` - -### Inputs -**_proxy:** `0xB54c7BFC223058773CF9b739cC5bd4095184Fb08` - -**_implementation:** `0x29d06Ed7105c7552EFD9f29f3e0d250e5df412CD` - diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/zora/README.md b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/zora/README.md deleted file mode 100644 index 30580e049..000000000 --- a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/zora/README.md +++ /dev/null @@ -1,42 +0,0 @@ -# Holocene Hardfork Upgrade - `SystemConfig` - -Status: DRAFT, NOT READY TO SIGN - -## Objective - -Upgrades the `SystemConfig` for the Holocene hardfork. - -The proposal was: - -- [ ] Posted on the governance forum. -- [ ] Approved by Token House voting. -- [ ] Not vetoed by the Citizens' house. -- [ ] Executed on OP Mainnet. - -The governance proposal should be treated as the source of truth and used to verify the correctness of the onchain operations. - -Governance post of the upgrade can be found at . - -This upgrades the `SystemConfig` in the -[op-contracts/v1.8.0](https://github.com/ethereum-optimism/optimism/tree/op-contracts/v1.8.0-rc.1) release. - -## Pre-deployments - -- `SystemConfig` - `0x29d06Ed7105c7552EFD9f29f3e0d250e5df412CD` - -## Simulation - -Please see the "Simulating and Verifying the Transaction" instructions in [NESTED.md](../../../NESTED.md). -When simulating, ensure the logs say `Using script /your/path/to/superchain-ops/tasks//NestedSignFromJson.s.sol`. -This ensures all safety checks are run. If the default `NestedSignFromJson.s.sol` script is shown (without the full path), something is wrong and the safety checks will not run. - -## State Validation - -Please see the instructions for [validation](./VALIDATION.md). - -## Execution - -This upgrade -* Changes the implementation of the `SystemConfig` to hold EIP-1559 parameters for the - -See the [overview](./OVERVIEW.md) and `input.json` bundle for more details. diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/zora/VALIDATION.md b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/zora/VALIDATION.md deleted file mode 100644 index 7465be251..000000000 --- a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/zora/VALIDATION.md +++ /dev/null @@ -1,19 +0,0 @@ -# Validation - -This document can be used to validate the state diff resulting from the execution of the upgrade -transaction. - -For each contract listed in the state diff, please verify that no contracts or state changes shown in the Tenderly diff are missing from this document. Additionally, please verify that for each contract: - -- The following state changes (and none others) are made to that contract. This validates that no unexpected state changes occur. -- All addresses (in section headers and storage values) match the provided name, using the Etherscan and Superchain Registry links provided. This validates the bytecode deployed at the addresses contains the correct logic. -- All key values match the semantic meaning provided, which can be validated using the storage layout links provided. - -## State Changes - -### `0xB54c7BFC223058773CF9b739cC5bd4095184Fb08` (`SystemConfigProxy`) - -- **Key**: `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc` - **Before**: `0x000000000000000000000000ba2492e52f45651b60b8b38d4ea5e2390c64ffb1` - **After**: `0x00000000000000000000000029d06ed7105c7552efd9f29f3e0d250e5df412cd` - **Meaning**: Updates the `SystemConfig` proxy implementation. diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/zora/input.json b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/zora/input.json deleted file mode 100644 index 5dd17e72d..000000000 --- a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/zora/input.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "chainId": 11155111, - "metadata": { - "name": "Holocene Hardfork - SystemConfig Upgrade", - "description": "Upgrades the `SystemConfig.sol` contract for Holocene." - }, - "transactions": [ - { - "metadata": { - "name": "Upgrade `SystemConfig` proxy", - "description": "Upgrades the `SystemConfig` proxy to the new implementation, featuring configurable EIP-1559 parameters." - }, - "to": "0xE17071F4C216Eb189437fbDBCc16Bb79c4efD9c2", - "value": "0x0", - "data": "0x99a88ec4000000000000000000000000b54c7bfc223058773cf9b739cc5bd4095184fb0800000000000000000000000029d06ed7105c7552efd9f29f3e0d250e5df412cd", - "contractMethod": { - "type": "function", - "name": "upgrade", - "inputs": [ - { - "name": "_proxy", - "type": "address" - }, - { - "name": "_implementation", - "type": "address" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - "contractInputsValues": { - "_proxy": "0xB54c7BFC223058773CF9b739cC5bd4095184Fb08", - "_implementation": "0x29d06Ed7105c7552EFD9f29f3e0d250e5df412CD" - } - } - ] -} From 27b7b50c7de7a32ee91cc539bddd446a6595c63c Mon Sep 17 00:00:00 2001 From: geoknee Date: Tue, 26 Nov 2024 16:40:22 +0000 Subject: [PATCH 04/28] draft solidity validation script --- .../NestedSignFromJson.sol | 67 +++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 tasks/sep/020-holocene-system-config-upgrade-multi-chain/NestedSignFromJson.sol diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/NestedSignFromJson.sol b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/NestedSignFromJson.sol new file mode 100644 index 000000000..55aada763 --- /dev/null +++ b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/NestedSignFromJson.sol @@ -0,0 +1,67 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.15; + +import {NestedSignFromJson as OriginalNestedSignFromJson} from "script/NestedSignFromJson.s.sol"; +import {GnosisSafe} from "safe-contracts/GnosisSafe.sol"; +import {Vm, VmSafe} from "forge-std/Vm.sol"; +import {Simulation} from "@base-contracts/script/universal/Simulation.sol"; +import {console2 as console} from "forge-std/console2.sol"; + +contract NestedSignFromJson is OriginalNestedSignFromJson { + string[5] l2ChainIds = [ + "11155420", // op + "1740", // metal + "919", // mode + "999999999", // zora + "84532" // base + ]; + + address newSystemConfigImplAddress = 0x29d06Ed7105c7552EFD9f29f3e0d250e5df412CD; + + /// @notice Sets up the contract + function setUp() public {} + + /// @notice Checks the correctness of the deployment + function _postCheck(Vm.AccountAccess[] memory accesses, Simulation.Payload memory /* simPayload */ ) + internal + view + override + { + console.log("Running post-deploy assertions"); + checkStateDiff(accesses); + for (uint256 i = 0; i < l2ChainIds.length; i++) { + SystemConfig systemConfigProxy = + SystemConfig(readAddressFromSuperchainRegistry(l2ChainIds[i], "SystemConfigProxy")); + ProxyAdmin opProxyAdmin = ProxyAdmin(readAddressFromSuperchainRegistry(l2ChainIds[i], "ProxyAdmin")); + require(opProxyAdmin.getProxyImplementation(systemConfigProxy) == newSystemConfigImplAddress); + require(systemConfigProxy.Version() == "2.3.0"); + } + + console.log("All assertions passed!"); + } + + function readAddressFromSuperchainRegistry(string memory chainId, string memory contractName) + internal + view + returns (address) + { + string memory addressesJson; + + // Read addresses json + string memory path = "/lib/superchain-registry/superchain/extra/addresses/addresses.json"; + + try vm.readFile(string.concat(vm.projectRoot(), path)) returns (string memory data) { + addressesJson = data; + } catch { + revert(string.concat("Failed to read ", path)); + } + + return stdJson.readAddress(addressesJson, string.concat("$.", chainId, ".", contractName)); + } + + function getAllowedStorageAccess() internal view override returns (address[] memory allowed) {} + + function getCodeExceptions() internal view override returns (address[] memory exceptions) { + // No exceptions are expected in this task, but it must be implemented. + } +} From e473f7d14748413df8ec2982cd3ceee137c080de Mon Sep 17 00:00:00 2001 From: geoknee Date: Tue, 26 Nov 2024 17:25:28 +0000 Subject: [PATCH 05/28] get validation script to compile --- .../NestedSignFromJson.sol | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/NestedSignFromJson.sol b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/NestedSignFromJson.sol index 55aada763..abb8cebfe 100644 --- a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/NestedSignFromJson.sol +++ b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/NestedSignFromJson.sol @@ -6,6 +6,19 @@ import {GnosisSafe} from "safe-contracts/GnosisSafe.sol"; import {Vm, VmSafe} from "forge-std/Vm.sol"; import {Simulation} from "@base-contracts/script/universal/Simulation.sol"; import {console2 as console} from "forge-std/console2.sol"; +import {ProxyAdmin} from "@eth-optimism-bedrock/src/universal/ProxyAdmin.sol"; +import {stdJson} from "forge-std/stdJson.sol"; + +/// @title ISemver +/// @notice ISemver is a simple contract for ensuring that contracts are +/// versioned using semantic versioning. +interface ISemver { + /// @notice Getter for the semantic version of the contract. This is not + /// meant to be used onchain but instead meant to be used by offchain + /// tooling. + /// @return Semver contract version as a string. + function version() external view returns (string memory); +} contract NestedSignFromJson is OriginalNestedSignFromJson { string[5] l2ChainIds = [ @@ -30,11 +43,10 @@ contract NestedSignFromJson is OriginalNestedSignFromJson { console.log("Running post-deploy assertions"); checkStateDiff(accesses); for (uint256 i = 0; i < l2ChainIds.length; i++) { - SystemConfig systemConfigProxy = - SystemConfig(readAddressFromSuperchainRegistry(l2ChainIds[i], "SystemConfigProxy")); + ISemver systemConfigProxy = ISemver(readAddressFromSuperchainRegistry(l2ChainIds[i], "SystemConfigProxy")); ProxyAdmin opProxyAdmin = ProxyAdmin(readAddressFromSuperchainRegistry(l2ChainIds[i], "ProxyAdmin")); - require(opProxyAdmin.getProxyImplementation(systemConfigProxy) == newSystemConfigImplAddress); - require(systemConfigProxy.Version() == "2.3.0"); + require(opProxyAdmin.getProxyImplementation(address(systemConfigProxy)) == newSystemConfigImplAddress); + require(keccak256(abi.encodePacked(systemConfigProxy.version())) == keccak256(abi.encodePacked("2.3.0"))); } console.log("All assertions passed!"); From 6f682b8eab6ba450edea7d6de117067eec01052b Mon Sep 17 00:00:00 2001 From: geoknee Date: Tue, 26 Nov 2024 17:25:40 +0000 Subject: [PATCH 06/28] commit env --- .../sep/020-holocene-system-config-upgrade-multi-chain/.env | 4 ++++ .../.env.example | 6 ------ 2 files changed, 4 insertions(+), 6 deletions(-) create mode 100644 tasks/sep/020-holocene-system-config-upgrade-multi-chain/.env delete mode 100644 tasks/sep/020-holocene-system-config-upgrade-multi-chain/.env.example diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/.env b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/.env new file mode 100644 index 000000000..4a4e63e8a --- /dev/null +++ b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/.env @@ -0,0 +1,4 @@ +ETH_RPC_URL="https://ethereum-sepolia.publicnode.com" +COUNCIL_SAFE=0xf64bc17485f0B4Ea5F06A96514182FC4cB561977 +FOUNDATION_SAFE=0xDEe57160aAfCF04c34C887B5962D0a69676d3C8B +OWNER_SAFE=0x1Eb2fFc903729a0F03966B917003800b145F56E2 diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/.env.example b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/.env.example deleted file mode 100644 index ba2beff7f..000000000 --- a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/.env.example +++ /dev/null @@ -1,6 +0,0 @@ -ETH_RPC_URL= -SUPERCHAIN_CONFIG_ADDR= -COUNCIL_SAFE= -FOUNDATION_SAFE= -OWNER_SAFE= -SAFE_NONCE= From fed0a3852b46db53f80e11389d9921d8fcdd9af0 Mon Sep 17 00:00:00 2001 From: geoknee Date: Tue, 26 Nov 2024 17:37:35 +0000 Subject: [PATCH 07/28] tweaks --- .../NestedSignFromJson.sol | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/NestedSignFromJson.sol b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/NestedSignFromJson.sol index abb8cebfe..b49fa07f6 100644 --- a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/NestedSignFromJson.sol +++ b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/NestedSignFromJson.sol @@ -46,7 +46,7 @@ contract NestedSignFromJson is OriginalNestedSignFromJson { ISemver systemConfigProxy = ISemver(readAddressFromSuperchainRegistry(l2ChainIds[i], "SystemConfigProxy")); ProxyAdmin opProxyAdmin = ProxyAdmin(readAddressFromSuperchainRegistry(l2ChainIds[i], "ProxyAdmin")); require(opProxyAdmin.getProxyImplementation(address(systemConfigProxy)) == newSystemConfigImplAddress); - require(keccak256(abi.encodePacked(systemConfigProxy.version())) == keccak256(abi.encodePacked("2.3.0"))); + require(keccak256(abi.encode(systemConfigProxy.version())) == keccak256(abi.encode("2.3.0"))); } console.log("All assertions passed!"); @@ -71,9 +71,12 @@ contract NestedSignFromJson is OriginalNestedSignFromJson { return stdJson.readAddress(addressesJson, string.concat("$.", chainId, ".", contractName)); } - function getAllowedStorageAccess() internal view override returns (address[] memory allowed) {} + function getAllowedStorageAccess() internal view override returns (address[] memory allowed) { + allowed = new address[](0); + } - function getCodeExceptions() internal view override returns (address[] memory exceptions) { - // No exceptions are expected in this task, but it must be implemented. + function getCodeExceptions() internal pure override returns (address[] memory) { + address[] memory exceptions = new address[](0); + return exceptions; } } From bbc3bc9519f33eb3a286f7407c01f10b72c923ff Mon Sep 17 00:00:00 2001 From: geoknee Date: Tue, 26 Nov 2024 17:43:45 +0000 Subject: [PATCH 08/28] fill out getAllowedStorageAccess --- .../NestedSignFromJson.sol | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/NestedSignFromJson.sol b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/NestedSignFromJson.sol index b49fa07f6..65412f736 100644 --- a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/NestedSignFromJson.sol +++ b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/NestedSignFromJson.sol @@ -31,6 +31,11 @@ contract NestedSignFromJson is OriginalNestedSignFromJson { address newSystemConfigImplAddress = 0x29d06Ed7105c7552EFD9f29f3e0d250e5df412CD; + // Safe contract for this task. + GnosisSafe securityCouncilSafe = GnosisSafe(payable(vm.envAddress("COUNCIL_SAFE"))); + GnosisSafe fndSafe = GnosisSafe(payable(vm.envAddress("FOUNDATION_SAFE"))); + GnosisSafe ownerSafe = GnosisSafe(payable(vm.envAddress("OWNER_SAFE"))); + /// @notice Sets up the contract function setUp() public {} @@ -72,7 +77,15 @@ contract NestedSignFromJson is OriginalNestedSignFromJson { } function getAllowedStorageAccess() internal view override returns (address[] memory allowed) { - allowed = new address[](0); + allowed = new address[](8); + + for (uint256 i = 0; i < l2ChainIds.length; i++) { + address systemConfigProxy = readAddressFromSuperchainRegistry(l2ChainIds[i], "SystemConfigProxy"); + allowed[i] = systemConfigProxy; + } + allowed[5] = address(ownerSafe); + allowed[6] = address(securityCouncilSafe); + allowed[7] = address(fndSafe); } function getCodeExceptions() internal pure override returns (address[] memory) { From 0f70519ad8d9963f0a7e33efa842b1033d8b93d7 Mon Sep 17 00:00:00 2001 From: geoknee Date: Tue, 26 Nov 2024 17:50:20 +0000 Subject: [PATCH 09/28] rename file --- .../{NestedSignFromJson.sol => NestedSignFromJson.s.sol} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename tasks/sep/020-holocene-system-config-upgrade-multi-chain/{NestedSignFromJson.sol => NestedSignFromJson.s.sol} (100%) diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/NestedSignFromJson.sol b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/NestedSignFromJson.s.sol similarity index 100% rename from tasks/sep/020-holocene-system-config-upgrade-multi-chain/NestedSignFromJson.sol rename to tasks/sep/020-holocene-system-config-upgrade-multi-chain/NestedSignFromJson.s.sol From c9a5f9b2ff8cfabd143ef5bc1eabdb0349632b27 Mon Sep 17 00:00:00 2001 From: geoknee Date: Tue, 26 Nov 2024 21:03:31 +0000 Subject: [PATCH 10/28] remove base and fixup validation script note semver expectation --- .../NestedSignFromJson.s.sol | 20 +++++++++---- .../OVERVIEW.md | 19 +----------- .../VALIDATION.md | 7 ----- .../input.json | 29 ------------------- 4 files changed, 15 insertions(+), 60 deletions(-) diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/NestedSignFromJson.s.sol b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/NestedSignFromJson.s.sol index 65412f736..b8e2fc86b 100644 --- a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/NestedSignFromJson.s.sol +++ b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/NestedSignFromJson.s.sol @@ -21,14 +21,15 @@ interface ISemver { } contract NestedSignFromJson is OriginalNestedSignFromJson { - string[5] l2ChainIds = [ + string[4] l2ChainIds = [ "11155420", // op "1740", // metal "919", // mode - "999999999", // zora - "84532" // base + "999999999" // zora ]; + address livenessGuard = 0xc26977310bC89DAee5823C2e2a73195E85382cC7; + address newSystemConfigImplAddress = 0x29d06Ed7105c7552EFD9f29f3e0d250e5df412CD; // Safe contract for this task. @@ -50,8 +51,14 @@ contract NestedSignFromJson is OriginalNestedSignFromJson { for (uint256 i = 0; i < l2ChainIds.length; i++) { ISemver systemConfigProxy = ISemver(readAddressFromSuperchainRegistry(l2ChainIds[i], "SystemConfigProxy")); ProxyAdmin opProxyAdmin = ProxyAdmin(readAddressFromSuperchainRegistry(l2ChainIds[i], "ProxyAdmin")); - require(opProxyAdmin.getProxyImplementation(address(systemConfigProxy)) == newSystemConfigImplAddress); - require(keccak256(abi.encode(systemConfigProxy.version())) == keccak256(abi.encode("2.3.0"))); + require( + opProxyAdmin.getProxyImplementation(address(systemConfigProxy)) == newSystemConfigImplAddress, + "SystemConfigProxy implementation not updated" + ); + require( + keccak256(abi.encode(systemConfigProxy.version())) == keccak256(abi.encode("2.3.0-beta.5")), + "Version not updated" + ); } console.log("All assertions passed!"); @@ -77,7 +84,7 @@ contract NestedSignFromJson is OriginalNestedSignFromJson { } function getAllowedStorageAccess() internal view override returns (address[] memory allowed) { - allowed = new address[](8); + allowed = new address[](9); for (uint256 i = 0; i < l2ChainIds.length; i++) { address systemConfigProxy = readAddressFromSuperchainRegistry(l2ChainIds[i], "SystemConfigProxy"); @@ -86,6 +93,7 @@ contract NestedSignFromJson is OriginalNestedSignFromJson { allowed[5] = address(ownerSafe); allowed[6] = address(securityCouncilSafe); allowed[7] = address(fndSafe); + allowed[8] = livenessGuard; } function getCodeExceptions() internal pure override returns (address[] memory) { diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/OVERVIEW.md b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/OVERVIEW.md index d4c562962..7be328960 100644 --- a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/OVERVIEW.md +++ b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/OVERVIEW.md @@ -1,7 +1,7 @@ # Holocene Hardfork - SystemConfig Upgrade Upgrades the `SystemConfig.sol` contract for Holocene. -The batch will be executed on chain ID `11155111`, and contains `5` transactions. +The batch will be executed on chain ID `11155111`, and contains `4` transactions. ## Tx #1: Upgrade `SystemConfig` proxy for OP Sepolia Upgrades the `SystemConfig` proxy to the new implementation, featuring configurable EIP-1559 parameters. @@ -66,20 +66,3 @@ Upgrades the `SystemConfig` proxy to the new implementation, featuring configura **_proxy:** `0xB54c7BFC223058773CF9b739cC5bd4095184Fb08` **_implementation:** `0x29d06Ed7105c7552EFD9f29f3e0d250e5df412CD` - -## Tx #5: Upgrade `SystemConfig` proxy on Base Sepolia -Upgrades the `SystemConfig` proxy to the new implementation, featuring configurable EIP-1559 parameters. - -**Function Signature:** `upgrade(address,address)` - -**To:** `0x0389E59Aa0a41E4A413Ae70f0008e76CAA34b1F3` - -**Value:** `0 WEI` - -**Raw Input Data:** `0x99a88ec4000000000000000000000000f272670eb55e895584501d564afeb048bed2619400000000000000000000000029d06ed7105c7552efd9f29f3e0d250e5df412cd` - -### Inputs -**_implementation:** `0x29d06Ed7105c7552EFD9f29f3e0d250e5df412CD` - -**_proxy:** `0xf272670eb55e895584501d564AfEB048bEd26194` - diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/VALIDATION.md b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/VALIDATION.md index f06ef1625..65c2dc6d5 100644 --- a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/VALIDATION.md +++ b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/VALIDATION.md @@ -40,10 +40,3 @@ For each contract listed in the state diff, please verify that no contracts or s **Before**: `0x000000000000000000000000ba2492e52f45651b60b8b38d4ea5e2390c64ffb1` **After**: `0x00000000000000000000000029d06ed7105c7552efd9f29f3e0d250e5df412cd` **Meaning**: Updates the `SystemConfig` proxy implementation. - -### `0xf272670eb55e895584501d564AfEB048bEd26194` (`SystemConfigProxy`) for Base Sepolia - -- **Key**: `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc` - **Before**: `0x000000000000000000000000ccdd86d581e40fb5a1c77582247bc493b6c8b169` - **After**: `0x00000000000000000000000029d06ed7105c7552efd9f29f3e0d250e5df412cd` - **Meaning**: Updates the `SystemConfig` proxy implementation. diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/input.json b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/input.json index 100bdce29..629e59907 100644 --- a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/input.json +++ b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/input.json @@ -120,35 +120,6 @@ "_proxy": "0xB54c7BFC223058773CF9b739cC5bd4095184Fb08", "_implementation": "0x29d06Ed7105c7552EFD9f29f3e0d250e5df412CD" } - }, - { - "metadata": { - "name": "Upgrade `SystemConfig` proxy on Base Sepolia", - "description": "Upgrades the `SystemConfig` proxy to the new implementation, featuring configurable EIP-1559 parameters." - }, - "to": "0x0389E59Aa0a41E4A413Ae70f0008e76CAA34b1F3", - "value": "0x0", - "data": "0x99a88ec4000000000000000000000000f272670eb55e895584501d564afeb048bed2619400000000000000000000000029d06ed7105c7552efd9f29f3e0d250e5df412cd", - "contractMethod": { - "type": "function", - "name": "upgrade", - "inputs": [ - { - "name": "_proxy", - "type": "address" - }, - { - "name": "_implementation", - "type": "address" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - "contractInputsValues": { - "_proxy": "0xf272670eb55e895584501d564AfEB048bEd26194", - "_implementation": "0x29d06Ed7105c7552EFD9f29f3e0d250e5df412CD" - } } ] } From 4e2aa1a29a585c90885615f70af48de6cd800278 Mon Sep 17 00:00:00 2001 From: geoknee Date: Wed, 27 Nov 2024 15:12:34 +0000 Subject: [PATCH 11/28] remove unecessary file --- .../OVERVIEW.md | 68 ------------------- 1 file changed, 68 deletions(-) delete mode 100644 tasks/sep/020-holocene-system-config-upgrade-multi-chain/OVERVIEW.md diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/OVERVIEW.md b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/OVERVIEW.md deleted file mode 100644 index 7be328960..000000000 --- a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/OVERVIEW.md +++ /dev/null @@ -1,68 +0,0 @@ -# Holocene Hardfork - SystemConfig Upgrade -Upgrades the `SystemConfig.sol` contract for Holocene. - -The batch will be executed on chain ID `11155111`, and contains `4` transactions. - -## Tx #1: Upgrade `SystemConfig` proxy for OP Sepolia -Upgrades the `SystemConfig` proxy to the new implementation, featuring configurable EIP-1559 parameters. - -**Function Signature:** `upgrade(address,address)` - -**To:** `0x189aBAAaa82DfC015A588A7dbaD6F13b1D3485Bc` - -**Value:** `0 WEI` - -**Raw Input Data:** `0x99a88ec4000000000000000000000000034edd2a225f7f429a63e0f1d2084b9e0a93b53800000000000000000000000029d06ed7105c7552efd9f29f3e0d250e5df412cd` - -### Inputs -**_implementation:** `0x29d06Ed7105c7552EFD9f29f3e0d250e5df412CD` - -**_proxy:** `0x034edD2A225f7f429A63E0f1D2084B9E0A93b538` - -## Tx #2: Upgrade `SystemConfig` proxy on Mode Sepolia -Upgrades the `SystemConfig` proxy to the new implementation, featuring configurable EIP-1559 parameters. - -**Function Signature:** `upgrade(address,address)` - -**To:** `0xE7413127F29E050Df65ac3FC9335F85bB10091AE` - -**Value:** `0 WEI` - -**Raw Input Data:** `0x99a88ec400000000000000000000000015cd4f6e0ce3b4832b33cb9c6f6fe6fc246754c200000000000000000000000029d06ed7105c7552efd9f29f3e0d250e5df412cd` - -### Inputs -**_proxy:** `0x15cd4f6e0CE3B4832B33cB9c6f6Fe6fc246754c2` - -**_implementation:** `0x29d06Ed7105c7552EFD9f29f3e0d250e5df412CD` - -## Tx #3: Upgrade `SystemConfig` proxy on Metal Sepolia -Upgrades the `SystemConfig` proxy to the new implementation, featuring configurable EIP-1559 parameters. - -**Function Signature:** `upgrade(address,address)` - -**To:** `0xF7Bc4b3a78C7Dd8bE9B69B3128EEB0D6776Ce18A` - -**Value:** `0 WEI` - -**Raw Input Data:** `0x99a88ec40000000000000000000000005d63a8dc2737ce771aa4a6510d063b6ba2c4f6f200000000000000000000000029d06ed7105c7552efd9f29f3e0d250e5df412cd` - -### Inputs -**_proxy:** `0x5D63A8Dc2737cE771aa4a6510D063b6Ba2c4f6F2` - -**_implementation:** `0x29d06Ed7105c7552EFD9f29f3e0d250e5df412CD` - -## Tx #4: Upgrade `SystemConfig` proxy on Zora Sepolia -Upgrades the `SystemConfig` proxy to the new implementation, featuring configurable EIP-1559 parameters. - -**Function Signature:** `upgrade(address,address)` - -**To:** `0xE17071F4C216Eb189437fbDBCc16Bb79c4efD9c2` - -**Value:** `0 WEI` - -**Raw Input Data:** `0x99a88ec4000000000000000000000000b54c7bfc223058773cf9b739cc5bd4095184fb0800000000000000000000000029d06ed7105c7552efd9f29f3e0d250e5df412cd` - -### Inputs -**_proxy:** `0xB54c7BFC223058773CF9b739cC5bd4095184Fb08` - -**_implementation:** `0x29d06Ed7105c7552EFD9f29f3e0d250e5df412CD` From 7e1de4404b72274448b7dbd80d4b13c63db21cf3 Mon Sep 17 00:00:00 2001 From: geoknee Date: Wed, 27 Nov 2024 15:12:57 +0000 Subject: [PATCH 12/28] set status to READY TO SIGN --- .../020-holocene-system-config-upgrade-multi-chain/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/README.md b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/README.md index 249d2e3bf..94a3b3527 100644 --- a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/README.md +++ b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/README.md @@ -1,6 +1,6 @@ # Holocene Hardfork Upgrade - `SystemConfig` -Status: DRAFT, NOT READY TO SIGN +Status: READY TO SIGN ## Objective From f7080e0113dda3a00e984f01a822733db0fe6d9f Mon Sep 17 00:00:00 2001 From: geoknee Date: Wed, 27 Nov 2024 16:30:39 +0000 Subject: [PATCH 13/28] change SystemConfig implementation address https://github.com/ethereum-optimism/optimism/issues/13009#issuecomment-2504299652 --- .../NestedSignFromJson.s.sol | 4 ++-- .../README.md | 2 +- .../input.json | 8 ++++---- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/NestedSignFromJson.s.sol b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/NestedSignFromJson.s.sol index b8e2fc86b..adc03ac09 100644 --- a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/NestedSignFromJson.s.sol +++ b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/NestedSignFromJson.s.sol @@ -30,7 +30,7 @@ contract NestedSignFromJson is OriginalNestedSignFromJson { address livenessGuard = 0xc26977310bC89DAee5823C2e2a73195E85382cC7; - address newSystemConfigImplAddress = 0x29d06Ed7105c7552EFD9f29f3e0d250e5df412CD; + address newSystemConfigImplAddress = 0x33b83E4C305c908B2Fc181dDa36e230213058d7d; // Safe contract for this task. GnosisSafe securityCouncilSafe = GnosisSafe(payable(vm.envAddress("COUNCIL_SAFE"))); @@ -56,7 +56,7 @@ contract NestedSignFromJson is OriginalNestedSignFromJson { "SystemConfigProxy implementation not updated" ); require( - keccak256(abi.encode(systemConfigProxy.version())) == keccak256(abi.encode("2.3.0-beta.5")), + keccak256(abi.encode(systemConfigProxy.version())) == keccak256(abi.encode("2.3.0")), "Version not updated" ); } diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/README.md b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/README.md index 94a3b3527..67caf72d0 100644 --- a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/README.md +++ b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/README.md @@ -22,7 +22,7 @@ This upgrades the `SystemConfig` in the ## Pre-deployments -- `SystemConfig` - `0x29d06Ed7105c7552EFD9f29f3e0d250e5df412CD` +- `SystemConfig` - `0x33b83E4C305c908B2Fc181dDa36e230213058d7d` ## Simulation diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/input.json b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/input.json index 629e59907..ea5a1c287 100644 --- a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/input.json +++ b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/input.json @@ -31,7 +31,7 @@ }, "contractInputsValues": { "_proxy": "0x034edD2A225f7f429A63E0f1D2084B9E0A93b538", - "_implementation": "0x29d06Ed7105c7552EFD9f29f3e0d250e5df412CD" + "_implementation": "0x33b83E4C305c908B2Fc181dDa36e230213058d7d" } }, { @@ -60,7 +60,7 @@ }, "contractInputsValues": { "_proxy": "0x15cd4f6e0CE3B4832B33cB9c6f6Fe6fc246754c2", - "_implementation": "0x29d06Ed7105c7552EFD9f29f3e0d250e5df412CD" + "_implementation": "0x33b83E4C305c908B2Fc181dDa36e230213058d7d" } }, { @@ -89,7 +89,7 @@ }, "contractInputsValues": { "_proxy": "0x5D63A8Dc2737cE771aa4a6510D063b6Ba2c4f6F2", - "_implementation": "0x29d06Ed7105c7552EFD9f29f3e0d250e5df412CD" + "_implementation": "0x33b83E4C305c908B2Fc181dDa36e230213058d7d" } }, { @@ -118,7 +118,7 @@ }, "contractInputsValues": { "_proxy": "0xB54c7BFC223058773CF9b739cC5bd4095184Fb08", - "_implementation": "0x29d06Ed7105c7552EFD9f29f3e0d250e5df412CD" + "_implementation": "0x33b83E4C305c908B2Fc181dDa36e230213058d7d" } } ] From 5e8733f45d3f2686a27c1c94609ce694cf8b3c21 Mon Sep 17 00:00:00 2001 From: geoknee Date: Wed, 27 Nov 2024 17:13:51 +0000 Subject: [PATCH 14/28] update calldata with new sys cfg impl addr --- .../VALIDATION.md | 8 ++++---- .../input.json | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/VALIDATION.md b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/VALIDATION.md index 65c2dc6d5..ad65cb38b 100644 --- a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/VALIDATION.md +++ b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/VALIDATION.md @@ -15,7 +15,7 @@ For each contract listed in the state diff, please verify that no contracts or s - **Key**: `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc` **Before**: `0x000000000000000000000000ccdd86d581e40fb5a1c77582247bc493b6c8b169` - **After**: `0x00000000000000000000000029d06ed7105c7552efd9f29f3e0d250e5df412cd` + **After**: `0x00000000000000000000000033b83E4C305c908B2Fc181dDa36e230213058d7d` **Meaning**: Updates the `SystemConfig` proxy implementation. @@ -23,7 +23,7 @@ For each contract listed in the state diff, please verify that no contracts or s - **Key**: `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc` **Before**: `0x000000000000000000000000ba2492e52f45651b60b8b38d4ea5e2390c64ffb1` - **After**: `0x00000000000000000000000029d06ed7105c7552efd9f29f3e0d250e5df412cd` + **After**: `0x00000000000000000000000033b83E4C305c908B2Fc181dDa36e230213058d7d` **Meaning**: Updates the `SystemConfig` proxy implementation. @@ -31,12 +31,12 @@ For each contract listed in the state diff, please verify that no contracts or s - **Key**: `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc` **Before**: `0x000000000000000000000000ba2492e52f45651b60b8b38d4ea5e2390c64ffb1` - **After**: `0x00000000000000000000000029d06ed7105c7552efd9f29f3e0d250e5df412cd` + **After**: `0x00000000000000000000000033b83E4C305c908B2Fc181dDa36e230213058d7d` **Meaning**: Updates the `SystemConfig` proxy implementation. ### `0xB54c7BFC223058773CF9b739cC5bd4095184Fb08` (`SystemConfigProxy`) for Zora Sepolia - **Key**: `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc` **Before**: `0x000000000000000000000000ba2492e52f45651b60b8b38d4ea5e2390c64ffb1` - **After**: `0x00000000000000000000000029d06ed7105c7552efd9f29f3e0d250e5df412cd` + **After**: `0x00000000000000000000000033b83E4C305c908B2Fc181dDa36e230213058d7d` **Meaning**: Updates the `SystemConfig` proxy implementation. diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/input.json b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/input.json index ea5a1c287..9b6448f0f 100644 --- a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/input.json +++ b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/input.json @@ -12,7 +12,7 @@ }, "to": "0x189aBAAaa82DfC015A588A7dbaD6F13b1D3485Bc", "value": "0x0", - "data": "0x99a88ec4000000000000000000000000034edd2a225f7f429a63e0f1d2084b9e0a93b53800000000000000000000000029d06ed7105c7552efd9f29f3e0d250e5df412cd", + "data": "0x99a88ec4000000000000000000000000034edd2a225f7f429a63e0f1d2084b9e0a93b53800000000000000000000000033b83E4C305c908B2Fc181dDa36e230213058d7d", "contractMethod": { "type": "function", "name": "upgrade", @@ -41,7 +41,7 @@ }, "to": "0xE7413127F29E050Df65ac3FC9335F85bB10091AE", "value": "0x0", - "data": "0x99a88ec400000000000000000000000015cd4f6e0ce3b4832b33cb9c6f6fe6fc246754c200000000000000000000000029d06ed7105c7552efd9f29f3e0d250e5df412cd", + "data": "0x99a88ec400000000000000000000000015cd4f6e0ce3b4832b33cb9c6f6fe6fc246754c200000000000000000000000033b83E4C305c908B2Fc181dDa36e230213058d7d", "contractMethod": { "type": "function", "name": "upgrade", @@ -70,7 +70,7 @@ }, "to": "0xF7Bc4b3a78C7Dd8bE9B69B3128EEB0D6776Ce18A", "value": "0x0", - "data": "0x99a88ec40000000000000000000000005d63a8dc2737ce771aa4a6510d063b6ba2c4f6f200000000000000000000000029d06ed7105c7552efd9f29f3e0d250e5df412cd", + "data": "0x99a88ec40000000000000000000000005d63a8dc2737ce771aa4a6510d063b6ba2c4f6f200000000000000000000000033b83E4C305c908B2Fc181dDa36e230213058d7d", "contractMethod": { "type": "function", "name": "upgrade", @@ -99,7 +99,7 @@ }, "to": "0xE17071F4C216Eb189437fbDBCc16Bb79c4efD9c2", "value": "0x0", - "data": "0x99a88ec4000000000000000000000000b54c7bfc223058773cf9b739cc5bd4095184fb0800000000000000000000000029d06ed7105c7552efd9f29f3e0d250e5df412cd", + "data": "0x99a88ec4000000000000000000000000b54c7bfc223058773cf9b739cc5bd4095184fb0800000000000000000000000033b83E4C305c908B2Fc181dDa36e230213058d7d", "contractMethod": { "type": "function", "name": "upgrade", From 04b6e5e4f865b5cb5fb1e0c629e1acb5c05c23b8 Mon Sep 17 00:00:00 2001 From: George Knee Date: Wed, 27 Nov 2024 17:18:26 +0000 Subject: [PATCH 15/28] Apply suggestions from code review Co-authored-by: Ethnical Co-authored-by: Matt Solomon --- .../020-holocene-system-config-upgrade-multi-chain/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/README.md b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/README.md index 67caf72d0..d6f856fdd 100644 --- a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/README.md +++ b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/README.md @@ -17,7 +17,7 @@ The governance proposal should be treated as the source of truth and used to ver Governance post of the upgrade can be found at . -This upgrades the `SystemConfig` in the +This upgrades the [`SystemConfig`](https://github.com/ethereum-optimism/optimism/blob/op-contracts/v1.8.0-rc.3/packages/contracts-bedrock/src/L1/SystemConfig.sol) in the [op-contracts/v1.8.0](https://github.com/ethereum-optimism/optimism/tree/op-contracts/v1.8.0-rc.1) release. ## Pre-deployments @@ -27,7 +27,7 @@ This upgrades the `SystemConfig` in the ## Simulation Please see the "Simulating and Verifying the Transaction" instructions in [NESTED.md](../../../NESTED.md). -When simulating, ensure the logs say `Using script /your/path/to/superchain-ops/tasks//NestedSignFromJson.s.sol`. +When simulating, ensure the logs say `Using script /your/path/to/superchain-ops/tasks/sep/020-holocene-system-config-upgrade-multi-chain/NestedSignFromJson.s.sol`. This ensures all safety checks are run. If the default `NestedSignFromJson.s.sol` script is shown (without the full path), something is wrong and the safety checks will not run. ## State Validation From 56557e537bb6f4a5306225dd3b8a3855836eff4e Mon Sep 17 00:00:00 2001 From: geoknee Date: Wed, 27 Nov 2024 21:26:03 +0000 Subject: [PATCH 16/28] complete sentence with gov proposal wording --- .../README.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/README.md b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/README.md index d6f856fdd..6d0d3eb0f 100644 --- a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/README.md +++ b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/README.md @@ -36,7 +36,8 @@ Please see the instructions for [validation](./VALIDATION.md). ## Execution -This upgrade -* Changes the implementation of the `SystemConfig` to hold EIP-1559 parameters for the +The SystemConfig L1 contract will get upgraded to version 2.3.0, which is part of the OP Contracts v1.8.0-rc.3 release. The upgrade will happen after the Holocene activation. The upgraded SystemConfig enables chain operators to update the EIP-1559 parameters via a new function setEIP1559Params. -See the [overview](./OVERVIEW.md) and `input.json` bundle for more details. +th + +See the `input.json` bundle for more details. From 1c0d8361191d81adff967d9b41a947b2305070cf Mon Sep 17 00:00:00 2001 From: geoknee Date: Thu, 28 Nov 2024 13:21:13 +0000 Subject: [PATCH 17/28] add state overrides and nonce changes to validation.md --- .../VALIDATION.md | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/VALIDATION.md b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/VALIDATION.md index ad65cb38b..a6f76c681 100644 --- a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/VALIDATION.md +++ b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/VALIDATION.md @@ -9,6 +9,53 @@ For each contract listed in the state diff, please verify that no contracts or s - All addresses (in section headers and storage values) match the provided name, using the Etherscan and Superchain Registry links provided. This validates the bytecode deployed at the addresses contains the correct logic. - All key values match the semantic meaning provided, which can be validated using the storage layout links provided. +## State Overrides + +The following state overrides should be seen: + +### `0x1Eb2fFc903729a0F03966B917003800b145F56E2` (The 2/2 `ProxyAdmin` Owner) + +Links: +- [Etherscan](https://sepolia.etherscan.io/address/0x1Eb2fFc903729a0F03966B917003800b145F56E2) + +Enables the simulation by setting the threshold to 1: + +- **Key:** `0x0000000000000000000000000000000000000000000000000000000000000004`
+ **Value:** `0x0000000000000000000000000000000000000000000000000000000000000001` + +### `0xf64bc17485f0B4Ea5F06A96514182FC4cB561977` (Council Safe) or `0xDEe57160aAfCF04c34C887B5962D0a69676d3C8B` (Foundation Safe) + +Links: +- [Etherscan (Council Safe)](https://sepolia.etherscan.io/address/0xf64bc17485f0B4Ea5F06A96514182FC4cB561977). This address is attested to in the [Optimism docs](https://docs.optimism.io/chain/security/privileged-roles#l1-proxy-admin), as it's one of the signers of the L1 Proxy Admin owner. +- [Etherscan (Foundation Safe)](https://sepolia.etherscan.io/address/0xDEe57160aAfCF04c34C887B5962D0a69676d3C8B). This address is attested to in the [Optimism docs](https://docs.optimism.io/chain/security/privileged-roles#l1-proxy-admin), as it's one of the signers of the L1 Proxy Admin owner. + +The Safe you are signing for will have the following overrides which will set the [Multicall](https://sepolia.etherscan.io/address/0xca11bde05977b3631167028862be2a173976ca11#code) contract as the sole owner of the signing safe. This allows simulating both the approve hash and the final tx in a single Tenderly tx. + +- **Key:** 0x0000000000000000000000000000000000000000000000000000000000000003
+ **Value:** 0x0000000000000000000000000000000000000000000000000000000000000001
+ **Meaning:** The number of owners is set to 1. + +- **Key:** 0x0000000000000000000000000000000000000000000000000000000000000004
+ **Value:** 0x0000000000000000000000000000000000000000000000000000000000000001
+ **Meaning:** The threshold is set to 1. + +The following two overrides are modifications to the [`owners` mapping](https://github.com/safe-global/safe-contracts/blob/v1.4.0/contracts/libraries/SafeStorage.sol#L15). For the purpose of calculating the storage, note that this mapping is in slot `2`. +This mapping implements a linked list for iterating through the list of owners. Since we'll only have one owner (Multicall), and the `0x01` address is used as the first and last entry in the linked list, we will see the following overrides: +- `owners[1] -> 0xca11bde05977b3631167028862be2a173976ca11` +- `owners[0xca11bde05977b3631167028862be2a173976ca11] -> 1` + +And we do indeed see these entries: + +- **Key:** 0x316a0aac0d94f5824f0b66f5bbe94a8c360a17699a1d3a233aafcf7146e9f11c
+ **Value:** 0x0000000000000000000000000000000000000000000000000000000000000001
+ **Meaning:** This is `owners[0xca11bde05977b3631167028862be2a173976ca11] -> 1`, so the key can be + derived from `cast index address 0xca11bde05977b3631167028862be2a173976ca11 2`. + +- **Key:** 0xe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e0
+ **Value:** 0x000000000000000000000000ca11bde05977b3631167028862be2a173976ca11
+ **Meaning:** This is `owners[1] -> 0xca11bde05977b3631167028862be2a173976ca11`, so the key can be + derived from `cast index address 0x0000000000000000000000000000000000000001 2`. + ## State Changes ### `0x034edD2A225f7f429A63E0f1D2084B9E0A93b538` (`SystemConfigProxy`) for OP Sepolia @@ -40,3 +87,11 @@ For each contract listed in the state diff, please verify that no contracts or s **Before**: `0x000000000000000000000000ba2492e52f45651b60b8b38d4ea5e2390c64ffb1` **After**: `0x00000000000000000000000033b83E4C305c908B2Fc181dDa36e230213058d7d` **Meaning**: Updates the `SystemConfig` proxy implementation. + +### Nonce increments + +The only other state changes are two nonce increments: + +- One on the Foundation Upgrade Safe (`0xDEe57160aAfCF04c34C887B5962D0a69676d3C8B`). If this is not decoded, it corresponds to key `0x05` on a `GnosisSafeProxy`. +- One on the owner on the account that sent the transaction. + From 7bad1303d6bd722ed54f0fd3904c90582f2886ee Mon Sep 17 00:00:00 2001 From: geoknee Date: Thu, 28 Nov 2024 13:27:01 +0000 Subject: [PATCH 18/28] add approvedHashes sections to validation.md --- .../VALIDATION.md | 54 +++++++++++++++++-- 1 file changed, 51 insertions(+), 3 deletions(-) diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/VALIDATION.md b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/VALIDATION.md index a6f76c681..6b96cf274 100644 --- a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/VALIDATION.md +++ b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/VALIDATION.md @@ -88,10 +88,58 @@ And we do indeed see these entries: **After**: `0x00000000000000000000000033b83E4C305c908B2Fc181dDa36e230213058d7d` **Meaning**: Updates the `SystemConfig` proxy implementation. + ### For the Council: + +- **Key:** `0x3481a62ac310eecec9b2bcbdfc7f9759c1641b33ec9f302e19c8dc75aa3427bb`
+ **Before:** `0x0000000000000000000000000000000000000000000000000000000000000000`
+ **After:** `0x0000000000000000000000000000000000000000000000000000000000000001`
+ **Meaning:** The GnosisSafe `approvedHashes` mapping is updated to indicate approval of this transaction by the council. The correctness of this slot can be verified as follows: + - Since this is a nested mapping, we need to use `cast index` twice to confirm that this is the correct slot. The inputs needed are: + - The location (`8`) of the `approvedHashes` mapping in the [GnosisSafe storage layout](https://github.com/safe-global/safe-contracts/blob/v1.4.0/contracts/libraries/SafeStorage.sol#L23) + - The address of the Council Safe: `0xf64bc17485f0B4Ea5F06A96514182FC4cB561977` + - The safe hash to approve: `0x7e8055d58462ab08d75766766252966eda91b23097f8d96aca0547fe7aae078a` + - The using `cast index`, we can verify that: + ```shell + $ cast index address 0xf64bc17485f0B4Ea5F06A96514182FC4cB561977 8 + 0x56362ae34e37f50105bd722d564a267a69bbc15ede4cb7136e81afd747b41c4d + ``` + and + ```shell + $ cast index bytes32 0x7e8055d58462ab08d75766766252966eda91b23097f8d96aca0547fe7aae078a 0x56362ae34e37f50105bd722d564a267a69bbc15ede4cb7136e81afd747b41c4d + 0x3481a62ac310eecec9b2bcbdfc7f9759c1641b33ec9f302e19c8dc75aa3427bb + ``` + And so the output of the second command matches the key above. + +### For the Foundation: + +- **Key:** `0x66833911cd4988ff9068991368a392dfd91753075a1080eee9ac5b6bf6a4815b`
+ **Before:** `0x0000000000000000000000000000000000000000000000000000000000000000`
+ **After:** `0x0000000000000000000000000000000000000000000000000000000000000001`
+ **Meaning:** The GnosisSafe `approvedHashes` mapping is updated to indicate approval of this transaction by the council. The correctness of this slot can be verified as follows: + - Since this is a nested mapping, we need to use `cast index` twice to confirm that this is the correct slot. The inputs needed are: + - The location (`8`) of the `approvedHashes` mapping in the [GnosisSafe storage layout](https://github.com/safe-global/safe-contracts/blob/v1.4.0/contracts/libraries/SafeStorage.sol#L23) + - The address of the Foundation Safe: `0xDEe57160aAfCF04c34C887B5962D0a69676d3C8B` + - The safe hash to approve: `0x7e8055d58462ab08d75766766252966eda91b23097f8d96aca0547fe7aae078a` + - The using `cast index`, we can verify that: + ```shell + $ cast index address 0xDEe57160aAfCF04c34C887B5962D0a69676d3C8B 8 + 0xc18fefc0a6b81265cf06017c3f1f91c040dc3227321d73c608cfbcf1c5253e5c + ``` + and + ```shell + $ cast index bytes32 0x7e8055d58462ab08d75766766252966eda91b23097f8d96aca0547fe7aae078a 0xc18fefc0a6b81265cf06017c3f1f91c040dc3227321d73c608cfbcf1c5253e5c + 0x66833911cd4988ff9068991368a392dfd91753075a1080eee9ac5b6bf6a4815b + ``` + And so the output of the second command matches the key above. + + ### Nonce increments -The only other state changes are two nonce increments: +The only other state change are two nonce increments: + +- One on the Council or Foundation safe (`0xDEe57160aAfCF04c34C887B5962D0a69676d3C8B` for Foundation and `0xf64bc17485f0B4Ea5F06A96514182FC4cB561977` for Council). If this is not decoded, it corresponds to key `0x05` on a `GnosisSafeProxy`. +- One on the owner on the safe that sent the transaction. + + -- One on the Foundation Upgrade Safe (`0xDEe57160aAfCF04c34C887B5962D0a69676d3C8B`). If this is not decoded, it corresponds to key `0x05` on a `GnosisSafeProxy`. -- One on the owner on the account that sent the transaction. From ef832c941cd992dd97866a766510e7fad2bde1e7 Mon Sep 17 00:00:00 2001 From: geoknee Date: Thu, 28 Nov 2024 13:28:58 +0000 Subject: [PATCH 19/28] add liveness guard section to validation.md --- .../VALIDATION.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/VALIDATION.md b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/VALIDATION.md index 6b96cf274..c95053f6b 100644 --- a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/VALIDATION.md +++ b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/VALIDATION.md @@ -132,6 +132,11 @@ And we do indeed see these entries: ``` And so the output of the second command matches the key above. +### Liveness Guard +**Key:** `0x4a204f620c8c5ccdca3fd54d003badd85ba500436a431f0cbda4f558c93c34c8`
+**Before:** `0x0000000000000000000000000000000000000000000000000000000000000000`
+**After:** `0x000000000000000000000000c26977310bc89daee5823c2e2a73195e85382cc7`
+**Meaning:** The `LivenessGuard` address is set to [0xc26977310bC89DAee5823C2e2a73195E85382cC7](https://sepolia.etherscan.io/address/0xc26977310bC89DAee5823C2e2a73195E85382cC7). The key can be validated by the key in the [Guard Manager](https://github.com/safe-global/safe-contracts/blob/v1.3.0/contracts/base/GuardManager.sol#L30). ### Nonce increments From 19d9e21bee7a88c76e8fb76b4f230e3cc310d82f Mon Sep 17 00:00:00 2001 From: geoknee Date: Thu, 28 Nov 2024 13:31:45 +0000 Subject: [PATCH 20/28] load livenessGuard from storage --- .../NestedSignFromJson.s.sol | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/NestedSignFromJson.s.sol b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/NestedSignFromJson.s.sol index adc03ac09..5cb2373f7 100644 --- a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/NestedSignFromJson.s.sol +++ b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/NestedSignFromJson.s.sol @@ -28,7 +28,9 @@ contract NestedSignFromJson is OriginalNestedSignFromJson { "999999999" // zora ]; - address livenessGuard = 0xc26977310bC89DAee5823C2e2a73195E85382cC7; + // The slot used to store the livenessGuard address in GnosisSafe. + // See https://github.com/safe-global/safe-smart-account/blob/186a21a74b327f17fc41217a927dea7064f74604/contracts/base/GuardManager.sol#L30 + bytes32 livenessGuardSlot = 0x4a204f620c8c5ccdca3fd54d003badd85ba500436a431f0cbda4f558c93c34c8; address newSystemConfigImplAddress = 0x33b83E4C305c908B2Fc181dDa36e230213058d7d; @@ -84,6 +86,8 @@ contract NestedSignFromJson is OriginalNestedSignFromJson { } function getAllowedStorageAccess() internal view override returns (address[] memory allowed) { + address livenessGuard = address(uint160(uint256(vm.load(address(securityCouncilSafe), livenessGuardSlot)))); + allowed = new address[](9); for (uint256 i = 0; i < l2ChainIds.length; i++) { From 4413fb5f4ebec49179cc9f6c55410ece310cc85e Mon Sep 17 00:00:00 2001 From: geoknee Date: Thu, 28 Nov 2024 13:42:23 +0000 Subject: [PATCH 21/28] add checkProxyAdminOwnerSafe fn --- .../NestedSignFromJson.s.sol | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/NestedSignFromJson.s.sol b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/NestedSignFromJson.s.sol index 5cb2373f7..18437c287 100644 --- a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/NestedSignFromJson.s.sol +++ b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/NestedSignFromJson.s.sol @@ -37,11 +37,23 @@ contract NestedSignFromJson is OriginalNestedSignFromJson { // Safe contract for this task. GnosisSafe securityCouncilSafe = GnosisSafe(payable(vm.envAddress("COUNCIL_SAFE"))); GnosisSafe fndSafe = GnosisSafe(payable(vm.envAddress("FOUNDATION_SAFE"))); - GnosisSafe ownerSafe = GnosisSafe(payable(vm.envAddress("OWNER_SAFE"))); + GnosisSafe ownerSafe = GnosisSafe(payable(vm.envAddress("OWNER_SAFE"))); // ProxyAdminOwner /// @notice Sets up the contract function setUp() public {} + function checkProxyAdminOwnerSafe(string memory l2ChainId) internal view { + ProxyAdmin proxyAdmin = ProxyAdmin(readAddressFromSuperchainRegistry(l2ChainId, "ProxyAdmin")); + + address proxyAdminOwner = proxyAdmin.owner(); + require(proxyAdminOwner == address(ownerSafe), "checkProxyAdminOwnerSafe-260"); + + address[] memory owners = ownerSafe.getOwners(); + require(owners.length == 2, "checkProxyAdminOwnerSafe-270"); + require(ownerSafe.isOwner(address(fndSafe)), "checkProxyAdminOwnerSafe-300"); + require(ownerSafe.isOwner(address(securityCouncilSafe)), "checkProxyAdminOwnerSafe-400"); + } + /// @notice Checks the correctness of the deployment function _postCheck(Vm.AccountAccess[] memory accesses, Simulation.Payload memory /* simPayload */ ) internal @@ -51,10 +63,11 @@ contract NestedSignFromJson is OriginalNestedSignFromJson { console.log("Running post-deploy assertions"); checkStateDiff(accesses); for (uint256 i = 0; i < l2ChainIds.length; i++) { + checkProxyAdminOwnerSafe(l2ChainIds[i]); ISemver systemConfigProxy = ISemver(readAddressFromSuperchainRegistry(l2ChainIds[i], "SystemConfigProxy")); - ProxyAdmin opProxyAdmin = ProxyAdmin(readAddressFromSuperchainRegistry(l2ChainIds[i], "ProxyAdmin")); + ProxyAdmin proxyAdmin = ProxyAdmin(readAddressFromSuperchainRegistry(l2ChainIds[i], "ProxyAdmin")); require( - opProxyAdmin.getProxyImplementation(address(systemConfigProxy)) == newSystemConfigImplAddress, + proxyAdmin.getProxyImplementation(address(systemConfigProxy)) == newSystemConfigImplAddress, "SystemConfigProxy implementation not updated" ); require( From e95ac21dfb78adf8bbdc9f61e2aeefafaa52b7d8 Mon Sep 17 00:00:00 2001 From: geoknee Date: Thu, 28 Nov 2024 13:45:11 +0000 Subject: [PATCH 22/28] rename variables for clarity --- .../NestedSignFromJson.s.sol | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/NestedSignFromJson.s.sol b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/NestedSignFromJson.s.sol index 18437c287..5eeec2f80 100644 --- a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/NestedSignFromJson.s.sol +++ b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/NestedSignFromJson.s.sol @@ -37,21 +37,21 @@ contract NestedSignFromJson is OriginalNestedSignFromJson { // Safe contract for this task. GnosisSafe securityCouncilSafe = GnosisSafe(payable(vm.envAddress("COUNCIL_SAFE"))); GnosisSafe fndSafe = GnosisSafe(payable(vm.envAddress("FOUNDATION_SAFE"))); - GnosisSafe ownerSafe = GnosisSafe(payable(vm.envAddress("OWNER_SAFE"))); // ProxyAdminOwner + GnosisSafe proxyAdminOwnerSafe = GnosisSafe(payable(vm.envAddress("OWNER_SAFE"))); /// @notice Sets up the contract function setUp() public {} - function checkProxyAdminOwnerSafe(string memory l2ChainId) internal view { + function checkProxyAdminproxyAdminOwnerSafe(string memory l2ChainId) internal view { ProxyAdmin proxyAdmin = ProxyAdmin(readAddressFromSuperchainRegistry(l2ChainId, "ProxyAdmin")); address proxyAdminOwner = proxyAdmin.owner(); - require(proxyAdminOwner == address(ownerSafe), "checkProxyAdminOwnerSafe-260"); + require(proxyAdminOwner == address(proxyAdminOwnerSafe), "checkProxyAdminproxyAdminOwnerSafe-260"); - address[] memory owners = ownerSafe.getOwners(); - require(owners.length == 2, "checkProxyAdminOwnerSafe-270"); - require(ownerSafe.isOwner(address(fndSafe)), "checkProxyAdminOwnerSafe-300"); - require(ownerSafe.isOwner(address(securityCouncilSafe)), "checkProxyAdminOwnerSafe-400"); + address[] memory owners = proxyAdminOwnerSafe.getOwners(); + require(owners.length == 2, "checkProxyAdminproxyAdminOwnerSafe-270"); + require(proxyAdminOwnerSafe.isOwner(address(fndSafe)), "checkProxyAdminproxyAdminOwnerSafe-300"); + require(proxyAdminOwnerSafe.isOwner(address(securityCouncilSafe)), "checkProxyAdminproxyAdminOwnerSafe-400"); } /// @notice Checks the correctness of the deployment @@ -63,7 +63,7 @@ contract NestedSignFromJson is OriginalNestedSignFromJson { console.log("Running post-deploy assertions"); checkStateDiff(accesses); for (uint256 i = 0; i < l2ChainIds.length; i++) { - checkProxyAdminOwnerSafe(l2ChainIds[i]); + checkProxyAdminproxyAdminOwnerSafe(l2ChainIds[i]); ISemver systemConfigProxy = ISemver(readAddressFromSuperchainRegistry(l2ChainIds[i], "SystemConfigProxy")); ProxyAdmin proxyAdmin = ProxyAdmin(readAddressFromSuperchainRegistry(l2ChainIds[i], "ProxyAdmin")); require( @@ -107,7 +107,7 @@ contract NestedSignFromJson is OriginalNestedSignFromJson { address systemConfigProxy = readAddressFromSuperchainRegistry(l2ChainIds[i], "SystemConfigProxy"); allowed[i] = systemConfigProxy; } - allowed[5] = address(ownerSafe); + allowed[5] = address(proxyAdminOwnerSafe); allowed[6] = address(securityCouncilSafe); allowed[7] = address(fndSafe); allowed[8] = livenessGuard; From 4c735c6d5f0bb5ac990fb021a89d0f03e276b346 Mon Sep 17 00:00:00 2001 From: geoknee Date: Thu, 28 Nov 2024 13:47:24 +0000 Subject: [PATCH 23/28] clarify that this is testnet, so no gov proposal etc. --- .../README.md | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/README.md b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/README.md index 6d0d3eb0f..8c2e189dd 100644 --- a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/README.md +++ b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/README.md @@ -4,18 +4,14 @@ Status: READY TO SIGN ## Objective -Upgrades the `SystemConfig` for the Holocene hardfork for Sepolia/{OP,Mode,Metal,Zora,Base} +Upgrades the `SystemConfig` for the Holocene hardfork for Sepolia/{OP,Mode,Metal,Zora,Base}. The proposal was: -- [ ] Posted on the governance forum. -- [ ] Approved by Token House voting. -- [ ] Not vetoed by the Citizens' house. -- [ ] Executed on OP Mainnet. - -The governance proposal should be treated as the source of truth and used to verify the correctness of the onchain operations. - -Governance post of the upgrade can be found at . +- [ ] ~~Posted on the governance forum.~~ (Not applicable, as this is a set of testnet upgrades) +- [ ] ~~Approved by Token House voting.~~ (Not applicable, as this is a set of testnet upgrades) +- [ ] ~~Not vetoed by the Citizens' house.~~ (Not applicable, as this is a set of testnet upgrades) +- [ ] Executed on Sepolia. This upgrades the [`SystemConfig`](https://github.com/ethereum-optimism/optimism/blob/op-contracts/v1.8.0-rc.3/packages/contracts-bedrock/src/L1/SystemConfig.sol) in the [op-contracts/v1.8.0](https://github.com/ethereum-optimism/optimism/tree/op-contracts/v1.8.0-rc.1) release. From 4bf34f1924ec3241674103d41fc076a54551edd5 Mon Sep 17 00:00:00 2001 From: geoknee Date: Thu, 28 Nov 2024 13:48:25 +0000 Subject: [PATCH 24/28] typo --- .../020-holocene-system-config-upgrade-multi-chain/README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/README.md b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/README.md index 8c2e189dd..5054e73e9 100644 --- a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/README.md +++ b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/README.md @@ -34,6 +34,4 @@ Please see the instructions for [validation](./VALIDATION.md). The SystemConfig L1 contract will get upgraded to version 2.3.0, which is part of the OP Contracts v1.8.0-rc.3 release. The upgrade will happen after the Holocene activation. The upgraded SystemConfig enables chain operators to update the EIP-1559 parameters via a new function setEIP1559Params. -th - See the `input.json` bundle for more details. From 0726e80299d23a023cfe0c20bc19f6a0adc86fdf Mon Sep 17 00:00:00 2001 From: geoknee Date: Thu, 28 Nov 2024 16:23:43 +0000 Subject: [PATCH 25/28] update section on liveness guard --- .../VALIDATION.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/VALIDATION.md b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/VALIDATION.md index c95053f6b..b1d87e6fb 100644 --- a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/VALIDATION.md +++ b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/VALIDATION.md @@ -133,10 +133,8 @@ And we do indeed see these entries: And so the output of the second command matches the key above. ### Liveness Guard -**Key:** `0x4a204f620c8c5ccdca3fd54d003badd85ba500436a431f0cbda4f558c93c34c8`
-**Before:** `0x0000000000000000000000000000000000000000000000000000000000000000`
-**After:** `0x000000000000000000000000c26977310bc89daee5823c2e2a73195e85382cc7`
-**Meaning:** The `LivenessGuard` address is set to [0xc26977310bC89DAee5823C2e2a73195E85382cC7](https://sepolia.etherscan.io/address/0xc26977310bC89DAee5823C2e2a73195E85382cC7). The key can be validated by the key in the [Guard Manager](https://github.com/safe-global/safe-contracts/blob/v1.3.0/contracts/base/GuardManager.sol#L30). +When the Security Council (`0xf64bc17485f0B4Ea5F06A96514182FC4cB561977`) execute a transaction, this is updating the liveness timestamp for each owner that signed the tasks. +This is updating at the moment of the transaction is submitted (`block.timestamp`) into the [`lastLive`](https://github.com/ethereum-optimism/optimism/blob/e84868c27776fd04dc77e95176d55c8f6b1cc9a3/packages/contracts-bedrock/src/safe/LivenessGuard.sol#L41). ### Nonce increments From 58412126f3f8d7a1616e1a9542feb25401a9f4d4 Mon Sep 17 00:00:00 2001 From: George Knee Date: Thu, 28 Nov 2024 16:25:36 +0000 Subject: [PATCH 26/28] Apply suggestions from code review Co-authored-by: Ethnical --- .../VALIDATION.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/VALIDATION.md b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/VALIDATION.md index b1d87e6fb..6ec96ccc5 100644 --- a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/VALIDATION.md +++ b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/VALIDATION.md @@ -26,8 +26,8 @@ Enables the simulation by setting the threshold to 1: ### `0xf64bc17485f0B4Ea5F06A96514182FC4cB561977` (Council Safe) or `0xDEe57160aAfCF04c34C887B5962D0a69676d3C8B` (Foundation Safe) Links: -- [Etherscan (Council Safe)](https://sepolia.etherscan.io/address/0xf64bc17485f0B4Ea5F06A96514182FC4cB561977). This address is attested to in the [Optimism docs](https://docs.optimism.io/chain/security/privileged-roles#l1-proxy-admin), as it's one of the signers of the L1 Proxy Admin owner. -- [Etherscan (Foundation Safe)](https://sepolia.etherscan.io/address/0xDEe57160aAfCF04c34C887B5962D0a69676d3C8B). This address is attested to in the [Optimism docs](https://docs.optimism.io/chain/security/privileged-roles#l1-proxy-admin), as it's one of the signers of the L1 Proxy Admin owner. +- [Etherscan (Council Safe)](https://sepolia.etherscan.io/address/0xf64bc17485f0B4Ea5F06A96514182FC4cB561977). This address is attested to the [Optimism docs](https://docs.optimism.io/chain/security/privileged-roles#l1-proxy-admin), as it's one of the signers of the L1 Proxy Admin owner. +- [Etherscan (Foundation Safe)](https://sepolia.etherscan.io/address/0xDEe57160aAfCF04c34C887B5962D0a69676d3C8B). This address is attested to the [Optimism docs](https://docs.optimism.io/chain/security/privileged-roles#l1-proxy-admin), as it's one of the signers of the L1 Proxy Admin owner. The Safe you are signing for will have the following overrides which will set the [Multicall](https://sepolia.etherscan.io/address/0xca11bde05977b3631167028862be2a173976ca11#code) contract as the sole owner of the signing safe. This allows simulating both the approve hash and the final tx in a single Tenderly tx. @@ -141,7 +141,7 @@ This is updating at the moment of the transaction is submitted (`block.timestamp The only other state change are two nonce increments: - One on the Council or Foundation safe (`0xDEe57160aAfCF04c34C887B5962D0a69676d3C8B` for Foundation and `0xf64bc17485f0B4Ea5F06A96514182FC4cB561977` for Council). If this is not decoded, it corresponds to key `0x05` on a `GnosisSafeProxy`. -- One on the owner on the safe that sent the transaction. +- One on the ProxyAdminOwner (2/2) with address`0x1Eb2fFc903729a0F03966B917003800b145F56E2`. From 9feb9292ab32e99e8b1288e07c9a0b6bacf6b6bd Mon Sep 17 00:00:00 2001 From: Ethnical Date: Fri, 29 Nov 2024 10:49:37 +0100 Subject: [PATCH 27/28] Add Test CI for the task `020-holocene-system-config-upgrade-multi-chain` (#380) * add 020-holocene-system-config-upgrade-multi-chain into the CI to simulate both from SC + FND * fix ci path * CI: add forge clean * remove the just install * add back the forge install * fix the the uppercase for the `stdJson` to `StdJson` --- .circleci/config.yml | 22 +++++++++++++++++++ .../NestedSignFromJson.s.sol | 2 +- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index f7253130a..a70b0d692 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -175,6 +175,27 @@ jobs: just prepare-json just simulate-council # simulate again to make sure the json is still valid + just_simulate_020-holocene-system-config-upgrade-multi-chain: + docker: + - image: <> + steps: + - checkout + - run: + name: just simulate 020-holocene-system-config-upgrade-multi-chain + command: | + just install + cd tasks/sep/020-holocene-system-config-upgrade-multi-chain + export SIMULATE_WITHOUT_LEDGER=1 + just \ + --dotenv-path $(pwd)/.env \ + --justfile ../../../nested.just \ + simulate \ + foundation + just \ + --dotenv-path $(pwd)/.env \ + --justfile ../../../nested.just \ + simulate \ + council forge_build: docker: - image: <> @@ -237,3 +258,4 @@ workflows: - just_simulate_sc_rehearsal_1 - just_simulate_sc_rehearsal_2 - just_simulate_sc_rehearsal_4 + - just_simulate_020-holocene-system-config-upgrade-multi-chain diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/NestedSignFromJson.s.sol b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/NestedSignFromJson.s.sol index 5eeec2f80..6be7610c0 100644 --- a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/NestedSignFromJson.s.sol +++ b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/NestedSignFromJson.s.sol @@ -7,7 +7,7 @@ import {Vm, VmSafe} from "forge-std/Vm.sol"; import {Simulation} from "@base-contracts/script/universal/Simulation.sol"; import {console2 as console} from "forge-std/console2.sol"; import {ProxyAdmin} from "@eth-optimism-bedrock/src/universal/ProxyAdmin.sol"; -import {stdJson} from "forge-std/stdJson.sol"; +import {stdJson} from "forge-std/StdJson.sol"; /// @title ISemver /// @notice ISemver is a simple contract for ensuring that contracts are From be28707b4abc854a677c5e53cf1d08debb8fef0f Mon Sep 17 00:00:00 2001 From: geoknee Date: Fri, 29 Nov 2024 11:25:13 +0000 Subject: [PATCH 28/28] update liveness guard explanation --- .../VALIDATION.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/VALIDATION.md b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/VALIDATION.md index 6ec96ccc5..6ee45696a 100644 --- a/tasks/sep/020-holocene-system-config-upgrade-multi-chain/VALIDATION.md +++ b/tasks/sep/020-holocene-system-config-upgrade-multi-chain/VALIDATION.md @@ -134,7 +134,7 @@ And we do indeed see these entries: ### Liveness Guard When the Security Council (`0xf64bc17485f0B4Ea5F06A96514182FC4cB561977`) execute a transaction, this is updating the liveness timestamp for each owner that signed the tasks. -This is updating at the moment of the transaction is submitted (`block.timestamp`) into the [`lastLive`](https://github.com/ethereum-optimism/optimism/blob/e84868c27776fd04dc77e95176d55c8f6b1cc9a3/packages/contracts-bedrock/src/safe/LivenessGuard.sol#L41). +This is updating at the moment of the transaction is submitted (`block.timestamp`) into the [`lastLive`](https://github.com/ethereum-optimism/optimism/blob/e84868c27776fd04dc77e95176d55c8f6b1cc9a3/packages/contracts-bedrock/src/safe/LivenessGuard.sol#L41) mapping located at the slot `0`. ### Nonce increments