@@ -9,6 +9,8 @@ import { Types } from "scripts/libraries/Types.sol";
99import { SystemDeployAssertions } from "test/deploy/SystemDeployAssertions.sol " ;
1010
1111import { ISP1Verifier } from "interfaces/L1/proofs/zk/ISP1Verifier.sol " ;
12+ import { IProtocolVersions } from "interfaces/L1/IProtocolVersions.sol " ;
13+ import { ProtocolVersions } from "src/L1/ProtocolVersions.sol " ;
1214import { TEEProverRegistry } from "src/L1/proofs/tee/TEEProverRegistry.sol " ;
1315import { TEEVerifier } from "src/L1/proofs/tee/TEEVerifier.sol " ;
1416import { ZKVerifier } from "src/L1/proofs/zk/ZKVerifier.sol " ;
@@ -140,13 +142,17 @@ contract SystemDeploy_Test is Test, SystemDeployAssertions {
140142 function test_upgrade_withoutManagerDelegatecall_succeeds () public {
141143 SystemDeploy.DeployInput memory input = _defaultDeployInput ();
142144 SystemDeploy.DeployOutput memory output = systemDeploy.deploy (input);
145+ Types.Implementations memory implementations = output.impls;
146+ ProtocolVersions protocolVersionsImpl = new ProtocolVersions ();
147+ implementations.protocolVersionsImpl = address (protocolVersionsImpl);
143148
144149 SystemDeploy.UpgradeOutput memory upgradeOutput = systemDeploy.upgrade (
145150 SystemDeploy.UpgradeInput ({
146151 saveArtifacts: false ,
147152 superchainConfigProxy: output.superchain.superchainConfigProxy,
148- implementations: output.impls,
149- systemConfigProxy: output.opChain.systemConfigProxy
153+ implementations: implementations,
154+ systemConfigProxy: output.opChain.systemConfigProxy,
155+ protocolVersionsProxy: output.opChain.protocolVersionsProxy
150156 })
151157 );
152158
@@ -158,9 +164,42 @@ contract SystemDeploy_Test is Test, SystemDeployAssertions {
158164 output.impls.superchainConfigImpl,
159165 "superchain config impl "
160166 );
167+ assertEq (
168+ output.opChain.opChainProxyAdmin.getProxyImplementation (address (output.opChain.protocolVersionsProxy)),
169+ address (protocolVersionsImpl),
170+ "protocol versions impl "
171+ );
161172 assertValidStandardSystem (_expected (output, input));
162173 }
163174
175+ function test_upgrade_discoversProtocolVersionsProxyFromArtifacts_succeeds () public {
176+ SystemDeploy.DeployInput memory input = _defaultDeployInput ();
177+ SystemDeploy.DeployOutput memory output = systemDeploy.deploy (input);
178+ Types.Implementations memory implementations = output.impls;
179+ ProtocolVersions protocolVersionsImpl = new ProtocolVersions ();
180+ implementations.protocolVersionsImpl = address (protocolVersionsImpl);
181+
182+ _saveArtifact ("ProtocolVersionsProxy " , address (output.opChain.protocolVersionsProxy));
183+
184+ SystemDeploy.UpgradeOutput memory upgradeOutput = systemDeploy.upgrade (
185+ SystemDeploy.UpgradeInput ({
186+ saveArtifacts: false ,
187+ superchainConfigProxy: output.superchain.superchainConfigProxy,
188+ implementations: implementations,
189+ systemConfigProxy: output.opChain.systemConfigProxy,
190+ protocolVersionsProxy: IProtocolVersions (address (0 ))
191+ })
192+ );
193+
194+ assertFalse (upgradeOutput.superchainConfigUpgraded, "superchain already current " );
195+ assertTrue (upgradeOutput.chainUpgraded, "chain upgraded " );
196+ assertEq (
197+ output.opChain.opChainProxyAdmin.getProxyImplementation (address (output.opChain.protocolVersionsProxy)),
198+ address (protocolVersionsImpl),
199+ "protocol versions impl "
200+ );
201+ }
202+
164203 function test_deploy_reusingImplementations_doesNotSaveZeroImplementationOnlyArtifacts () public {
165204 SystemDeploy.DeployInput memory input = _defaultDeployInput ();
166205 SystemDeploy.DeployOutput memory output = systemDeploy.deploy (input);
@@ -278,6 +317,13 @@ contract SystemDeploy_Test is Test, SystemDeployAssertions {
278317 );
279318 }
280319
320+ function _saveArtifact (string memory _name , address _addr ) internal {
321+ vm.etch (address (artifacts), vm.getDeployedCode ("Artifacts.s.sol:Artifacts " ));
322+ bytes32 slot = keccak256 (abi.encodePacked (_name, uint256 (0 )));
323+ vm.store (address (artifacts), slot, bytes32 (uint256 (uint160 (_addr))));
324+ assertEq (artifacts.getAddress (_name), _addr, "artifact saved " );
325+ }
326+
281327 function _expected (
282328 SystemDeploy.DeployOutput memory _output ,
283329 SystemDeploy.DeployInput memory _input
0 commit comments