github.com/ethereum-optimism/optimism@v1.7.2/packages/contracts-bedrock/test/kontrol/proofs/OptimismPortal.k.sol (about) 1 // SPDX-License-Identifier: MIT 2 pragma solidity ^0.8.13; 3 4 import { DeploymentSummary } from "./utils/DeploymentSummary.sol"; 5 import { KontrolUtils } from "./utils/KontrolUtils.sol"; 6 import { Types } from "src/libraries/Types.sol"; 7 import { 8 IOptimismPortal as OptimismPortal, 9 ISuperchainConfig as SuperchainConfig 10 } from "./interfaces/KontrolInterfaces.sol"; 11 12 contract OptimismPortalKontrol is DeploymentSummary, KontrolUtils { 13 OptimismPortal optimismPortal; 14 SuperchainConfig superchainConfig; 15 16 /// @dev Inlined setUp function for faster Kontrol performance 17 /// Tracking issue: https://github.com/runtimeverification/kontrol/issues/282 18 function setUpInlined() public { 19 optimismPortal = OptimismPortal(payable(optimismPortalProxyAddress)); 20 superchainConfig = SuperchainConfig(superchainConfigProxyAddress); 21 } 22 23 function prove_finalizeWithdrawalTransaction_paused(Types.WithdrawalTransaction calldata _tx) external { 24 setUpInlined(); 25 26 // Pause Optimism Portal 27 vm.prank(optimismPortal.guardian()); 28 superchainConfig.pause("identifier"); 29 30 vm.expectRevert("OptimismPortal: paused"); 31 optimismPortal.finalizeWithdrawalTransaction(_tx); 32 } 33 34 /// @dev Function containing the logic for prove_proveWithdrawalTransaction_paused 35 /// The reason for this is that we want the _withdrawalProof to range in size from 36 /// 0 to 10. These 11 proofs will exercise the same logic, which is contained in this function 37 function prove_proveWithdrawalTransaction_paused_internal( 38 Types.WithdrawalTransaction memory _tx, 39 uint256 _l2OutputIndex, 40 Types.OutputRootProof calldata _outputRootProof, 41 bytes[] memory _withdrawalProof 42 ) 43 internal 44 { 45 setUpInlined(); 46 47 // Pause Optimism Portal 48 vm.prank(optimismPortal.guardian()); 49 superchainConfig.pause("identifier"); 50 51 vm.expectRevert("OptimismPortal: paused"); 52 optimismPortal.proveWithdrawalTransaction(_tx, _l2OutputIndex, _outputRootProof, _withdrawalProof); 53 } 54 55 /// @custom:kontrol-array-length-equals _withdrawalProof: 10, 56 /// @custom:kontrol-bytes-length-equals _withdrawalProof: 600, 57 function prove_proveWithdrawalTransaction_paused10( 58 Types.WithdrawalTransaction memory _tx, 59 uint256 _l2OutputIndex, 60 Types.OutputRootProof calldata _outputRootProof, 61 bytes[] calldata _withdrawalProof 62 ) 63 external 64 { 65 prove_proveWithdrawalTransaction_paused_internal(_tx, _l2OutputIndex, _outputRootProof, _withdrawalProof); 66 } 67 68 /// @custom:kontrol-array-length-equals _withdrawalProof: 9, 69 /// @custom:kontrol-bytes-length-equals _withdrawalProof: 600, 70 function prove_proveWithdrawalTransaction_paused9( 71 Types.WithdrawalTransaction memory _tx, 72 uint256 _l2OutputIndex, 73 Types.OutputRootProof calldata _outputRootProof, 74 bytes[] calldata _withdrawalProof 75 ) 76 external 77 { 78 prove_proveWithdrawalTransaction_paused_internal(_tx, _l2OutputIndex, _outputRootProof, _withdrawalProof); 79 } 80 81 /// @custom:kontrol-array-length-equals _withdrawalProof: 8, 82 /// @custom:kontrol-bytes-length-equals _withdrawalProof: 600, 83 function prove_proveWithdrawalTransaction_paused8( 84 Types.WithdrawalTransaction memory _tx, 85 uint256 _l2OutputIndex, 86 Types.OutputRootProof calldata _outputRootProof, 87 bytes[] calldata _withdrawalProof 88 ) 89 external 90 { 91 prove_proveWithdrawalTransaction_paused_internal(_tx, _l2OutputIndex, _outputRootProof, _withdrawalProof); 92 } 93 94 /// @custom:kontrol-array-length-equals _withdrawalProof: 7, 95 /// @custom:kontrol-bytes-length-equals _withdrawalProof: 600, 96 function prove_proveWithdrawalTransaction_paused7( 97 Types.WithdrawalTransaction memory _tx, 98 uint256 _l2OutputIndex, 99 Types.OutputRootProof calldata _outputRootProof, 100 bytes[] calldata _withdrawalProof 101 ) 102 external 103 { 104 prove_proveWithdrawalTransaction_paused_internal(_tx, _l2OutputIndex, _outputRootProof, _withdrawalProof); 105 } 106 107 /// @custom:kontrol-array-length-equals _withdrawalProof: 6, 108 /// @custom:kontrol-bytes-length-equals _withdrawalProof: 600, 109 function prove_proveWithdrawalTransaction_paused6( 110 Types.WithdrawalTransaction memory _tx, 111 uint256 _l2OutputIndex, 112 Types.OutputRootProof calldata _outputRootProof, 113 bytes[] calldata _withdrawalProof 114 ) 115 external 116 { 117 prove_proveWithdrawalTransaction_paused_internal(_tx, _l2OutputIndex, _outputRootProof, _withdrawalProof); 118 } 119 120 /// @custom:kontrol-array-length-equals _withdrawalProof: 5, 121 /// @custom:kontrol-bytes-length-equals _withdrawalProof: 600, 122 function prove_proveWithdrawalTransaction_paused5( 123 Types.WithdrawalTransaction memory _tx, 124 uint256 _l2OutputIndex, 125 Types.OutputRootProof calldata _outputRootProof, 126 bytes[] calldata _withdrawalProof 127 ) 128 external 129 { 130 prove_proveWithdrawalTransaction_paused_internal(_tx, _l2OutputIndex, _outputRootProof, _withdrawalProof); 131 } 132 133 /// @custom:kontrol-array-length-equals _withdrawalProof: 4, 134 /// @custom:kontrol-bytes-length-equals _withdrawalProof: 600, 135 function prove_proveWithdrawalTransaction_paused4( 136 Types.WithdrawalTransaction memory _tx, 137 uint256 _l2OutputIndex, 138 Types.OutputRootProof calldata _outputRootProof, 139 bytes[] calldata _withdrawalProof 140 ) 141 external 142 { 143 prove_proveWithdrawalTransaction_paused_internal(_tx, _l2OutputIndex, _outputRootProof, _withdrawalProof); 144 } 145 146 /// @custom:kontrol-array-length-equals _withdrawalProof: 3, 147 /// @custom:kontrol-bytes-length-equals _withdrawalProof: 600, 148 function prove_proveWithdrawalTransaction_paused3( 149 Types.WithdrawalTransaction memory _tx, 150 uint256 _l2OutputIndex, 151 Types.OutputRootProof calldata _outputRootProof, 152 bytes[] calldata _withdrawalProof 153 ) 154 external 155 { 156 prove_proveWithdrawalTransaction_paused_internal(_tx, _l2OutputIndex, _outputRootProof, _withdrawalProof); 157 } 158 159 /// @custom:kontrol-array-length-equals _withdrawalProof: 2, 160 /// @custom:kontrol-bytes-length-equals _withdrawalProof: 600, 161 function prove_proveWithdrawalTransaction_paused2( 162 Types.WithdrawalTransaction memory _tx, 163 uint256 _l2OutputIndex, 164 Types.OutputRootProof calldata _outputRootProof, 165 bytes[] calldata _withdrawalProof 166 ) 167 external 168 { 169 prove_proveWithdrawalTransaction_paused_internal(_tx, _l2OutputIndex, _outputRootProof, _withdrawalProof); 170 } 171 172 /// @custom:kontrol-array-length-equals _withdrawalProof: 1, 173 /// @custom:kontrol-bytes-length-equals _withdrawalProof: 600, 174 function prove_proveWithdrawalTransaction_paused1( 175 Types.WithdrawalTransaction memory _tx, 176 uint256 _l2OutputIndex, 177 Types.OutputRootProof calldata _outputRootProof, 178 bytes[] calldata _withdrawalProof 179 ) 180 external 181 { 182 prove_proveWithdrawalTransaction_paused_internal(_tx, _l2OutputIndex, _outputRootProof, _withdrawalProof); 183 } 184 185 function prove_proveWithdrawalTransaction_paused0( 186 Types.WithdrawalTransaction memory _tx, 187 uint256 _l2OutputIndex, 188 Types.OutputRootProof calldata _outputRootProof 189 ) 190 external 191 { 192 bytes[] memory _withdrawalProof = new bytes[](0); 193 prove_proveWithdrawalTransaction_paused_internal(_tx, _l2OutputIndex, _outputRootProof, _withdrawalProof); 194 } 195 }