@@ -212,15 +212,15 @@ contract OPContractsManager_Upgrade_Harness is CommonTest, DisputeGames {
212212 // Execute the SuperchainConfig upgrade.
213213 // nosemgrep: sol-safety-trycatch-eip150)
214214 vm.prank (superchainPAO, true );
215- try _opcm. upgradeSuperchainConfig (superchainConfig) {
216- // Great, the upgrade succeeded.
217- } catch ( bytes memory reason ) {
215+ ( bool success , bytes memory returndata ) =
216+ address (_opcm). delegatecall ( abi.encodeCall (IOPContractsManager.upgradeSuperchainConfig, (superchainConfig)));
217+ if (success == false ) {
218218 // Only acceptable revert reason is the SuperchainConfig already being up to date. This
219219 // try/catch is better than checking the version via the implementations struct because
220220 // the implementations struct interface can change between OPCM versions which would
221221 // cause the test to break and be a pain to resolve.
222222 assertTrue (
223- bytes4 (reason )
223+ bytes4 (returndata )
224224 == IOPContractsManagerUpgrader.OPContractsManagerUpgrader_SuperchainConfigAlreadyUpToDate.selector ,
225225 "Revert reason other than SuperchainConfigAlreadyUpToDate "
226226 );
@@ -232,7 +232,9 @@ contract OPContractsManager_Upgrade_Harness is CommonTest, DisputeGames {
232232 }
233233
234234 vm.prank (_delegateCaller, true );
235- _opcm.upgrade (opChainConfigs);
235+ (bool upgradeSuccess , bytes memory upgradeReturndata ) =
236+ address (_opcm).delegatecall (abi.encodeCall (IOPContractsManager.upgrade, (opChainConfigs)));
237+ assertTrue (upgradeSuccess, "upgrade failed " );
236238
237239 // Return early if a revert was expected. Otherwise we'll get errors below.
238240 if (_revertBytes.length > 0 ) {
@@ -1187,7 +1189,9 @@ contract OPContractsManager_UpdatePrestate_Test is OPContractsManager_TestInit {
11871189 // Trigger the updatePrestate function.
11881190 address proxyAdminOwner = chainDeployOutput1.opChainProxyAdmin.owner ();
11891191 vm.prank (proxyAdminOwner, true );
1190- prestateUpdater.updatePrestate (inputs);
1192+ (bool success , bytes memory returndata ) =
1193+ address (prestateUpdater).delegatecall (abi.encodeCall (IOPContractsManager.updatePrestate, (inputs)));
1194+ assertTrue (success, "updatePrestate failed " );
11911195
11921196 LibGameArgs.GameArgs memory permissionedGameArgs = LibGameArgs.decode (
11931197 IDisputeGameFactory (chainDeployOutput1.systemConfigProxy.disputeGameFactory ()).gameArgs (
@@ -1313,7 +1317,9 @@ contract OPContractsManager_UpdatePrestate_Test is OPContractsManager_TestInit {
13131317 // Trigger the updatePrestate function.
13141318 address proxyAdminOwner = chainDeployOutput1.opChainProxyAdmin.owner ();
13151319 vm.prank (proxyAdminOwner, true );
1316- prestateUpdater.updatePrestate (inputs);
1320+ (bool success , bytes memory returndata ) =
1321+ address (prestateUpdater).delegatecall (abi.encodeCall (IOPContractsManager.updatePrestate, (inputs)));
1322+ assertTrue (success, "updatePrestate failed " );
13171323
13181324 LibGameArgs.GameArgs memory permissionedGameArgs =
13191325 LibGameArgs.decode (chainDeployOutput1.disputeGameFactoryProxy.gameArgs (GameTypes.SUPER_PERMISSIONED_CANNON));
@@ -1720,7 +1726,9 @@ contract OPContractsManager_UpgradeSuperchainConfig_Test is OPContractsManager_U
17201726 vm.expectEmit (address (superchainConfig));
17211727 emit Upgraded (impls.superchainConfigImpl);
17221728 vm.prank (superchainPAO, true );
1723- opcm.upgradeSuperchainConfig (superchainConfig);
1729+ (bool success , bytes memory returndata ) =
1730+ address (opcm).delegatecall (abi.encodeCall (IOPContractsManager.upgradeSuperchainConfig, (superchainConfig)));
1731+ assertTrue (success, "upgradeSuperchainConfig failed " );
17241732 }
17251733
17261734 /// @notice Tests that the upgradeSuperchainConfig function reverts when it is not called via delegatecall.
@@ -1737,13 +1745,16 @@ contract OPContractsManager_UpgradeSuperchainConfig_Test is OPContractsManager_U
17371745 ISuperchainConfig superchainConfig = ISuperchainConfig (artifacts.mustGetAddress ("SuperchainConfigProxy " ));
17381746
17391747 address delegateCaller = makeAddr ("delegateCaller " );
1748+ vm.etch (delegateCaller, hex "00 " ); // Foundry fails with "cannot `prank` delegate call from an EOA" if empty
17401749
17411750 assertNotEq (superchainProxyAdmin.owner (), delegateCaller);
17421751 assertNotEq (proxyAdmin.owner (), delegateCaller);
17431752
17441753 vm.expectRevert ("Ownable: caller is not the owner " );
17451754 vm.prank (delegateCaller, true );
1746- opcm.upgradeSuperchainConfig (superchainConfig);
1755+ (bool success , bytes memory returndata ) =
1756+ address (opcm).delegatecall (abi.encodeCall (IOPContractsManager.upgradeSuperchainConfig, (superchainConfig)));
1757+ assertTrue (success, "upgradeSuperchainConfig failed " );
17471758 }
17481759
17491760 /// @notice Tests that the upgradeSuperchainConfig function reverts when the superchainConfig version is the same or
@@ -1758,9 +1769,12 @@ contract OPContractsManager_UpgradeSuperchainConfig_Test is OPContractsManager_U
17581769 vm.mockCall (address (superchainConfig), abi.encodeCall (ISuperchainConfig.version, ()), abi.encode ("99.99.99 " ));
17591770
17601771 // Try to upgrade the SuperchainConfig contract again, should fail.
1772+ vm.etch (upgrader, hex "00 " ); // Foundry fails with "cannot `prank` delegate call from an EOA" if empty
17611773 vm.expectRevert (IOPContractsManagerUpgrader.OPContractsManagerUpgrader_SuperchainConfigAlreadyUpToDate.selector );
17621774 vm.prank (upgrader, true );
1763- opcm.upgradeSuperchainConfig (superchainConfig);
1775+ (bool success , bytes memory returndata ) =
1776+ address (opcm).delegatecall (abi.encodeCall (IOPContractsManager.upgradeSuperchainConfig, (superchainConfig)));
1777+ assertTrue (success, "upgradeSuperchainConfig failed " );
17641778 }
17651779}
17661780
@@ -1833,7 +1847,9 @@ contract OPContractsManager_Migrate_Test is OPContractsManager_TestInit {
18331847 vm.expectRevert (_revertSelector);
18341848 }
18351849 vm.prank (proxyAdminOwner, true );
1836- opcm.migrate (_input);
1850+ (bool success , bytes memory returndata ) =
1851+ address (opcm).delegatecall (abi.encodeCall (IOPContractsManager.migrate, (_input)));
1852+ assertTrue (success, "migrate failed " );
18371853 uint256 gasAfter = gasleft ();
18381854
18391855 // Make sure the gas usage is less than 20 million so we can definitely fit in a block.
0 commit comments