1

我正在尝试使用 web3.py 获得快速贷款。我能够成功部署 flashloan 合同,但是当我调用 flashloan 函数时,它给了我“执行恢复:SafeERC20:低级调用失败”失败错误。我的账户里有足够的以太币。

我需要向我的闪电贷款合同发送一些以太币吗?但我不这么认为,错误是因为没有以太币来支付汽油费。(如果是这种情况,请告诉我!)

下面是我的闪贷代码

pragma solidity ^0.6.6;

import "./aave/FlashLoanReceiverBaseV2.sol";
import "../../interfaces/v2/ILendingPoolAddressesProviderV2.sol";
import "../../interfaces/v2/ILendingPoolV2.sol";

contract FlashloanV2 is FlashLoanReceiverBaseV2, Withdrawable {
    constructor(address _addressProvider) FlashLoanReceiverBaseV2(_addressProvider) public {}

    function executeOperation(
        address[] calldata assets,
        uint256[] calldata amounts,
        uint256[] calldata premiums,
        address initiator,
        bytes calldata params
    )
        external
        override
        returns (bool)
    {

        // Approve the LendingPool contract allowance to *pull* the owed amount
        for (uint i = 0; i < assets.length; i++) {
            uint amountOwing = amounts[i].add(premiums[i]);
            IERC20(assets[i]).approve(address(LENDING_POOL), amountOwing);
        }
        return true;
    }

    function _flashloan(address[] memory assets, uint256[] memory amounts) internal {
        address receiverAddress = address(this);

        address onBehalfOf = address(this);
        bytes memory params = "";
        uint16 referralCode = 0;

        uint256[] memory modes = new uint256[](assets.length);

        // 0 = no debt (flash), 1 = stable, 2 = variable
        for (uint256 i = 0; i < assets.length; i++) {
            modes[i] = 0;
        }

        LENDING_POOL.flashLoan(
            receiverAddress,
            assets,
            amounts,
            modes,
            onBehalfOf,
            params,
            referralCode
        );
    }


    function flashloan(address[] memory assets, uint256[] memory amounts) public onlyOwner {
        _flashloan(assets, amounts);
    }


    function flashloan(address _asset) public onlyOwner {
        bytes memory data = "";
        uint amount = 1 ether;

        address[] memory assets = new address[](1);
        assets[0] = _asset;

        uint256[] memory amounts = new uint256[](1);
        amounts[0] = amount;

        _flashloan(assets, amounts);
   }

}

任何帮助将不胜感激。

4

1 回答 1

1

我认为您收到的错误是因为您没有足够的资金在(闪电)交易结束时偿还闪电贷款 + 保费。

你的逻辑不会产生任何额外的利润,你单独索取的资金不足以支付费用。

于 2021-06-13T00:11:37.720 回答