Aave v2 helpers

This commit is contained in:
Mubaris NK 2021-01-04 22:56:52 +05:30
parent 37996015ce
commit da1241c307
No known key found for this signature in database
GPG Key ID: 1F132294E8700320

View File

@ -296,6 +296,18 @@ contract Helpers is DSMath {
amt = add(bal, fee);
}
function getWithdrawBalanceV2(AaveDataProviderInterface aaveData, address token) internal view returns (uint bal) {
(bal, , , , , , , , ) = aaveData.getUserReserveData(token, address(this));
}
function getPaybackBalanceV2(AaveDataProviderInterface aaveData, address token, uint rateMode) internal view returns (uint bal) {
if (rateMode == 1) {
(, bal, , , , , , , ) = aaveData.getUserReserveData(token, address(this));
} else {
(, , bal, , , , , , ) = aaveData.getUserReserveData(token, address(this));
}
}
function getIsColl(AaveDataProviderInterface aaveData, address token) internal view returns (bool isCol) {
(, , , , , , , , isCol) = aaveData.getUserReserveData(token, address(this));
}
@ -494,3 +506,92 @@ contract AaveV1Helpers is CompoundHelpers {
}
}
}
contract AaveV2Helpers is AaveV1Helpers {
function _aaveV2Borrow(
AaveV2Interface aave,
uint length,
address[] memory tokens,
uint[] memory amts,
uint[] memory rateModes
) internal {
for (uint i = 0; i < length; i++) {
if (amts[i] > 0) {
bool isEth = tokens[i] == getEthAddr();
address _token = isEth ? getWethAddr() : tokens[i];
aave.borrow(_token, amts[i], rateModes[i], getReferralCode(), address(this));
convertWethToEth(isEth, TokenInterface(_token), amt);
}
}
}
function _aaveV2Deposit(
AaveV2Interface aave,
AaveV2DataProviderInterface aaveData,
uint length,
address[] memory tokens,
uint[] memory amts
) internal {
for (uint i = 0; i < length; i++) {
if (amts[i] > 0) {
bool isEth = tokens[i] == getEthAddr();
address _token = isEth ? getWethAddr() : tokens[i];
TokenInterface tokenContract = TokenInterface(_token);
convertEthToWeth(isEth, tokenContract, amts[i]);
tokenContract.approve(address(aave), amts[i]);
if (!getIsCollV2(aaveData, _token)) {
aave.setUserUseReserveAsCollateral(_token, true);
}
}
}
}
function _aaveV2Withdraw(
AaveV2Interface aave,
AaveV2DataProviderInterface aaveDataV2,
uint length,
address[] memory tokens,
uint[] memory amts
) internal {
for (uint i = 0; i < length; i++) {
if (amts[i] > 0) {
bool isEth = tokens[i] == getEthAddr();
address _token = isEth ? getWethAddr() : tokens[i];
TokenInterface tokenContract = TokenInterface(_token);
aave.withdraw(_token, amts[i], address(this));
uint _amt = amts[i] == uint(-1) ? getWithdrawBalanceV2(aaveData, _token) : amts[i];
convertWethToEth(isEth, tokenContract, _amt);
}
}
}
function _aaveV2Payback(
AaveV2Interface aave,
AaveV2DataProviderInterface aaveData,
uint length,
address[] memory tokens,
uint[] memory amts
) internal {
for (uint i = 0; i < length; i++) {
if (amts[i] > 0) {
bool isEth = tokens[i] == getEthAddr();
address _token = isEth ? getWethAddr() : tokens[i];
TokenInterface tokenContract = TokenInterface(_token);
uint _amt = amts[i] == uint(-1) ? getPaybackBalanceV2(aaveData, _token, rateMode[i]) : amts[i];
convertEthToWeth(isEth, tokenContract, amts[i]);
aave.repay(_token, _amt, rateMode[i], address(this));
}
}
}
}