Fixed aave resolver

This commit is contained in:
Thrilok Kumar 2020-06-01 19:56:01 +05:30
parent 5dff477c60
commit b7d7f4cff4

View File

@ -39,6 +39,11 @@ interface AavePriceInterface {
function getFallbackOracle() external view returns(address); function getFallbackOracle() external view returns(address);
} }
interface AaveCoreInterface {
function getReserveCurrentLiquidityRate(address _reserve) external view returns (uint256);
function getReserveCurrentVariableBorrowRate(address _reserve) external view returns (uint256);
}
contract DSMath { contract DSMath {
function add(uint x, uint y) internal pure returns (uint z) { function add(uint x, uint y) internal pure returns (uint z) {
@ -76,21 +81,13 @@ contract DSMath {
contract AaveHelpers is DSMath { contract AaveHelpers is DSMath {
/** /**
* @dev get Aave Address * @dev get Aave Provider Address
*/ */
function getAaveProviderAddress() internal pure returns (address) { function getAaveProviderAddress() internal pure returns (address) {
// return 0x24a42fD28C976A61Df5D00D0599C34c4f90748c8; //mainnet // return 0x24a42fD28C976A61Df5D00D0599C34c4f90748c8; //mainnet
return 0x506B0B2CF20FAA8f38a4E2B524EE43e1f4458Cc5; //kovan return 0x506B0B2CF20FAA8f38a4E2B524EE43e1f4458Cc5; //kovan
} }
/**
* @dev get Aave Address
*/
function getAaveAddress() internal pure returns (address) {
// return 0x24a42fD28C976A61Df5D00D0599C34c4f90748c8; //mainnet
return 0x580D4Fdc4BF8f9b5ae2fb9225D584fED4AD5375c; //kovan
}
struct AaveTokenData { struct AaveTokenData {
uint tokenPrice; uint tokenPrice;
uint supplyBalance; uint supplyBalance;
@ -110,18 +107,27 @@ contract AaveHelpers is DSMath {
uint healthFactor; uint healthFactor;
} }
function getTokenData(AaveInterface aave, address user, address token, uint price) function getTokenData(
AaveCoreInterface aaveCore,
AaveInterface aave,
address user,
address token,
uint price)
internal view returns(AaveTokenData memory tokenData) { internal view returns(AaveTokenData memory tokenData) {
( (
uint supplyBal, uint supplyBal,
uint borrowBal, uint borrowBal,
, ,
, ,
uint borrowRate, ,
uint supplyRate, ,
uint fee, uint fee,
,, ,,
) = aave.getUserReserveData(token, user); ) = aave.getUserReserveData(token, user);
uint supplyRate = aaveCore.getReserveCurrentLiquidityRate(token);
uint borrowRate = aaveCore.getReserveCurrentVariableBorrowRate(token);
tokenData = AaveTokenData( tokenData = AaveTokenData(
price, price,
supplyBal, supplyBal,
@ -159,12 +165,14 @@ contract AaveHelpers is DSMath {
contract Resolver is AaveHelpers { contract Resolver is AaveHelpers {
function getPosition(address user, address[] memory tokens) public view returns(AaveTokenData[] memory, AaveUserData memory) { function getPosition(address user, address[] memory tokens) public view returns(AaveTokenData[] memory, AaveUserData memory) {
AaveInterface aave = AaveInterface(getAaveAddress());
AaveProviderInterface AaveProvider = AaveProviderInterface(getAaveProviderAddress()); AaveProviderInterface AaveProvider = AaveProviderInterface(getAaveProviderAddress());
AaveInterface aave = AaveInterface(AaveProvider.getLendingPool());
AaveCoreInterface aaveCore = AaveCoreInterface(AaveProvider.getLendingPoolCore());
AaveTokenData[] memory tokensData = new AaveTokenData[](tokens.length); AaveTokenData[] memory tokensData = new AaveTokenData[](tokens.length);
uint[] memory tokenPrices = AavePriceInterface(AaveProvider.getPriceOracle()).getAssetsPrices(tokens); uint[] memory tokenPrices = AavePriceInterface(AaveProvider.getPriceOracle()).getAssetsPrices(tokens);
for (uint i = 0; i < tokens.length; i++) { for (uint i = 0; i < tokens.length; i++) {
tokensData[i] = getTokenData(aave, user, tokens[i], tokenPrices[i]); tokensData[i] = getTokenData(aaveCore, aave, user, tokens[i], tokenPrices[i]);
} }
return (tokensData, getUserData(aave, user)); return (tokensData, getUserData(aave, user));
} }