aave-protocol-v2/contracts/flashloan/base/FlashLoanReceiverBase.sol

52 lines
1.5 KiB
Solidity
Raw Normal View History

// SPDX-License-Identifier: agpl-3.0
pragma solidity ^0.6.8;
import "@openzeppelin/contracts/math/SafeMath.sol";
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "../interfaces/IFlashLoanReceiver.sol";
import "../../interfaces/ILendingPoolAddressesProvider.sol";
2020-06-02 13:49:24 +00:00
import "../../libraries/UniversalERC20.sol";
abstract contract FlashLoanReceiverBase is IFlashLoanReceiver {
2020-06-02 13:49:24 +00:00
using UniversalERC20 for IERC20;
using SafeMath for uint256;
ILendingPoolAddressesProvider public addressesProvider;
constructor(ILendingPoolAddressesProvider _provider) public {
addressesProvider = _provider;
}
receive() external payable {}
function transferFundsBackToPoolInternal(address _reserve, uint256 _amount) internal {
2020-06-20 23:40:03 +00:00
address payable pool = payable(addressesProvider.getLendingPool());
2020-06-20 23:40:03 +00:00
transferInternal(pool,_reserve, _amount);
}
function transferInternal(address payable _destination, address _reserve, uint256 _amount) internal {
2020-07-10 09:20:15 +00:00
if(IERC20(_reserve).isETH()) {
//solium-disable-next-line
_destination.call{value: _amount}("");
return;
}
2020-07-10 09:20:15 +00:00
IERC20(_reserve).universalTransfer(_destination, _amount);
}
function getBalanceInternal(address _target, address _reserve) internal view returns(uint256) {
2020-07-10 09:20:15 +00:00
if(IERC20(_reserve).isETH()) {
return _target.balance;
}
return IERC20(_reserve).balanceOf(_target);
}
2020-06-02 14:16:22 +00:00
}