Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
N
nebula
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
exchain
nebula
Commits
15660862
Unverified
Commit
15660862
authored
Jun 25, 2023
by
refcell.eth
Committed by
GitHub
Jun 25, 2023
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Update ctb scripts to triple slash natspec styling (#6137)
parent
c9395875
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
117 additions
and
240 deletions
+117
-240
FeeVaultWithdrawal.s.sol
packages/contracts-bedrock/scripts/FeeVaultWithdrawal.s.sol
+11
-19
IGnosisSafe.sol
...ages/contracts-bedrock/scripts/interfaces/IGnosisSafe.sol
+3
-7
DeleteOutput.s.sol
...ages/contracts-bedrock/scripts/outputs/DeleteOutput.s.sol
+19
-52
EnhancedScript.sol
...es/contracts-bedrock/scripts/universal/EnhancedScript.sol
+8
-14
GlobalConstants.sol
...s/contracts-bedrock/scripts/universal/GlobalConstants.sol
+5
-13
SafeBuilder.sol
packages/contracts-bedrock/scripts/universal/SafeBuilder.sol
+36
-53
PostSherlock.s.sol
...ges/contracts-bedrock/scripts/upgrades/PostSherlock.s.sol
+18
-41
PostSherlockL2.s.sol
...s/contracts-bedrock/scripts/upgrades/PostSherlockL2.s.sol
+17
-41
No files found.
packages/contracts-bedrock/scripts/FeeVaultWithdrawal.s.sol
View file @
15660862
...
...
@@ -7,22 +7,18 @@ import { Predeploys } from "../contracts/libraries/Predeploys.sol";
import { FeeVault } from "../contracts/universal/FeeVault.sol";
import { IMulticall3 } from "forge-std/interfaces/IMulticall3.sol";
/**
* @title FeeVaultWithdrawal
* @notice A script to make it very simple to withdraw from the fee vaults.
* The usage is as follows:
* $ forge script scripts/FeeVaultWithdrawal.s.sol \
* --rpc-url $ETH_RPC_URL --broadcast \
* --private-key $PRIVATE_KEY
*/
/// @title FeeVaultWithdrawal
/// @notice A script to make it very simple to withdraw from the fee vaults.
/// The usage is as follows:
/// $ forge script scripts/FeeVaultWithdrawal.s.sol \
/// --rpc-url $ETH_RPC_URL --broadcast \
/// --private-key $PRIVATE_KEY
contract FeeVaultWithdrawal is Script {
IMulticall3 private constant multicall = IMulticall3(MULTICALL3_ADDRESS);
IMulticall3.Call3[] internal calls;
/**
* @notice The entrypoint function. Determines which FeeVaults can be withdrawn from and then
* will send the transaction via Multicall3 to withdraw all FeeVaults.
*/
/// @notice The entrypoint function. Determines which FeeVaults can be withdrawn from and then
/// will send the transaction via Multicall3 to withdraw all FeeVaults.
function run() external {
require(address(multicall).code.length > 0);
...
...
@@ -60,19 +56,15 @@ contract FeeVaultWithdrawal is Script {
}
}
/**
* @notice Checks whether or not a FeeVault can be withdrawn. The balance of the account must
* be larger than the `MIN_WITHDRAWAL_AMOUNT`.
*/
/// @notice Checks whether or not a FeeVault can be withdrawn. The balance of the account must
/// be larger than the `MIN_WITHDRAWAL_AMOUNT`.
function canWithdrawal(address _vault) internal view returns (bool) {
uint256 minWithdrawalAmount = FeeVault(payable(_vault)).MIN_WITHDRAWAL_AMOUNT();
uint256 balance = _vault.balance;
return balance >= minWithdrawalAmount;
}
/**
* @notice Logs the information relevant to the user.
*/
/// @notice Logs the information relevant to the user.
function log(uint256 _balance, address _recipient, address _vault) internal view {
string memory logline = string.concat(
"Withdrawing ",
...
...
packages/contracts-bedrock/scripts/interfaces/IGnosisSafe.sol
View file @
15660862
// SPDX-License-Identifier: LGPL-3.0-only
pragma solidity ^0.8.10;
/**
* @title Enum - Collection of enums used in Safe contracts.
* @author Richard Meissner - @rmeissner
*/
/// @title Enum - Collection of enums used in Safe contracts.
/// @author Richard Meissner - @rmeissner
abstract contract Enum {
enum Operation {
Call,
...
...
@@ -12,9 +10,7 @@ abstract contract Enum {
}
}
/**
* @title IGnosisSafe - Gnosis Safe Interface
*/
/// @title IGnosisSafe - Gnosis Safe Interface
interface IGnosisSafe {
event AddedOwner(address owner);
event ApproveHash(bytes32 indexed approvedHash, address indexed owner);
...
...
packages/contracts-bedrock/scripts/outputs/DeleteOutput.s.sol
View file @
15660862
...
...
@@ -13,39 +13,27 @@ import { FeeVault } from "../../contracts/universal/FeeVault.sol";
import { L2OutputOracle } from "../../contracts/L1/L2OutputOracle.sol";
import { Predeploys } from "../../contracts/libraries/Predeploys.sol";
/**
* @title DeleteOutput
* @notice Deletes an output root from the L2OutputOracle.
* @notice Example usage is provided in the README documentation.
*/
/// @title DeleteOutput
/// @notice Deletes an output root from the L2OutputOracle.
/// @notice Example usage is provided in the README documentation.
contract DeleteOutput is SafeBuilder {
/**
* @notice A set of contract addresses for the script.
*/
/// @notice A set of contract addresses for the script.
struct ContractSet {
address Safe;
address ProxyAdmin;
address L2OutputOracleProxy;
}
/**
* @notice A mapping of chainid to a ContractSet.
*/
/// @notice A mapping of chainid to a ContractSet.
mapping(uint256 => ContractSet) internal _contracts;
/**
* @notice The l2 output index we will delete.
*/
/// @notice The l2 output index we will delete.
uint256 internal index;
/**
* @notice The address of the L2OutputOracle to target.
*/
/// @notice The address of the L2OutputOracle to target.
address internal oracle;
/**
* @notice Place the contract addresses in storage for ux.
*/
/// @notice Place the contract addresses in storage for ux.
function setUp() external {
_contracts[GOERLI] = ContractSet({
Safe: 0xBc1233d0C3e6B5d53Ab455cF65A6623F6dCd7e4f,
...
...
@@ -54,11 +42,8 @@ contract DeleteOutput is SafeBuilder {
});
}
/**
* @notice Returns the ContractSet for the defined block chainid.
*
* @dev Reverts if no ContractSet is defined.
*/
/// @notice Returns the ContractSet for the defined block chainid.
/// @dev Reverts if no ContractSet is defined.
function contracts() public view returns (ContractSet memory) {
ContractSet memory cs = _contracts[block.chainid];
if (cs.Safe == address(0) || cs.ProxyAdmin == address(0) || cs.L2OutputOracleProxy == address(0)) {
...
...
@@ -67,9 +52,7 @@ contract DeleteOutput is SafeBuilder {
return cs;
}
/**
* @notice Executes the gnosis safe transaction to delete an L2 Output Root.
*/
/// @notice Executes the gnosis safe transaction to delete an L2 Output Root.
function run(uint256 _index) external returns (bool) {
address _safe = contracts().Safe;
address _proxyAdmin = contracts().ProxyAdmin;
...
...
@@ -77,18 +60,14 @@ contract DeleteOutput is SafeBuilder {
return run(_safe, _proxyAdmin);
}
/**
* @notice Follow up assertions to ensure that the script ran to completion.
*/
/// @notice Follow up assertions to ensure that the script ran to completion.
function _postCheck() internal view override {
L2OutputOracle l2oo = L2OutputOracle(contracts().L2OutputOracleProxy);
Types.OutputProposal memory proposal = l2oo.getL2Output(index);
require(proposal.l2BlockNumber == 0, "DeleteOutput: Output deletion failed.");
}
/**
* @notice Test coverage of the script.
*/
/// @notice Test coverage of the script.
function test_script_succeeds() skipWhenNotForking external {
uint256 _index = getLatestIndex();
require(_index != 0, "DeleteOutput: No outputs to delete.");
...
...
@@ -133,9 +112,7 @@ contract DeleteOutput is SafeBuilder {
return abi.encodeCall(IMulticall3.aggregate3, (calls));
}
/**
* @notice Computes the safe transaction hash.
*/
/// @notice Computes the safe transaction hash.
function computeSafeTransactionHash(uint256 _index) public returns (bytes32) {
ContractSet memory cs = contracts();
address _safe = cs.Safe;
...
...
@@ -146,41 +123,31 @@ contract DeleteOutput is SafeBuilder {
return _getTransactionHash(_safe, _proxyAdmin);
}
/**
* @notice Returns the challenger for the L2OutputOracle.
*/
/// @notice Returns the challenger for the L2OutputOracle.
function getChallenger() public view returns (address) {
L2OutputOracle l2oo = L2OutputOracle(contracts().L2OutputOracleProxy);
return l2oo.CHALLENGER();
}
/**
* @notice Returns the L2 Block Number for the given index.
*/
/// @notice Returns the L2 Block Number for the given index.
function getL2BlockNumber(uint256 _index) public view returns (uint256) {
L2OutputOracle l2oo = L2OutputOracle(contracts().L2OutputOracleProxy);
return l2oo.getL2Output(_index).l2BlockNumber;
}
/**
* @notice Returns the output root for the given index.
*/
/// @notice Returns the output root for the given index.
function getOutputFromIndex(uint256 _index) public view returns (bytes32) {
L2OutputOracle l2oo = L2OutputOracle(contracts().L2OutputOracleProxy);
return l2oo.getL2Output(_index).outputRoot;
}
/**
* @notice Returns the output root with the corresponding to the L2 Block Number.
*/
/// @notice Returns the output root with the corresponding to the L2 Block Number.
function getOutputFromL2BlockNumber(uint256 l2BlockNumber) public view returns (bytes32) {
L2OutputOracle l2oo = L2OutputOracle(contracts().L2OutputOracleProxy);
return l2oo.getL2OutputAfter(l2BlockNumber).outputRoot;
}
/**
* @notice Returns the latest l2 output index.
*/
/// @notice Returns the latest l2 output index.
function getLatestIndex() public view returns (uint256) {
L2OutputOracle l2oo = L2OutputOracle(contracts().L2OutputOracleProxy);
return l2oo.latestOutputIndex();
...
...
packages/contracts-bedrock/scripts/universal/EnhancedScript.sol
View file @
15660862
...
...
@@ -5,25 +5,19 @@ import { console } from "forge-std/console.sol";
import { Script } from "forge-std/Script.sol";
import { Semver } from "../../contracts/universal/Semver.sol";
/**
* @title EnhancedScript
* @notice Enhances forge-std' Script.sol with some additional application-specific functionality.
* Logs simulation links using Tenderly.
*/
/// @title EnhancedScript
/// @notice Enhances forge-std' Script.sol with some additional application-specific functionality.
/// Logs simulation links using Tenderly.
abstract contract EnhancedScript is Script {
/**
* @notice Helper function used to compute the hash of Semver's version string to be used in a
* comparison.
*/
/// @notice Helper function used to compute the hash of Semver's version string to be used in a
/// comparison.
function _versionHash(address _addr) internal view returns (bytes32) {
return keccak256(bytes(Semver(_addr).version()));
}
/**
* @notice Log a tenderly simulation link. The TENDERLY_USERNAME and TENDERLY_PROJECT
* environment variables will be used if they are present. The vm is staticcall'ed
* because of a compiler issue with the higher level ABI.
*/
/// @notice Log a tenderly simulation link. The TENDERLY_USERNAME and TENDERLY_PROJECT
/// environment variables will be used if they are present. The vm is staticcall'ed
/// because of a compiler issue with the higher level ABI.
function logSimulationLink(address _to, bytes memory _data, address _from) public view {
(, bytes memory projData) = VM_ADDRESS.staticcall(
abi.encodeWithSignature("envOr(string,string)", "TENDERLY_PROJECT", "TENDERLY_PROJECT")
...
...
packages/contracts-bedrock/scripts/universal/GlobalConstants.sol
View file @
15660862
// SPDX-License-Identifier: MIT
pragma solidity 0.8.15;
/**
* @title GlobalConstants
* @notice A set of constants.
*/
/// @title GlobalConstants
/// @notice A set of constants.
contract GlobalConstants {
/**
* @notice Mainnet chain id.
*/
/// @notice Mainnet chain id.
uint256 constant MAINNET = 1;
/**
* @notice Goerli chain id.
*/
/// @notice Goerli chain id.
uint256 constant GOERLI = 5;
/**
* @notice Optimism Goerli chain id.
*/
/// @notice Optimism Goerli chain id.
uint256 constant OP_GOERLI = 420;
}
packages/contracts-bedrock/scripts/universal/SafeBuilder.sol
View file @
15660862
...
...
@@ -10,61 +10,50 @@ import { EnhancedScript } from "../universal/EnhancedScript.sol";
import { GlobalConstants } from "../universal/GlobalConstants.sol";
import { ProxyAdmin } from "../../contracts/universal/ProxyAdmin.sol";
/**
* @title SafeBuilder
* @notice Builds SafeTransactions
* Assumes that a gnosis safe is used as the privileged account and the same
* gnosis safe is the owner the proxy admin.
* This could be optimized by checking for the number of approvals up front
* and not submitting the final approval as `execTransaction` can be called when
* there are `threshold - 1` approvals.
* Uses the "approved hashes" method of interacting with the gnosis safe. Allows
* for the most simple user experience when using automation and no indexer.
* Run the command without the `--broadcast` flag and it will print a tenderly URL.
*/
/// @title SafeBuilder
/// @notice Builds SafeTransactions
/// Assumes that a gnosis safe is used as the privileged account and the same
/// gnosis safe is the owner the proxy admin.
/// This could be optimized by checking for the number of approvals up front
/// and not submitting the final approval as `execTransaction` can be called when
/// there are `threshold - 1` approvals.
/// Uses the "approved hashes" method of interacting with the gnosis safe. Allows
/// for the most simple user experience when using automation and no indexer.
/// Run the command without the `--broadcast` flag and it will print a tenderly URL.
abstract contract SafeBuilder is EnhancedScript, GlobalConstants {
/**
* @notice Interface for multicall3.
*/
////////////////////////////////////////////////////////////////
// State //
////////////////////////////////////////////////////////////////
/// @notice Interface for multicall3.
IMulticall3 internal constant multicall = IMulticall3(MULTICALL3_ADDRESS);
/**
* @notice An array of approvals, used to generate the execution transaction.
*/
/// @notice An array of approvals, used to generate the execution transaction.
address[] internal approvals;
/**
* -----------------------------------------------------------
* Virtual Functions
* -----------------------------------------------------------
*/
////////////////////////////////////////////////////////////////
// Virtual Functions //
////////////////////////////////////////////////////////////////
/**
* @notice Follow up assertions to ensure that the script ran to completion.
*/
/// @notice Follow up assertions to ensure that the script ran to completion.
function _postCheck() internal virtual view;
/**
* @notice Creates the calldata
*/
/// @notice Creates the calldata
function buildCalldata(address _proxyAdmin) internal virtual view returns (bytes memory);
/**
* @notice Internal helper function to compute the safe transaction hash.
*/
/// @notice Internal helper function to compute the safe transaction hash.
function computeSafeTransactionHash(address _safe, address _proxyAdmin) public virtual returns (bytes32) {
return _getTransactionHash(_safe, _proxyAdmin);
}
/**
* -----------------------------------------------------------
* Implemented Functions
* -----------------------------------------------------------
*/
////////////////////////////////////////////////////////////////
// Core Logic //
////////////////////////////////////////////////////////////////
/**
* @notice The entrypoint to this script.
*/
/// @notice The entrypoint to this script.
function run(address _safe, address _proxyAdmin) public returns (bool) {
vm.startBroadcast();
bool success = _run(_safe, _proxyAdmin);
...
...
@@ -72,9 +61,7 @@ abstract contract SafeBuilder is EnhancedScript, GlobalConstants {
return success;
}
/**
* @notice Computes the safe transaction hash for the provided safe and proxy admin.
*/
/// @notice Computes the safe transaction hash for the provided safe and proxy admin.
function _getTransactionHash(address _safe, address _proxyAdmin) internal view returns (bytes32) {
// Ensure that the required contracts exist
require(address(multicall).code.length > 0, "multicall3 not deployed");
...
...
@@ -103,12 +90,10 @@ abstract contract SafeBuilder is EnhancedScript, GlobalConstants {
return hash;
}
/**
* @notice The implementation of the upgrade. Split into its own function
* to allow for testability. This is subject to a race condition if
* the nonce changes by a different transaction finalizing while not
* all of the signers have used this script.
*/
/// @notice The implementation of the upgrade. Split into its own function
/// to allow for testability. This is subject to a race condition if
/// the nonce changes by a different transaction finalizing while not
/// all of the signers have used this script.
function _run(address _safe, address _proxyAdmin) public returns (bool) {
IGnosisSafe safe = IGnosisSafe(payable(_safe));
bytes memory data = buildCalldata(_proxyAdmin);
...
...
@@ -186,10 +171,8 @@ abstract contract SafeBuilder is EnhancedScript, GlobalConstants {
return false;
}
/**
* @notice Builds the signatures by tightly packing them together.
* Ensures that they are sorted.
*/
/// @notice Builds the signatures by tightly packing them together.
/// Ensures that they are sorted.
function buildSignatures() internal view returns (bytes memory) {
address[] memory addrs = new address[](approvals.length);
for (uint256 i; i < approvals.length; i++) {
...
...
packages/contracts-bedrock/scripts/upgrades/PostSherlock.s.sol
View file @
15660862
...
...
@@ -12,20 +12,15 @@ import { SystemConfig } from "../../contracts/L1/SystemConfig.sol";
import { ResourceMetering } from "../../contracts/L1/ResourceMetering.sol";
import { Semver } from "../../contracts/universal/Semver.sol";
/**
* @title PostSherlockL1
* @notice Upgrade script for upgrading the L1 contracts after the sherlock audit.
*/
/// @title PostSherlockL1
/// @notice Upgrade script for upgrading the L1 contracts after the sherlock audit.
contract PostSherlockL1 is SafeBuilder {
/**
* @notice Address of the ProxyAdmin, passed in via constructor of `run`.
*/
/// @notice Address of the ProxyAdmin, passed in via constructor of `run`.
ProxyAdmin internal PROXY_ADMIN;
/**
* @notice Represents a set of L1 contracts. Used to represent a set of
* implementations and also a set of proxies.
*/
/// @notice Represents a set of L1 contracts. Used to represent a set of
/// implementations and also a set of proxies.
struct ContractSet {
address L1CrossDomainMessenger;
address L1StandardBridge;
...
...
@@ -36,19 +31,13 @@ contract PostSherlockL1 is SafeBuilder {
address L1ERC721Bridge;
}
/**
* @notice A mapping of chainid to a ContractSet of implementations.
*/
/// @notice A mapping of chainid to a ContractSet of implementations.
mapping(uint256 => ContractSet) internal implementations;
/**
* @notice A mapping of chainid to ContractSet of proxy addresses.
*/
/// @notice A mapping of chainid to ContractSet of proxy addresses.
mapping(uint256 => ContractSet) internal proxies;
/**
* @notice The expected versions for the contracts to be upgraded to.
*/
/// @notice The expected versions for the contracts to be upgraded to.
string constant internal L1CrossDomainMessenger_Version = "1.4.0";
string constant internal L1StandardBridge_Version = "1.1.0";
string constant internal L2OutputOracle_Version = "1.3.0";
...
...
@@ -57,9 +46,7 @@ contract PostSherlockL1 is SafeBuilder {
string constant internal SystemConfig_Version = "1.3.0";
string constant internal L1ERC721Bridge_Version = "1.1.1";
/**
* @notice Place the contract addresses in storage so they can be used when building calldata.
*/
/// @notice Place the contract addresses in storage so they can be used when building calldata.
function setUp() external {
implementations[GOERLI] = ContractSet({
L1CrossDomainMessenger: 0x9D1dACf9d9299D17EFFE1aAd559c06bb3Fbf9BC4,
...
...
@@ -82,9 +69,7 @@ contract PostSherlockL1 is SafeBuilder {
});
}
/**
* @notice Follow up assertions to ensure that the script ran to completion.
*/
/// @notice Follow up assertions to ensure that the script ran to completion.
function _postCheck() internal override view {
ContractSet memory prox = getProxies();
require(_versionHash(prox.L1CrossDomainMessenger) == keccak256(bytes(L1CrossDomainMessenger_Version)), "L1CrossDomainMessenger");
...
...
@@ -110,10 +95,8 @@ contract PostSherlockL1 is SafeBuilder {
require(PROXY_ADMIN.getProxyImplementation(prox.L1ERC721Bridge).codehash == impl.L1ERC721Bridge.codehash, "L1ERC721Bridge codehash");
}
/**
* @notice Test coverage of the logic. Should only run on goerli but other chains
* could be added.
*/
/// @notice Test coverage of the logic. Should only run on goerli but other chains
/// could be added.
function test_script_succeeds() skipWhenNotForking external {
address _safe;
address _proxyAdmin;
...
...
@@ -144,11 +127,9 @@ contract PostSherlockL1 is SafeBuilder {
_postCheck();
}
/**
* @notice Builds the calldata that the multisig needs to make for the upgrade to happen.
* A total of 8 calls are made, 7 upgrade implementations and 1 sets the resource
* config to the default value in the SystemConfig contract.
*/
/// @notice Builds the calldata that the multisig needs to make for the upgrade to happen.
/// A total of 8 calls are made, 7 upgrade implementations and 1 sets the resource
/// config to the default value in the SystemConfig contract.
function buildCalldata(address _proxyAdmin) internal override view returns (bytes memory) {
IMulticall3.Call3[] memory calls = new IMulticall3.Call3[](8);
...
...
@@ -236,18 +217,14 @@ contract PostSherlockL1 is SafeBuilder {
return abi.encodeCall(IMulticall3.aggregate3, (calls));
}
/**
* @notice Returns the ContractSet that represents the implementations for a given network.
*/
/// @notice Returns the ContractSet that represents the implementations for a given network.
function getImplementations() internal view returns (ContractSet memory) {
ContractSet memory set = implementations[block.chainid];
require(set.L1CrossDomainMessenger != address(0), "no implementations for this network");
return set;
}
/**
* @notice Returns the ContractSet that represents the proxies for a given network.
*/
/// @notice Returns the ContractSet that represents the proxies for a given network.
function getProxies() internal view returns (ContractSet memory) {
ContractSet memory set = proxies[block.chainid];
require(set.L1CrossDomainMessenger != address(0), "no proxies for this network");
...
...
packages/contracts-bedrock/scripts/upgrades/PostSherlockL2.s.sol
View file @
15660862
...
...
@@ -8,20 +8,14 @@ import { IMulticall3 } from "forge-std/interfaces/IMulticall3.sol";
import { Predeploys } from "../../contracts/libraries/Predeploys.sol";
import { ProxyAdmin } from "../../contracts/universal/ProxyAdmin.sol";
/**
* @title PostSherlockL2
* @notice Upgrades the L2 contracts.
*/
/// @title PostSherlockL2
/// @notice Upgrades the L2 contracts.
contract PostSherlockL2 is SafeBuilder {
/**
* @notice The proxy admin predeploy on L2.
*/
/// @notice The proxy admin predeploy on L2.
ProxyAdmin constant PROXY_ADMIN = ProxyAdmin(0x4200000000000000000000000000000000000018);
/**
* @notice Represents a set of L2 predepploy contracts. Used to represent a set of
* implementations and also a set of proxies.
*/
/// @notice Represents a set of L2 predepploy contracts. Used to represent a set of
/// implementations and also a set of proxies.
struct ContractSet {
address BaseFeeVault;
address GasPriceOracle;
...
...
@@ -36,19 +30,13 @@ contract PostSherlockL2 is SafeBuilder {
address OptimismMintableERC721Factory;
}
/**
* @notice A mapping of chainid to a ContractSet of implementations.
*/
/// @notice A mapping of chainid to a ContractSet of implementations.
mapping(uint256 => ContractSet) internal implementations;
/**
* @notice A mapping of chainid to ContractSet of proxy addresses.
*/
/// @notice A mapping of chainid to ContractSet of proxy addresses.
mapping(uint256 => ContractSet) internal proxies;
/**
* @notice The expected versions for the contracts to be upgraded to.
*/
/// @notice The expected versions for the contracts to be upgraded to.
string constant internal BaseFeeVault_Version = "1.1.0";
string constant internal GasPriceOracle_Version = "1.0.0";
string constant internal L1Block_Version = "1.0.0";
...
...
@@ -61,9 +49,7 @@ contract PostSherlockL2 is SafeBuilder {
string constant internal OptimismMintableERC20Factory_Version = "1.1.0";
string constant internal OptimismMintableERC721Factory_Version = "1.2.0";
/**
* @notice Place the contract addresses in storage so they can be used when building calldata.
*/
/// @notice Place the contract addresses in storage so they can be used when building calldata.
function setUp() external {
implementations[OP_GOERLI] = ContractSet({
BaseFeeVault: 0x984eBeFb32A5c2862e92ce90EA0C81Ab69F026B5,
...
...
@@ -94,9 +80,7 @@ contract PostSherlockL2 is SafeBuilder {
});
}
/**
* @notice Follow up assertions to ensure that the script ran to completion.
*/
/// @notice Follow up assertions to ensure that the script ran to completion.
function _postCheck() internal override view {
ContractSet memory prox = getProxies();
require(_versionHash(prox.BaseFeeVault) == keccak256(bytes(BaseFeeVault_Version)), "BaseFeeVault");
...
...
@@ -126,10 +110,8 @@ contract PostSherlockL2 is SafeBuilder {
require(PROXY_ADMIN.getProxyImplementation(prox.OptimismMintableERC721Factory).codehash == impl.OptimismMintableERC721Factory.codehash);
}
/**
* @notice Test coverage of the logic. Should only run on goerli but other chains
* could be added.
*/
/// @notice Test coverage of the logic. Should only run on goerli but other chains
/// could be added.
function test_script_succeeds() skipWhenNotForking external {
address _safe;
address _proxyAdmin;
...
...
@@ -158,11 +140,9 @@ contract PostSherlockL2 is SafeBuilder {
_postCheck();
}
/**
* @notice Builds the calldata that the multisig needs to make for the upgrade to happen.
* A total of 9 calls are made to the proxy admin to upgrade the implementations
* of the predeploys.
*/
/// @notice Builds the calldata that the multisig needs to make for the upgrade to happen.
/// A total of 9 calls are made to the proxy admin to upgrade the implementations
/// of the predeploys.
function buildCalldata(address _proxyAdmin) internal override view returns (bytes memory) {
IMulticall3.Call3[] memory calls = new IMulticall3.Call3[](11);
...
...
@@ -282,18 +262,14 @@ contract PostSherlockL2 is SafeBuilder {
return abi.encodeCall(IMulticall3.aggregate3, (calls));
}
/**
* @notice Returns the ContractSet that represents the implementations for a given network.
*/
/// @notice Returns the ContractSet that represents the implementations for a given network.
function getImplementations() internal view returns (ContractSet memory) {
ContractSet memory set = implementations[block.chainid];
require(set.BaseFeeVault != address(0), "no implementations for this network");
return set;
}
/**
* @notice Returns the ContractSet that represents the proxies for a given network.
*/
/// @notice Returns the ContractSet that represents the proxies for a given network.
function getProxies() internal view returns (ContractSet memory) {
ContractSet memory set = proxies[block.chainid];
require(set.BaseFeeVault != address(0), "no proxies for this network");
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment