diff --git a/foundry.lock b/foundry.lock new file mode 100644 index 0000000000..6dfaa4c2f7 --- /dev/null +++ b/foundry.lock @@ -0,0 +1,29 @@ +{ + "lib/base-contracts": { + "rev": "7cca28be0f94134f9de1c6f409779b57d5f269b7" + }, + "lib/forge-std": { + "rev": "3b20d60d14b343ee4f908cb8079495c07f5e8981" + }, + "lib/openzeppelin-contracts": { + "rev": "fd81a96f01cc42ef1c9a5399364968d0e07e9e90" + }, + "lib/optimism": { + "branch": { + "name": "develop", + "rev": "a10fd5259a3af9a465955b035e16f516327d51d5" + } + }, + "lib/safe-contracts": { + "rev": "186a21a74b327f17fc41217a927dea7064f74604" + }, + "lib/solady": { + "rev": "513f581675374706dbe947284d6b12d19ce35a2a" + }, + "lib/solmate": { + "rev": "e8f96f25d48fe702117ce76c79228ca4f20206cb" + }, + "lib/superchain-registry": { + "rev": "58b8ea0b875dcab6e7132a2d388c5c098ee6fac3" + } +} \ No newline at end of file diff --git a/foundry.toml b/foundry.toml index 80bc0b436f..47dade3516 100644 --- a/foundry.toml +++ b/foundry.toml @@ -9,22 +9,30 @@ fs_permissions = [{ access = "read-write", path = "./" }] gas_limit = "18446744073709551615" # max allowable value, which is max uint64 ffi = true # Enable FFI for reading lib/superchain-registry files in scripts SignFromJson.s.sol, NestedSignFromJson.s.sol within tasks no_match_coverage = 'src/template/boilerplate/|script/|src/JsonTxBuilderBase.sol|test' +# Temporarily disabled for Foundry v1.4.3 upgrade. Protection prevents address(this) usage in scripts to avoid accidental misuse. +# See https://github.com/foundry-rs/foundry/issues/10289. Will be removed in a future PR. +script_execution_protection = false remappings = [ - '@openzeppelin/contracts-upgradeable/=lib/optimism/packages/contracts-bedrock/lib/openzeppelin-contracts-upgradeable/contracts/', - '@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts', - '@base-contracts/=lib/base-contracts/', - '@eth-optimism-bedrock/=lib/optimism/packages/contracts-bedrock/', - '@rari-capital/solmate/=lib/solmate', - '@eth-optimism-superchain-registry/=lib/superchain-registry/', - '@solady/=lib/optimism/packages/contracts-bedrock/lib/solady/src/', - '@lib-keccak/=lib/optimism/packages/contracts-bedrock/lib/lib-keccak/contracts/lib/', - 'ds-test/=lib/optimism/packages/contracts-bedrock/lib/forge-std/lib/ds-test/src', - 'forge-std/=lib/forge-std/src/' + "@openzeppelin/contracts-upgradeable/=lib/optimism/packages/contracts-bedrock/lib/openzeppelin-contracts-upgradeable/contracts/", + "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/", + "@base-contracts/=lib/base-contracts/", + "@eth-optimism-bedrock/=lib/optimism/packages/contracts-bedrock/", + "@rari-capital/solmate/=lib/solmate/", + "@eth-optimism-superchain-registry/=lib/superchain-registry/", + "@solady/=lib/optimism/packages/contracts-bedrock/lib/solady/src/", + "@lib-keccak/=lib/optimism/packages/contracts-bedrock/lib/lib-keccak/contracts/lib/", + "ds-test/=lib/optimism/packages/contracts-bedrock/lib/forge-std/lib/ds-test/src/", + "forge-std/=lib/forge-std/src/", + "solady/=lib/optimism/packages/contracts-bedrock/lib/solady/src/", + "safe-contracts/=lib/optimism/packages/contracts-bedrock/lib/safe-contracts/contracts/" ] +[lint] +exclude_lints = ["unused-import", "unsafe-cheatcode", "unsafe-typecast", "asm-keccak256", "unaliased-plain-import", "mixed-case-variable", "pascal-case-struct", "mixed-case-function", "screaming-snake-case-const", "unwrapped-modifier-logic", "named-struct-fields"] + [profile.ci] -deny_warnings = true +deny = "warnings" [profile.ci.rpc_endpoints] mainnet = "https://ci-mainnet-l1-archive.optimism.io" diff --git a/mise.toml b/mise.toml index e767c89bb2..cb591732d4 100644 --- a/mise.toml +++ b/mise.toml @@ -14,9 +14,9 @@ fzf = "0.65.0" # The git ref here should be on the `stable` branch. # WARNING: DO NOT CHANGE FORGE/CAST/ANVIL VERSIONS UNLESS ABSOLUTELY NECESSARY! # The forge release below includes a fix for: https://github.com/foundry-rs/foundry/issues/10302 -forge = "v1.1.0" # https://github.com/foundry-rs/foundry/releases/tag/v1.1.0 -cast = "v1.1.0" -anvil = "v1.1.0" +forge = "v1.4.3" # https://github.com/foundry-rs/foundry/releases/tag/v1.4.3 +cast = "v1.4.3" +anvil = "v1.4.3" [alias] forge = "ubi:foundry-rs/foundry[exe=forge]" diff --git a/src/SuperchainAddressRegistry.sol b/src/SuperchainAddressRegistry.sol index f651bf1101..629528f275 100644 --- a/src/SuperchainAddressRegistry.sol +++ b/src/SuperchainAddressRegistry.sol @@ -89,7 +89,8 @@ contract SuperchainAddressRegistry is StdChains { constructor(string memory configPath) { require( block.chainid == getChain("mainnet").chainId || block.chainid == getChain("sepolia").chainId - || block.chainid == getChain("optimism_sepolia").chainId || block.chainid == getChain("optimism").chainId, + || block.chainid == getChain("optimism_sepolia").chainId + || block.chainid == getChain("optimism").chainId, string.concat("SuperchainAddressRegistry: Unsupported task chain ID ", vm.toString(block.chainid)) ); @@ -203,9 +204,12 @@ contract SuperchainAddressRegistry is StdChains { } /// @notice Saves an address to the registry. - function saveAddress(string memory identifier, ChainInfo memory chain, address addr, string[] memory allowOverwrite) - public - { + function saveAddress( + string memory identifier, + ChainInfo memory chain, + address addr, + string[] memory allowOverwrite + ) public { require(addr != address(0), string.concat("SuperchainAddressRegistry: zero address for ", identifier)); require(bytes(identifier).length > 0, "SuperchainAddressRegistry: empty key"); // If we have overwrites, then we should check if we are allowed to overwrite the current address. diff --git a/src/interfaces/IFeeVault.sol b/src/interfaces/IFeeVault.sol index 359f5551b9..c0a7206547 100644 --- a/src/interfaces/IFeeVault.sol +++ b/src/interfaces/IFeeVault.sol @@ -7,8 +7,7 @@ interface IFeeVault { L2 } - function initialize(address _recipient, uint256 _minWithdrawalAmount, WithdrawalNetwork _withdrawalNetwork) - external; + function initialize(address _recipient, uint256 _minWithdrawalAmount, WithdrawalNetwork _withdrawalNetwork) external; function RECIPIENT() external view returns (address); function MIN_WITHDRAWAL_AMOUNT() external view returns (uint256); diff --git a/src/libraries/AccountAccessParser.sol b/src/libraries/AccountAccessParser.sol index e0564c5e8c..dc7984d3b8 100644 --- a/src/libraries/AccountAccessParser.sol +++ b/src/libraries/AccountAccessParser.sol @@ -383,7 +383,8 @@ library AccountAccessParser { bytes32 _txHash ) internal view noGasMetering { console.log(""); - string memory line = unicode"━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"; + string memory line = + unicode"━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"; console.log(string("TASK TRANSFERS").cyan().bold()); console.log(line.cyan().bold()); if (_transfers.length == 0) { @@ -411,8 +412,7 @@ library AccountAccessParser { } function printCopyHelper(string memory _text) internal view noGasMetering { - string memory line = unicode"━━━━━"; - // forgefmt: disable-start + string memory line = unicode"━━━━━"; // forgefmt: disable-start string memory helper = string.concat(line, " Attention: Copy content ", _text, " this line into the VALIDATION.md file. ", line); // forgefmt: disable-end console.log(helper.yellow().bold()); @@ -487,12 +487,10 @@ library AccountAccessParser { ); require(access.kind != VmSafe.AccountAccessKind.Create, "ETH transfer with Create is not yet supported"); if (access.kind == VmSafe.AccountAccessKind.Call) { - return DecodedTransfer({ - from: access.accessor, - to: access.account, - value: access.value, - tokenAddress: ETHER - }); + return + DecodedTransfer({ + from: access.accessor, to: access.account, value: access.value, tokenAddress: ETHER + }); } else { require(access.kind == VmSafe.AccountAccessKind.DelegateCall, "Expected kind to be DelegateCall."); console.log( @@ -531,11 +529,7 @@ library AccountAccessParser { } /// @notice Given an address, returns the contract name and L2 chain ID for the contract. - function getContractInfo(address _address) - internal - view - returns (uint256 l2ChainId_, string memory contractName_) - { + function getContractInfo(address _address) internal view returns (uint256 l2ChainId_, string memory contractName_) { string memory addrsPath = "/lib/superchain-registry/superchain/extra/addresses/addresses.json"; string memory path = string.concat(vm.projectRoot(), addrsPath); return findContractByAddress(path, _address); @@ -796,8 +790,7 @@ library AccountAccessParser { for (uint256 j = 0; j < layouts.length; j++) { DecodedSlot memory decoded = decodeSlot(layouts[j], _oldValue, _newValue); if (!decoded.oldValue.eq(decoded.newValue)) { - string memory kind = string.concat("(`", decoded.kind, "`)"); - // forgefmt: disable-next-line + string memory kind = string.concat("(`", decoded.kind, "`)"); // forgefmt: disable-next-line detail = string.concat(detail, "", kind, " ", layouts[j]._label, " `", decoded.oldValue, "` → `", decoded.newValue, "`, "); } } diff --git a/src/libraries/DecimalNormalization.sol b/src/libraries/DecimalNormalization.sol index 03f95b39f2..2b44add9a2 100644 --- a/src/libraries/DecimalNormalization.sol +++ b/src/libraries/DecimalNormalization.sol @@ -30,8 +30,8 @@ library DecimalNormalization { validateAmountComponents(components, tokenDecimals); - uint256 finalAmount = components.integer * (10 ** uint256(tokenDecimals)) - + components.decimal * (10 ** uint256(tokenDecimals - components.decimalPlaces)); + uint256 finalAmount = components.integer * (10 ** uint256(tokenDecimals)) + components.decimal + * (10 ** uint256(tokenDecimals - components.decimalPlaces)); return finalAmount; } diff --git a/src/libraries/GnosisSafeHashes.sol b/src/libraries/GnosisSafeHashes.sol index ae4c414088..b9bfc64734 100644 --- a/src/libraries/GnosisSafeHashes.sol +++ b/src/libraries/GnosisSafeHashes.sol @@ -3,7 +3,7 @@ pragma solidity ^0.8.15; import {LibString} from "@solady/utils/LibString.sol"; import {JSONParserLib} from "@solady/utils/JSONParserLib.sol"; -import {GnosisSafe} from "lib/safe-contracts/contracts/GnosisSafe.sol"; +import {GnosisSafe} from "safe-contracts/GnosisSafe.sol"; import {IMulticall3} from "forge-std/interfaces/IMulticall3.sol"; import {VmSafe} from "forge-std/Vm.sol"; import {IGnosisSafe, Enum} from "@base-contracts/script/universal/IGnosisSafe.sol"; @@ -236,18 +236,19 @@ library GnosisSafeHashes { uint256 _originalNonce, address _multicallAddress ) internal view returns (bytes memory encodedTxData) { - encodedTxData = IGnosisSafe(_safe).encodeTransactionData({ - to: _multicallAddress, - value: _value, - data: _data, - operation: Enum.Operation.DelegateCall, - safeTxGas: 0, - baseGas: 0, - gasPrice: 0, - gasToken: address(0), - refundReceiver: address(0), - _nonce: _originalNonce - }); + encodedTxData = IGnosisSafe(_safe) + .encodeTransactionData({ + to: _multicallAddress, + value: _value, + data: _data, + operation: Enum.Operation.DelegateCall, + safeTxGas: 0, + baseGas: 0, + gasPrice: 0, + gasToken: address(0), + refundReceiver: address(0), + _nonce: _originalNonce + }); require(encodedTxData.length == 66, "GnosisSafeHashes: encodedTxData length is not 66 bytes."); } diff --git a/src/libraries/MultisigTaskPrinter.sol b/src/libraries/MultisigTaskPrinter.sol index 8637b140e0..c61d8ad981 100644 --- a/src/libraries/MultisigTaskPrinter.sol +++ b/src/libraries/MultisigTaskPrinter.sol @@ -28,14 +28,16 @@ library MultisigTaskPrinter { function printTitle(string memory title) internal pure { console.log(""); console.log(vm.toUppercase(title).cyan().bold()); - string memory line = unicode"━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"; + string memory line = + unicode"━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"; console.log(line.cyan().bold()); } /// @notice Prints the welcome message and conditionally the developer attention preamble. function printWelcomeMessage() internal view { console.log(""); - string memory line = unicode"━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"; + string memory line = + unicode"━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"; console.log(line.cyan().bold()); console.log(" WELCOME TO SUPERCHAIN-OPS"); console.log(line.cyan().bold()); diff --git a/src/libraries/RevShareCommon.sol b/src/libraries/RevShareCommon.sol index 10a473f6da..c04d3fdfd2 100644 --- a/src/libraries/RevShareCommon.sol +++ b/src/libraries/RevShareCommon.sol @@ -31,13 +31,14 @@ library RevShareCommon { /// @param _salt Salt for CREATE2 deployment /// @param _initCode Contract creation code (creationCode + constructor args) function depositCreate2(address _portal, uint64 _gasLimit, bytes32 _salt, bytes memory _initCode) internal { - IOptimismPortal2(payable(_portal)).depositTransaction({ - _to: CREATE2_DEPLOYER, - _value: 0, - _gasLimit: _gasLimit, - _isCreation: false, - _data: abi.encodeCall(ICreate2Deployer.deploy, (0, _salt, _initCode)) - }); + IOptimismPortal2(payable(_portal)) + .depositTransaction({ + _to: CREATE2_DEPLOYER, + _value: 0, + _gasLimit: _gasLimit, + _isCreation: false, + _data: abi.encodeCall(ICreate2Deployer.deploy, (0, _salt, _initCode)) + }); } /// @notice Calls a contract on L2 by depositing a transaction to the OptimismPortal2 @@ -46,13 +47,8 @@ library RevShareCommon { /// @param _gasLimit Gas limit for the L2 transaction /// @param _data Calldata for the L2 transaction function depositCall(address _portal, address _target, uint64 _gasLimit, bytes memory _data) internal { - IOptimismPortal2(payable(_portal)).depositTransaction({ - _to: _target, - _value: 0, - _gasLimit: _gasLimit, - _isCreation: false, - _data: _data - }); + IOptimismPortal2(payable(_portal)) + .depositTransaction({_to: _target, _value: 0, _gasLimit: _gasLimit, _isCreation: false, _data: _data}); } /// @notice Generates a salt for CREATE2 deployments diff --git a/src/libraries/Utils.sol b/src/libraries/Utils.sol index 381da65aea..cef8ffba7f 100644 --- a/src/libraries/Utils.sol +++ b/src/libraries/Utils.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity 0.8.15; -import {VmSafe} from "lib/forge-std/src/Vm.sol"; +import {VmSafe} from "forge-std/Vm.sol"; import {SafeData, TaskPayload} from "src/libraries/MultisigTypes.sol"; import {LibString} from "@solady/utils/LibString.sol"; import {IGnosisSafe} from "@base-contracts/script/universal/IGnosisSafe.sol"; diff --git a/src/script/ComputeSafeOwnerSwapHash.s.sol b/src/script/ComputeSafeOwnerSwapHash.s.sol index 415809e3de..9c49fb126c 100644 --- a/src/script/ComputeSafeOwnerSwapHash.s.sol +++ b/src/script/ComputeSafeOwnerSwapHash.s.sol @@ -53,18 +53,19 @@ contract ComputeSafeOwnerSwapHash is Script { (address prevOwner,) = findPreviousOwner(owners, _oldOwner); uint256 nonce = IGnosisSafe(_safe).nonce(); - txData_ = IGnosisSafe(_safe).encodeTransactionData({ - to: _safe, - value: 0, - data: abi.encodeCall(IGnosisSafe(_safe).swapOwner, (prevOwner, _oldOwner, _newOwner)), - operation: Enum.Operation.Call, - safeTxGas: 0, - baseGas: 0, - gasPrice: 0, - gasToken: address(0), - refundReceiver: address(0), - _nonce: nonce - }); + txData_ = IGnosisSafe(_safe) + .encodeTransactionData({ + to: _safe, + value: 0, + data: abi.encodeCall(IGnosisSafe(_safe).swapOwner, (prevOwner, _oldOwner, _newOwner)), + operation: Enum.Operation.Call, + safeTxGas: 0, + baseGas: 0, + gasPrice: 0, + gasToken: address(0), + refundReceiver: address(0), + _nonce: nonce + }); txHash_ = keccak256(txData_); } diff --git a/src/tasks/MultisigTask.sol b/src/tasks/MultisigTask.sol index 8ba550c405..481fff1fdf 100644 --- a/src/tasks/MultisigTask.sol +++ b/src/tasks/MultisigTask.sol @@ -148,18 +148,19 @@ abstract contract MultisigTask is Test, Script, StateOverrideManager, TaskManage safeMulticallTarget = MULTICALL3_ADDRESS; // For any non-root safe, we use the multicall3 address. } - bytes32 recomputedHash = IGnosisSafe(safeData.safe).getTransactionHash( - safeMulticallTarget, - 0, - safeData.callData, - Enum.Operation.DelegateCall, - 0, - 0, - 0, - address(0), - payable(address(0)), - safeData.nonce - ); + bytes32 recomputedHash = IGnosisSafe(safeData.safe) + .getTransactionHash( + safeMulticallTarget, + 0, + safeData.callData, + Enum.Operation.DelegateCall, + 0, + 0, + 0, + address(0), + payable(address(0)), + safeData.nonce + ); require(recomputedHash == txHash_, "MultisigTask: hash mismatch"); @@ -248,9 +249,10 @@ abstract contract MultisigTask is Test, Script, StateOverrideManager, TaskManage address[] memory allSafes ) public view returns (bytes32) { address multicallAddress = _getMulticallAddress(safe, allSafes); - return keccak256( - GnosisSafeHashes.getEncodedTransactionData(safe, callData, value, originalNonce, multicallAddress) - ); + return + keccak256( + GnosisSafeHashes.getEncodedTransactionData(safe, callData, value, originalNonce, multicallAddress) + ); } /// @notice Get the safe address string from the config file. If the string is not found, use the value from the template. @@ -352,10 +354,7 @@ abstract contract MultisigTask is Test, Script, StateOverrideManager, TaskManage for (uint256 i; i < calls.length; i++) { require(targets[i] != address(0), "Invalid target for multisig"); calls[i] = IMulticall3.Call3Value({ - target: targets[i], - allowFailure: false, - value: values[i], - callData: arguments[i] + target: targets[i], allowFailure: false, value: values[i], callData: arguments[i] }); } @@ -459,13 +458,16 @@ abstract contract MultisigTask is Test, Script, StateOverrideManager, TaskManage if (!storageAccess.isWrite) continue; // Skip SLOADs. uint256 value = uint256(storageAccess.newValue); address account = storageAccess.account; - if (Utils.isLikelyAddressThatShouldHaveCode(value, codeExceptions)) { + if (Utils.isLikelyAddressThatShouldHaveCode(value, codeExceptions)) + { + // Log account, slot, and value if there is no code. // forgefmt: disable-start string memory err = string.concat("Likely address in storage has no code\n", " account: ", vm.toString(account), "\n slot: ", vm.toString(storageAccess.slot), "\n value: ", vm.toString(bytes32(value))); // forgefmt: disable-end require(address(uint160(value)).code.length != 0, err); } else { + // Log account, slot, and value if there is code. // forgefmt: disable-start string memory err = string.concat("Likely address in storage has unexpected code\n", " account: ", vm.toString(account), "\n slot: ", vm.toString(storageAccess.slot), "\n value: ", vm.toString(bytes32(value))); @@ -1003,10 +1005,7 @@ abstract contract MultisigTask is Test, Script, StateOverrideManager, TaskManage /// the root safe address, and setting the multicall target address. /// This method may also set any allowed and expected storage accesses that are expected in all /// use cases of the template. - function _configureTask(string memory configPath) - internal - virtual - returns (AddressRegistry, IGnosisSafe, address); + function _configureTask(string memory configPath) internal virtual returns (AddressRegistry, IGnosisSafe, address); /// @notice This is a solidity script of the calls you want to make, and its /// contents are extracted into calldata for the task. WARNING: Any state written to in this function will be reverted diff --git a/src/tasks/StateOverrideManager.sol b/src/tasks/StateOverrideManager.sol index b38cc95aee..dfba946383 100644 --- a/src/tasks/StateOverrideManager.sol +++ b/src/tasks/StateOverrideManager.sol @@ -203,9 +203,8 @@ abstract contract StateOverrideManager is CommonBase { ); // Append after validation - Simulation.StorageOverride[] memory combined = new Simulation.StorageOverride[]( - defaultOverrides_[j].overrides.length + userDefinedOverride_.overrides.length - ); + Simulation.StorageOverride[] memory combined = new Simulation + .StorageOverride[](defaultOverrides_[j].overrides.length + userDefinedOverride_.overrides.length); uint256 i = 0; for (; i < defaultOverrides_[j].overrides.length; i++) { diff --git a/src/tasks/TaskManager.sol b/src/tasks/TaskManager.sol index 26cc9e6eaf..494505ffa5 100644 --- a/src/tasks/TaskManager.sol +++ b/src/tasks/TaskManager.sol @@ -59,8 +59,9 @@ contract TaskManager is Script { commands[0] = "./src/script/fetch-tasks.sh"; commands[1] = network; - bytes memory result = vm.ffi(commands); - if (result.length == 0) return new string[](0); + VmSafe.FfiResult memory ffiResult = vm.tryFfi(commands); + if (ffiResult.exitCode != 0 || ffiResult.stdout.length == 0) return new string[](0); + bytes memory result = ffiResult.stdout; string[] memory taskConfigFilePaths = vm.split(string(result), "\n"); taskPaths_ = new string[](taskConfigFilePaths.length); @@ -140,8 +141,7 @@ contract TaskManager is Script { if (_childSafes.length == 0) { _childSafes = setupDefaultChildSafes(_childSafes, _config.rootSafe); } - address leafChildSafe = _childSafes[0]; - // forgefmt: disable-start + address leafChildSafe = _childSafes[0]; // forgefmt: disable-start console.log(string.concat("SIMULATING NESTED TASK (", _taskName, ") ON NESTED SAFE: ", vm.toString(leafChildSafe), " FOR ROOT SAFE: ", _formattedParentMultisig)); // forgefmt: disable-end console.log(line.green().bold()); @@ -249,10 +249,7 @@ contract TaskManager is Script { } /// @notice Useful function to tell if a task is nested or not based on the task config. - function isNestedTask(string memory taskConfigFilePath) - public - returns (bool, address rootSafe, MultisigTask task) - { + function isNestedTask(string memory taskConfigFilePath) public returns (bool, address rootSafe, MultisigTask task) { string memory configContent = vm.readFile(taskConfigFilePath); string memory templateName = configContent.readString(".templateName"); diff --git a/src/tasks/types/L2TaskBase.sol b/src/tasks/types/L2TaskBase.sol index d5c8156ce8..00771a856e 100644 --- a/src/tasks/types/L2TaskBase.sol +++ b/src/tasks/types/L2TaskBase.sol @@ -120,10 +120,12 @@ abstract contract L2TaskBase is MultisigTask { targetSet.add(addr); } catch { string memory warn = string("[WARN]").yellow().bold(); - // forgefmt: disable-start console.log(string.concat(warn, " Contract: ", key, " not found for chain: ", chain.name)); - console.log(string.concat(warn, " Contract will not be added to ", context, ": ", key, " for chain: ", chain.name)); - // forgefmt: disable-end + console.log( + string.concat( + warn, " Contract will not be added to ", context, ": ", key, " for chain: ", chain.name + ) + ); } } } diff --git a/src/template/BlacklistGamesV140.sol b/src/template/BlacklistGamesV140.sol index 838135509c..bc3bd539e1 100644 --- a/src/template/BlacklistGamesV140.sol +++ b/src/template/BlacklistGamesV140.sol @@ -2,7 +2,7 @@ pragma solidity 0.8.15; import {VmSafe} from "forge-std/Vm.sol"; -import {stdToml} from "lib/forge-std/src/StdToml.sol"; +import {stdToml} from "forge-std/StdToml.sol"; import {L2TaskBase} from "src/tasks/types/L2TaskBase.sol"; import {SuperchainAddressRegistry} from "src/SuperchainAddressRegistry.sol"; diff --git a/src/template/BlacklistGamesV400.sol b/src/template/BlacklistGamesV400.sol index 829d6d25dd..52e91e1953 100644 --- a/src/template/BlacklistGamesV400.sol +++ b/src/template/BlacklistGamesV400.sol @@ -2,7 +2,7 @@ pragma solidity 0.8.15; import {VmSafe} from "forge-std/Vm.sol"; -import {stdToml} from "lib/forge-std/src/StdToml.sol"; +import {stdToml} from "forge-std/StdToml.sol"; import {L2TaskBase} from "src/tasks/types/L2TaskBase.sol"; import {SuperchainAddressRegistry} from "src/SuperchainAddressRegistry.sol"; diff --git a/src/template/DisableModule.sol b/src/template/DisableModule.sol index a45cb60b6f..79b8dbf118 100644 --- a/src/template/DisableModule.sol +++ b/src/template/DisableModule.sol @@ -4,7 +4,7 @@ pragma solidity 0.8.15; import {stdStorage, StdStorage} from "forge-std/Test.sol"; import {VmSafe} from "forge-std/Vm.sol"; import {console} from "forge-std/console.sol"; -import {ModuleManager} from "lib/safe-contracts/contracts/base/ModuleManager.sol"; +import {ModuleManager} from "safe-contracts/base/ModuleManager.sol"; import {SimpleTaskBase} from "src/tasks/types/SimpleTaskBase.sol"; import {AccountAccessParser} from "src/libraries/AccountAccessParser.sol"; diff --git a/src/template/EnableDeputyPauseModuleTemplate.sol b/src/template/EnableDeputyPauseModuleTemplate.sol index 006d32a493..b7d6d6b3ea 100644 --- a/src/template/EnableDeputyPauseModuleTemplate.sol +++ b/src/template/EnableDeputyPauseModuleTemplate.sol @@ -5,7 +5,7 @@ import {stdStorage, StdStorage} from "forge-std/Test.sol"; import {VmSafe} from "forge-std/Vm.sol"; import {console} from "forge-std/console.sol"; import {IDeputyPauseModule} from "@eth-optimism-bedrock/interfaces/safe/IDeputyPauseModule.sol"; -import {ModuleManager} from "lib/safe-contracts/contracts/base/ModuleManager.sol"; +import {ModuleManager} from "safe-contracts/base/ModuleManager.sol"; import {SimpleTaskBase} from "src/tasks/types/SimpleTaskBase.sol"; import {AccountAccessParser} from "src/libraries/AccountAccessParser.sol"; diff --git a/src/template/GnosisSafeRemoveOwner.sol b/src/template/GnosisSafeRemoveOwner.sol index f699a45f0f..5119fc18b6 100644 --- a/src/template/GnosisSafeRemoveOwner.sol +++ b/src/template/GnosisSafeRemoveOwner.sol @@ -3,7 +3,7 @@ pragma solidity 0.8.15; import {VmSafe} from "forge-std/Vm.sol"; import {LibString} from "@solady/utils/LibString.sol"; -import {stdToml} from "lib/forge-std/src/StdToml.sol"; +import {stdToml} from "forge-std/StdToml.sol"; import {Utils} from "src/libraries/Utils.sol"; import {IGnosisSafe} from "@base-contracts/script/universal/IGnosisSafe.sol"; diff --git a/src/template/GnosisSafeRotateSigner.sol b/src/template/GnosisSafeRotateSigner.sol index 930fe5e45e..a000bc983a 100644 --- a/src/template/GnosisSafeRotateSigner.sol +++ b/src/template/GnosisSafeRotateSigner.sol @@ -3,7 +3,7 @@ pragma solidity 0.8.15; import {VmSafe} from "forge-std/Vm.sol"; import {LibString} from "@solady/utils/LibString.sol"; -import {stdToml} from "lib/forge-std/src/StdToml.sol"; +import {stdToml} from "forge-std/StdToml.sol"; import {Utils} from "src/libraries/Utils.sol"; import {IGnosisSafe} from "@base-contracts/script/universal/IGnosisSafe.sol"; diff --git a/src/template/OPCMUpdatePrestateV300.sol b/src/template/OPCMUpdatePrestateV300.sol index 456211551a..a9bd62b6ea 100644 --- a/src/template/OPCMUpdatePrestateV300.sol +++ b/src/template/OPCMUpdatePrestateV300.sol @@ -95,9 +95,8 @@ contract OPCMUpdatePrestateV300 is OPCMTaskBase { }); } - (bool success,) = OPCM_TARGETS[0].delegatecall( - abi.encodeWithSelector(IOPCMPrestateUpdate.updatePrestate.selector, opChainConfigs) - ); + (bool success,) = OPCM_TARGETS[0] + .delegatecall(abi.encodeWithSelector(IOPCMPrestateUpdate.updatePrestate.selector, opChainConfigs)); require(success, "OPCM.updatePrestate() failed"); } @@ -113,10 +112,7 @@ contract OPCMUpdatePrestateV300 is OPCMTaskBase { address sysCfg = superchainAddrRegistry.getAddress("SystemConfigProxy", chainId); IStandardValidatorV300.InputV300 memory input = IStandardValidatorV300.InputV300({ - proxyAdmin: proxyAdmin, - sysCfg: sysCfg, - absolutePrestate: expAbsolutePrestate, - l2ChainID: chainId + proxyAdmin: proxyAdmin, sysCfg: sysCfg, absolutePrestate: expAbsolutePrestate, l2ChainID: chainId }); string memory errors = STANDARD_VALIDATOR_V300.validate({_input: input, _allowFailure: true}); diff --git a/src/template/OPCMUpdatePrestateV410.sol b/src/template/OPCMUpdatePrestateV410.sol index 492d481655..8e6e48c1d1 100644 --- a/src/template/OPCMUpdatePrestateV410.sol +++ b/src/template/OPCMUpdatePrestateV410.sol @@ -90,9 +90,8 @@ contract OPCMUpdatePrestateV410 is OPCMTaskBase { }); } - (bool success, bytes memory returnData) = OPCM_TARGETS[0].delegatecall( - abi.encodeWithSelector(IOPCMPrestateUpdate.updatePrestate.selector, opChainConfigs) - ); + (bool success, bytes memory returnData) = OPCM_TARGETS[0] + .delegatecall(abi.encodeWithSelector(IOPCMPrestateUpdate.updatePrestate.selector, opChainConfigs)); if (!success) { if (returnData.length > 0) { assembly { @@ -114,19 +113,19 @@ contract OPCMUpdatePrestateV410 is OPCMTaskBase { address proxyAdmin = superchainAddrRegistry.getAddress("ProxyAdmin", chainId); address sysCfg = superchainAddrRegistry.getAddress("SystemConfigProxy", chainId); - IOPContractsManagerStandardValidator.ValidationInput memory input = IOPContractsManagerStandardValidator - .ValidationInput({ - proxyAdmin: IProxyAdmin(proxyAdmin), - sysCfg: ISystemConfig(sysCfg), - absolutePrestate: expAbsolutePrestate, - l2ChainID: chainId - }); + IOPContractsManagerStandardValidator.ValidationInput memory input = + IOPContractsManagerStandardValidator.ValidationInput({ + proxyAdmin: IProxyAdmin(proxyAdmin), + sysCfg: ISystemConfig(sysCfg), + absolutePrestate: expAbsolutePrestate, + l2ChainID: chainId + }); IOPContractsManagerStandardValidator.ValidationOverrides memory overrides_ = - IOPContractsManagerStandardValidator.ValidationOverrides({ - l1PAOMultisig: superchainAddrRegistry.getAddress("ProxyAdminOwner", chainId), - challenger: superchainAddrRegistry.getAddress("Challenger", chainId) - }); + IOPContractsManagerStandardValidator.ValidationOverrides({ + l1PAOMultisig: superchainAddrRegistry.getAddress("ProxyAdminOwner", chainId), + challenger: superchainAddrRegistry.getAddress("Challenger", chainId) + }); string memory errors = STANDARD_VALIDATOR.validateWithOverrides({_input: input, _allowFailure: true, _overrides: overrides_}); diff --git a/src/template/OPCMUpgradeSuperchainConfigV410.sol b/src/template/OPCMUpgradeSuperchainConfigV410.sol index d6f614f3ea..6a13cc2ac7 100644 --- a/src/template/OPCMUpgradeSuperchainConfigV410.sol +++ b/src/template/OPCMUpgradeSuperchainConfigV410.sol @@ -63,7 +63,8 @@ contract OPCMUpgradeSuperchainConfigV410 is OPCMTaskBase { /// @notice Builds the actions for executing the operations. function _build(address) internal override { - (bool success,) = OPCM_TARGETS[0].delegatecall( + (bool success,) = OPCM_TARGETS[0] + .delegatecall( abi.encodeCall( IOPContractManagerV410.upgradeSuperchainConfig, (SUPERCHAIN_CONFIG, SUPERCHAIN_CONFIG_PROXY_ADMIN) ) diff --git a/src/template/OPCMUpgradeV200.sol b/src/template/OPCMUpgradeV200.sol index 124a398e90..c216b63d2f 100644 --- a/src/template/OPCMUpgradeV200.sol +++ b/src/template/OPCMUpgradeV200.sol @@ -85,7 +85,9 @@ contract OPCMUpgradeV200 is OPCMTaskBase { for (uint256 i = 0; i < chains.length; i++) { opChainConfigs[i] = IOPContractsManager.OpChainConfig({ - systemConfigProxy: ISystemConfig(superchainAddrRegistry.getAddress("SystemConfigProxy", chains[i].chainId)), + systemConfigProxy: ISystemConfig( + superchainAddrRegistry.getAddress("SystemConfigProxy", chains[i].chainId) + ), proxyAdmin: IProxyAdmin(superchainAddrRegistry.getAddress("ProxyAdmin", chains[i].chainId)), absolutePrestate: absolutePrestates[chains[i].chainId] }); @@ -106,10 +108,7 @@ contract OPCMUpgradeV200 is OPCMTaskBase { address sysCfg = superchainAddrRegistry.getAddress("SystemConfigProxy", chainId); IStandardValidatorV200.InputV200 memory input = IStandardValidatorV200.InputV200({ - proxyAdmin: proxyAdmin, - sysCfg: sysCfg, - absolutePrestate: currentAbsolutePrestate, - l2ChainID: chainId + proxyAdmin: proxyAdmin, sysCfg: sysCfg, absolutePrestate: currentAbsolutePrestate, l2ChainID: chainId }); // We expect many errors returned from this validation. Below are reasons for each failure which have been deemed acceptable. diff --git a/src/template/OPCMUpgradeV220toV410.sol b/src/template/OPCMUpgradeV220toV410.sol index 714a497671..29ed56ed7a 100644 --- a/src/template/OPCMUpgradeV220toV410.sol +++ b/src/template/OPCMUpgradeV220toV410.sol @@ -139,7 +139,9 @@ contract OPCMUpgradeV220toV410 is OPCMTaskBase { // === Upgrade to U13 === for (uint256 i = 0; i < chains.length; i++) { opChainConfigs[i] = IOPContractsManager.OpChainConfig({ - systemConfigProxy: ISystemConfig(superchainAddrRegistry.getAddress("SystemConfigProxy", chains[i].chainId)), + systemConfigProxy: ISystemConfig( + superchainAddrRegistry.getAddress("SystemConfigProxy", chains[i].chainId) + ), proxyAdmin: IProxyAdmin(superchainAddrRegistry.getAddress("ProxyAdmin", chains[i].chainId)), absolutePrestate: Claim.wrap(OPCM_V220_PRESTATE) }); diff --git a/src/template/OPCMUpgradeV300.sol b/src/template/OPCMUpgradeV300.sol index 4ffaa8f45e..a58b45df6c 100644 --- a/src/template/OPCMUpgradeV300.sol +++ b/src/template/OPCMUpgradeV300.sol @@ -113,10 +113,7 @@ contract OPCMUpgradeV300 is OPCMTaskBase { address sysCfg = superchainAddrRegistry.getAddress("SystemConfigProxy", chainId); IStandardValidatorV300.InputV300 memory input = IStandardValidatorV300.InputV300({ - proxyAdmin: proxyAdmin, - sysCfg: sysCfg, - absolutePrestate: expAbsolutePrestate, - l2ChainID: chainId + proxyAdmin: proxyAdmin, sysCfg: sysCfg, absolutePrestate: expAbsolutePrestate, l2ChainID: chainId }); string memory errors = STANDARD_VALIDATOR_V300.validate({_input: input, _allowFailure: true}); diff --git a/src/template/OPCMUpgradeV400.sol b/src/template/OPCMUpgradeV400.sol index a1035f7c42..a87cdefc97 100644 --- a/src/template/OPCMUpgradeV400.sol +++ b/src/template/OPCMUpgradeV400.sol @@ -123,10 +123,7 @@ contract OPCMUpgradeV400 is OPCMTaskBase { address sysCfg = superchainAddrRegistry.getAddress("SystemConfigProxy", chainId); IStandardValidatorV400.InputV400 memory input = IStandardValidatorV400.InputV400({ - proxyAdmin: proxyAdmin, - sysCfg: sysCfg, - absolutePrestate: expAbsolutePrestate, - l2ChainID: chainId + proxyAdmin: proxyAdmin, sysCfg: sysCfg, absolutePrestate: expAbsolutePrestate, l2ChainID: chainId }); string memory errors = STANDARD_VALIDATOR_V400.validate({_input: input, _allowFailure: true}); diff --git a/src/template/OPCMUpgradeV410.sol b/src/template/OPCMUpgradeV410.sol index 397986bc2a..7571a0c9bb 100644 --- a/src/template/OPCMUpgradeV410.sol +++ b/src/template/OPCMUpgradeV410.sol @@ -112,10 +112,7 @@ contract OPCMUpgradeV410 is OPCMTaskBase { address sysCfg = superchainAddrRegistry.getAddress("SystemConfigProxy", chainId); IStandardValidatorV410.InputV410 memory input = IStandardValidatorV410.InputV410({ - proxyAdmin: proxyAdmin, - sysCfg: sysCfg, - absolutePrestate: expAbsolutePrestate, - l2ChainID: chainId + proxyAdmin: proxyAdmin, sysCfg: sysCfg, absolutePrestate: expAbsolutePrestate, l2ChainID: chainId }); string memory errors = STANDARD_VALIDATOR_V410.validate({_input: input, _allowFailure: true}); diff --git a/src/template/OPCMUpgradeV500.sol b/src/template/OPCMUpgradeV500.sol index 7e2629a434..874ec66b89 100644 --- a/src/template/OPCMUpgradeV500.sol +++ b/src/template/OPCMUpgradeV500.sol @@ -112,7 +112,8 @@ contract OPCMUpgradeV500 is OPCMTaskBase { address targetImpl = IOPContractsManager(OPCM_TARGETS[0]).implementations().superchainConfigImpl; string memory target = ISuperchainConfig(targetImpl).version(); if (keccak256(bytes(current)) != keccak256(bytes(target))) { - (bool ok1,) = OPCM_TARGETS[0].delegatecall( + (bool ok1,) = OPCM_TARGETS[0] + .delegatecall( abi.encodeCall( IOPContractManagerV500.upgradeSuperchainConfig, (SUPERCHAIN_CONFIG, SUPERCHAIN_CONFIG_PROXY_ADMIN) @@ -162,19 +163,19 @@ contract OPCMUpgradeV500 is OPCMTaskBase { address proxyAdmin = superchainAddrRegistry.getAddress("ProxyAdmin", chainId); address sysCfg = superchainAddrRegistry.getAddress("SystemConfigProxy", chainId); - IOPContractsManagerStandardValidator.ValidationInput memory input = IOPContractsManagerStandardValidator - .ValidationInput({ - proxyAdmin: IProxyAdmin(proxyAdmin), - sysCfg: ISystemConfig(sysCfg), - absolutePrestate: expAbsolutePrestate, - l2ChainID: chainId - }); + IOPContractsManagerStandardValidator.ValidationInput memory input = + IOPContractsManagerStandardValidator.ValidationInput({ + proxyAdmin: IProxyAdmin(proxyAdmin), + sysCfg: ISystemConfig(sysCfg), + absolutePrestate: expAbsolutePrestate, + l2ChainID: chainId + }); IOPContractsManagerStandardValidator.ValidationOverrides memory overrides_ = - IOPContractsManagerStandardValidator.ValidationOverrides({ - l1PAOMultisig: superchainAddrRegistry.getAddress("ProxyAdminOwner", chainId), - challenger: superchainAddrRegistry.getAddress("Challenger", chainId) - }); + IOPContractsManagerStandardValidator.ValidationOverrides({ + l1PAOMultisig: superchainAddrRegistry.getAddress("ProxyAdminOwner", chainId), + challenger: superchainAddrRegistry.getAddress("Challenger", chainId) + }); string memory errors = STANDARD_VALIDATOR.validateWithOverrides({_input: input, _allowFailure: true, _overrides: overrides_}); diff --git a/src/template/OPCMUpgradeV600.sol b/src/template/OPCMUpgradeV600.sol index e0715b43f3..0a10cbf95b 100644 --- a/src/template/OPCMUpgradeV600.sol +++ b/src/template/OPCMUpgradeV600.sol @@ -104,9 +104,8 @@ contract OPCMUpgradeV600 is OPCMTaskBase { } // Delegatecall the OPCM.upgrade() function - (bool ok,) = OPCM_TARGETS[0].delegatecall( - abi.encodeWithSelector(IOPContractsManagerV600.upgrade.selector, opChainConfigs) - ); + (bool ok,) = OPCM_TARGETS[0] + .delegatecall(abi.encodeWithSelector(IOPContractsManagerV600.upgrade.selector, opChainConfigs)); require(ok, "OPCMUpgradeV600: Delegatecall failed in _build."); } @@ -121,14 +120,14 @@ contract OPCMUpgradeV600 is OPCMTaskBase { for (uint256 i = 0; i < chains.length; i++) { uint256 chainId = chains[i].chainId; - IOPContractsManagerStandardValidator.ValidationInputDev memory input = IOPContractsManagerStandardValidator - .ValidationInputDev({ - sysCfg: ISystemConfig(superchainAddrRegistry.getAddress("SystemConfigProxy", chainId)), - cannonPrestate: Claim.unwrap(upgrades[chainId].cannonPrestate), - cannonKonaPrestate: Claim.unwrap(upgrades[chainId].cannonKonaPrestate), - l2ChainID: chainId, - proposer: superchainAddrRegistry.getAddress("Proposer", chainId) - }); + IOPContractsManagerStandardValidator.ValidationInputDev memory input = + IOPContractsManagerStandardValidator.ValidationInputDev({ + sysCfg: ISystemConfig(superchainAddrRegistry.getAddress("SystemConfigProxy", chainId)), + cannonPrestate: Claim.unwrap(upgrades[chainId].cannonPrestate), + cannonKonaPrestate: Claim.unwrap(upgrades[chainId].cannonKonaPrestate), + l2ChainID: chainId, + proposer: superchainAddrRegistry.getAddress("Proposer", chainId) + }); // Compute overrides: non-zero only if chain differs from standard address l1PAOOverride = superchainAddrRegistry.getAddress("ProxyAdminOwner", chainId); @@ -143,8 +142,7 @@ contract OPCMUpgradeV600 is OPCMTaskBase { _input: input, _allowFailure: true, _overrides: IOPContractsManagerStandardValidator.ValidationOverrides({ - l1PAOMultisig: l1PAOOverride, - challenger: challengerOverride + l1PAOMultisig: l1PAOOverride, challenger: challengerOverride }) }); } else { diff --git a/src/template/SetEIP1967Implementation.sol b/src/template/SetEIP1967Implementation.sol index fd2f11a454..ca9242d9c5 100644 --- a/src/template/SetEIP1967Implementation.sol +++ b/src/template/SetEIP1967Implementation.sol @@ -2,7 +2,7 @@ pragma solidity 0.8.15; import {VmSafe} from "forge-std/Vm.sol"; -import {stdToml} from "lib/forge-std/src/StdToml.sol"; +import {stdToml} from "forge-std/StdToml.sol"; import {IProxyAdmin} from "@eth-optimism-bedrock/interfaces/universal/IProxyAdmin.sol"; import {IProxy} from "@eth-optimism-bedrock/interfaces/universal/IProxy.sol"; diff --git a/src/template/SystemConfigGasParams.sol b/src/template/SystemConfigGasParams.sol index c2043648f5..045e2ce9fa 100644 --- a/src/template/SystemConfigGasParams.sol +++ b/src/template/SystemConfigGasParams.sol @@ -57,9 +57,7 @@ contract SystemConfigGasParams is L2TaskBase { for (uint256 i = 0; i < _chains.length; i++) { uint256 chainId = _chains[i].chainId; cfg[chainId] = TaskInputs({ - gasLimit: gasLimit, - eip1559Denominator: eip1559Denominator, - eip1559Elasticity: eip1559Elasticity + gasLimit: gasLimit, eip1559Denominator: eip1559Denominator, eip1559Elasticity: eip1559Elasticity }); } } diff --git a/src/template/TransferOwners.sol b/src/template/TransferOwners.sol index 98ecd76806..e2a56fb834 100644 --- a/src/template/TransferOwners.sol +++ b/src/template/TransferOwners.sol @@ -123,9 +123,8 @@ contract TransferOwners is L2TaskBase { /// with a key that does not exist will normally revert. We handle this gracefully and return address(0) because we /// want to proceed and not error. function _getDWETH(string memory _key, uint256 _chainId) internal view returns (IDelayedWETH) { - (bool success, bytes memory data) = address(superchainAddrRegistry).staticcall( - abi.encodeCall(SuperchainAddressRegistry.getAddress, (_key, _chainId)) - ); + (bool success, bytes memory data) = address(superchainAddrRegistry) + .staticcall(abi.encodeCall(SuperchainAddressRegistry.getAddress, (_key, _chainId))); return success ? abi.decode(data, (IDelayedWETH)) : IDelayedWETH(address(0)); } diff --git a/src/template/WelcomeToSuperchainOps.sol b/src/template/WelcomeToSuperchainOps.sol index 9e785188ce..e3940598af 100644 --- a/src/template/WelcomeToSuperchainOps.sol +++ b/src/template/WelcomeToSuperchainOps.sol @@ -2,11 +2,11 @@ pragma solidity 0.8.15; import {VmSafe} from "forge-std/Vm.sol"; -import {IERC20} from "lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol"; -import {SafeERC20} from "lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol"; +import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; import {LibString} from "@solady/utils/LibString.sol"; import {ERC20} from "@solady/tokens/ERC20.sol"; -import {stdToml} from "lib/forge-std/src/StdToml.sol"; +import {stdToml} from "forge-std/StdToml.sol"; import {IGnosisSafe} from "@base-contracts/script/universal/IGnosisSafe.sol"; import {SimpleTaskBase} from "src/tasks/types/SimpleTaskBase.sol"; diff --git a/src/template/boilerplate/L2TaskBase.template.sol b/src/template/boilerplate/L2TaskBase.template.sol index 4ec809a596..507c969c40 100644 --- a/src/template/boilerplate/L2TaskBase.template.sol +++ b/src/template/boilerplate/L2TaskBase.template.sol @@ -2,7 +2,7 @@ pragma solidity 0.8.15; import {VmSafe} from "forge-std/Vm.sol"; -import {stdToml} from "lib/forge-std/src/StdToml.sol"; +import {stdToml} from "forge-std/StdToml.sol"; import {L2TaskBase} from "src/tasks/types/L2TaskBase.sol"; import {SuperchainAddressRegistry} from "src/SuperchainAddressRegistry.sol"; diff --git a/src/template/boilerplate/SimpleTaskBase.template.sol b/src/template/boilerplate/SimpleTaskBase.template.sol index 6bab45b765..d8b0f4fbad 100644 --- a/src/template/boilerplate/SimpleTaskBase.template.sol +++ b/src/template/boilerplate/SimpleTaskBase.template.sol @@ -2,11 +2,11 @@ pragma solidity 0.8.15; import {VmSafe} from "forge-std/Vm.sol"; -import {IERC20} from "lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol"; -import {SafeERC20} from "lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol"; +import {IERC20} from "openzeppelin-contracts/contracts/token/ERC20/IERC20.sol"; +import {SafeERC20} from "openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol"; import {LibString} from "@solady/utils/LibString.sol"; import {ERC20} from "@solady/tokens/ERC20.sol"; -import {stdToml} from "lib/forge-std/src/StdToml.sol"; +import {stdToml} from "forge-std/StdToml.sol"; import {SimpleTaskBase} from "src/tasks/types/SimpleTaskBase.sol"; import {Action} from "src/libraries/MultisigTypes.sol"; diff --git a/test/Multicall3Delegatecall.t.sol b/test/Multicall3Delegatecall.t.sol index 56007f5047..6d6e6f209a 100644 --- a/test/Multicall3Delegatecall.t.sol +++ b/test/Multicall3Delegatecall.t.sol @@ -40,9 +40,7 @@ contract Multicall3DelegatecallTest is Test { Multicall3Delegatecall.Call3[] memory calls = new Multicall3Delegatecall.Call3[](1); calls[0] = Multicall3Delegatecall.Call3({ - target: address(mockTarget), - allowFailure: false, - callData: abi.encodeWithSignature("setValue(uint256)", 42) + target: address(mockTarget), allowFailure: false, callData: abi.encodeWithSignature("setValue(uint256)", 42) }); Multicall3Delegatecall.Result[] memory results = multicall.aggregate3(calls); @@ -72,9 +70,7 @@ contract Multicall3DelegatecallTest is Test { function test_aggregate3_delegatecallBehavior() public { Multicall3Delegatecall.Call3[] memory calls = new Multicall3Delegatecall.Call3[](1); calls[0] = Multicall3Delegatecall.Call3({ - target: address(mockTarget), - allowFailure: false, - callData: abi.encodeWithSignature("checkDelegatecall()") + target: address(mockTarget), allowFailure: false, callData: abi.encodeWithSignature("checkDelegatecall()") }); Multicall3Delegatecall.Result[] memory results = multicall.aggregate3(calls); diff --git a/test/integration/IntegrationBase.t.sol b/test/integration/IntegrationBase.t.sol index e03473a9f8..d9bbbb89e9 100644 --- a/test/integration/IntegrationBase.t.sol +++ b/test/integration/IntegrationBase.t.sol @@ -524,8 +524,9 @@ abstract contract IntegrationBase is Test { vm.prank(_aliasedL1Messenger); // OP adds some extra gas for the relayMessage logic ICrossDomainMessenger(L2_CROSS_DOMAIN_MESSENGER).relayMessage{ - gas: _minGasLimit + RELAY_GAS_OVERHEAD, - value: _value - }(_messageNonce, _sender, _target, _value, _minGasLimit, _data); + gas: _minGasLimit + RELAY_GAS_OVERHEAD, value: _value + }( + _messageNonce, _sender, _target, _value, _minGasLimit, _data + ); } } diff --git a/test/libraries/DecimalNormalization.t.sol b/test/libraries/DecimalNormalization.t.sol index e7f04ba565..8d44007126 100644 --- a/test/libraries/DecimalNormalization.t.sol +++ b/test/libraries/DecimalNormalization.t.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity 0.8.15; -import {MockERC20} from "lib/solady/test/utils/mocks/MockERC20.sol"; +import {MockERC20} from "../../lib/solady/test/utils/mocks/MockERC20.sol"; import {Test} from "forge-std/Test.sol"; diff --git a/test/libraries/GnosisSafeHashes.t.sol b/test/libraries/GnosisSafeHashes.t.sol index 144aa69053..c017f3c102 100644 --- a/test/libraries/GnosisSafeHashes.t.sol +++ b/test/libraries/GnosisSafeHashes.t.sol @@ -218,10 +218,7 @@ contract GnosisSafeHashes_Test is Test { bytes memory invalidApproveCalldata = hex"12345678"; IMulticall3.Call3Value memory call = IMulticall3.Call3Value({ - target: address(0), - allowFailure: false, - value: 0, - callData: invalidApproveCalldata + target: address(0), allowFailure: false, value: 0, callData: invalidApproveCalldata }); IMulticall3.Call3Value[] memory calls = new IMulticall3.Call3Value[](1); diff --git a/test/mock/TestCreate2Deployer.sol b/test/mock/TestCreate2Deployer.sol index a09f0a3594..f86e42056f 100644 --- a/test/mock/TestCreate2Deployer.sol +++ b/test/mock/TestCreate2Deployer.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.15; -import {Create2} from "openzeppelin-contracts/contracts/utils/Create2.sol"; +import {Create2} from "@openzeppelin/contracts/utils/Create2.sol"; /// @notice A contract that deploys contracts via CREATE2. contract TestCreate2Deployer { diff --git a/test/registry/SimpleAddressRegistry.t.sol b/test/registry/SimpleAddressRegistry.t.sol index 7d5019e071..cb39757bbe 100644 --- a/test/registry/SimpleAddressRegistry.t.sol +++ b/test/registry/SimpleAddressRegistry.t.sol @@ -85,13 +85,15 @@ contract SimpleAddressRegistryTest is Test { function test_get_reverts_withNonExistentAddress() public { SimpleAddressRegistry registry = SimpleAddressRegistry(_deployRegistry("valid_addresses.toml")); - string memory err = - string.concat(registryName, ": ", idReturnKind, " not found for 0x0000000000000000000000000000000000000000"); + string memory err = string.concat( + registryName, ": ", idReturnKind, " not found for 0x0000000000000000000000000000000000000000" + ); vm.expectRevert(bytes(err)); registry.get(address(0)); - err = - string.concat(registryName, ": ", idReturnKind, " not found for 0x0000000000000000000000000000000000000005"); + err = string.concat( + registryName, ": ", idReturnKind, " not found for 0x0000000000000000000000000000000000000005" + ); vm.expectRevert(bytes(err)); registry.get(address(5)); } diff --git a/test/registry/SuperchainAddressRegistry.t.sol b/test/registry/SuperchainAddressRegistry.t.sol index 651a45ac6a..78e2ff5cba 100644 --- a/test/registry/SuperchainAddressRegistry.t.sol +++ b/test/registry/SuperchainAddressRegistry.t.sol @@ -103,7 +103,8 @@ abstract contract SuperchainAddressRegistryTest_Base is Test { "50" ); assertEq( - addrRegistry.getAddressInfo(addrRegistry.getAddress("L1StandardBridgeProxy", chainId)).chainInfo.chainId, + addrRegistry.getAddressInfo(addrRegistry.getAddress("L1StandardBridgeProxy", chainId)).chainInfo + .chainId, chainId, "60" ); @@ -119,15 +120,13 @@ abstract contract SuperchainAddressRegistryTest_Base is Test { "80" ); assertEq( - addrRegistry.getAddressInfo(addrRegistry.getAddress("L1CrossDomainMessengerProxy", chainId)) - .chainInfo + addrRegistry.getAddressInfo(addrRegistry.getAddress("L1CrossDomainMessengerProxy", chainId)).chainInfo .chainId, chainId, "90" ); assertEq( - addrRegistry.getAddressInfo(addrRegistry.getAddress("L1CrossDomainMessengerProxy", chainId)) - .chainInfo + addrRegistry.getAddressInfo(addrRegistry.getAddress("L1CrossDomainMessengerProxy", chainId)).chainInfo .name, chainName, "100" @@ -319,8 +318,8 @@ abstract contract SuperchainAddressRegistryTest_Base is Test { function test_constructor_onL2WithoutFallback_reverts() public { vm.createSelectFork("opSepolia"); - string memory tomlContent = - 'l2chains = [{name = "MyLocalChain", chainId = 12345}]\n' 'fallbackAddressesJsonPath = ""'; + string memory tomlContent = 'l2chains = [{name = "MyLocalChain", chainId = 12345}]\n' + 'fallbackAddressesJsonPath = ""'; string memory fileName = MultisigTaskTestHelper.createTempTomlFile(tomlContent, TESTING_DIRECTORY, "l2-000"); vm.expectRevert( diff --git a/test/tasks/MultisigTask.t.sol b/test/tasks/MultisigTask.t.sol index c23bd7606b..7102af59ab 100644 --- a/test/tasks/MultisigTask.t.sol +++ b/test/tasks/MultisigTask.t.sol @@ -23,8 +23,8 @@ contract MultisigTaskUnitTest is Test { MultisigTask public task; string constant TESTING_DIRECTORY = "multisig-task-testing"; - string constant commonToml = - "l2chains = [{name = \"OP Mainnet\", chainId = 10}]\n" "\n" "templateName = \"MockMultisigTask\"\n" "\n"; + string constant commonToml = "l2chains = [{name = \"OP Mainnet\", chainId = 10}]\n" "\n" + "templateName = \"MockMultisigTask\"\n" "\n"; address root = 0x5a0Aae59D09fccBdDb6C6CcEB07B7279367C3d2A; address securityCouncilChildMultisig = 0xc2819DC788505Aac350142A7A707BF9D03E3Bd03; @@ -211,10 +211,7 @@ contract MultisigTaskUnitTest is Test { IMulticall3.Call3Value[] memory calls = new IMulticall3.Call3Value[](targets.length); for (uint256 i; i < calls.length; i++) { calls[i] = IMulticall3.Call3Value({ - target: targets[i], - allowFailure: false, - value: values[i], - callData: calldatas[i] + target: targets[i], allowFailure: false, value: values[i], callData: calldatas[i] }); } @@ -410,8 +407,8 @@ contract MultisigTaskUnitTest is Test { /// @notice Tests that MultisigTask reverts when a transaction exceeds the 15M gas limit function test_simulate_revertsOnHighGasUsage_fails() public { - string memory highGasToml = - "l2chains = [{name = \"OP Mainnet\", chainId = 10}]\n" "\n" "templateName = \"HighGasMultisigTask\"\n" "\n"; + string memory highGasToml = "l2chains = [{name = \"OP Mainnet\", chainId = 10}]\n" "\n" + "templateName = \"HighGasMultisigTask\"\n" "\n"; string memory taskConfigFilePath = MultisigTaskTestHelper.createTempTomlFile(highGasToml, TESTING_DIRECTORY, "highgas"); @@ -424,10 +421,7 @@ contract MultisigTaskUnitTest is Test { } /// @notice Asserts that the root safe calldata is correct. - function assertRootCalldata(bytes memory data, address target, uint256 value, bytes memory callData) - internal - pure - { + function assertRootCalldata(bytes memory data, address target, uint256 value, bytes memory callData) internal pure { bytes4 selector = bytes4(data); assertEq(selector, IMulticall3.aggregate3Value.selector, "Incorrect calldata for root safe"); bytes memory params = getParams(data); diff --git a/test/tasks/NestedMultisigTask.t.sol b/test/tasks/NestedMultisigTask.t.sol index 3bed164851..5261eb8e5b 100644 --- a/test/tasks/NestedMultisigTask.t.sol +++ b/test/tasks/NestedMultisigTask.t.sol @@ -97,18 +97,19 @@ contract NestedMultisigTaskTest is Test { TestData memory testData = _prepareTestData(allOriginalNonces, actions, allSafes, childSafes); // Get the hash of the transaction that the root safe is going to execute which the child multisigs have to approve. - bytes32 hashToApproveByChildMultisig = testData.rootSafe.getTransactionHash( - MULTICALL3_ADDRESS, - 0, - testData.rootSafeCalldata, - Enum.Operation.DelegateCall, - 0, - 0, - 0, - address(0), - address(0), - testData.originalRootSafeNonce - ); + bytes32 hashToApproveByChildMultisig = testData.rootSafe + .getTransactionHash( + MULTICALL3_ADDRESS, + 0, + testData.rootSafeCalldata, + Enum.Operation.DelegateCall, + 0, + 0, + 0, + address(0), + address(0), + testData.originalRootSafeNonce + ); IMulticall3.Call3Value memory call = IMulticall3.Call3Value({ target: address(testData.rootSafe), @@ -359,33 +360,35 @@ contract NestedMultisigTaskTest is Test { _childMultisig, _callDataToApprove, 0, childSafeNonce, _multicallAddress ); - bytes memory expectedDataToSign = IGnosisSafe(_childMultisig).encodeTransactionData({ - to: MULTICALL3_ADDRESS, - value: 0, - data: _callDataToApprove, - operation: Enum.Operation.DelegateCall, - safeTxGas: 0, - baseGas: 0, - gasPrice: 0, - gasToken: address(0), - refundReceiver: address(0), - _nonce: childSafeNonce - }); + bytes memory expectedDataToSign = IGnosisSafe(_childMultisig) + .encodeTransactionData({ + to: MULTICALL3_ADDRESS, + value: 0, + data: _callDataToApprove, + operation: Enum.Operation.DelegateCall, + safeTxGas: 0, + baseGas: 0, + gasPrice: 0, + gasToken: address(0), + refundReceiver: address(0), + _nonce: childSafeNonce + }); assertEq(dataToSign, expectedDataToSign, "Wrong data to sign"); bytes32 nestedHashToApprove = keccak256(dataToSign); - bytes32 expectedNestedHashToApprove = IGnosisSafe(_childMultisig).getTransactionHash( - MULTICALL3_ADDRESS, - 0, - _callDataToApprove, - Enum.Operation.DelegateCall, - 0, - 0, - 0, - address(0), - address(0), - childSafeNonce - ); + bytes32 expectedNestedHashToApprove = IGnosisSafe(_childMultisig) + .getTransactionHash( + MULTICALL3_ADDRESS, + 0, + _callDataToApprove, + Enum.Operation.DelegateCall, + 0, + 0, + 0, + address(0), + address(0), + childSafeNonce + ); assertEq(nestedHashToApprove, expectedNestedHashToApprove, "Wrong nested hash to approve"); } diff --git a/test/tasks/SingleMultisigTask.t.sol b/test/tasks/SingleMultisigTask.t.sol index 5666653ad0..6bf7f1d842 100644 --- a/test/tasks/SingleMultisigTask.t.sol +++ b/test/tasks/SingleMultisigTask.t.sol @@ -51,11 +51,7 @@ contract SingleMultisigTaskTest is Test { (accountAccesses, actions,, rootSafe) = multisigTask.simulate(taskConfigFilePath, new address[](0)); } - function toSuperchainAddrRegistry(AddressRegistry _addrRegistry) - internal - pure - returns (SuperchainAddressRegistry) - { + function toSuperchainAddrRegistry(AddressRegistry _addrRegistry) internal pure returns (SuperchainAddressRegistry) { return SuperchainAddressRegistry(AddressRegistry.unwrap(_addrRegistry)); } @@ -139,10 +135,7 @@ contract SingleMultisigTaskTest is Test { IMulticall3.Call3Value[] memory calls = new IMulticall3.Call3Value[](targets.length); for (uint256 i = 0; i < targets.length; i++) { calls[i] = IMulticall3.Call3Value({ - target: targets[i], - allowFailure: false, - value: values[i], - callData: arguments[i] + target: targets[i], allowFailure: false, value: values[i], callData: arguments[i] }); } bytes memory expectedCallData = @@ -170,18 +163,19 @@ contract SingleMultisigTaskTest is Test { rootSafe, rootSafeData.callData, 0, rootSafeData.nonce, MULTICALL3_ADDRESS ); - bytes memory expectedDataToSign = IGnosisSafe(rootSafe).encodeTransactionData({ - to: MULTICALL3_ADDRESS, - value: 0, - data: rootSafeData.callData, - operation: Enum.Operation.DelegateCall, - safeTxGas: 0, - baseGas: 0, - gasPrice: 0, - gasToken: address(0), - refundReceiver: address(0), - _nonce: rootSafeData.nonce - }); + bytes memory expectedDataToSign = IGnosisSafe(rootSafe) + .encodeTransactionData({ + to: MULTICALL3_ADDRESS, + value: 0, + data: rootSafeData.callData, + operation: Enum.Operation.DelegateCall, + safeTxGas: 0, + baseGas: 0, + gasPrice: 0, + gasToken: address(0), + refundReceiver: address(0), + _nonce: rootSafeData.nonce + }); assertEq(dataToSign, expectedDataToSign, "Wrong data to sign"); } @@ -196,18 +190,19 @@ contract SingleMultisigTaskTest is Test { SafeData memory rootSafeData = Utils.getSafeData(payload, payload.safes.length - 1); bytes32 hash = multisigTask.getHash(rootSafeData.callData, rootSafeData.safe, 0, rootSafeData.nonce, allSafes); - bytes32 expectedHash = IGnosisSafe(rootSafe).getTransactionHash( - MULTICALL3_ADDRESS, - 0, - rootSafeData.callData, - Enum.Operation.DelegateCall, - 0, - 0, - 0, - address(0), - address(0), - rootSafeData.nonce - ); + bytes32 expectedHash = IGnosisSafe(rootSafe) + .getTransactionHash( + MULTICALL3_ADDRESS, + 0, + rootSafeData.callData, + Enum.Operation.DelegateCall, + 0, + 0, + 0, + address(0), + address(0), + rootSafeData.nonce + ); assertEq(hash, expectedHash, "Wrong hash to approve"); } diff --git a/test/tasks/StateOverrideManager.t.sol b/test/tasks/StateOverrideManager.t.sol index 51f6e41c81..ea243aa5c5 100644 --- a/test/tasks/StateOverrideManager.t.sol +++ b/test/tasks/StateOverrideManager.t.sol @@ -295,13 +295,11 @@ contract StateOverrideManagerUnitTest is Test { MockStateOverrideManager som = new MockStateOverrideManager(); Simulation.StateOverride[] memory defaults = new Simulation.StateOverride[](1); defaults[0] = Simulation.StateOverride({ - contractAddress: address(0x123), - overrides: _createStorageOverrides("key1", "value1") + contractAddress: address(0x123), overrides: _createStorageOverrides("key1", "value1") }); Simulation.StateOverride memory userOverride = Simulation.StateOverride({ - contractAddress: address(0x123), - overrides: _createStorageOverrides("key1", "newValue") + contractAddress: address(0x123), overrides: _createStorageOverrides("key1", "newValue") }); vm.expectRevert( @@ -314,13 +312,11 @@ contract StateOverrideManagerUnitTest is Test { MockStateOverrideManager som = new MockStateOverrideManager(); Simulation.StateOverride[] memory defaults = new Simulation.StateOverride[](1); defaults[0] = Simulation.StateOverride({ - contractAddress: address(0x123), - overrides: _createStorageOverrides("key1", "value1") + contractAddress: address(0x123), overrides: _createStorageOverrides("key1", "value1") }); Simulation.StateOverride memory userOverride = Simulation.StateOverride({ - contractAddress: address(0x123), - overrides: _createStorageOverrides("key2", "value2") + contractAddress: address(0x123), overrides: _createStorageOverrides("key2", "value2") }); Simulation.StateOverride[] memory updatedOverrides = @@ -335,13 +331,11 @@ contract StateOverrideManagerUnitTest is Test { MockStateOverrideManager som = new MockStateOverrideManager(); Simulation.StateOverride[] memory defaults = new Simulation.StateOverride[](1); defaults[0] = Simulation.StateOverride({ - contractAddress: address(0x123), - overrides: _createStorageOverrides("key1", "value1") + contractAddress: address(0x123), overrides: _createStorageOverrides("key1", "value1") }); Simulation.StateOverride memory userOverride = Simulation.StateOverride({ - contractAddress: address(0x456), - overrides: _createStorageOverrides("key2", "value2") + contractAddress: address(0x456), overrides: _createStorageOverrides("key2", "value2") }); Simulation.StateOverride[] memory updatedOverrides = @@ -382,8 +376,7 @@ contract StateOverrideManagerUnitTest is Test { MockStateOverrideManager som = new MockStateOverrideManager(); Simulation.StateOverride[] memory defaults = new Simulation.StateOverride[](0); Simulation.StateOverride memory userOverride = Simulation.StateOverride({ - contractAddress: address(0x123), - overrides: _createStorageOverrides("key1", "value1") + contractAddress: address(0x123), overrides: _createStorageOverrides("key1", "value1") }); Simulation.StateOverride[] memory updatedOverrides = @@ -396,8 +389,7 @@ contract StateOverrideManagerUnitTest is Test { MockStateOverrideManager som = new MockStateOverrideManager(); Simulation.StateOverride[] memory defaults = new Simulation.StateOverride[](1); defaults[0] = Simulation.StateOverride({ - contractAddress: address(0x123), - overrides: _createStorageOverrides("key1", "value1") + contractAddress: address(0x123), overrides: _createStorageOverrides("key1", "value1") }); Simulation.StateOverride memory userOverride = @@ -415,8 +407,7 @@ contract StateOverrideManagerUnitTest is Test { MockStateOverrideManager som = new MockStateOverrideManager(); Simulation.StateOverride[] memory defaults = new Simulation.StateOverride[](1); defaults[0] = Simulation.StateOverride({ - contractAddress: address(0x123), - overrides: _createStorageOverrides("key1", "value1") + contractAddress: address(0x123), overrides: _createStorageOverrides("key1", "value1") }); Simulation.StateOverride memory userOverride = diff --git a/test/tasks/TaskManager.t.sol b/test/tasks/TaskManager.t.sol index c046bbf95d..054a236082 100644 --- a/test/tasks/TaskManager.t.sol +++ b/test/tasks/TaskManager.t.sol @@ -61,11 +61,7 @@ contract TaskManagerUnitTest is StateOverrideManager, Test { contractName: "N/A", raw: AccountAccessParser.StateDiff({slot: slot, oldValue: oldValue, newValue: newValue}), decoded: AccountAccessParser.DecodedSlot({ - kind: "uint256", - oldValue: "N/A", - newValue: "N/A", - summary: "N/A", - detail: "N/A" + kind: "uint256", oldValue: "N/A", newValue: "N/A", summary: "N/A", detail: "N/A" }) }); } diff --git a/test/template/revenue-share-upgrade-path/RevShareContractsUpgrader.t.sol b/test/template/revenue-share-upgrade-path/RevShareContractsUpgrader.t.sol index 1982e3a5db..de6dbd5be0 100644 --- a/test/template/revenue-share-upgrade-path/RevShareContractsUpgrader.t.sol +++ b/test/template/revenue-share-upgrade-path/RevShareContractsUpgrader.t.sol @@ -67,9 +67,7 @@ contract RevShareContractsUpgrader_TestInit is Test { return RevShareContractsUpgrader.RevShareConfig({ portal: _portal, l1WithdrawerConfig: FeeSplitterSetup.L1WithdrawerConfig({ - minWithdrawalAmount: _minWithdrawalAmount, - recipient: _l1Recipient, - gasLimit: _gasLimit + minWithdrawalAmount: _minWithdrawalAmount, recipient: _l1Recipient, gasLimit: _gasLimit }), chainFeesRecipient: _chainFeesRecipient });