Skip to content

Commit 4694385

Browse files
authored
devent to alpha, batcher proposer upgrade scripts, styling (#114)
1 parent 5c5a7b0 commit 4694385

File tree

175 files changed

+134
-30
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

175 files changed

+134
-30
lines changed

README.md

+2-3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
NETWORK=goerli-devnet
1+
NETWORK=goerli-alpha
22
L1_RPC_URL=https://nodes-proxy-development.cbhq.net/geth/testnet-archive-goerli-lighthouse
33
L2_RPC_URL=https://base-goerli-alpha.cbhq.net
44
L2_CHAIN_ID=11763071
File renamed without changes.

sepolia-devnet/.env renamed to sepolia-alpha/.env

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
NETWORK=sepolia-devnet
1+
NETWORK=sepolia-alpha
22
L1_RPC_URL=https://ethereum-full-sepolia-k8s-dev.cbhq.net
33
L2_RPC_URL=https://base-sepolia-alpha.cbhq.net
44
L1_CHAIN_ID=11155111

setup-templates/template-generic/script/TransferOwner.s.sol

+3-3
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@ import "@base-contracts/script/universal/MultisigBuilder.sol";
88

99
// TODO: alternatively, can use NestedMultisigBuilder if existing owner is nested safe
1010
contract TransferOwner is MultisigBuilder {
11-
// address constant internal PROXY_CONTRACT = <TODO: fill in address of Proxy contract which is changing ownership>;
12-
// address constant internal OLD_OWNER = <TODO: fill in existing owner address>;
13-
// address constant internal NEW_OWNER = <TODO: fill in new owner address>;
11+
address constant internal PROXY_CONTRACT = vm.envAddress("PROXY_CONTRACT"); // TODO: define PROXY_CONTRACT=xxx in the .env file which is the Proxy contract changing ownership
12+
address constant internal OLD_OWNER = vm.envAddress("OLD_OWNER"); // TODO: define existing owner as OLD_OWNER=xxx in the .env file
13+
address constant internal NEW_OWNER = vm.envAddress("NEW_OWNER"); // TODO: define new owner as NEW_OWNER=xxx in the .env file
1414

1515
function _postCheck() internal override view {
1616
ProxyAdmin proxyAdmin = ProxyAdmin(PROXY_CONTRACT);

setup-templates/template-incident/script/DeleteL2Outputs.s.sol

+4-10
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,10 @@ import "@base-contracts/src/Challenger1of2.sol";
66
import "@base-contracts/script/universal/MultisigBuilder.sol";
77

88
contract DeleteL2Outputs is MultisigBuilder {
9-
// address constant internal L2_OUTPUT_ORACLE_PROXY = <TODO: insert L2OutputOracleProxy address>;
10-
// mainnet value: 0x56315b90c40730925ec5485cf004d835058518A0
11-
// goerli value: 0x2A35891ff30313CcFa6CE88dcf3858bb075A2298
12-
// address constant internal CHALLENGER = <TODO: insert challenger contract address>;
13-
// mainnet value: TBD
14-
// goerli value: 0xf30b40411c4d76228092E7eCdc1593c996b13D22
15-
// address constant internal SAFE = <TODO: insert multisig which is signer on challenger>;
16-
// mainnet value: 0x14536667Cd30e52C0b458BaACcB9faDA7046E056
17-
// goerli value: 0x4C35Ca57616E0d5fD808574772f632D8dA4eadCa
18-
// uint256 constant internal L2_OUTPUT_INDEX = <TODO: insert l2OuputIndex to start deleting from - everything after will be deleted>;
9+
address constant internal L2_OUTPUT_ORACLE_PROXY = vm.envAddress("L2_OUTPUT_ORACLE_PROXY"); // TODO: define L2_OUTPUT_ORACLE_PROXY=xxx in the .env file
10+
address constant internal CHALLENGER = vm.envAddress("CHALLENGER"); // TODO: define CHALLENGER=xxx in the .env file
11+
address constant internal SAFE = vm.envAddress("SAFE"); // TODO: define SAFE=xxx in the .env file - ie the multisig which is signer on challenger>
12+
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)
1913

2014
function _postCheck() internal override view {
2115
L2OutputOracle l2OutputOracle = L2OutputOracle(L2_OUTPUT_ORACLE_PROXY);

setup-templates/template-incident/script/PausePortal.s.sol

+2-6
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,8 @@ import "@base-contracts/script/universal/MultisigBuilder.sol";
55
import "@eth-optimism-bedrock/contracts/L1/OptimismPortal.sol";
66

77
contract PausePortal is MultisigBuilder {
8-
// address constant internal OPTIMISM_PORTAL_PROXY = <TODO: insert OptimismPortalProxy address>;
9-
// mainnet value: 0x49048044D57e1C92A77f79988d21Fa8fAF74E97e
10-
// goerli value: 0xe93c8cD0D409341205A592f8c4Ac1A5fe5585cfA
11-
// address constant internal GUARDIAN = <TODO: insert multisig which is Guardian address>;
12-
// mainnet value: 0x14536667Cd30e52C0b458BaACcB9faDA7046E056
13-
// goerli value: 0x4C35Ca57616E0d5fD808574772f632D8dA4eadCa
8+
address constant internal OPTIMISM_PORTAL_PROXY = vm.envAddress("OPTIMISM_PORTAL_PROXY"); // TODO: define OPTIMISM_PORTAL_PROXY=xxx in the .env file
9+
address constant internal GUARDIAN = vm.envAddress("GUARDIAN"); // TODO: define GUARDIAN=xxx in the .env file
1410

1511
function _postCheck() internal override view {
1612
OptimismPortal optimismPortal = OptimismPortal(payable(OPTIMISM_PORTAL_PROXY));
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
// SPDX-License-Identifier: MIT
2+
pragma solidity 0.8.15;
3+
4+
import "@eth-optimism-bedrock/src/L1/SystemConfig.sol";
5+
import "@base-contracts/script/universal/MultisigBuilder.sol";
6+
7+
contract SetBatcherAddr is MultisigBuilder {
8+
address constant internal NEW_BATCHER = vm.envAddress("NEW_BATCHER_ADDR"); // TODO: define NEW_BATCHER_ADDR=xxx in the .env file
9+
address constant internal SYSTEM_CONFIG = vm.envAddress("SYSTEM_CONFIG_ADDR"); // TODO: define SYSTEM_CONFIG_ADDR=xxx in the .env file
10+
address internal SYSTEM_CONFIG_OWNER = vm.envAddress("SYSTEM_CONFIG_OWNER"); // TODO: define SYSTEM_CONFIG_OWNER=xxx in the .env file
11+
12+
13+
function _postCheck() internal override view {
14+
SystemConfig systemConfig = SystemConfig(SYSTEM_CONFIG);
15+
bytes32 batcherHash = bytes32(abi.encode(NEW_BATCHER));
16+
require(systemConfig.batcherHash() == batcherHash, "SetBatcherAddr: batcherHash not set correctly");
17+
}
18+
19+
function _buildCalls() internal override view returns (IMulticall3.Call3[] memory) {
20+
IMulticall3.Call3[] memory calls = new IMulticall3.Call3[](1);
21+
22+
bytes32 batcherHash = bytes32(abi.encode(NEW_BATCHER));
23+
24+
calls[0] = IMulticall3.Call3({
25+
target: SYSTEM_CONFIG,
26+
allowFailure: false,
27+
callData: abi.encodeCall(
28+
SystemConfig.setBatcherHash,
29+
(batcherHash)
30+
)
31+
});
32+
33+
return calls;
34+
}
35+
36+
function _ownerSafe() internal override view returns (address) {
37+
return SYSTEM_CONFIG_OWNER;
38+
}
39+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
// SPDX-License-Identifier: MIT
2+
pragma solidity 0.8.15;
3+
4+
import "@eth-optimism-bedrock/contracts/L1/L2OutputOracle.sol";
5+
import "forge-std/Script.sol";
6+
7+
contract SetupNewProposer is Script {
8+
address constant internal NEW_PROPOSER = vm.envUint("NEW_PROPOSER"); // TODO: define NEW_PROPOSER=xxx in the .env file
9+
address constant internal DEPLOYER = vm.envAddress("DEPLOYER"); // TODO: define DEPLOYER=xxx in the .env file
10+
address constant internal L2_OUTPUT_ORACLE_PROXY = vm.envAddress("L2_OUTPUT_ORACLE_PROXY"); // TODO: define L2_OUTPUT_ORACLE_PROXY=xxx in the .env file
11+
12+
function run() public {
13+
L2OutputOracle existingL2OO = L2OutputOracle(L2_OUTPUT_ORACLE_PROXY);
14+
uint256 oldSubmissionInterval = existingL2OO.SUBMISSION_INTERVAL();
15+
uint256 oldL2BlockTime = existingL2OO.L2_BLOCK_TIME();
16+
uint256 oldFinalizationPeriodSeconds = existingL2OO.FINALIZATION_PERIOD_SECONDS();
17+
uint256 startingBlockNumber = existingL2OO.startingBlockNumber();
18+
uint256 startingTimestamp = existingL2OO.startingTimestamp();
19+
address oldProposer = existingL2OO.PROPOSER();
20+
address oldChallenger = existingL2OO.CHALLENGER();
21+
22+
console.log(oldProposer);
23+
console.log(NEW_PROPOSER);
24+
25+
// Deploy L2OutputOracle new implementation wiht the new submission interval
26+
vm.broadcast(DEPLOYER);
27+
L2OutputOracle l2OutputOracleImpl = new L2OutputOracle({
28+
_submissionInterval: oldSubmissionInterval,
29+
_l2BlockTime: oldL2BlockTime,
30+
_startingBlockNumber: startingBlockNumber,
31+
_startingTimestamp: startingTimestamp,
32+
_proposer: NEW_PROPOSER,
33+
_challenger: oldChallenger,
34+
_finalizationPeriodSeconds: oldFinalizationPeriodSeconds
35+
});
36+
37+
require(l2OutputOracleImpl.L2_BLOCK_TIME() == oldL2BlockTime, "Deploy: l2OutputOracle l2BlockTime is incorrect");
38+
require(l2OutputOracleImpl.PROPOSER() == NEW_PROPOSER, "Deploy: l2OutputOracle proposer is incorrect");
39+
40+
console.logAddress(address(l2OutputOracleImpl));
41+
}
42+
}

setup-templates/template-incident/script/UnpausePortal.s.sol

+2-6
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,8 @@ import "@base-contracts/script/universal/MultisigBuilder.sol";
55
import "@eth-optimism-bedrock/contracts/L1/OptimismPortal.sol";
66

77
contract UnpausePortal is MultisigBuilder {
8-
// address constant internal OPTIMISM_PORTAL_PROXY = <TODO: insert OptimismPortalProxy address>;
9-
// mainnet value: 0x49048044D57e1C92A77f79988d21Fa8fAF74E97e
10-
// goerli value: 0xe93c8cD0D409341205A592f8c4Ac1A5fe5585cfA
11-
// address constant internal GUARDIAN = <TODO: insert multisig which is Guardian address>;
12-
// mainnet value: 0x14536667Cd30e52C0b458BaACcB9faDA7046E056
13-
// goerli value: 0x4C35Ca57616E0d5fD808574772f632D8dA4eadCa
8+
address constant internal OPTIMISM_PORTAL_PROXY = vm.envAddress("OPTIMISM_PORTAL_PROXY"); // TODO: define OPTIMISM_PORTAL_PROXY=xxx in the .env file
9+
address constant internal GUARDIAN = vm.envAddress("GUARDIAN"); // TODO: define GUARDIAN=xxx in the .env file
1410

1511
function _postCheck() internal override view {
1612
OptimismPortal optimismPortal = OptimismPortal(payable(OPTIMISM_PORTAL_PROXY));
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
// SPDX-License-Identifier: MIT
2+
pragma solidity 0.8.15;
3+
4+
import "@eth-optimism-bedrock/src/universal/ProxyAdmin.sol";
5+
import "@base-contracts/script/universal/NestedMultisigBuilder.sol";
6+
7+
contract UpdateProposer is NestedMultisigBuilder {
8+
// TODO: this assumes a new L2OutputOracle implementation contract has already been deployed. See SetupNewProposer.s.sol.
9+
10+
address internal PROXY_ADMIN_CONTRACT = vm.envAddress("L1_PROXY_ADMIN"); // TODO: define L1_PROXY_ADMIN=xxx in the .env file
11+
address internal PROXY_ADMIN_OWNER = vm.envAddress("L1_NESTED_SAFE"); // TODO: define L1_NESTED_SAFE=xxx in the .env file
12+
address internal L2_OUTPUT_PROPOSER = vm.envAddress("L2_OUTPUT_PROPOSER"); // TODO: define L2_OUTPUT_PROPOSER=xxx in the .env file
13+
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
14+
15+
function _postCheck() internal override view {
16+
ProxyAdmin proxyAdmin = ProxyAdmin(PROXY_ADMIN_CONTRACT);
17+
require(proxyAdmin.getProxyImplementation(L2_OUTPUT_PROPOSER).codehash == L2_OUTPUT_PROPOSER_NEW_IMPL.codehash);
18+
}
19+
20+
function _buildCalls() internal override view returns (IMulticall3.Call3[] memory) {
21+
IMulticall3.Call3[] memory calls = new IMulticall3.Call3[](1);
22+
23+
calls[0] = IMulticall3.Call3({
24+
target: PROXY_ADMIN_CONTRACT,
25+
allowFailure: false,
26+
callData: abi.encodeCall(
27+
ProxyAdmin.upgrade,
28+
(payable(L2_OUTPUT_PROPOSER), L2_OUTPUT_PROPOSER_NEW_IMPL)
29+
)
30+
});
31+
32+
return calls;
33+
}
34+
35+
function _ownerSafe() internal override view returns (address) {
36+
return PROXY_ADMIN_OWNER;
37+
}
38+
}

0 commit comments

Comments
 (0)