diff --git a/mainnet/2025-06-04-upgrade-system-config/.env b/mainnet/2025-06-04-upgrade-system-config/.env new file mode 100644 index 00000000..f75ec941 --- /dev/null +++ b/mainnet/2025-06-04-upgrade-system-config/.env @@ -0,0 +1,15 @@ +OP_REPO=https://github.com/ethereum-optimism/optimism.git +OP_VERSION=op-contracts/v3.0.0-rc.2 +OP_CONTRACT_PATCH=patch/max-gas-limit.patch +BASE_CONTRACTS_COMMIT=cab46f4c34f11e22640ec3073aa6f0b46cdaa1b7 + +# Used by the scripts. +OWNER_SAFE=0x7bB41C3008B3f03FE483B28b8DB90e19Cf07595c +PROXY_ADMIN=0x0475cBCAebd9CE8AfA5025828d5b98DFb67E059E +SYSTEM_CONFIG=0x73a79Fab69143498Ed3712e519A88a918e1f4072 + +# Used by the make commands. +OP_MULTISIG=0x9BA6e03D8B90dE867373Db8cF1A58d2F7F006b3A +BASE_NESTED_MULTISIG=0x9C4a57Feb77e294Fd7BF5EBE9AB01CAA0a90A110 +BASE_SC_MULTISIG=0x20acf55a3dcfe07fc4cecacfa1628f788ec8a4dd +BASE_MULTISIG=0x9855054731540A48b28990B63DcF4f33d8AE46A1 \ No newline at end of file diff --git a/mainnet/2025-06-04-upgrade-system-config/Makefile b/mainnet/2025-06-04-upgrade-system-config/Makefile new file mode 100644 index 00000000..2ec4f285 --- /dev/null +++ b/mainnet/2025-06-04-upgrade-system-config/Makefile @@ -0,0 +1,130 @@ +include ../../Makefile +include ../.env +include .env + +ifndef LEDGER_ACCOUNT +override LEDGER_ACCOUNT = 0 +endif + +# Overwriting this from top level makefile to change the branch +.PHONY: checkout-op-commit +checkout-op-commit: + rm -rf lib/optimism + mkdir -p lib/optimism + cd lib/optimism; \ + git init; \ + git remote add origin $(OP_REPO); \ + git fetch --depth=1 origin tag $(OP_VERSION) --no-tags; \ + git checkout $(OP_VERSION); \ + git apply ../../$(OP_CONTRACT_PATCH) + +.PHONY: deps +deps: new-go-deps + +.PHONY: new-go-deps +new-go-deps: + go install github.com/jackchuma/state-diff@v0.0.3 + +.PHONY: deploy +deploy: + forge script --rpc-url $(L1_RPC_URL) DeploySystemConfigScript --ledger --hd-paths "m/44'/60'/$(LEDGER_ACCOUNT)'/0/0" --verify --broadcast + +# +# ┌─────────────────────────────────────────────┐ ┌─────────────────────────────────────────────┐ ┌─────────────────────────────────────────────┐ +# │ Base Nested │ │ Base Security Council │ │ OP │ +# │ (3 of 6) │ │ (7 of 10) │ │ (5 of 7) │ +# │ 0x9C4a57Feb77e294Fd7BF5EBE9AB01CAA0a90A110 │ │ 0x20AcF55A3DCfe07fC4cecaCFa1628F788EC8A4Dd │ │ 0x9BA6e03D8B90dE867373Db8cF1A58d2F7F006b3A │ +# └─────────────────────┬───────────────────────┘ └─────────────────────┬───────────────────────┘ └─────────────────────┬───────────────────────┘ +# │ │ │ +# └─────────────────┬───────────────────────────────────┘ │ +# ▼ │ +# ┌─────────────────────────────────────────────┐ │ +# │ Base │ │ +# │ 0x9855054731540A48b28990B63DcF4f33d8AE46A1 │ │ +# └─────────────────────┬───────────────────────┘ │ +# │ │ +# └─────────────────┬────────────────────────────────────────────────────────────────┘ +# ▼ +# ┌─────────────────────────────────────────────┐ +# │ ProxyAdminOwner │ +# │ 0x7bB41C3008B3f03FE483B28b8DB90e19Cf07595c │ +# └─────────────────────────────────────────────┘ + + +# OPTIMISM + +.PHONY: gen-validation-op +gen-validation-op: + $(GOPATH)/bin/state-diff --rpc $(L1_RPC_URL) -o OP_VALIDATION.md \ + -- forge script --rpc-url $(L1_RPC_URL) UpgradeSystemConfigScript \ + --sig "sign(address[])" "[$(OP_MULTISIG)]" \ + --sender 0x42d27eEA1AD6e22Af6284F609847CB3Cd56B9c64 + +.PHONY: sign-op +sign-op: + $(GOPATH)/bin/eip712sign --ledger --hd-paths "m/44'/60'/$(LEDGER_ACCOUNT)'/0/0" -- \ + forge script --rpc-url $(L1_RPC_URL) UpgradeSystemConfigScript \ + --sig "sign(address[])" "[$(OP_MULTISIG)]" + +.PHONY: approve-op +approve-op: + forge script --rpc-url $(L1_RPC_URL) UpgradeSystemConfigScript \ + --sig "approve(address[],bytes)" "[$(OP_MULTISIG)]" $(SIGNATURES) \ + --ledger --hd-paths "m/44'/60'/$(LEDGER_ACCOUNT)'/0/0" --broadcast -vvvv + +# BASE NESTED + +.PHONY: gen-validation-base-nested +gen-validation-base-nested: + $(GOPATH)/bin/state-diff --rpc $(L1_RPC_URL) -o BASE_NESTED_VALIDATION.md \ + -- forge script --rpc-url $(L1_RPC_URL) UpgradeSystemConfigScript \ + --sig "sign(address[])" "[$(BASE_NESTED_MULTISIG), $(BASE_MULTISIG)]" \ + --sender 0x6CD3850756b7894774Ab715D136F9dD02837De50 + +.PHONY: sign-base-nested +sign-base-nested: + $(GOPATH)/bin/eip712sign --ledger --hd-paths "m/44'/60'/$(LEDGER_ACCOUNT)'/0/0" -- \ + forge script --rpc-url $(L1_RPC_URL) UpgradeSystemConfigScript \ + --sig "sign(address[])" "[$(BASE_NESTED_MULTISIG), $(BASE_MULTISIG)]" + +.PHONY: approve-base-nested +approve-base-nested: + forge script --rpc-url $(L1_RPC_URL) UpgradeSystemConfigScript \ + --sig "approve(address[],bytes)" "[$(BASE_NESTED_MULTISIG), $(BASE_MULTISIG)]" $(SIGNATURES) \ + --ledger --hd-paths "m/44'/60'/$(LEDGER_ACCOUNT)'/0/0" --broadcast -vvvv + +# BASE SC + +.PHONY: gen-validation-base-sc +gen-validation-base-sc: + $(GOPATH)/bin/state-diff --rpc $(L1_RPC_URL) -o BASE_SC_VALIDATION.md \ + -- forge script --rpc-url $(L1_RPC_URL) UpgradeSystemConfigScript \ + --sig "sign(address[])" "[$(BASE_SC_MULTISIG), $(BASE_MULTISIG)]" \ + --sender 0x5ff5C78ff194acc24C22DAaDdE4D639ebF18ACC6 + +.PHONY: sign-base-sc +sign-base-sc: + $(GOPATH)/bin/eip712sign --ledger --hd-paths "m/44'/60'/$(LEDGER_ACCOUNT)'/0/0" -- \ + forge script --rpc-url $(L1_RPC_URL) UpgradeSystemConfigScript \ + --sig "sign(address[])" "[$(BASE_SC_MULTISIG), $(BASE_MULTISIG)]" + +.PHONY: approve-base-sc +approve-base-sc: + forge script --rpc-url $(L1_RPC_URL) UpgradeSystemConfigScript \ + --sig "approve(address[],bytes)" "[$(BASE_SC_MULTISIG), $(BASE_MULTISIG)]" $(SIGNATURES) \ + --ledger --hd-paths "m/44'/60'/$(LEDGER_ACCOUNT)'/0/0" --broadcast -vvvv + +# BASE + +.PHONY: approve-base +approve-base: + forge script --rpc-url $(L1_RPC_URL) UpgradeSystemConfigScript \ + --sig "approve(address[],bytes)" "[$(BASE_MULTISIG)]" 0x \ + --ledger --hd-paths "m/44'/60'/$(LEDGER_ACCOUNT)'/0/0" --broadcast -vvvv + +# Execute + +.PHONY: execute +execute: + forge script --rpc-url $(L1_RPC_URL) UpgradeSystemConfigScript \ + --sig "run(bytes)" 0x --ledger --hd-paths "m/44'/60'/$(LEDGER_ACCOUNT)'/0/0" --broadcast -vvvv \ No newline at end of file diff --git a/mainnet/2025-06-04-upgrade-system-config/README.md b/mainnet/2025-06-04-upgrade-system-config/README.md new file mode 100644 index 00000000..5bf3f006 --- /dev/null +++ b/mainnet/2025-06-04-upgrade-system-config/README.md @@ -0,0 +1,136 @@ +# Upgrade System Config + +Status: Ready to deploy + +## Description + +This task contains two scripts: +1. `DeploySystemConfigScript` - This script deploys the new system config implementation. +2. `UpgradeSystemConfigScript` - This script performs the upgrade to the new implementation deployed in the previous step. + +NOTE: Signers should not care about the `DeploySystemConfigScript` script as it will be ran before hand by the facilitator. +The rest of this document will focus on using the `UpgradeSystemConfigScript` script. + +## Procedure + +### 1. Update repo: + +```bash +cd contract-deployments +git pull +cd mainnet/2025-06-04-upgrade-system-config +make deps +``` + +### 2. Setup Ledger + +Your Ledger needs to be connected and unlocked. The Ethereum +application needs to be opened on Ledger with the message "Application +is ready". + +### 3. Simulate, Validate, and Sign + +#### 3.1. Simulate and validate the transaction + +Make sure your ledger is still unlocked and run the following command: + +For Optimism signers: +```bash +make sign-op +``` + +For Base signers: +```bash +make sign-base-nested +``` + +For Base Security Council signers: +```bash +make sign-base-sc +``` + +For each run, you will see a "Simulation link" from the output. + +Paste this URL in your browser. A prompt may ask you to choose a +project, any project will do. You can create one if necessary. + +Click "Simulate Transaction". + +We will be performing 3 validations and extract the domain hash and +message hash to approve on your Ledger: + +1. Validate integrity of the simulation. +2. Validate correctness of the state diff. +3. Validate and extract domain hash and message hash to approve. + +##### 3.1.1. Validate integrity of the simulation. + +Make sure you are on the "Overview" tab of the tenderly simulation, to +validate integrity of the simulation, we need to check the following: + +1. "Network": Check the network is `Mainnet`. +2. "Timestamp": Check the simulation is performed on a block with a + recent timestamp (i.e. close to when you run the script). + +##### 3.1.2. Validate correctness of the state diff. + +Now click on the "State" tab, and refer to the validations instructions for the transaction you are signing: + +- For Optimism signers: [validations instructions](./validations/OP_VALIDATION.md) +- For Base signers: [validations instructions](./validations/BASE_NESTED_VALIDATION.md) +- For Base Security Council signers: [validations instructions](./validations/BASE_SC_VALIDATION.md) + +Once complete return to this document to complete the signing. + +### 4. Extract the domain hash and the message hash to approve. + +Now that we have verified the transaction performs the right +operation, we need to extract the domain hash and the message hash to +approve. + +Go back to the "Overview" tab, and find the +`GnosisSafe.checkSignatures` call. This call's `data` parameter +contains both the domain hash and the message hash that will show up +in your Ledger. + +It will be a concatenation of `0x1901`, the domain hash, and the +message hash: `0x1901[domain hash][message hash]`. + +Note down this value. You will need to compare it with the ones +displayed on the Ledger screen at signing. + +Once the validations are done, it's time to actually sign the +transaction. + +> [!WARNING] +> This is the most security critical part of the playbook: make sure the +> domain hash and message hash in the following three places match: +> +> 1. On your Ledger screen. +> 2. In the terminal output. +> 3. In the Tenderly simulation. You should use the same Tenderly +> simulation as the one you used to verify the state diffs, instead +> of opening the new one printed in the console. +> + +After verification, sign the transaction. You will see the `Data`, +`Signer` and `Signature` printed in the console. Format should be +something like this: + +```shell +Data: +Signer:
+Signature: +``` + +Double check the signer address is the right one. + +#### 4.1. Send the output to Facilitator(s) + +Nothing has occurred onchain - these are offchain signatures which +will be collected by Facilitators for execution. Execution can occur +by anyone once a threshold of signatures are collected, so a +Facilitator will do the final execution for convenience. + +Share the `Data`, `Signer` and `Signature` with the Facilitator, and +congrats, you are done! diff --git a/mainnet/2025-06-04-upgrade-system-config/addresses.json b/mainnet/2025-06-04-upgrade-system-config/addresses.json new file mode 100644 index 00000000..25c55d47 --- /dev/null +++ b/mainnet/2025-06-04-upgrade-system-config/addresses.json @@ -0,0 +1,3 @@ +{ + "systemConfig": "0x78FFE9209dFF6Fe1c9B6F3EFdF996BeE60346D0e" +} \ No newline at end of file diff --git a/mainnet/2025-06-04-upgrade-system-config/foundry.toml b/mainnet/2025-06-04-upgrade-system-config/foundry.toml new file mode 100644 index 00000000..477a6536 --- /dev/null +++ b/mainnet/2025-06-04-upgrade-system-config/foundry.toml @@ -0,0 +1,24 @@ +[profile.default] +src = 'src' +out = 'out' +libs = ['lib'] +broadcast = 'records' +fs_permissions = [{ access = "read-write", path = "./" }] +optimizer = true +optimizer_runs = 999999 +solc_version = "0.8.15" +via-ir = false +remappings = [ + '@eth-optimism-bedrock/=lib/optimism/packages/contracts-bedrock/', + '@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts', + '@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts', + '@rari-capital/solmate/=lib/solmate/', + '@base-contracts/=lib/base-contracts', + 'solady/=lib/solady/src/', + '@lib-keccak/=lib/lib-keccak/contracts/lib', + 'src/libraries/=lib/optimism/packages/contracts-bedrock/src/libraries', + 'interfaces/universal/=lib/optimism/packages/contracts-bedrock/interfaces/universal', + 'interfaces/L1/=lib/optimism/packages/contracts-bedrock/interfaces/L1', +] + +# See more config options https://github.com/foundry-rs/foundry/tree/master/config diff --git a/mainnet/2025-06-04-upgrade-system-config/patch/max-gas-limit.patch b/mainnet/2025-06-04-upgrade-system-config/patch/max-gas-limit.patch new file mode 100644 index 00000000..f2d6a13b --- /dev/null +++ b/mainnet/2025-06-04-upgrade-system-config/patch/max-gas-limit.patch @@ -0,0 +1,25 @@ +diff --git a/packages/contracts-bedrock/src/L1/SystemConfig.sol b/packages/contracts-bedrock/src/L1/SystemConfig.sol +index e767bc64a..a7617d5e8 100644 +--- a/packages/contracts-bedrock/src/L1/SystemConfig.sol ++++ b/packages/contracts-bedrock/src/L1/SystemConfig.sol +@@ -87,7 +87,7 @@ contract SystemConfig is OwnableUpgradeable, ISemver { + /// @notice The maximum gas limit that can be set for L2 blocks. This limit is used to enforce that the blocks + /// on L2 are not too large to process and prove. Over time, this value can be increased as various + /// optimizations and improvements are made to the system at large. +- uint64 internal constant MAX_GAS_LIMIT = 200_000_000; ++ uint64 internal constant MAX_GAS_LIMIT = 500_000_000; + + /// @notice Fixed L2 gas overhead. Used as part of the L2 fee calculation. + /// Deprecated since the Ecotone network upgrade +@@ -136,9 +136,9 @@ contract SystemConfig is OwnableUpgradeable, ISemver { + event ConfigUpdate(uint256 indexed version, UpdateType indexed updateType, bytes data); + + /// @notice Semantic version. +- /// @custom:semver 2.5.0 ++ /// @custom:semver 2.5.0+max-gas-limit-500M + function version() public pure virtual returns (string memory) { +- return "2.5.0"; ++ return "2.5.0+max-gas-limit-500M"; + } + + /// @notice Constructs the SystemConfig contract. diff --git a/mainnet/2025-06-04-upgrade-system-config/records/DeploySystemConfig.s.sol/1/run-1749474907.json b/mainnet/2025-06-04-upgrade-system-config/records/DeploySystemConfig.s.sol/1/run-1749474907.json new file mode 100644 index 00000000..2c376d26 --- /dev/null +++ b/mainnet/2025-06-04-upgrade-system-config/records/DeploySystemConfig.s.sol/1/run-1749474907.json @@ -0,0 +1,61 @@ +{ + "transactions": [ + { + "hash": "0x6edf34537c8dc412faf6fe732ad68b4fa9d54285471e17b043acb589655d6963", + "transactionType": "CREATE", + "contractName": "SystemConfig", + "contractAddress": "0x78ffe9209dff6fe1c9b6f3efdf996bee60346d0e", + "function": null, + "arguments": null, + "transaction": { + "from": "0x7ad8e6b7b1f6d66f49559f20053cef8a7b6c488e", + "gas": "0x29829f", + "value": "0x0", + "input": "0x60806040523480156200001157600080fd5b506200005a6200004360017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a062000130565b60001b6000196200006a60201b620010c61760201c565b620000646200006e565b62000156565b9055565b600054610100900460ff1615620000db5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811610156200012e576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6000828210156200015157634e487b7160e01b600052601160045260246000fd5b500390565b61243380620001666000396000f3fe608060405234801561001057600080fd5b50600436106102ff5760003560e01c8063a71198691161019c578063dac6e63a116100ee578063f2fde38b11610097578063f8c68de011610071578063f8c68de0146107a6578063fd32aa0f146107ae578063ffa1ad74146107b657600080fd5b8063f2fde38b14610776578063f45e65d814610789578063f68016b71461079257600080fd5b8063e81b2c6d116100c8578063e81b2c6d14610745578063ec7075171461074e578063f2b4e6171461076e57600080fd5b8063dac6e63a1461072d578063e0e2016d14610735578063e2a3285c1461073d57600080fd5b8063c4e8ddfa11610150578063ca407f0c1161012a578063ca407f0c146105d6578063cc731b02146105e9578063d220a9e01461071d57600080fd5b8063c4e8ddfa146105a3578063c9b26f61146105ab578063c9ff2d16146105be57600080fd5b8063bc49ce5f11610181578063bc49ce5f1461056c578063bfb14fb714610574578063c0fd4b411461059057600080fd5b8063a711986914610551578063b40a817c1461055957600080fd5b806348cd4cb1116102555780635d73369c11610209578063935f029e116101e3578063935f029e146104c05780639b7d7f0a146104d3578063a39fac12146104db57600080fd5b80635d73369c14610492578063715018a61461049a5780638da5cb5b146104a257600080fd5b80634d5d9a2a1161023a5780634d5d9a2a146103fb5780634f16540b1461042c57806354fd4d501461045357600080fd5b806348cd4cb1146103eb5780634add321d146103f357600080fd5b8063155b6c6f116102b757806319f5cea81161029157806319f5cea8146103c85780631fd19ee1146103d057806321d7fde5146103d857600080fd5b8063155b6c6f1461037c57806316d3bc7f1461039157806318d13918146103b557600080fd5b80630a49cb03116102e85780630a49cb031461034c5780630ae14b1b146103545780630c18c1621461037357600080fd5b806306c9265714610304578063078f29cf1461031f575b600080fd5b61030c6107be565b6040519081526020015b60405180910390f35b6103276107ec565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610316565b610327610825565b631dcd65005b60405167ffffffffffffffff9091168152602001610316565b61030c60655481565b61038f61038a366004611f06565b610855565b005b606a5461035a906c01000000000000000000000000900467ffffffffffffffff1681565b61038f6103c3366004611f5d565b61086b565b61030c61087f565b6103276108aa565b61038f6103e6366004611f7f565b6108d4565b61030c6108e6565b61035a610916565b606a546104179068010000000000000000900463ffffffff1681565b60405163ffffffff9091168152602001610316565b61030c7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0881565b604080518082018252601881527f322e352e302b6d61782d6761732d6c696d69742d3530304d0000000000000000602082015290516103169190612014565b61030c61093c565b61038f610967565b60335473ffffffffffffffffffffffffffffffffffffffff16610327565b61038f6104ce366004612027565b61097b565b61032761098d565b6104e36109bd565b6040516103169190600060c08201905073ffffffffffffffffffffffffffffffffffffffff8084511683528060208501511660208401528060408501511660408401528060608501511660608401528060808501511660808401528060a08501511660a08401525092915050565b610327610ace565b61038f610567366004612049565b610afe565b61030c610b0f565b6068546104179068010000000000000000900463ffffffff1681565b61038f61059e366004611f7f565b610b3a565b610327610b4c565b61038f6105b9366004612064565b610b7c565b606a5461041790640100000000900463ffffffff1681565b61038f6105e43660046121a7565b610b8d565b6106ad6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c08101825260695463ffffffff8082168352640100000000820460ff9081166020850152650100000000008304169383019390935266010000000000008104831660608301526a0100000000000000000000810490921660808201526e0100000000000000000000000000009091046fffffffffffffffffffffffffffffffff1660a082015290565b6040516103169190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b606a546104179063ffffffff1681565b610327610f06565b61030c610f36565b61030c610f61565b61030c60675481565b606854610417906c01000000000000000000000000900463ffffffff1681565b610327610f8c565b61038f610784366004611f5d565b610fbc565b61030c60665481565b60685461035a9067ffffffffffffffff1681565b61030c611070565b61030c61109b565b61030c600081565b6107e960017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d612325565b81565b600061082061081c60017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377612325565b5490565b905090565b600061082061081c60017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad612325565b61085d6110ca565b610867828261114b565b5050565b6108736110ca565b61087c8161125b565b50565b6107e960017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8612325565b60006108207f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c085490565b6108dc6110ca565b6108678282611318565b600061082061081c60017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0612325565b6069546000906108209063ffffffff6a010000000000000000000082048116911661233c565b6107e960017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637612325565b61096f6110ca565b610979600061141d565b565b6109836110ca565b6108678282611494565b600061082061081c60017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d612325565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101919091526040518060c00160405280610a02610ace565b73ffffffffffffffffffffffffffffffffffffffff168152602001610a25610b4c565b73ffffffffffffffffffffffffffffffffffffffff168152602001610a486107ec565b73ffffffffffffffffffffffffffffffffffffffff168152602001610a6b610f8c565b73ffffffffffffffffffffffffffffffffffffffff168152602001610a8e610825565b73ffffffffffffffffffffffffffffffffffffffff168152602001610ab161098d565b73ffffffffffffffffffffffffffffffffffffffff169052919050565b600061082061081c60017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637612325565b610b066110ca565b61087c8161156a565b6107e960017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598612325565b610b426110ca565b61086782826116c0565b600061082061081c60017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8612325565b610b846110ca565b61087c81611892565b600054610100900460ff1615808015610bad5750600054600160ff909116105b80610bc75750303b158015610bc7575060005460ff166001145b610c58576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610cb657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b610cbe6118ba565b610cc78a610fbc565b610cd087611892565b610cda8989611318565b610ce38661156a565b610d0c7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08869055565b610d3f610d3a60017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598612325565b849055565b610d73610d6d60017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637612325565b83519055565b610daa610da160017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8612325565b60208401519055565b610de1610dd860017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377612325565b60408401519055565b610e18610e0f60017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa907612325565b60608401519055565b610e4f610e4660017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad612325565b60808401519055565b610e86610e7d60017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d612325565b60a08401519055565b610e8e611959565b610e97846119c1565b8015610efa57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b600061082061081c60017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598612325565b6107e960017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0612325565b6107e960017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa907612325565b600061082061081c60017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa907612325565b610fc46110ca565b73ffffffffffffffffffffffffffffffffffffffff8116611067576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610c4f565b61087c8161141d565b6107e960017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377612325565b6107e960017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad612325565b9055565b60335473ffffffffffffffffffffffffffffffffffffffff163314610979576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c4f565b606a80547fffffffffffffffffffffffff000000000000000000000000ffffffffffffffff166801000000000000000063ffffffff8516027fffffffffffffffffffffffff0000000000000000ffffffffffffffffffffffff16176c0100000000000000000000000067ffffffffffffffff841690810291909117909155604080516bffffffff000000000000000085831b16909217602083015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060055b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be8360405161124e9190612014565b60405180910390a3505050565b6112847f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08829055565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060035b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be8360405161130c9190612014565b60405180910390a35050565b606880547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000063ffffffff8581169182027fffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffff16929092176c0100000000000000000000000092851692909202919091179091557f0100000000000000000000000000000000000000000000000000000000000000602083811b67ffffffff000000001690921717606681905560655460408051938401919091528201526000906060015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529050600161121d565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b7fff00000000000000000000000000000000000000000000000000000000000000811615611544576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f53797374656d436f6e6669673a207363616c61722065786365656473206d617860448201527f2e000000000000000000000000000000000000000000000000000000000000006064820152608401610c4f565b6065829055606681905560408051602081018490529081018290526000906060016113e6565b611572610916565b67ffffffffffffffff168167ffffffffffffffff1610156115ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77006044820152606401610c4f565b631dcd650067ffffffffffffffff82161115611667576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f20686967686044820152606401610c4f565b606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff831690811790915560408051602080820193909352815180820390930183528101905260026112db565b60018263ffffffff161015611757576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65203e3d203100000000000000000000000000000000000000000000000000006064820152608401610c4f565b60018163ffffffff1610156117ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f53797374656d436f6e6669673a20656c6173746963697479206d75737420626560448201527f203e3d20310000000000000000000000000000000000000000000000000000006064820152608401610c4f565b606a805463ffffffff83811664010000000081027fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000909316918616919091179190911790915560405160009161185b91602086811b67ffffffff0000000016909217910190815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529050600461121d565b60678190556040805160208082018490528251808303909101815290820190915260006112db565b600054610100900460ff16611951576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610c4f565b610979611e35565b61198761081c60017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0612325565b600003610979576109796119bc60017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0612325565b439055565b8060a001516fffffffffffffffffffffffffffffffff16816060015163ffffffff161115611a71576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d6178206261736500000000000000000000006064820152608401610c4f565b6001816040015160ff1611611b08576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65206c6172676572207468616e203100000000000000000000000000000000006064820152608401610c4f565b6068546080820151825167ffffffffffffffff90921691611b299190612368565b63ffffffff161115611b97576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77006044820152606401610c4f565b6000816020015160ff1611611c2e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201527f6965722063616e6e6f74206265203000000000000000000000000000000000006064820152608401610c4f565b8051602082015163ffffffff82169160ff90911690611c4e908290612387565b611c5891906123d1565b63ffffffff1614611ceb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d69740000000000000000006064820152608401610c4f565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff9687167fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009095169490941764010000000060ff94851602177fffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffff166501000000000093909216929092027fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff1617660100000000000091851691909102177fffff0000000000000000000000000000000000000000ffffffffffffffffffff166a010000000000000000000093909416929092027fffff00000000000000000000000000000000ffffffffffffffffffffffffffff16929092176e0100000000000000000000000000006fffffffffffffffffffffffffffffffff90921691909102179055565b600054610100900460ff16611ecc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610c4f565b6109793361141d565b803563ffffffff81168114611ee957600080fd5b919050565b803567ffffffffffffffff81168114611ee957600080fd5b60008060408385031215611f1957600080fd5b611f2283611ed5565b9150611f3060208401611eee565b90509250929050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611ee957600080fd5b600060208284031215611f6f57600080fd5b611f7882611f39565b9392505050565b60008060408385031215611f9257600080fd5b611f9b83611ed5565b9150611f3060208401611ed5565b6000815180845260005b81811015611fcf57602081850181015186830182015201611fb3565b81811115611fe1576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611f786020830184611fa9565b6000806040838503121561203a57600080fd5b50508035926020909101359150565b60006020828403121561205b57600080fd5b611f7882611eee565b60006020828403121561207657600080fd5b5035919050565b60405160c0810167ffffffffffffffff811182821017156120c7577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b803560ff81168114611ee957600080fd5b600060c082840312156120f057600080fd5b60405160c0810181811067ffffffffffffffff8211171561213a577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290508061214983611f39565b815261215760208401611f39565b602082015261216860408401611f39565b604082015261217960608401611f39565b606082015261218a60808401611f39565b608082015261219b60a08401611f39565b60a08201525092915050565b6000806000806000806000806000898b036102608112156121c757600080fd5b6121d08b611f39565b99506121de60208c01611ed5565b98506121ec60408c01611ed5565b975060608b0135965061220160808c01611eee565b955061220f60a08c01611f39565b945060c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff408201121561224157600080fd5b5061224a61207d565b61225660c08c01611ed5565b815261226460e08c016120cd565b60208201526122766101008c016120cd565b60408201526122886101208c01611ed5565b606082015261229a6101408c01611ed5565b60808201526101608b01356fffffffffffffffffffffffffffffffff811681146122c357600080fd5b60a082015292506122d76101808b01611f39565b91506122e78b6101a08c016120de565b90509295985092959850929598565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612337576123376122f6565b500390565b600067ffffffffffffffff80831681851680830382111561235f5761235f6122f6565b01949350505050565b600063ffffffff80831681851680830382111561235f5761235f6122f6565b600063ffffffff808416806123c5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600063ffffffff808316818516818304811182151516156123f4576123f46122f6565b0294935050505056fea2646970667358221220284267a50d84ed1ce6fa056718d87932bdc0f7404023d81afeccdd7ed1beb31864736f6c634300080f0033", + "nonce": "0x3", + "chainId": "0x1" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0xddd21c", + "logs": [ + { + "address": "0x78ffe9209dff6fe1c9b6f3efdf996bee60346d0e", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000ff", + "blockHash": "0xedfaf4f969366ea64c6d0dc85f8d2717cd18c44450c8f0a920c01143736af5b5", + "blockNumber": "0x159dff5", + "blockTimestamp": "0x6846de47", + "transactionHash": "0x6edf34537c8dc412faf6fe732ad68b4fa9d54285471e17b043acb589655d6963", + "transactionIndex": "0x82", + "logIndex": "0x185", + "removed": false + } + ], + "logsBloom": "0x00000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000040000000000000000000000000010000000000000000000000000000000000000000000000000000800000000000000000000", + "type": "0x2", + "transactionHash": "0x6edf34537c8dc412faf6fe732ad68b4fa9d54285471e17b043acb589655d6963", + "transactionIndex": "0x82", + "blockHash": "0xedfaf4f969366ea64c6d0dc85f8d2717cd18c44450c8f0a920c01143736af5b5", + "blockNumber": "0x159dff5", + "gasUsed": "0x1ff0ad", + "effectiveGasPrice": "0x1a870dc8c", + "from": "0x7ad8e6b7b1f6d66f49559f20053cef8a7b6c488e", + "to": null, + "contractAddress": "0x78ffe9209dff6fe1c9b6f3efdf996bee60346d0e" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1749474907, + "chain": 1, + "commit": "ba53207" +} \ No newline at end of file diff --git a/mainnet/2025-06-04-upgrade-system-config/script/DeploySystemConfig.s.sol b/mainnet/2025-06-04-upgrade-system-config/script/DeploySystemConfig.s.sol new file mode 100644 index 00000000..8b5d1361 --- /dev/null +++ b/mainnet/2025-06-04-upgrade-system-config/script/DeploySystemConfig.s.sol @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.15; + +import {Script, console} from "forge-std/Script.sol"; + +import {SystemConfig} from "@eth-optimism-bedrock/src/L1/SystemConfig.sol"; + +contract DeploySystemConfigScript is Script { + SystemConfig systemConfigImpl; + + function run() public { + vm.startBroadcast(); + systemConfigImpl = new SystemConfig(); + console.log("SystemConfig implementation deployed at: ", address(systemConfigImpl)); + vm.stopBroadcast(); + + string memory obj = "root"; + string memory json = vm.serializeAddress(obj, "systemConfig", address(systemConfigImpl)); + vm.writeJson(json, "addresses.json"); + + _postCheck(); + } + + function _postCheck() internal view { + require( + keccak256(bytes(SystemConfig(systemConfigImpl).version())) == keccak256("2.5.0+max-gas-limit-500M"), + "SystemConfig version mismatch" + ); + + require(SystemConfig(systemConfigImpl).maximumGasLimit() == 500_000_000, "Maximum gas limit mismatch"); + } +} diff --git a/mainnet/2025-06-04-upgrade-system-config/script/UpgradeSystemConfig.s.sol b/mainnet/2025-06-04-upgrade-system-config/script/UpgradeSystemConfig.s.sol new file mode 100644 index 00000000..9f913937 --- /dev/null +++ b/mainnet/2025-06-04-upgrade-system-config/script/UpgradeSystemConfig.s.sol @@ -0,0 +1,62 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.15; + +import {Vm} from "forge-std/Vm.sol"; +import {IMulticall3} from "forge-std/interfaces/IMulticall3.sol"; + +import {SystemConfig} from "@eth-optimism-bedrock/src/L1/SystemConfig.sol"; + +import {Simulation} from "@base-contracts/script/universal/Simulation.sol"; +import {MultisigScript} from "@base-contracts/script/universal/MultisigScript.sol"; +import {console} from "forge-std/console.sol"; + +interface IProxyAdmin { + function upgrade(address _proxy, address _implementation) external; +} + +interface IProxy { + function implementation() external view returns (address); +} + +contract UpgradeSystemConfigScript is MultisigScript { + address internal immutable OWNER_SAFE; + address internal immutable PROXY_ADMIN; + address internal immutable SYSTEM_CONFIG; + + address internal immutable NEW_IMPLEMENTATION; + + constructor() { + OWNER_SAFE = vm.envAddress("OWNER_SAFE"); + PROXY_ADMIN = vm.envAddress("PROXY_ADMIN"); + SYSTEM_CONFIG = vm.envAddress("SYSTEM_CONFIG"); + + string memory root = vm.projectRoot(); + string memory path = string.concat(root, "/addresses.json"); + string memory json = vm.readFile(path); + NEW_IMPLEMENTATION = vm.parseJsonAddress(json, ".systemConfig"); + } + + function _postCheck(Vm.AccountAccess[] memory, Simulation.Payload memory) internal override { + // NOTE: Bypass `proxyCallIfNotAdmin` modifier. + vm.prank(PROXY_ADMIN); + require(IProxy(SYSTEM_CONFIG).implementation() == NEW_IMPLEMENTATION); + } + + function _buildCalls() internal view override returns (IMulticall3.Call3Value[] memory) { + IMulticall3.Call3Value[] memory calls = new IMulticall3.Call3Value[](1); + + calls[0] = IMulticall3.Call3Value({ + target: PROXY_ADMIN, + allowFailure: false, + // NOTE: No need to call initialize as no storage would change (only changing `MAX_GAS_LIMIT` and `version`). + callData: abi.encodeCall(IProxyAdmin.upgrade, (SYSTEM_CONFIG, NEW_IMPLEMENTATION)), + value: 0 + }); + + return calls; + } + + function _ownerSafe() internal view override returns (address) { + return OWNER_SAFE; + } +} diff --git a/mainnet/2025-06-04-upgrade-system-config/validations/BASE_NESTED_VALIDATION.md b/mainnet/2025-06-04-upgrade-system-config/validations/BASE_NESTED_VALIDATION.md new file mode 100644 index 00000000..723d93d9 --- /dev/null +++ b/mainnet/2025-06-04-upgrade-system-config/validations/BASE_NESTED_VALIDATION.md @@ -0,0 +1,120 @@ +# Validation + +This document can be used to validate the inputs and result of the execution of the upgrade transaction which you are signing. + +> [!NOTE] +> +> This document provides names for each contract address to add clarity to what you are seeing. These names will not be visible in the Tenderly UI. All that matters is that addresses and storage slot hex values match exactly what is presented in this document. + +The steps are: + +1. [Validate the Domain and Message Hashes](#expected-domain-and-message-hashes) +2. [Verifying the state changes](#state-changes) + +## Expected Domain and Message Hashes + +First, we need to validate the domain and message hashes. These values should match both the values on your ledger and the values printed to the terminal when you run the task. + +> [!CAUTION] +> +> Before signing, ensure the below hashes match what is on your ledger. +> +> ### Base Nested Multisig - Mainnet: `0x9C4a57Feb77e294Fd7BF5EBE9AB01CAA0a90A110` +> +> - Domain Hash: `0xfb308368b8deca582e84a807d31c1bfcec6fda754061e2801b4d6be5cb52a8ac` +> - Message Hash: `0x0693f70caf333f60a20ad8e44b451bd4cea3d2703016c277d5b0d09ecd3c3638` + +# State Validations + +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 key values match the semantic meaning provided, which can be validated using the terminal commands provided. + +## State Overrides + +### Proxy Admin Owner - Mainnet (`0x7bB41C3008B3f03FE483B28b8DB90e19Cf07595c`) + +- **Key**: `0x0000000000000000000000000000000000000000000000000000000000000004`
+ **Override**: `0x0000000000000000000000000000000000000000000000000000000000000001`
+ **Meaning**: Override the threshold to 1 so the transaction simulation can occur. + +### Base Multisig - Mainnet (`0x9855054731540A48b28990B63DcF4f33d8AE46A1`) + +- **Key**: `0x0000000000000000000000000000000000000000000000000000000000000004`
+ **Override**: `0x0000000000000000000000000000000000000000000000000000000000000001`
+ **Meaning**: Override the threshold to 1 so the transaction simulation can occur. + +### Base Nested Multisig - Mainnet (`0x9C4a57Feb77e294Fd7BF5EBE9AB01CAA0a90A110`) + +- **Key**: `0x0000000000000000000000000000000000000000000000000000000000000004`
+ **Override**: `0x0000000000000000000000000000000000000000000000000000000000000001`
+ **Meaning**: Override the threshold to 1 so the transaction simulation can occur. + +- **Key**: `0x941b9cdcb5979673e06ce272a4b3851457b1a7a92c5034b46f0cdf4d3ffbf36d`
+ **Override**: `0x0000000000000000000000000000000000000000000000000000000000000001`
+ **Meaning**: Simulates an approval from `msg.sender` in order for the task simulation to succeed. Note: The Key might be different as it corresponds to the slot associated with [your signer address](https://github.com/safe-global/safe-smart-account/blob/main/contracts/Safe.sol#L69). + +## Task State Changes + +### System Config (`0x73a79Fab69143498Ed3712e519A88a918e1f4072`) + +0. **Key**: `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`
+ **Before**: `0x000000000000000000000000340f923e5c7cbb2171146f64169ec9d5a9ffe647`
+ **After**: `0x00000000000000000000000078ffe9209dff6fe1c9b6f3efdf996bee60346d0e`
+ **Value Type**: address
+ **Decoded Old Value**: `0x340f923e5c7cbb2171146f64169ec9d5a9ffe647`
+ **Decoded New Value**: `0x78ffe9209dff6fe1c9b6f3efdf996bee60346d0e`
+ **Meaning**: Updates the System Config implementation address
+ +### Proxy Admin Owner - Mainnet (`0x7bB41C3008B3f03FE483B28b8DB90e19Cf07595c`) + +1. **Key**: `0x0000000000000000000000000000000000000000000000000000000000000005`
+ **Before**: `0x0000000000000000000000000000000000000000000000000000000000000009`
+ **After**: `0x000000000000000000000000000000000000000000000000000000000000000a`
+ **Value Type**: uint256
+ **Decoded Old Value**: `9`
+ **Decoded New Value**: `10`
+ **Meaning**: Increments the nonce
+ +2. **Key**: `0xe612a2ea19e8e76074e4469448baaa0076a49e88f2aa4915dcf5f8a73bf72c63`
+ **Before**: `0x0000000000000000000000000000000000000000000000000000000000000000`
+ **After**: `0x0000000000000000000000000000000000000000000000000000000000000001`
+ **Value Type**: uint256
+ **Decoded Old Value**: `0`
+ **Decoded New Value**: `1`
+ **Meaning**: Sets approvedHashes[0x9855054731540a48b28990b63dcf4f33d8ae46a1][0x4a88dda4a880fe15d81d0ba56d70a2770da4a983f625755eb9c4d7c8de2aa2a2] to 1 (approved by the Base Multisig). + +### Base Multisig - Mainnet (`0x9855054731540A48b28990B63DcF4f33d8AE46A1`) + +3. **Key**: `0x0000000000000000000000000000000000000000000000000000000000000005`
+ **Before**: `0x0000000000000000000000000000000000000000000000000000000000000016`
+ **After**: `0x0000000000000000000000000000000000000000000000000000000000000017`
+ **Value Type**: uint256
+ **Decoded Old Value**: `22`
+ **Decoded New Value**: `23`
+ **Meaning**: Increments the nonce
+ +4. **Key**: `0x5adce382d964a1f2700576e57c00df690944e152a7647e602adee539676992ec`
+ **Before**: `0x0000000000000000000000000000000000000000000000000000000000000000`
+ **After**: `0x0000000000000000000000000000000000000000000000000000000000000001`
+ **Value Type**: uint256
+ **Decoded Old Value**: `0`
+ **Decoded New Value**: `1`
+ **Meaning**: Sets approvedHashes[0x9c4a57feb77e294fd7bf5ebe9ab01caa0a90a110][0x2c6c1586b686483d280098fc0fa445fdf2c4d1d3dfad1a2aa17aac81d10cef9f] to 1 (approved by the Base Nested Multisig). + +### Base Nested Multisig - Mainnet (`0x9C4a57Feb77e294Fd7BF5EBE9AB01CAA0a90A110`) + +5. **Key**: `0x0000000000000000000000000000000000000000000000000000000000000005`
+ **Before**: `0x0000000000000000000000000000000000000000000000000000000000000001`
+ **After**: `0x0000000000000000000000000000000000000000000000000000000000000002`
+ **Value Type**: uint256
+ **Decoded Old Value**: `1`
+ **Decoded New Value**: `2`
+ **Meaning**: Increments the nonce
+ +### Your Signer Address + +- Nonce increment + +You can now navigate back to the [README](../README.md#4-extract-the-domain-hash-and-the-message-hash-to-approve) to continue the signing process. diff --git a/mainnet/2025-06-04-upgrade-system-config/validations/BASE_SC_VALIDATION.md b/mainnet/2025-06-04-upgrade-system-config/validations/BASE_SC_VALIDATION.md new file mode 100644 index 00000000..2d725c14 --- /dev/null +++ b/mainnet/2025-06-04-upgrade-system-config/validations/BASE_SC_VALIDATION.md @@ -0,0 +1,120 @@ +# Validation + +This document can be used to validate the inputs and result of the execution of the upgrade transaction which you are signing. + +> [!NOTE] +> +> This document provides names for each contract address to add clarity to what you are seeing. These names will not be visible in the Tenderly UI. All that matters is that addresses and storage slot hex values match exactly what is presented in this document. + +The steps are: + +1. [Validate the Domain and Message Hashes](#expected-domain-and-message-hashes) +2. [Verifying the state changes](#state-changes) + +## Expected Domain and Message Hashes + +First, we need to validate the domain and message hashes. These values should match both the values on your ledger and the values printed to the terminal when you run the task. + +> [!CAUTION] +> +> Before signing, ensure the below hashes match what is on your ledger. +> +> ### Base Security Council Multisig - Mainnet: `0x20AcF55A3DCfe07fC4cecaCFa1628F788EC8A4Dd` +> +> - Domain Hash: `0x1fbfdc61ceb715f63cb17c56922b88c3a980f1d83873df2b9325a579753e8aa3` +> - Message Hash: `0x0693f70caf333f60a20ad8e44b451bd4cea3d2703016c277d5b0d09ecd3c3638` + +# State Validations + +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 key values match the semantic meaning provided, which can be validated using the terminal commands provided. + +## State Overrides + +### Base Security Council Multisig - Mainnet (`0x20AcF55A3DCfe07fC4cecaCFa1628F788EC8A4Dd`) + +- **Key**: `0x0000000000000000000000000000000000000000000000000000000000000004`
+ **Override**: `0x0000000000000000000000000000000000000000000000000000000000000001`
+ **Meaning**: Override the threshold to 1 so the transaction simulation can occur. + +- **Key**: `0xb2462f25a14e413c43e63f6a6d256e11fb0da3733f2efef47b95c348ca164ff7`
+ **Override**: `0x0000000000000000000000000000000000000000000000000000000000000001`
+ **Meaning**: Simulates an approval from `msg.sender` in order for the task simulation to succeed. Note: The Key might be different as it corresponds to the slot associated with [your signer address](https://github.com/safe-global/safe-smart-account/blob/main/contracts/Safe.sol#L69). + +### Proxy Admin Owner - Mainnet (`0x7bB41C3008B3f03FE483B28b8DB90e19Cf07595c`) + +- **Key**: `0x0000000000000000000000000000000000000000000000000000000000000004`
+ **Override**: `0x0000000000000000000000000000000000000000000000000000000000000001`
+ **Meaning**: Override the threshold to 1 so the transaction simulation can occur. + +### Base Multisig - Mainnet (`0x9855054731540A48b28990B63DcF4f33d8AE46A1`) + +- **Key**: `0x0000000000000000000000000000000000000000000000000000000000000004`
+ **Override**: `0x0000000000000000000000000000000000000000000000000000000000000001`
+ **Meaning**: Override the threshold to 1 so the transaction simulation can occur. + +## Task State Changes + +### Base Security Council Multisig - Mainnet (`0x20AcF55A3DCfe07fC4cecaCFa1628F788EC8A4Dd`) + +0. **Key**: `0x0000000000000000000000000000000000000000000000000000000000000005`
+ **Before**: `0x0000000000000000000000000000000000000000000000000000000000000001`
+ **After**: `0x0000000000000000000000000000000000000000000000000000000000000002`
+ **Value Type**: uint256
+ **Decoded Old Value**: `1`
+ **Decoded New Value**: `2`
+ **Meaning**: Increments the nonce
+ +### System Config (`0x73a79Fab69143498Ed3712e519A88a918e1f4072`) + +1. **Key**: `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`
+ **Before**: `0x000000000000000000000000340f923e5c7cbb2171146f64169ec9d5a9ffe647`
+ **After**: `0x00000000000000000000000078ffe9209dff6fe1c9b6f3efdf996bee60346d0e`
+ **Value Type**: address
+ **Decoded Old Value**: `0x340f923e5c7cbb2171146f64169ec9d5a9ffe647`
+ **Decoded New Value**: `0x78ffe9209dff6fe1c9b6f3efdf996bee60346d0e`
+ **Meaning**: Updates the System Config implementation address
+ +### Proxy Admin Owner - Mainnet (`0x7bB41C3008B3f03FE483B28b8DB90e19Cf07595c`) + +2. **Key**: `0x0000000000000000000000000000000000000000000000000000000000000005`
+ **Before**: `0x0000000000000000000000000000000000000000000000000000000000000009`
+ **After**: `0x000000000000000000000000000000000000000000000000000000000000000a`
+ **Value Type**: uint256
+ **Decoded Old Value**: `9`
+ **Decoded New Value**: `10`
+ **Meaning**: Increments the nonce
+ +3. **Key**: `0xe612a2ea19e8e76074e4469448baaa0076a49e88f2aa4915dcf5f8a73bf72c63`
+ **Before**: `0x0000000000000000000000000000000000000000000000000000000000000000`
+ **After**: `0x0000000000000000000000000000000000000000000000000000000000000001`
+ **Value Type**: uint256
+ **Decoded Old Value**: `0`
+ **Decoded New Value**: `1`
+ **Meaning**: Sets approvedHashes[0x9855054731540a48b28990b63dcf4f33d8ae46a1][0x4a88dda4a880fe15d81d0ba56d70a2770da4a983f625755eb9c4d7c8de2aa2a2] to 1 (approved by the Base Multisig). + +### Base Multisig - Mainnet (`0x9855054731540A48b28990B63DcF4f33d8AE46A1`) + +4. **Key**: `0x0000000000000000000000000000000000000000000000000000000000000005`
+ **Before**: `0x0000000000000000000000000000000000000000000000000000000000000016`
+ **After**: `0x0000000000000000000000000000000000000000000000000000000000000017`
+ **Value Type**: uint256
+ **Decoded Old Value**: `22`
+ **Decoded New Value**: `23`
+ **Meaning**: Increments the nonce
+ +5. **Key**: `0x96434cd01eccd775b18be28d6d4ab24f5c5ae955d63d845212994747cc9cd431`
+ **Before**: `0x0000000000000000000000000000000000000000000000000000000000000000`
+ **After**: `0x0000000000000000000000000000000000000000000000000000000000000001`
+ **Value Type**: uint256
+ **Decoded Old Value**: `0`
+ **Decoded New Value**: `1`
+ **Meaning**: Sets approvedHashes[0x20acf55a3dcfe07fc4cecacfa1628f788ec8a4dd][0x2c6c1586b686483d280098fc0fa445fdf2c4d1d3dfad1a2aa17aac81d10cef9f] to 1 (approved by the Base Security Council Multisig Multisig). + +### Your Signer Address + +- Nonce increment + +You can now navigate back to the [README](../README.md#4-extract-the-domain-hash-and-the-message-hash-to-approve) to continue the signing process. diff --git a/mainnet/2025-06-04-upgrade-system-config/validations/OP_VALIDATION.md b/mainnet/2025-06-04-upgrade-system-config/validations/OP_VALIDATION.md new file mode 100644 index 00000000..9866b40a --- /dev/null +++ b/mainnet/2025-06-04-upgrade-system-config/validations/OP_VALIDATION.md @@ -0,0 +1,104 @@ +# Validation + +This document can be used to validate the inputs and result of the execution of the upgrade transaction which you are signing. + +> [!NOTE] +> +> This document provides names for each contract address to add clarity to what you are seeing. These names will not be visible in the Tenderly UI. All that matters is that addresses and storage slot hex values match exactly what is presented in this document. + +The steps are: + +1. [Validate the Domain and Message Hashes](#expected-domain-and-message-hashes) +2. [Verifying the state changes](#state-changes) + +## Expected Domain and Message Hashes + +First, we need to validate the domain and message hashes. These values should match both the values on your ledger and the values printed to the terminal when you run the task. + +> [!CAUTION] +> +> Before signing, ensure the below hashes match what is on your ledger. +> +> ### OP Multisig - Mainnet: `0x9BA6e03D8B90dE867373Db8cF1A58d2F7F006b3A` +> +> - Domain Hash: `0x4e6a6554de0308f5ece8ff736beed8a1b876d16f5c27cac8e466d7de0c703890` +> - Message Hash: `0xdcbebfee848d6675ec39aeb26a15cd28d2b9c514621bc143854af1a0c7c715a2` + +# State Validations + +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 key values match the semantic meaning provided, which can be validated using the terminal commands provided. + +## State Overrides + +### Proxy Admin Owner - Mainnet (`0x7bB41C3008B3f03FE483B28b8DB90e19Cf07595c`) + +- **Key**: `0x0000000000000000000000000000000000000000000000000000000000000004`
+ **Override**: `0x0000000000000000000000000000000000000000000000000000000000000001`
+ **Meaning**: Override the threshold to 1 so the transaction simulation can occur. + +### OP Multisig - Mainnet (`0x9BA6e03D8B90dE867373Db8cF1A58d2F7F006b3A`) + +- **Key**: `0x0000000000000000000000000000000000000000000000000000000000000004`
+ **Override**: `0x0000000000000000000000000000000000000000000000000000000000000001`
+ **Meaning**: Override the threshold to 1 so the transaction simulation can occur. + +- **Key**: `0x1c78adc7ff77deba7d0b2df0ec6cdf879453dd4259eadcf28d08d05fef5ad52e`
+ **Override**: `0x0000000000000000000000000000000000000000000000000000000000000001`
+ **Meaning**: Simulates an approval from `msg.sender` in order for the task simulation to succeed. Note: The Key might be different as it corresponds to the slot associated with [your signer address](https://github.com/safe-global/safe-smart-account/blob/main/contracts/Safe.sol#L69). + +## Task State Changes + +### System Config (`0x73a79Fab69143498Ed3712e519A88a918e1f4072`) + +0. **Key**: `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`
+ **Before**: `0x000000000000000000000000340f923e5c7cbb2171146f64169ec9d5a9ffe647`
+ **After**: `0x00000000000000000000000078ffe9209dff6fe1c9b6f3efdf996bee60346d0e`
+ **Value Type**: address
+ **Decoded Old Value**: `0x340f923e5c7cbb2171146f64169ec9d5a9ffe647`
+ **Decoded New Value**: `0x78ffe9209dff6fe1c9b6f3efdf996bee60346d0e`
+ **Meaning**: Updates the System Config implementation address
+ +### Proxy Admin Owner - Mainnet (`0x7bB41C3008B3f03FE483B28b8DB90e19Cf07595c`) + +1. **Key**: `0x0000000000000000000000000000000000000000000000000000000000000005`
+ **Before**: `0x0000000000000000000000000000000000000000000000000000000000000009`
+ **After**: `0x000000000000000000000000000000000000000000000000000000000000000a`
+ **Value Type**: uint256
+ **Decoded Old Value**: `9`
+ **Decoded New Value**: `10`
+ **Meaning**: Increments the nonce
+ +2. **Key**: `0x2d9dddc7b6b404b6b4d49c7d3bd597c29716b1108262a9a1589c20169d68dd70`
+ **Before**: `0x0000000000000000000000000000000000000000000000000000000000000000`
+ **After**: `0x0000000000000000000000000000000000000000000000000000000000000001`
+ **Value Type**: uint256
+ **Decoded Old Value**: `0`
+ **Decoded New Value**: `1`
+ **Meaning**: Sets approvedHashes[0x9ba6e03d8b90de867373db8cf1a58d2f7f006b3a][0x4a88dda4a880fe15d81d0ba56d70a2770da4a983f625755eb9c4d7c8de2aa2a2] to 1 (approved by the OP Multisig). + +### OP Multisig - Mainnet (`0x9BA6e03D8B90dE867373Db8cF1A58d2F7F006b3A`) + +3. **Key**: `0x0000000000000000000000000000000000000000000000000000000000000005`
+ **Before**: `0x000000000000000000000000000000000000000000000000000000000000006b`
+ **After**: `0x000000000000000000000000000000000000000000000000000000000000006c`
+ **Value Type**: uint256
+ **Decoded Old Value**: `107`
+ **Decoded New Value**: `108`
+ **Meaning**: Increments the nonce
+ +4. **Key**: `0x1c78adc7ff77deba7d0b2df0ec6cdf879453dd4259eadcf28d08d05fef5ad52e`
+ **Before**: `0x0000000000000000000000000000000000000000000000000000000000000001`
+ **After**: `0x0000000000000000000000000000000000000000000000000000000000000000`
+ **Value Type**: uint256
+ **Decoded Old Value**: `1`
+ **Decoded New Value**: `0`
+ **Meaning**: Artifact of cleaning the approval from `msg.sender` that was set in the state overrides. This state change will NOT be present in the final transaction. + +### Your Signer Address + +- Nonce increment + +You can now navigate back to the [README](../README.md#4-extract-the-domain-hash-and-the-message-hash-to-approve) to continue the signing process.