Files
smom-dbis-138/test/flash/MinimalERC3156FlashBorrower.t.sol
defiQUG 76aa419320 feat: bridges, PMM, flash workflow, token-aggregation, and deployment docs
- CCIP/trustless bridge contracts, GRU tokens, DEX/PMM tests, reserve vault.
- Token-aggregation service routes, planner, chain config, relay env templates.
- Config snapshots and multi-chain deployment markdown updates.
- gitignore services/btc-intake/dist/ (tsc output); do not track dist.

Run forge build && forge test before deploy (large solc graph).

Made-with: Cursor
2026-04-07 23:40:52 -07:00

55 lines
1.9 KiB
Solidity

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
import {Test} from "forge-std/Test.sol";
import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import {IERC3156FlashBorrower} from "@openzeppelin/contracts/interfaces/IERC3156FlashBorrower.sol";
import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import {SimpleERC3156FlashVault} from "../../contracts/flash/SimpleERC3156FlashVault.sol";
import {MinimalERC3156FlashBorrower} from "../../contracts/flash/MinimalERC3156FlashBorrower.sol";
contract MockERC20Mint is ERC20 {
constructor() ERC20("Mock", "MCK") {}
function mint(address to, uint256 v) external {
_mint(to, v);
}
}
contract MinimalERC3156FlashBorrowerTest is Test {
SimpleERC3156FlashVault internal vault;
MockERC20Mint internal token;
MinimalERC3156FlashBorrower internal borrower;
address internal owner = address(0xA11);
address internal user = address(0xB22);
function setUp() public {
vm.startPrank(owner);
vault = new SimpleERC3156FlashVault(owner, 5);
token = new MockERC20Mint();
token.mint(address(vault), 1_000_000e18);
vault.setTokenSupported(address(token), true);
vm.stopPrank();
borrower = new MinimalERC3156FlashBorrower(address(vault));
}
function test_oneUnitFlash_repayWithPrefundedFee() public {
uint256 amount = 1000e18;
uint256 fee = vault.flashFee(address(token), amount);
token.mint(address(borrower), fee);
uint256 vaultBefore = token.balanceOf(address(vault));
vm.prank(user);
vault.flashLoan(IERC3156FlashBorrower(address(borrower)), address(token), amount, "");
assertEq(token.balanceOf(address(vault)), vaultBefore + fee);
}
function test_onFlashLoan_revert_wrongLender() public {
vm.expectRevert(MinimalERC3156FlashBorrower.UntrustedLender.selector);
borrower.onFlashLoan(user, address(token), 1, 0, "");
}
}