From acb80bfd44a9ba8887428da5df74044461267172 Mon Sep 17 00:00:00 2001 From: Matt Solomon Date: Mon, 29 Jul 2024 15:02:58 -0700 Subject: [PATCH 1/8] init scaffolding of OPSM contract and tests --- .../src/L1/OPStackManager.sol | 52 +++++++++++++++++++ .../test/L1/OPStackManager.t.sol | 38 ++++++++++++++ 2 files changed, 90 insertions(+) create mode 100644 packages/contracts-bedrock/src/L1/OPStackManager.sol create mode 100644 packages/contracts-bedrock/test/L1/OPStackManager.t.sol diff --git a/packages/contracts-bedrock/src/L1/OPStackManager.sol b/packages/contracts-bedrock/src/L1/OPStackManager.sol new file mode 100644 index 000000000000..361d7d1c4e88 --- /dev/null +++ b/packages/contracts-bedrock/src/L1/OPStackManager.sol @@ -0,0 +1,52 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.15; + +import { ISemver } from "src/universal/ISemver.sol"; +import { SystemConfig } from "src/L1/SystemConfig.sol"; + +contract OPStackManager is ISemver { + /// @custom:semver 1.0.0-beta.1 + string public constant version = "1.0.0-beta.1"; + + /// @notice Represents the roles that can be set when deploying a standard OP Stack chain. + struct Roles { + address proxyAdminOwner; + address systemConfigOwner; + address batcher; + address unsafeBlockSigner; + address proposer; + address challenger; + } + + /// @notice Emitted when a new OP Stack chain is deployed. + /// @param l2ChainId The chain ID of the new chain. + /// @param systemConfig The address of the new chain's SystemConfig contract. + event Deployed(uint256 indexed l2ChainId, SystemConfig indexed systemConfig); + + /// @notice Thrown when an invalid `l2ChainId` is provided to `deploy`. + error InvalidChainId(); + + /// @notice Thrown when a deployment fails. + error DeploymentFailed(string reason); + + function deploy( + uint256 l2ChainId, + Roles calldata roles, + uint32 basefeeScalar, + uint32 blobBasefeeScalar + ) + external + view // This is only here to silence the compiler warning until the function is fully implemented. + returns (SystemConfig systemConfig) + { + if (l2ChainId == 0 || l2ChainId == block.chainid) revert InvalidChainId(); + + // Silence compiler warnings. + roles; + basefeeScalar; + blobBasefeeScalar; + systemConfig; + + revert("Not implemented"); + } +} diff --git a/packages/contracts-bedrock/test/L1/OPStackManager.t.sol b/packages/contracts-bedrock/test/L1/OPStackManager.t.sol new file mode 100644 index 000000000000..2f2d201b18e9 --- /dev/null +++ b/packages/contracts-bedrock/test/L1/OPStackManager.t.sol @@ -0,0 +1,38 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.15; + +// Testing utilities +import { Test } from "forge-std/Test.sol"; + +// Target contract +import { OPStackManager } from "src/L1/OPStackManager.sol"; + +// Unlike other test suites, we intentionally do not inherit from CommonTest or Setup. This is +// because OPStackManager acts as a deploy script, so we start from a clean slate here and +// work OPStackManager's deployment into the existing test setup, instead of using the existing +// test setup to deploy OPStackManager. +contract OPStackManager_Test is Test { + OPStackManager opStackManager; + + // Default dummy parameters for the deploy function. + OPStackManager.Roles roles; + uint256 l2ChainId = 1234; + uint32 basefeeScalar = 1; + uint32 blobBasefeeScalar = 1; + + function setUp() public { + opStackManager = new OPStackManager(); + } +} + +contract OPStackManager_Deploy_Test is OPStackManager_Test { + function test_RevertsIf_L2ChainIdEqualsZero() public { + vm.expectRevert(OPStackManager.InvalidChainId.selector); + opStackManager.deploy(0, roles, basefeeScalar, blobBasefeeScalar); + } + + function test_RevertsIf_L2ChainIdEqualsCurrentChainId() public { + vm.expectRevert(OPStackManager.InvalidChainId.selector); + opStackManager.deploy(block.chainid, roles, basefeeScalar, blobBasefeeScalar); + } +} From 47f3cd37ab7566913348802621d96661bc75f3bf Mon Sep 17 00:00:00 2001 From: Matt Solomon Date: Mon, 29 Jul 2024 15:43:46 -0700 Subject: [PATCH 2/8] add chainIdToBatchInboxAddress --- .../src/L1/OPStackManager.sol | 11 ++++++ .../test/L1/OPStackManager.t.sol | 34 ++++++++++++++++--- 2 files changed, 41 insertions(+), 4 deletions(-) diff --git a/packages/contracts-bedrock/src/L1/OPStackManager.sol b/packages/contracts-bedrock/src/L1/OPStackManager.sol index 361d7d1c4e88..436cc1e3b3d9 100644 --- a/packages/contracts-bedrock/src/L1/OPStackManager.sol +++ b/packages/contracts-bedrock/src/L1/OPStackManager.sol @@ -49,4 +49,15 @@ contract OPStackManager is ISemver { revert("Not implemented"); } + + /// @notice Maps an L2 chain ID to an L1 batch inbox address as defined by the standard + /// configuration's convention. This convention is `versionByte || keccak256(bytes32(chainId))[:19]`, + /// where || denotes concatenation`, versionByte is 0x00, and chainId is a uint256. + /// https://specs.optimism.io/protocol/configurability.html#consensus-parameters + function chainIdToBatchInboxAddress(uint256 l2ChainId) internal pure returns (address) { + bytes1 versionByte = 0x00; + bytes32 hashedChainId = keccak256(bytes.concat(bytes32(l2ChainId))); + bytes19 first19Bytes = bytes19(hashedChainId); + return address(uint160(bytes20(bytes.concat(versionByte, first19Bytes)))); + } } diff --git a/packages/contracts-bedrock/test/L1/OPStackManager.t.sol b/packages/contracts-bedrock/test/L1/OPStackManager.t.sol index 2f2d201b18e9..10e96c561eb0 100644 --- a/packages/contracts-bedrock/test/L1/OPStackManager.t.sol +++ b/packages/contracts-bedrock/test/L1/OPStackManager.t.sol @@ -7,12 +7,19 @@ import { Test } from "forge-std/Test.sol"; // Target contract import { OPStackManager } from "src/L1/OPStackManager.sol"; +// Exposes internal functions for testing. +contract OPStackManager_Harness is OPStackManager { + function chainIdToBatchInboxAddress_exposed(uint256 l2ChainId) public pure returns (address) { + return super.chainIdToBatchInboxAddress(l2ChainId); + } +} + // Unlike other test suites, we intentionally do not inherit from CommonTest or Setup. This is // because OPStackManager acts as a deploy script, so we start from a clean slate here and // work OPStackManager's deployment into the existing test setup, instead of using the existing // test setup to deploy OPStackManager. contract OPStackManager_Test is Test { - OPStackManager opStackManager; + OPStackManager opsm; // Default dummy parameters for the deploy function. OPStackManager.Roles roles; @@ -21,18 +28,37 @@ contract OPStackManager_Test is Test { uint32 blobBasefeeScalar = 1; function setUp() public { - opStackManager = new OPStackManager(); + opsm = new OPStackManager(); } } contract OPStackManager_Deploy_Test is OPStackManager_Test { function test_RevertsIf_L2ChainIdEqualsZero() public { vm.expectRevert(OPStackManager.InvalidChainId.selector); - opStackManager.deploy(0, roles, basefeeScalar, blobBasefeeScalar); + opsm.deploy(0, roles, basefeeScalar, blobBasefeeScalar); } function test_RevertsIf_L2ChainIdEqualsCurrentChainId() public { vm.expectRevert(OPStackManager.InvalidChainId.selector); - opStackManager.deploy(block.chainid, roles, basefeeScalar, blobBasefeeScalar); + opsm.deploy(block.chainid, roles, basefeeScalar, blobBasefeeScalar); + } +} + +contract OPStackManager_ChainIdToBatchInboxAddress_Test is OPStackManager_Test { + function test_CalculatesBatchInboxAddress() public { + OPStackManager_Harness opsmHarness = new OPStackManager_Harness(); + + // These test vectors were calculated manually: + // 1. Compute the bytes32 encoding of the chainId: bytes32(uint256(chainId)); + // 2. Hash it and manually take the first 19 bytes, and prefixed it with 0x00. + uint256 chainId = 1234; + address expected = 0x0017FA14b0d73Aa6A26D6b8720c1c84b50984f5C; + address actual = opsmHarness.chainIdToBatchInboxAddress_exposed(chainId); + vm.assertEq(expected, actual); + + chainId = type(uint256).max; + expected = 0x00a9C584056064687E149968cBaB758a3376D22A; + actual = opsmHarness.chainIdToBatchInboxAddress_exposed(chainId); + vm.assertEq(expected, actual); } } From 49cf43c4f83ec1a9143bce31121dd31032add0cb Mon Sep 17 00:00:00 2001 From: Matt Solomon Date: Tue, 30 Jul 2024 08:50:31 -0700 Subject: [PATCH 3/8] chore: address semgrep findings --- .../src/L1/OPStackManager.sol | 29 ++++++++++--------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/packages/contracts-bedrock/src/L1/OPStackManager.sol b/packages/contracts-bedrock/src/L1/OPStackManager.sol index 436cc1e3b3d9..f2abfc35a86b 100644 --- a/packages/contracts-bedrock/src/L1/OPStackManager.sol +++ b/packages/contracts-bedrock/src/L1/OPStackManager.sol @@ -29,34 +29,37 @@ contract OPStackManager is ISemver { /// @notice Thrown when a deployment fails. error DeploymentFailed(string reason); + /// @notice Temporary error since the deploy method is not yet implemented. + error NotImplemented(); + function deploy( - uint256 l2ChainId, - Roles calldata roles, - uint32 basefeeScalar, - uint32 blobBasefeeScalar + uint256 _l2ChainId, + Roles calldata _roles, + uint32 _basefeeScalar, + uint32 _blobBasefeeScalar ) external view // This is only here to silence the compiler warning until the function is fully implemented. - returns (SystemConfig systemConfig) + returns (SystemConfig _systemConfig) { - if (l2ChainId == 0 || l2ChainId == block.chainid) revert InvalidChainId(); + if (_l2ChainId == 0 || _l2ChainId == block.chainid) revert InvalidChainId(); // Silence compiler warnings. - roles; - basefeeScalar; - blobBasefeeScalar; - systemConfig; + _roles; + _basefeeScalar; + _blobBasefeeScalar; + _systemConfig; - revert("Not implemented"); + revert NotImplemented(); } /// @notice Maps an L2 chain ID to an L1 batch inbox address as defined by the standard /// configuration's convention. This convention is `versionByte || keccak256(bytes32(chainId))[:19]`, /// where || denotes concatenation`, versionByte is 0x00, and chainId is a uint256. /// https://specs.optimism.io/protocol/configurability.html#consensus-parameters - function chainIdToBatchInboxAddress(uint256 l2ChainId) internal pure returns (address) { + function chainIdToBatchInboxAddress(uint256 _l2ChainId) internal pure returns (address) { bytes1 versionByte = 0x00; - bytes32 hashedChainId = keccak256(bytes.concat(bytes32(l2ChainId))); + bytes32 hashedChainId = keccak256(bytes.concat(bytes32(_l2ChainId))); bytes19 first19Bytes = bytes19(hashedChainId); return address(uint160(bytes20(bytes.concat(versionByte, first19Bytes)))); } From f7826e20a540036bad09675d0317612c5fd15c83 Mon Sep 17 00:00:00 2001 From: Matt Solomon Date: Tue, 30 Jul 2024 09:55:13 -0700 Subject: [PATCH 4/8] test: add auth spec --- packages/contracts-bedrock/test/Specs.t.sol | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/contracts-bedrock/test/Specs.t.sol b/packages/contracts-bedrock/test/Specs.t.sol index 4f495ebd07e5..5cdc5dbf940d 100644 --- a/packages/contracts-bedrock/test/Specs.t.sol +++ b/packages/contracts-bedrock/test/Specs.t.sol @@ -10,6 +10,7 @@ import { OptimismPortalInterop } from "src/L1/OptimismPortalInterop.sol"; import { OptimismPortal2 } from "src/L1/OptimismPortal2.sol"; import { SystemConfig } from "src/L1/SystemConfig.sol"; import { DataAvailabilityChallenge } from "src/L1/DataAvailabilityChallenge.sol"; +import { OPStackManager } from "src/L1/OPStackManager.sol"; import { ForgeArtifacts, Abi, AbiEntry } from "scripts/ForgeArtifacts.sol"; /// @title Specification_Test @@ -781,6 +782,10 @@ contract Specification_Test is CommonTest { _addSpec({ _name: "WETH98", _sel: _getSel("transferFrom(address,address,uint256)") }); _addSpec({ _name: "WETH98", _sel: _getSel("withdraw(uint256)") }); + // OPStackManager + _addSpec({ _name: "OPStackManager", _sel: _getSel("version()") }); + _addSpec({ _name: "OPStackManager", _sel: OPStackManager.deploy.selector }); + // DeputyGuardianModule _addSpec({ _name: "DeputyGuardianModule", From 1c7ab11083b64b51101712171f158ba8bec3448b Mon Sep 17 00:00:00 2001 From: Matt Solomon Date: Tue, 30 Jul 2024 09:57:49 -0700 Subject: [PATCH 5/8] update functions sig, semver lock, snapshots --- packages/contracts-bedrock/semver-lock.json | 4 + .../snapshots/abi/OPStackManager.json | 121 ++++++++++++++++++ .../storageLayout/OPStackManager.json | 1 + .../src/L1/OPStackManager.sol | 4 +- .../test/L1/OPStackManager.t.sol | 4 +- 5 files changed, 130 insertions(+), 4 deletions(-) create mode 100644 packages/contracts-bedrock/snapshots/abi/OPStackManager.json create mode 100644 packages/contracts-bedrock/snapshots/storageLayout/OPStackManager.json diff --git a/packages/contracts-bedrock/semver-lock.json b/packages/contracts-bedrock/semver-lock.json index 1ed62738c24f..d2c3b7602cba 100644 --- a/packages/contracts-bedrock/semver-lock.json +++ b/packages/contracts-bedrock/semver-lock.json @@ -31,6 +31,10 @@ "initCodeHash": "0x14c3a582ca46ef2a6abad5590323f4de26ff4de54415c927c62e131ccbf8d9ba", "sourceCodeHash": "0xf5fcf570721e25459fadbb37e02f9efe349e1c8afcbf1e3b5fdb09c9f612cdc0" }, + "src/L1/OPStackManager.sol": { + "initCodeHash": "0x11494a43fc95e6f01c953b89d1ff704d2c3bd19f2d94b1697d7d44fd4e8f2c7d", + "sourceCodeHash": "0x431ba1f086b976dcb6c7ea31c454ebd90482a453dba38446f43842760d8c208c" + }, "src/L1/OptimismPortal.sol": { "initCodeHash": "0xfdc8cf0b0b26961f6ac493ee564761716447d263291bea4d366a7b94afe33392", "sourceCodeHash": "0x9fe0a9001edecd2a04daada4ca9e17d66141b1c982f73653493b4703d2c675c4" diff --git a/packages/contracts-bedrock/snapshots/abi/OPStackManager.json b/packages/contracts-bedrock/snapshots/abi/OPStackManager.json new file mode 100644 index 000000000000..1ddc0ed88569 --- /dev/null +++ b/packages/contracts-bedrock/snapshots/abi/OPStackManager.json @@ -0,0 +1,121 @@ +[ + { + "inputs": [ + { + "internalType": "uint256", + "name": "_l2ChainId", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "_basefeeScalar", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "_blobBasefeeScalar", + "type": "uint32" + }, + { + "components": [ + { + "internalType": "address", + "name": "proxyAdminOwner", + "type": "address" + }, + { + "internalType": "address", + "name": "systemConfigOwner", + "type": "address" + }, + { + "internalType": "address", + "name": "batcher", + "type": "address" + }, + { + "internalType": "address", + "name": "unsafeBlockSigner", + "type": "address" + }, + { + "internalType": "address", + "name": "proposer", + "type": "address" + }, + { + "internalType": "address", + "name": "challenger", + "type": "address" + } + ], + "internalType": "struct OPStackManager.Roles", + "name": "_roles", + "type": "tuple" + } + ], + "name": "deploy", + "outputs": [ + { + "internalType": "contract SystemConfig", + "name": "_systemConfig", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "version", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "l2ChainId", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "contract SystemConfig", + "name": "systemConfig", + "type": "address" + } + ], + "name": "Deployed", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "reason", + "type": "string" + } + ], + "name": "DeploymentFailed", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidChainId", + "type": "error" + }, + { + "inputs": [], + "name": "NotImplemented", + "type": "error" + } +] \ No newline at end of file diff --git a/packages/contracts-bedrock/snapshots/storageLayout/OPStackManager.json b/packages/contracts-bedrock/snapshots/storageLayout/OPStackManager.json new file mode 100644 index 000000000000..0637a088a01e --- /dev/null +++ b/packages/contracts-bedrock/snapshots/storageLayout/OPStackManager.json @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/packages/contracts-bedrock/src/L1/OPStackManager.sol b/packages/contracts-bedrock/src/L1/OPStackManager.sol index f2abfc35a86b..bc4a37ac34bf 100644 --- a/packages/contracts-bedrock/src/L1/OPStackManager.sol +++ b/packages/contracts-bedrock/src/L1/OPStackManager.sol @@ -34,9 +34,9 @@ contract OPStackManager is ISemver { function deploy( uint256 _l2ChainId, - Roles calldata _roles, uint32 _basefeeScalar, - uint32 _blobBasefeeScalar + uint32 _blobBasefeeScalar, + Roles calldata _roles ) external view // This is only here to silence the compiler warning until the function is fully implemented. diff --git a/packages/contracts-bedrock/test/L1/OPStackManager.t.sol b/packages/contracts-bedrock/test/L1/OPStackManager.t.sol index 10e96c561eb0..45dbf30d549a 100644 --- a/packages/contracts-bedrock/test/L1/OPStackManager.t.sol +++ b/packages/contracts-bedrock/test/L1/OPStackManager.t.sol @@ -35,12 +35,12 @@ contract OPStackManager_Test is Test { contract OPStackManager_Deploy_Test is OPStackManager_Test { function test_RevertsIf_L2ChainIdEqualsZero() public { vm.expectRevert(OPStackManager.InvalidChainId.selector); - opsm.deploy(0, roles, basefeeScalar, blobBasefeeScalar); + opsm.deploy(0, basefeeScalar, blobBasefeeScalar, roles); } function test_RevertsIf_L2ChainIdEqualsCurrentChainId() public { vm.expectRevert(OPStackManager.InvalidChainId.selector); - opsm.deploy(block.chainid, roles, basefeeScalar, blobBasefeeScalar); + opsm.deploy(block.chainid, basefeeScalar, blobBasefeeScalar, roles); } } From 83f439c548778d0579c466219fbf99ec960faf10 Mon Sep 17 00:00:00 2001 From: Matt Solomon Date: Tue, 30 Jul 2024 11:08:19 -0700 Subject: [PATCH 6/8] semver lock update after installing correct foundry version --- packages/contracts-bedrock/semver-lock.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/contracts-bedrock/semver-lock.json b/packages/contracts-bedrock/semver-lock.json index d2c3b7602cba..527464401093 100644 --- a/packages/contracts-bedrock/semver-lock.json +++ b/packages/contracts-bedrock/semver-lock.json @@ -32,8 +32,8 @@ "sourceCodeHash": "0xf5fcf570721e25459fadbb37e02f9efe349e1c8afcbf1e3b5fdb09c9f612cdc0" }, "src/L1/OPStackManager.sol": { - "initCodeHash": "0x11494a43fc95e6f01c953b89d1ff704d2c3bd19f2d94b1697d7d44fd4e8f2c7d", - "sourceCodeHash": "0x431ba1f086b976dcb6c7ea31c454ebd90482a453dba38446f43842760d8c208c" + "initCodeHash": "0x1630942414d9711137028c48f37b6fcd7fbbedc147102e31ebcdcc03a9645c6a", + "sourceCodeHash": "0x93f7682b305b80d576a497c072aefe733e90210b174ddbdc572405ee86492901" }, "src/L1/OptimismPortal.sol": { "initCodeHash": "0xfdc8cf0b0b26961f6ac493ee564761716447d263291bea4d366a7b94afe33392", From 2e7f065d4d7b534c7797352528a267f23b9a36f3 Mon Sep 17 00:00:00 2001 From: Matt Solomon Date: Tue, 30 Jul 2024 11:57:58 -0700 Subject: [PATCH 7/8] udpates based on style guide --- .../contracts-bedrock/src/L1/OPStackManager.sol | 5 +++-- .../contracts-bedrock/test/L1/OPStackManager.t.sol | 13 +++++++------ 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/packages/contracts-bedrock/src/L1/OPStackManager.sol b/packages/contracts-bedrock/src/L1/OPStackManager.sol index bc4a37ac34bf..ce0cb109777b 100644 --- a/packages/contracts-bedrock/src/L1/OPStackManager.sol +++ b/packages/contracts-bedrock/src/L1/OPStackManager.sol @@ -4,6 +4,7 @@ pragma solidity 0.8.15; import { ISemver } from "src/universal/ISemver.sol"; import { SystemConfig } from "src/L1/SystemConfig.sol"; +/// @custom:proxied contract OPStackManager is ISemver { /// @custom:semver 1.0.0-beta.1 string public constant version = "1.0.0-beta.1"; @@ -40,7 +41,7 @@ contract OPStackManager is ISemver { ) external view // This is only here to silence the compiler warning until the function is fully implemented. - returns (SystemConfig _systemConfig) + returns (SystemConfig systemConfig_) { if (_l2ChainId == 0 || _l2ChainId == block.chainid) revert InvalidChainId(); @@ -48,7 +49,7 @@ contract OPStackManager is ISemver { _roles; _basefeeScalar; _blobBasefeeScalar; - _systemConfig; + systemConfig_; revert NotImplemented(); } diff --git a/packages/contracts-bedrock/test/L1/OPStackManager.t.sol b/packages/contracts-bedrock/test/L1/OPStackManager.t.sol index 45dbf30d549a..c97e9632faac 100644 --- a/packages/contracts-bedrock/test/L1/OPStackManager.t.sol +++ b/packages/contracts-bedrock/test/L1/OPStackManager.t.sol @@ -18,7 +18,7 @@ contract OPStackManager_Harness is OPStackManager { // because OPStackManager acts as a deploy script, so we start from a clean slate here and // work OPStackManager's deployment into the existing test setup, instead of using the existing // test setup to deploy OPStackManager. -contract OPStackManager_Test is Test { +contract OPStackManager_Init is Test { OPStackManager opsm; // Default dummy parameters for the deploy function. @@ -32,20 +32,21 @@ contract OPStackManager_Test is Test { } } -contract OPStackManager_Deploy_Test is OPStackManager_Test { - function test_RevertsIf_L2ChainIdEqualsZero() public { +contract OPStackManager_Deploy_Test is OPStackManager_Init { + function test_deploy_l2ChainIdEqualsZero_reverts() public { vm.expectRevert(OPStackManager.InvalidChainId.selector); opsm.deploy(0, basefeeScalar, blobBasefeeScalar, roles); } - function test_RevertsIf_L2ChainIdEqualsCurrentChainId() public { + function test_deploy_l2ChainIdEqualsCurrentChainId_reverts() public { vm.expectRevert(OPStackManager.InvalidChainId.selector); opsm.deploy(block.chainid, basefeeScalar, blobBasefeeScalar, roles); } } -contract OPStackManager_ChainIdToBatchInboxAddress_Test is OPStackManager_Test { - function test_CalculatesBatchInboxAddress() public { +// These tests use the harness which exposes internal functions for testing. +contract OPStackManager_InternalMethods_Test is Test { + function test_calculatesBatchInboxAddress_succeeds() public { OPStackManager_Harness opsmHarness = new OPStackManager_Harness(); // These test vectors were calculated manually: From 1452160f3cc8976d58b4618b1e4317ff3ac94928 Mon Sep 17 00:00:00 2001 From: Matt Solomon Date: Tue, 30 Jul 2024 12:33:17 -0700 Subject: [PATCH 8/8] snapshots --- packages/contracts-bedrock/semver-lock.json | 2 +- packages/contracts-bedrock/snapshots/abi/OPStackManager.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/contracts-bedrock/semver-lock.json b/packages/contracts-bedrock/semver-lock.json index 527464401093..24ff0ca2b3fa 100644 --- a/packages/contracts-bedrock/semver-lock.json +++ b/packages/contracts-bedrock/semver-lock.json @@ -33,7 +33,7 @@ }, "src/L1/OPStackManager.sol": { "initCodeHash": "0x1630942414d9711137028c48f37b6fcd7fbbedc147102e31ebcdcc03a9645c6a", - "sourceCodeHash": "0x93f7682b305b80d576a497c072aefe733e90210b174ddbdc572405ee86492901" + "sourceCodeHash": "0x8e9a47583c4c3d711c2b7cc5e0f86495e29d4e79c38415dd3d342e1d1aae4fb7" }, "src/L1/OptimismPortal.sol": { "initCodeHash": "0xfdc8cf0b0b26961f6ac493ee564761716447d263291bea4d366a7b94afe33392", diff --git a/packages/contracts-bedrock/snapshots/abi/OPStackManager.json b/packages/contracts-bedrock/snapshots/abi/OPStackManager.json index 1ddc0ed88569..3f3a48ded1ff 100644 --- a/packages/contracts-bedrock/snapshots/abi/OPStackManager.json +++ b/packages/contracts-bedrock/snapshots/abi/OPStackManager.json @@ -58,7 +58,7 @@ "outputs": [ { "internalType": "contract SystemConfig", - "name": "_systemConfig", + "name": "systemConfig_", "type": "address" } ],