From 0c92ba3a2172881b61334240c4c11a1141120a24 Mon Sep 17 00:00:00 2001 From: Nadir Akhtar Date: Tue, 5 Mar 2024 16:58:41 -0800 Subject: [PATCH 1/3] Add autogenerated template --- mainnet/2024-03-05-pause-unpause-test/.env | 2 + .../2024-03-05-pause-unpause-test/Makefile | 55 +++++++++++++++++++ .../foundry.toml | 20 +++++++ .../script/DeleteL2Outputs.s.sol | 41 ++++++++++++++ .../script/PausePortal.s.sol | 33 +++++++++++ .../script/SetBatcher.s.sol | 39 +++++++++++++ .../script/SetupNewProposer.s.sol | 42 ++++++++++++++ .../script/UnpausePortal.s.sol | 33 +++++++++++ .../script/UpdateProposer.s.sol | 38 +++++++++++++ 9 files changed, 303 insertions(+) create mode 100644 mainnet/2024-03-05-pause-unpause-test/.env create mode 100644 mainnet/2024-03-05-pause-unpause-test/Makefile create mode 100644 mainnet/2024-03-05-pause-unpause-test/foundry.toml create mode 100644 mainnet/2024-03-05-pause-unpause-test/script/DeleteL2Outputs.s.sol create mode 100644 mainnet/2024-03-05-pause-unpause-test/script/PausePortal.s.sol create mode 100644 mainnet/2024-03-05-pause-unpause-test/script/SetBatcher.s.sol create mode 100644 mainnet/2024-03-05-pause-unpause-test/script/SetupNewProposer.s.sol create mode 100644 mainnet/2024-03-05-pause-unpause-test/script/UnpausePortal.s.sol create mode 100644 mainnet/2024-03-05-pause-unpause-test/script/UpdateProposer.s.sol diff --git a/mainnet/2024-03-05-pause-unpause-test/.env b/mainnet/2024-03-05-pause-unpause-test/.env new file mode 100644 index 00000000..38d59c10 --- /dev/null +++ b/mainnet/2024-03-05-pause-unpause-test/.env @@ -0,0 +1,2 @@ +OP_COMMIT= # commit number to use of Optimism's code (https://github.com/ethereum-optimism/optimism) +BASE_CONTRACTS_COMMIT= # commit number to use of Base contract code (https://github.com/base-org/contracts) diff --git a/mainnet/2024-03-05-pause-unpause-test/Makefile b/mainnet/2024-03-05-pause-unpause-test/Makefile new file mode 100644 index 00000000..aff5bb0c --- /dev/null +++ b/mainnet/2024-03-05-pause-unpause-test/Makefile @@ -0,0 +1,55 @@ +include ../../Makefile +include ../.env +include .env + +ifndef LEDGER_ACCOUNT +override LEDGER_ACCOUNT = 0 +endif + +## +# Incident response commands +# Note that --ledger --hd-paths can be replaced with --private-key $(PRIVATE_KEY) +# in any command when using a local key. +## + +# Delete L2 Outputs Commands + +.PHONY: delete-outputs-sign +delete-outputs-sign: deps + $(GOPATH)/bin/eip712sign --ledger --hd-paths "m/44'/60'/$(LEDGER_ACCOUNT)'/0/0" -- \ + forge script --rpc-url $(L1_RPC_URL) DeleteL2Outputs --sig "sign()" + +.PHONY: delete-outputs-run +delete-outputs-run: deps + forge script --rpc-url $(L1_RPC_URL) \ + DeleteL2Outputs --sig "run(bytes)" $(SIGNATURES) \ + --ledger --hd-paths "m/44'/60'/$(LEDGER_ACCOUNT)'/0/0" \ + --broadcast + +# Pause OptimismPortal Commands + +.PHONY: pause-portal-sign +pause-portal-sign: deps + $(GOPATH)/bin/eip712sign --ledger --hd-paths "m/44'/60'/$(LEDGER_ACCOUNT)'/0/0" -- \ + forge script --rpc-url $(L1_RPC_URL) PausePortal --sig "sign()" + +.PHONY: pause-portal-run +pause-portal-run: deps + forge script --rpc-url $(L1_RPC_URL) \ + PausePortal --sig "run(bytes)" $(SIGNATURES) \ + --ledger --hd-paths "m/44'/60'/$(LEDGER_ACCOUNT)'/0/0" \ + --broadcast + +# Unpause OptimismPortal Commands + +.PHONY: unpause-portal-sign +unpause-portal-sign: deps + $(GOPATH)/bin/eip712sign --ledger --hd-paths "m/44'/60'/$(LEDGER_ACCOUNT)'/0/0" -- \ + forge script --rpc-url $(L1_RPC_URL) UnpausePortal --sig "sign()" + +.PHONY: unpause-portal-run +unpause-portal-run: deps + forge script --rpc-url $(L1_RPC_URL) \ + UnpausePortal --sig "run(bytes)" $(SIGNATURES) \ + --ledger --hd-paths "m/44'/60'/$(LEDGER_ACCOUNT)'/0/0" \ + --broadcast \ No newline at end of file diff --git a/mainnet/2024-03-05-pause-unpause-test/foundry.toml b/mainnet/2024-03-05-pause-unpause-test/foundry.toml new file mode 100644 index 00000000..0be0575a --- /dev/null +++ b/mainnet/2024-03-05-pause-unpause-test/foundry.toml @@ -0,0 +1,20 @@ +[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 = true +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/' +] + +# See more config options https://github.com/foundry-rs/foundry/tree/master/config \ No newline at end of file diff --git a/mainnet/2024-03-05-pause-unpause-test/script/DeleteL2Outputs.s.sol b/mainnet/2024-03-05-pause-unpause-test/script/DeleteL2Outputs.s.sol new file mode 100644 index 00000000..07d034f3 --- /dev/null +++ b/mainnet/2024-03-05-pause-unpause-test/script/DeleteL2Outputs.s.sol @@ -0,0 +1,41 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.15; + +import "@eth-optimism-bedrock/contracts/L1/L2OutputOracle.sol"; +import "@base-contracts/src/Challenger1of2.sol"; +import "@base-contracts/script/universal/MultisigBuilder.sol"; + +contract DeleteL2Outputs is MultisigBuilder { + address constant internal L2_OUTPUT_ORACLE_PROXY = vm.envAddress("L2_OUTPUT_ORACLE_PROXY"); // TODO: define L2_OUTPUT_ORACLE_PROXY=xxx in the .env file + address constant internal CHALLENGER = vm.envAddress("CHALLENGER"); // TODO: define CHALLENGER=xxx in the .env file + address constant internal SAFE = vm.envAddress("SAFE"); // TODO: define SAFE=xxx in the .env file - ie the multisig which is signer on challenger> + uint256 constant internal L2_OUTPUT_INDEX = vm.envAddress("L2_OUTPUT_INDEX"); // TODO: define L2_OUTPUT_INDEX=xxx in the .env file - this is the index start deleting from (everything after will be deleted) + + function _postCheck() internal override view { + L2OutputOracle l2OutputOracle = L2OutputOracle(L2_OUTPUT_ORACLE_PROXY); + require(l2OutputOracle.latestOutputIndex() < L2_OUTPUT_INDEX, "DeleteL2Outputs: L2OutputOracle did not get deleted"); + } + + function _buildCalls() internal override view returns (IMulticall3.Call3[] memory) { + IMulticall3.Call3[] memory calls = new IMulticall3.Call3[](1); + + L2OutputOracle l2OutputOracle = L2OutputOracle(L2_OUTPUT_ORACLE_PROXY); + bytes memory deleteL2OutputData = abi.encodeCall( + L2OutputOracle.deleteL2Outputs, (L2_OUTPUT_INDEX) + ); + + calls[0] = IMulticall3.Call3({ + target: CHALLENGER, + allowFailure: false, + callData: abi.encodeCall( + Challenger1of2.execute, (deleteL2OutputData) + ) + }); + + return calls; + } + + function _ownerSafe() internal override view returns (address) { + return SAFE; + } +} diff --git a/mainnet/2024-03-05-pause-unpause-test/script/PausePortal.s.sol b/mainnet/2024-03-05-pause-unpause-test/script/PausePortal.s.sol new file mode 100644 index 00000000..cba5e253 --- /dev/null +++ b/mainnet/2024-03-05-pause-unpause-test/script/PausePortal.s.sol @@ -0,0 +1,33 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.15; + +import "@base-contracts/script/universal/MultisigBuilder.sol"; +import "@eth-optimism-bedrock/contracts/L1/OptimismPortal.sol"; + +contract PausePortal is MultisigBuilder { + address constant internal OPTIMISM_PORTAL_PROXY = vm.envAddress("OPTIMISM_PORTAL_PROXY"); // TODO: define OPTIMISM_PORTAL_PROXY=xxx in the .env file + address constant internal GUARDIAN = vm.envAddress("GUARDIAN"); // TODO: define GUARDIAN=xxx in the .env file + + function _postCheck() internal override view { + OptimismPortal optimismPortal = OptimismPortal(payable(OPTIMISM_PORTAL_PROXY)); + require(optimismPortal.paused() == true, "PausePortal: Portal did not get paused"); + } + + function _buildCalls() internal override view returns (IMulticall3.Call3[] memory) { + IMulticall3.Call3[] memory calls = new IMulticall3.Call3[](1); + + calls[0] = IMulticall3.Call3({ + target: OPTIMISM_PORTAL_PROXY, + allowFailure: false, + callData: abi.encodeCall( + OptimismPortal.pause, () + ) + }); + + return calls; + } + + function _ownerSafe() internal override view returns (address) { + return GUARDIAN; + } +} diff --git a/mainnet/2024-03-05-pause-unpause-test/script/SetBatcher.s.sol b/mainnet/2024-03-05-pause-unpause-test/script/SetBatcher.s.sol new file mode 100644 index 00000000..c8ec7900 --- /dev/null +++ b/mainnet/2024-03-05-pause-unpause-test/script/SetBatcher.s.sol @@ -0,0 +1,39 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.15; + +import "@eth-optimism-bedrock/src/L1/SystemConfig.sol"; +import "@base-contracts/script/universal/MultisigBuilder.sol"; + +contract SetBatcherAddr is MultisigBuilder { + address constant internal NEW_BATCHER = vm.envAddress("NEW_BATCHER_ADDR"); // TODO: define NEW_BATCHER_ADDR=xxx in the .env file + address constant internal SYSTEM_CONFIG = vm.envAddress("SYSTEM_CONFIG_ADDR"); // TODO: define SYSTEM_CONFIG_ADDR=xxx in the .env file + address internal SYSTEM_CONFIG_OWNER = vm.envAddress("SYSTEM_CONFIG_OWNER"); // TODO: define SYSTEM_CONFIG_OWNER=xxx in the .env file + + + function _postCheck() internal override view { + SystemConfig systemConfig = SystemConfig(SYSTEM_CONFIG); + bytes32 batcherHash = bytes32(abi.encode(NEW_BATCHER)); + require(systemConfig.batcherHash() == batcherHash, "SetBatcherAddr: batcherHash not set correctly"); + } + + function _buildCalls() internal override view returns (IMulticall3.Call3[] memory) { + IMulticall3.Call3[] memory calls = new IMulticall3.Call3[](1); + + bytes32 batcherHash = bytes32(abi.encode(NEW_BATCHER)); + + calls[0] = IMulticall3.Call3({ + target: SYSTEM_CONFIG, + allowFailure: false, + callData: abi.encodeCall( + SystemConfig.setBatcherHash, + (batcherHash) + ) + }); + + return calls; + } + + function _ownerSafe() internal override view returns (address) { + return SYSTEM_CONFIG_OWNER; + } +} \ No newline at end of file diff --git a/mainnet/2024-03-05-pause-unpause-test/script/SetupNewProposer.s.sol b/mainnet/2024-03-05-pause-unpause-test/script/SetupNewProposer.s.sol new file mode 100644 index 00000000..7903b2ed --- /dev/null +++ b/mainnet/2024-03-05-pause-unpause-test/script/SetupNewProposer.s.sol @@ -0,0 +1,42 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.15; + +import "@eth-optimism-bedrock/contracts/L1/L2OutputOracle.sol"; +import "forge-std/Script.sol"; + +contract SetupNewProposer is Script { + address constant internal NEW_PROPOSER = vm.envUint("NEW_PROPOSER"); // TODO: define NEW_PROPOSER=xxx in the .env file + address constant internal DEPLOYER = vm.envAddress("DEPLOYER"); // TODO: define DEPLOYER=xxx in the .env file + address constant internal L2_OUTPUT_ORACLE_PROXY = vm.envAddress("L2_OUTPUT_ORACLE_PROXY"); // TODO: define L2_OUTPUT_ORACLE_PROXY=xxx in the .env file + + function run() public { + L2OutputOracle existingL2OO = L2OutputOracle(L2_OUTPUT_ORACLE_PROXY); + uint256 oldSubmissionInterval = existingL2OO.SUBMISSION_INTERVAL(); + uint256 oldL2BlockTime = existingL2OO.L2_BLOCK_TIME(); + uint256 oldFinalizationPeriodSeconds = existingL2OO.FINALIZATION_PERIOD_SECONDS(); + uint256 startingBlockNumber = existingL2OO.startingBlockNumber(); + uint256 startingTimestamp = existingL2OO.startingTimestamp(); + address oldProposer = existingL2OO.PROPOSER(); + address oldChallenger = existingL2OO.CHALLENGER(); + + console.log(oldProposer); + console.log(NEW_PROPOSER); + + // Deploy L2OutputOracle new implementation wiht the new submission interval + vm.broadcast(DEPLOYER); + L2OutputOracle l2OutputOracleImpl = new L2OutputOracle({ + _submissionInterval: oldSubmissionInterval, + _l2BlockTime: oldL2BlockTime, + _startingBlockNumber: startingBlockNumber, + _startingTimestamp: startingTimestamp, + _proposer: NEW_PROPOSER, + _challenger: oldChallenger, + _finalizationPeriodSeconds: oldFinalizationPeriodSeconds + }); + + require(l2OutputOracleImpl.L2_BLOCK_TIME() == oldL2BlockTime, "Deploy: l2OutputOracle l2BlockTime is incorrect"); + require(l2OutputOracleImpl.PROPOSER() == NEW_PROPOSER, "Deploy: l2OutputOracle proposer is incorrect"); + + console.logAddress(address(l2OutputOracleImpl)); + } +} \ No newline at end of file diff --git a/mainnet/2024-03-05-pause-unpause-test/script/UnpausePortal.s.sol b/mainnet/2024-03-05-pause-unpause-test/script/UnpausePortal.s.sol new file mode 100644 index 00000000..0516fe30 --- /dev/null +++ b/mainnet/2024-03-05-pause-unpause-test/script/UnpausePortal.s.sol @@ -0,0 +1,33 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.15; + +import "@base-contracts/script/universal/MultisigBuilder.sol"; +import "@eth-optimism-bedrock/contracts/L1/OptimismPortal.sol"; + +contract UnpausePortal is MultisigBuilder { + address constant internal OPTIMISM_PORTAL_PROXY = vm.envAddress("OPTIMISM_PORTAL_PROXY"); // TODO: define OPTIMISM_PORTAL_PROXY=xxx in the .env file + address constant internal GUARDIAN = vm.envAddress("GUARDIAN"); // TODO: define GUARDIAN=xxx in the .env file + + function _postCheck() internal override view { + OptimismPortal optimismPortal = OptimismPortal(payable(OPTIMISM_PORTAL_PROXY)); + require(optimismPortal.paused() == false, "UnpausePortal: Portal did not get unpaused"); + } + + function _buildCalls() internal override view returns (IMulticall3.Call3[] memory) { + IMulticall3.Call3[] memory calls = new IMulticall3.Call3[](1); + + calls[0] = IMulticall3.Call3({ + target: OPTIMISM_PORTAL_PROXY, + allowFailure: false, + callData: abi.encodeCall( + OptimismPortal.unpause, () + ) + }); + + return calls; + } + + function _ownerSafe() internal override view returns (address) { + return GUARDIAN; + } +} diff --git a/mainnet/2024-03-05-pause-unpause-test/script/UpdateProposer.s.sol b/mainnet/2024-03-05-pause-unpause-test/script/UpdateProposer.s.sol new file mode 100644 index 00000000..53aa4ad5 --- /dev/null +++ b/mainnet/2024-03-05-pause-unpause-test/script/UpdateProposer.s.sol @@ -0,0 +1,38 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.15; + +import "@eth-optimism-bedrock/src/universal/ProxyAdmin.sol"; +import "@base-contracts/script/universal/NestedMultisigBuilder.sol"; + +contract UpdateProposer is NestedMultisigBuilder { + // TODO: this assumes a new L2OutputOracle implementation contract has already been deployed. See SetupNewProposer.s.sol. + + address internal PROXY_ADMIN_CONTRACT = vm.envAddress("L1_PROXY_ADMIN"); // TODO: define L1_PROXY_ADMIN=xxx in the .env file + address internal PROXY_ADMIN_OWNER = vm.envAddress("L1_NESTED_SAFE"); // TODO: define L1_NESTED_SAFE=xxx in the .env file + address internal L2_OUTPUT_PROPOSER = vm.envAddress("L2_OUTPUT_PROPOSER"); // TODO: define L2_OUTPUT_PROPOSER=xxx in the .env file + address internal L2_OUTPUT_PROPOSER_NEW_IMPL = vm.envAddress("L2_OUTPUT_PROPOSER_NEW_IMPL"); // TODO: define L2_OUTPUT_PROPOSER_NEW_IMPL=xxx in the .env file + + function _postCheck() internal override view { + ProxyAdmin proxyAdmin = ProxyAdmin(PROXY_ADMIN_CONTRACT); + require(proxyAdmin.getProxyImplementation(L2_OUTPUT_PROPOSER).codehash == L2_OUTPUT_PROPOSER_NEW_IMPL.codehash); + } + + function _buildCalls() internal override view returns (IMulticall3.Call3[] memory) { + IMulticall3.Call3[] memory calls = new IMulticall3.Call3[](1); + + calls[0] = IMulticall3.Call3({ + target: PROXY_ADMIN_CONTRACT, + allowFailure: false, + callData: abi.encodeCall( + ProxyAdmin.upgrade, + (payable(L2_OUTPUT_PROPOSER), L2_OUTPUT_PROPOSER_NEW_IMPL) + ) + }); + + return calls; + } + + function _ownerSafe() internal override view returns (address) { + return PROXY_ADMIN_OWNER; + } +} \ No newline at end of file From b1aea7968bc7990f9ed316b0a241ca23e6731b8f Mon Sep 17 00:00:00 2001 From: Nadir Akhtar Date: Tue, 5 Mar 2024 16:59:47 -0800 Subject: [PATCH 2/3] Remove unneeded files and commands --- .../2024-03-05-pause-unpause-test/Makefile | 16 +------ .../script/DeleteL2Outputs.s.sol | 41 ------------------ .../script/SetBatcher.s.sol | 39 ----------------- .../script/SetupNewProposer.s.sol | 42 ------------------- .../script/UpdateProposer.s.sol | 38 ----------------- 5 files changed, 1 insertion(+), 175 deletions(-) delete mode 100644 mainnet/2024-03-05-pause-unpause-test/script/DeleteL2Outputs.s.sol delete mode 100644 mainnet/2024-03-05-pause-unpause-test/script/SetBatcher.s.sol delete mode 100644 mainnet/2024-03-05-pause-unpause-test/script/SetupNewProposer.s.sol delete mode 100644 mainnet/2024-03-05-pause-unpause-test/script/UpdateProposer.s.sol diff --git a/mainnet/2024-03-05-pause-unpause-test/Makefile b/mainnet/2024-03-05-pause-unpause-test/Makefile index aff5bb0c..b415c9c4 100644 --- a/mainnet/2024-03-05-pause-unpause-test/Makefile +++ b/mainnet/2024-03-05-pause-unpause-test/Makefile @@ -12,20 +12,6 @@ endif # in any command when using a local key. ## -# Delete L2 Outputs Commands - -.PHONY: delete-outputs-sign -delete-outputs-sign: deps - $(GOPATH)/bin/eip712sign --ledger --hd-paths "m/44'/60'/$(LEDGER_ACCOUNT)'/0/0" -- \ - forge script --rpc-url $(L1_RPC_URL) DeleteL2Outputs --sig "sign()" - -.PHONY: delete-outputs-run -delete-outputs-run: deps - forge script --rpc-url $(L1_RPC_URL) \ - DeleteL2Outputs --sig "run(bytes)" $(SIGNATURES) \ - --ledger --hd-paths "m/44'/60'/$(LEDGER_ACCOUNT)'/0/0" \ - --broadcast - # Pause OptimismPortal Commands .PHONY: pause-portal-sign @@ -52,4 +38,4 @@ unpause-portal-run: deps forge script --rpc-url $(L1_RPC_URL) \ UnpausePortal --sig "run(bytes)" $(SIGNATURES) \ --ledger --hd-paths "m/44'/60'/$(LEDGER_ACCOUNT)'/0/0" \ - --broadcast \ No newline at end of file + --broadcast diff --git a/mainnet/2024-03-05-pause-unpause-test/script/DeleteL2Outputs.s.sol b/mainnet/2024-03-05-pause-unpause-test/script/DeleteL2Outputs.s.sol deleted file mode 100644 index 07d034f3..00000000 --- a/mainnet/2024-03-05-pause-unpause-test/script/DeleteL2Outputs.s.sol +++ /dev/null @@ -1,41 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity 0.8.15; - -import "@eth-optimism-bedrock/contracts/L1/L2OutputOracle.sol"; -import "@base-contracts/src/Challenger1of2.sol"; -import "@base-contracts/script/universal/MultisigBuilder.sol"; - -contract DeleteL2Outputs is MultisigBuilder { - address constant internal L2_OUTPUT_ORACLE_PROXY = vm.envAddress("L2_OUTPUT_ORACLE_PROXY"); // TODO: define L2_OUTPUT_ORACLE_PROXY=xxx in the .env file - address constant internal CHALLENGER = vm.envAddress("CHALLENGER"); // TODO: define CHALLENGER=xxx in the .env file - address constant internal SAFE = vm.envAddress("SAFE"); // TODO: define SAFE=xxx in the .env file - ie the multisig which is signer on challenger> - uint256 constant internal L2_OUTPUT_INDEX = vm.envAddress("L2_OUTPUT_INDEX"); // TODO: define L2_OUTPUT_INDEX=xxx in the .env file - this is the index start deleting from (everything after will be deleted) - - function _postCheck() internal override view { - L2OutputOracle l2OutputOracle = L2OutputOracle(L2_OUTPUT_ORACLE_PROXY); - require(l2OutputOracle.latestOutputIndex() < L2_OUTPUT_INDEX, "DeleteL2Outputs: L2OutputOracle did not get deleted"); - } - - function _buildCalls() internal override view returns (IMulticall3.Call3[] memory) { - IMulticall3.Call3[] memory calls = new IMulticall3.Call3[](1); - - L2OutputOracle l2OutputOracle = L2OutputOracle(L2_OUTPUT_ORACLE_PROXY); - bytes memory deleteL2OutputData = abi.encodeCall( - L2OutputOracle.deleteL2Outputs, (L2_OUTPUT_INDEX) - ); - - calls[0] = IMulticall3.Call3({ - target: CHALLENGER, - allowFailure: false, - callData: abi.encodeCall( - Challenger1of2.execute, (deleteL2OutputData) - ) - }); - - return calls; - } - - function _ownerSafe() internal override view returns (address) { - return SAFE; - } -} diff --git a/mainnet/2024-03-05-pause-unpause-test/script/SetBatcher.s.sol b/mainnet/2024-03-05-pause-unpause-test/script/SetBatcher.s.sol deleted file mode 100644 index c8ec7900..00000000 --- a/mainnet/2024-03-05-pause-unpause-test/script/SetBatcher.s.sol +++ /dev/null @@ -1,39 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity 0.8.15; - -import "@eth-optimism-bedrock/src/L1/SystemConfig.sol"; -import "@base-contracts/script/universal/MultisigBuilder.sol"; - -contract SetBatcherAddr is MultisigBuilder { - address constant internal NEW_BATCHER = vm.envAddress("NEW_BATCHER_ADDR"); // TODO: define NEW_BATCHER_ADDR=xxx in the .env file - address constant internal SYSTEM_CONFIG = vm.envAddress("SYSTEM_CONFIG_ADDR"); // TODO: define SYSTEM_CONFIG_ADDR=xxx in the .env file - address internal SYSTEM_CONFIG_OWNER = vm.envAddress("SYSTEM_CONFIG_OWNER"); // TODO: define SYSTEM_CONFIG_OWNER=xxx in the .env file - - - function _postCheck() internal override view { - SystemConfig systemConfig = SystemConfig(SYSTEM_CONFIG); - bytes32 batcherHash = bytes32(abi.encode(NEW_BATCHER)); - require(systemConfig.batcherHash() == batcherHash, "SetBatcherAddr: batcherHash not set correctly"); - } - - function _buildCalls() internal override view returns (IMulticall3.Call3[] memory) { - IMulticall3.Call3[] memory calls = new IMulticall3.Call3[](1); - - bytes32 batcherHash = bytes32(abi.encode(NEW_BATCHER)); - - calls[0] = IMulticall3.Call3({ - target: SYSTEM_CONFIG, - allowFailure: false, - callData: abi.encodeCall( - SystemConfig.setBatcherHash, - (batcherHash) - ) - }); - - return calls; - } - - function _ownerSafe() internal override view returns (address) { - return SYSTEM_CONFIG_OWNER; - } -} \ No newline at end of file diff --git a/mainnet/2024-03-05-pause-unpause-test/script/SetupNewProposer.s.sol b/mainnet/2024-03-05-pause-unpause-test/script/SetupNewProposer.s.sol deleted file mode 100644 index 7903b2ed..00000000 --- a/mainnet/2024-03-05-pause-unpause-test/script/SetupNewProposer.s.sol +++ /dev/null @@ -1,42 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity 0.8.15; - -import "@eth-optimism-bedrock/contracts/L1/L2OutputOracle.sol"; -import "forge-std/Script.sol"; - -contract SetupNewProposer is Script { - address constant internal NEW_PROPOSER = vm.envUint("NEW_PROPOSER"); // TODO: define NEW_PROPOSER=xxx in the .env file - address constant internal DEPLOYER = vm.envAddress("DEPLOYER"); // TODO: define DEPLOYER=xxx in the .env file - address constant internal L2_OUTPUT_ORACLE_PROXY = vm.envAddress("L2_OUTPUT_ORACLE_PROXY"); // TODO: define L2_OUTPUT_ORACLE_PROXY=xxx in the .env file - - function run() public { - L2OutputOracle existingL2OO = L2OutputOracle(L2_OUTPUT_ORACLE_PROXY); - uint256 oldSubmissionInterval = existingL2OO.SUBMISSION_INTERVAL(); - uint256 oldL2BlockTime = existingL2OO.L2_BLOCK_TIME(); - uint256 oldFinalizationPeriodSeconds = existingL2OO.FINALIZATION_PERIOD_SECONDS(); - uint256 startingBlockNumber = existingL2OO.startingBlockNumber(); - uint256 startingTimestamp = existingL2OO.startingTimestamp(); - address oldProposer = existingL2OO.PROPOSER(); - address oldChallenger = existingL2OO.CHALLENGER(); - - console.log(oldProposer); - console.log(NEW_PROPOSER); - - // Deploy L2OutputOracle new implementation wiht the new submission interval - vm.broadcast(DEPLOYER); - L2OutputOracle l2OutputOracleImpl = new L2OutputOracle({ - _submissionInterval: oldSubmissionInterval, - _l2BlockTime: oldL2BlockTime, - _startingBlockNumber: startingBlockNumber, - _startingTimestamp: startingTimestamp, - _proposer: NEW_PROPOSER, - _challenger: oldChallenger, - _finalizationPeriodSeconds: oldFinalizationPeriodSeconds - }); - - require(l2OutputOracleImpl.L2_BLOCK_TIME() == oldL2BlockTime, "Deploy: l2OutputOracle l2BlockTime is incorrect"); - require(l2OutputOracleImpl.PROPOSER() == NEW_PROPOSER, "Deploy: l2OutputOracle proposer is incorrect"); - - console.logAddress(address(l2OutputOracleImpl)); - } -} \ No newline at end of file diff --git a/mainnet/2024-03-05-pause-unpause-test/script/UpdateProposer.s.sol b/mainnet/2024-03-05-pause-unpause-test/script/UpdateProposer.s.sol deleted file mode 100644 index 53aa4ad5..00000000 --- a/mainnet/2024-03-05-pause-unpause-test/script/UpdateProposer.s.sol +++ /dev/null @@ -1,38 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity 0.8.15; - -import "@eth-optimism-bedrock/src/universal/ProxyAdmin.sol"; -import "@base-contracts/script/universal/NestedMultisigBuilder.sol"; - -contract UpdateProposer is NestedMultisigBuilder { - // TODO: this assumes a new L2OutputOracle implementation contract has already been deployed. See SetupNewProposer.s.sol. - - address internal PROXY_ADMIN_CONTRACT = vm.envAddress("L1_PROXY_ADMIN"); // TODO: define L1_PROXY_ADMIN=xxx in the .env file - address internal PROXY_ADMIN_OWNER = vm.envAddress("L1_NESTED_SAFE"); // TODO: define L1_NESTED_SAFE=xxx in the .env file - address internal L2_OUTPUT_PROPOSER = vm.envAddress("L2_OUTPUT_PROPOSER"); // TODO: define L2_OUTPUT_PROPOSER=xxx in the .env file - address internal L2_OUTPUT_PROPOSER_NEW_IMPL = vm.envAddress("L2_OUTPUT_PROPOSER_NEW_IMPL"); // TODO: define L2_OUTPUT_PROPOSER_NEW_IMPL=xxx in the .env file - - function _postCheck() internal override view { - ProxyAdmin proxyAdmin = ProxyAdmin(PROXY_ADMIN_CONTRACT); - require(proxyAdmin.getProxyImplementation(L2_OUTPUT_PROPOSER).codehash == L2_OUTPUT_PROPOSER_NEW_IMPL.codehash); - } - - function _buildCalls() internal override view returns (IMulticall3.Call3[] memory) { - IMulticall3.Call3[] memory calls = new IMulticall3.Call3[](1); - - calls[0] = IMulticall3.Call3({ - target: PROXY_ADMIN_CONTRACT, - allowFailure: false, - callData: abi.encodeCall( - ProxyAdmin.upgrade, - (payable(L2_OUTPUT_PROPOSER), L2_OUTPUT_PROPOSER_NEW_IMPL) - ) - }); - - return calls; - } - - function _ownerSafe() internal override view returns (address) { - return PROXY_ADMIN_OWNER; - } -} \ No newline at end of file From 5694a3fd1c5e2b9ca948ca54f5c86bcb994aa876 Mon Sep 17 00:00:00 2001 From: Nadir Akhtar Date: Tue, 5 Mar 2024 17:13:30 -0800 Subject: [PATCH 3/3] Add env values and refactor imports --- mainnet/2024-03-05-pause-unpause-test/.env | 7 +++++-- mainnet/2024-03-05-pause-unpause-test/foundry.toml | 2 +- .../2024-03-05-pause-unpause-test/script/PausePortal.s.sol | 6 +++--- .../script/UnpausePortal.s.sol | 6 +++--- 4 files changed, 12 insertions(+), 9 deletions(-) diff --git a/mainnet/2024-03-05-pause-unpause-test/.env b/mainnet/2024-03-05-pause-unpause-test/.env index 38d59c10..cbd03961 100644 --- a/mainnet/2024-03-05-pause-unpause-test/.env +++ b/mainnet/2024-03-05-pause-unpause-test/.env @@ -1,2 +1,5 @@ -OP_COMMIT= # commit number to use of Optimism's code (https://github.com/ethereum-optimism/optimism) -BASE_CONTRACTS_COMMIT= # commit number to use of Base contract code (https://github.com/base-org/contracts) +OP_COMMIT=10b06fb49861053999a89533d846ee5c2ccb33e1 +BASE_CONTRACTS_COMMIT=fe492be3478134b2305c207a12b153eca04148c0 + +OPTIMISM_PORTAL_PROXY=0x49048044D57e1C92A77f79988d21Fa8fAF74E97e +GUARDIAN=0x14536667Cd30e52C0b458BaACcB9faDA7046E056 diff --git a/mainnet/2024-03-05-pause-unpause-test/foundry.toml b/mainnet/2024-03-05-pause-unpause-test/foundry.toml index 0be0575a..70c0f39f 100644 --- a/mainnet/2024-03-05-pause-unpause-test/foundry.toml +++ b/mainnet/2024-03-05-pause-unpause-test/foundry.toml @@ -17,4 +17,4 @@ remappings = [ 'solady/=lib/solady/src/' ] -# See more config options https://github.com/foundry-rs/foundry/tree/master/config \ No newline at end of file +# See more config options https://github.com/foundry-rs/foundry/tree/master/config diff --git a/mainnet/2024-03-05-pause-unpause-test/script/PausePortal.s.sol b/mainnet/2024-03-05-pause-unpause-test/script/PausePortal.s.sol index cba5e253..7b7bcdd6 100644 --- a/mainnet/2024-03-05-pause-unpause-test/script/PausePortal.s.sol +++ b/mainnet/2024-03-05-pause-unpause-test/script/PausePortal.s.sol @@ -2,11 +2,11 @@ pragma solidity 0.8.15; import "@base-contracts/script/universal/MultisigBuilder.sol"; -import "@eth-optimism-bedrock/contracts/L1/OptimismPortal.sol"; +import "@eth-optimism-bedrock/src/L1/OptimismPortal.sol"; contract PausePortal is MultisigBuilder { - address constant internal OPTIMISM_PORTAL_PROXY = vm.envAddress("OPTIMISM_PORTAL_PROXY"); // TODO: define OPTIMISM_PORTAL_PROXY=xxx in the .env file - address constant internal GUARDIAN = vm.envAddress("GUARDIAN"); // TODO: define GUARDIAN=xxx in the .env file + address internal OPTIMISM_PORTAL_PROXY = vm.envAddress("OPTIMISM_PORTAL_PROXY"); + address internal GUARDIAN = vm.envAddress("GUARDIAN"); function _postCheck() internal override view { OptimismPortal optimismPortal = OptimismPortal(payable(OPTIMISM_PORTAL_PROXY)); diff --git a/mainnet/2024-03-05-pause-unpause-test/script/UnpausePortal.s.sol b/mainnet/2024-03-05-pause-unpause-test/script/UnpausePortal.s.sol index 0516fe30..0acf2e77 100644 --- a/mainnet/2024-03-05-pause-unpause-test/script/UnpausePortal.s.sol +++ b/mainnet/2024-03-05-pause-unpause-test/script/UnpausePortal.s.sol @@ -2,11 +2,11 @@ pragma solidity 0.8.15; import "@base-contracts/script/universal/MultisigBuilder.sol"; -import "@eth-optimism-bedrock/contracts/L1/OptimismPortal.sol"; +import "@eth-optimism-bedrock/src/L1/OptimismPortal.sol"; contract UnpausePortal is MultisigBuilder { - address constant internal OPTIMISM_PORTAL_PROXY = vm.envAddress("OPTIMISM_PORTAL_PROXY"); // TODO: define OPTIMISM_PORTAL_PROXY=xxx in the .env file - address constant internal GUARDIAN = vm.envAddress("GUARDIAN"); // TODO: define GUARDIAN=xxx in the .env file + address internal OPTIMISM_PORTAL_PROXY = vm.envAddress("OPTIMISM_PORTAL_PROXY"); + address internal GUARDIAN = vm.envAddress("GUARDIAN"); function _postCheck() internal override view { OptimismPortal optimismPortal = OptimismPortal(payable(OPTIMISM_PORTAL_PROXY));