最近在测试一个flashloan的合约,如果删除第9行的if(1==1){xxx} ,那么整个闪贷过程执行正常没有任何问题,但是加上if(1==1){xxx} 后,会报错:"There is no profit! Reverting!"
,这个错误是44行的require
的。搞不清楚为什么同样的代码,增加控制语句后就无法正常执行呢?
测试环境: Truffle v5.1.47 (core: 5.1.47) Solidity v0.5.16 (solc-js) Node v12.18.4 Web3.js v1.2.1 sol pragma: pragma solidity ^0.5.0;
function executeOperation(
address _reserve,
uint _amount,
uint _fee,
bytes calldata _params
) external {
require(_amount <= getBalanceInternal(address(this), _reserve), "Invalid balance, was the flashLoan successful?");
if(1 == 1) {
uint256 deadline = now + 3000;
address RESERVE_ADDRESS = _reserve;
// get Exchange Address for the reserve asset
address addressForLoanAssetExchangeA = uniswapFactoryA.getExchange(RESERVE_ADDRESS);
address addressForLoanAssetExchangeB = uniswapFactoryB.getExchange(RESERVE_ADDRESS);
// Instantiate Exchange A
exchangeAforLoanAsset = IUniswapExchange(addressForLoanAssetExchangeA);
exchangeBforLoanAsset = IUniswapExchange(addressForLoanAssetExchangeB);
IERC20 loan = IERC20(RESERVE_ADDRESS);
IERC20 bat = IERC20(BAT_ADDRESS);
// Swap the reserve asset (e.g. DAI) for BAT
require(loan.approve(address(exchangeBforLoanAsset), _amount), "Could not approve reserve asset sell"); // B dai to bat
uint256 batPurchased = exchangeBforLoanAsset.tokenToTokenSwapInput(
_amount,
1,
1,
deadline,
BAT_ADDRESS
);
require(bat.approve(address(exchangeAforBAT), batPurchased), "Could not approve BAT asset sell"); // A bat to dai
// Swap BAT back to the reserve asset (e.g. DAIs)
uint256 reserveAssetPurchased = exchangeAforBAT.tokenToTokenSwapInput(
batPurchased,
1,
1,
deadline,
RESERVE_ADDRESS
);
uint amount = _amount;
uint totalDebt = amount.add(_fee);
require(reserveAssetPurchased > totalDebt, "There is no profit! Reverting!");
transferFundsBackToPoolInternal(RESERVE_ADDRESS, amount.add(_fee));
}
}
正常执行的tx: https://kovan.etherscan.io/tx/0xb1f7d758028f71a824b65bacfacd5cac3a2e9034bcdf6f05fb60c95a89c2b919 出错的tx: https://kovan.etherscan.io/tx/0xa3a07fa388b2e97718f0ea60aeb1dfd14b59cc9bc16b53fc738d3b3e36471c07