|
| 1 | +// SPDX-License-Identifier: LicenseRef-DCL-1.0 |
| 2 | +// SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd |
| 3 | +pragma solidity =0.8.25; |
| 4 | + |
| 5 | +import {Test} from "forge-std-1.17.0/src/Test.sol"; |
| 6 | +import {IERC3156FlashLender} from "raindex-interface-0.1.8/src/interface/ierc3156/IERC3156FlashLender.sol"; |
| 7 | +import {IRaindexV6} from "raindex-interface-0.1.8/src/interface/IRaindexV6.sol"; |
| 8 | +import {BadRaindex} from "../../src/abstract/RaindexV6ArbCommon.sol"; |
| 9 | +import {LibRaindexDeploy} from "../../src/lib/deploy/LibRaindexDeploy.sol"; |
| 10 | +import {LibTestFlashBorrowerArb, FlashBorrowerSetup} from "test/util/lib/LibTestFlashBorrowerArb.sol"; |
| 11 | +import {LibTestArb} from "test/util/lib/LibTestArb.sol"; |
| 12 | +import {MockExchange} from "test/util/concrete/MockExchange.sol"; |
| 13 | + |
| 14 | +contract RaindexV6FlashBorrowerBadRaindexTest is Test { |
| 15 | + /// arb4 reverts BadRaindex for any raindex other than the deterministic |
| 16 | + /// deployment, even a funded working lender, before calling it. |
| 17 | + function testArb4RevertsUntrustedRaindex(address badRaindex) external { |
| 18 | + vm.assume(badRaindex != LibRaindexDeploy.RAINDEX_DEPLOYED_ADDRESS); |
| 19 | + vm.assume(badRaindex != address(0)); |
| 20 | + assumeNotPrecompile(badRaindex); |
| 21 | + assumeNotForgeAddress(badRaindex); |
| 22 | + |
| 23 | + MockExchange exchange = new MockExchange(); |
| 24 | + FlashBorrowerSetup memory setup = LibTestFlashBorrowerArb.setup(vm, address(exchange), 100e18); |
| 25 | + vm.assume(badRaindex.code.length == 0); |
| 26 | + vm.assume(badRaindex != address(setup.arb)); |
| 27 | + vm.etch(badRaindex, LibRaindexDeploy.RAINDEX_DEPLOYED_ADDRESS.code); |
| 28 | + setup.outputToken.mint(badRaindex, 1000e18); |
| 29 | + |
| 30 | + vm.expectCall(badRaindex, abi.encodeWithSelector(IERC3156FlashLender.flashLoan.selector), 0); |
| 31 | + vm.expectRevert(abi.encodeWithSelector(BadRaindex.selector, badRaindex)); |
| 32 | + setup.arb.arb4(IRaindexV6(badRaindex), setup.takeOrdersConfig, setup.exchangeData, LibTestArb.noopTask()); |
| 33 | + } |
| 34 | + |
| 35 | + /// arb4 reverts BadRaindex for the zero address. |
| 36 | + function testArb4RevertsZeroRaindex() external { |
| 37 | + MockExchange exchange = new MockExchange(); |
| 38 | + FlashBorrowerSetup memory setup = LibTestFlashBorrowerArb.setup(vm, address(exchange), 100e18); |
| 39 | + |
| 40 | + vm.expectRevert(abi.encodeWithSelector(BadRaindex.selector, address(0))); |
| 41 | + setup.arb.arb4(IRaindexV6(address(0)), setup.takeOrdersConfig, setup.exchangeData, LibTestArb.noopTask()); |
| 42 | + } |
| 43 | +} |
0 commit comments