mirror of
				https://github.com/Instadapp/aave-protocol-v2.git
				synced 2024-07-29 21:47:30 +00:00 
			
		
		
		
	Moved accessors to AaveProtocolTestHelpers
This commit is contained in:
		
							parent
							
								
									be517ad960
								
							
						
					
					
						commit
						645ea913b0
					
				| 
						 | 
				
			
			@ -579,7 +579,7 @@ contract LendingPoolCollateralManager is VersionedInitializable, LendingPoolStor
 | 
			
		|||
    vars.collateralPrice = oracle.getAssetPrice(collateralAddress);
 | 
			
		||||
    vars.principalCurrencyPrice = oracle.getAssetPrice(principalAddress);
 | 
			
		||||
 | 
			
		||||
    (, , vars.liquidationBonus, vars.collateralDecimals) = collateralReserve
 | 
			
		||||
    (, , vars.liquidationBonus, vars.collateralDecimals, ) = collateralReserve
 | 
			
		||||
      .configuration
 | 
			
		||||
      .getParams();
 | 
			
		||||
    vars.principalDecimals = principalReserve.configuration.getDecimals();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -578,9 +578,11 @@ contract LendingPoolConfigurator is VersionedInitializable {
 | 
			
		|||
 | 
			
		||||
    ReserveConfiguration.Map memory configuration = pool.getConfiguration(asset);
 | 
			
		||||
 | 
			
		||||
    (, , , uint256 decimals, ) = configuration.getParamsMemory();
 | 
			
		||||
 | 
			
		||||
    bytes memory params = abi.encodeWithSignature(
 | 
			
		||||
      'initialize(uint8,string,string)',
 | 
			
		||||
      uint8(configuration.getDecimals()),
 | 
			
		||||
      uint8(decimals),
 | 
			
		||||
      IERC20Detailed(implementation).name(),
 | 
			
		||||
      IERC20Detailed(implementation).symbol()
 | 
			
		||||
    );
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -313,14 +313,12 @@ library ReserveConfiguration {
 | 
			
		|||
      uint256
 | 
			
		||||
    )
 | 
			
		||||
  {
 | 
			
		||||
    uint256 dataLocal = self.data;
 | 
			
		||||
 | 
			
		||||
    return (
 | 
			
		||||
      dataLocal & ~LTV_MASK,
 | 
			
		||||
      (dataLocal & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION,
 | 
			
		||||
      (dataLocal & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION,
 | 
			
		||||
      (dataLocal & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION,
 | 
			
		||||
      (dataLocal & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION
 | 
			
		||||
      self.data & ~LTV_MASK,
 | 
			
		||||
      (self.data & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION,
 | 
			
		||||
      (self.data & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION,
 | 
			
		||||
      (self.data & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION,
 | 
			
		||||
      (self.data & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -340,13 +338,11 @@ library ReserveConfiguration {
 | 
			
		|||
      bool
 | 
			
		||||
    )
 | 
			
		||||
  {
 | 
			
		||||
    uint256 dataLocal = self.data;
 | 
			
		||||
 | 
			
		||||
    return (
 | 
			
		||||
      (dataLocal & ~ACTIVE_MASK) >> IS_ACTIVE_START_BIT_POSITION != 0,
 | 
			
		||||
      (dataLocal & ~FROZEN_MASK) >> IS_FROZEN_START_BIT_POSITION != 0,
 | 
			
		||||
      (dataLocal & ~BORROWING_MASK) >> BORROWING_ENABLED_START_BIT_POSITION != 0,
 | 
			
		||||
      (dataLocal & ~STABLE_BORROWING_MASK) >> STABLE_BORROWING_ENABLED_START_BIT_POSITION != 0
 | 
			
		||||
      (self.data & ~ACTIVE_MASK) >> IS_ACTIVE_START_BIT_POSITION != 0,
 | 
			
		||||
      (self.data & ~FROZEN_MASK) >> IS_FROZEN_START_BIT_POSITION != 0,
 | 
			
		||||
      (self.data & ~BORROWING_MASK) >> BORROWING_ENABLED_START_BIT_POSITION != 0,
 | 
			
		||||
      (self.data & ~STABLE_BORROWING_MASK) >> STABLE_BORROWING_ENABLED_START_BIT_POSITION != 0
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,8 +5,13 @@ pragma experimental ABIEncoderV2;
 | 
			
		|||
import {ILendingPoolAddressesProvider} from '../interfaces/ILendingPoolAddressesProvider.sol';
 | 
			
		||||
import {IERC20Detailed} from '../interfaces/IERC20Detailed.sol';
 | 
			
		||||
import {ILendingPool} from '../interfaces/ILendingPool.sol';
 | 
			
		||||
import {ReserveLogic} from '../libraries/logic/ReserveLogic.sol';
 | 
			
		||||
import {ReserveConfiguration} from '../libraries/configuration/ReserveConfiguration.sol';
 | 
			
		||||
import {IStableDebtToken} from '../tokenization/interfaces/IStableDebtToken.sol';
 | 
			
		||||
 | 
			
		||||
contract AaveProtocolTestHelpers {
 | 
			
		||||
  using ReserveConfiguration for ReserveConfiguration.Map;
 | 
			
		||||
 | 
			
		||||
  struct TokenData {
 | 
			
		||||
    string symbol;
 | 
			
		||||
    address tokenAddress;
 | 
			
		||||
| 
						 | 
				
			
			@ -38,12 +43,108 @@ contract AaveProtocolTestHelpers {
 | 
			
		|||
    address[] memory reserves = pool.getReservesList();
 | 
			
		||||
    TokenData[] memory aTokens = new TokenData[](reserves.length);
 | 
			
		||||
    for (uint256 i = 0; i < reserves.length; i++) {
 | 
			
		||||
      (address aTokenAddress, , ) = pool.getReserveTokensAddresses(reserves[i]);
 | 
			
		||||
      ReserveLogic.ReserveData memory reserveData = pool.getReserveData(reserves[i]);
 | 
			
		||||
      aTokens[i] = TokenData({
 | 
			
		||||
        symbol: IERC20Detailed(aTokenAddress).symbol(),
 | 
			
		||||
        tokenAddress: aTokenAddress
 | 
			
		||||
        symbol: IERC20Detailed(reserveData.aTokenAddress).symbol(),
 | 
			
		||||
        tokenAddress: reserveData.aTokenAddress
 | 
			
		||||
      });
 | 
			
		||||
    }
 | 
			
		||||
    return aTokens;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  function getReserveConfigurationData(address asset)
 | 
			
		||||
    external
 | 
			
		||||
    view
 | 
			
		||||
    returns (
 | 
			
		||||
      uint256 decimals,
 | 
			
		||||
      uint256 ltv,
 | 
			
		||||
      uint256 liquidationThreshold,
 | 
			
		||||
      uint256 liquidationBonus,
 | 
			
		||||
      uint256 reserveFactor,
 | 
			
		||||
      bool usageAsCollateralEnabled,
 | 
			
		||||
      bool borrowingEnabled,
 | 
			
		||||
      bool stableBorrowRateEnabled,
 | 
			
		||||
      bool isActive,
 | 
			
		||||
      bool isFrozen
 | 
			
		||||
    )
 | 
			
		||||
  {
 | 
			
		||||
    ReserveConfiguration.Map memory configuration = ILendingPool(
 | 
			
		||||
      ADDRESSES_PROVIDER.getLendingPool()
 | 
			
		||||
    )
 | 
			
		||||
      .getConfiguration(asset);
 | 
			
		||||
 | 
			
		||||
    (ltv, liquidationThreshold, liquidationBonus, decimals, reserveFactor) = configuration
 | 
			
		||||
      .getParamsMemory();
 | 
			
		||||
 | 
			
		||||
    (isActive, isFrozen, borrowingEnabled, stableBorrowRateEnabled) = configuration
 | 
			
		||||
      .getFlagsMemory();
 | 
			
		||||
 | 
			
		||||
    usageAsCollateralEnabled = liquidationThreshold == 0;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  function getReserveData(address asset)
 | 
			
		||||
    external
 | 
			
		||||
    view
 | 
			
		||||
    returns (
 | 
			
		||||
      uint256 availableLiquidity,
 | 
			
		||||
      uint256 totalStableDebt,
 | 
			
		||||
      uint256 totalVariableDebt,
 | 
			
		||||
      uint256 liquidityRate,
 | 
			
		||||
      uint256 variableBorrowRate,
 | 
			
		||||
      uint256 stableBorrowRate,
 | 
			
		||||
      uint256 averageStableBorrowRate,
 | 
			
		||||
      uint256 liquidityIndex,
 | 
			
		||||
      uint256 variableBorrowIndex,
 | 
			
		||||
      uint40 lastUpdateTimestamp
 | 
			
		||||
    )
 | 
			
		||||
  {
 | 
			
		||||
    ReserveLogic.ReserveData memory reserve = ILendingPool(ADDRESSES_PROVIDER.getLendingPool())
 | 
			
		||||
      .getReserveData(asset);
 | 
			
		||||
 | 
			
		||||
    return (
 | 
			
		||||
      IERC20Detailed(asset).balanceOf(reserve.aTokenAddress),
 | 
			
		||||
      IERC20Detailed(reserve.stableDebtTokenAddress).totalSupply(),
 | 
			
		||||
      IERC20Detailed(reserve.variableDebtTokenAddress).totalSupply(),
 | 
			
		||||
      reserve.currentLiquidityRate,
 | 
			
		||||
      reserve.currentVariableBorrowRate,
 | 
			
		||||
      reserve.currentStableBorrowRate,
 | 
			
		||||
      IStableDebtToken(reserve.stableDebtTokenAddress).getAverageStableRate(),
 | 
			
		||||
      reserve.liquidityIndex,
 | 
			
		||||
      reserve.variableBorrowIndex,
 | 
			
		||||
      reserve.lastUpdateTimestamp
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
/*
 | 
			
		||||
  function getUserReserveData(address asset, address user)
 | 
			
		||||
    external
 | 
			
		||||
    view
 | 
			
		||||
    returns (
 | 
			
		||||
      uint256 currentATokenBalance,
 | 
			
		||||
      uint256 currentStableDebt,
 | 
			
		||||
      uint256 currentVariableDebt,
 | 
			
		||||
      uint256 principalStableDebt,
 | 
			
		||||
      uint256 scaledVariableDebt,
 | 
			
		||||
      uint256 stableBorrowRate,
 | 
			
		||||
      uint256 liquidityRate,
 | 
			
		||||
      uint40 stableRateLastUpdated,
 | 
			
		||||
      bool usageAsCollateralEnabled
 | 
			
		||||
    )
 | 
			
		||||
  {
 | 
			
		||||
 
 | 
			
		||||
     ReserveLogic.ReserveData memory reserve = ILendingPool(ADDRESSES_PROVIDER.getLendingPool())
 | 
			
		||||
      .getReserveData(asset);
 | 
			
		||||
    
 | 
			
		||||
    currentATokenBalance = IERC20(reserve.aTokenAddress).balanceOf(user);
 | 
			
		||||
    (currentStableDebt, currentVariableDebt) = Helpers.getUserCurrentDebt(user, reserve);
 | 
			
		||||
    principalStableDebt = IStableDebtToken(reserve.stableDebtTokenAddress).principalBalanceOf(user);
 | 
			
		||||
    scaledVariableDebt = IVariableDebtToken(reserve.variableDebtTokenAddress).scaledBalanceOf(user);
 | 
			
		||||
    liquidityRate = reserve.currentLiquidityRate;
 | 
			
		||||
    stableBorrowRate = IStableDebtToken(reserve.stableDebtTokenAddress).getUserStableRate(user);
 | 
			
		||||
    stableRateLastUpdated = IStableDebtToken(reserve.stableDebtTokenAddress).getUserLastUpdated(
 | 
			
		||||
      user
 | 
			
		||||
    );
 | 
			
		||||
    usageAsCollateralEnabled = _usersConfig[user].isUsingAsCollateral(reserve.id);
 | 
			
		||||
 | 
			
		||||
  }
 | 
			
		||||
  */
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,12 +1,15 @@
 | 
			
		|||
// SPDX-License-Identifier: agpl-3.0
 | 
			
		||||
pragma solidity ^0.6.8;
 | 
			
		||||
 | 
			
		||||
pragma experimental ABIEncoderV2;
 | 
			
		||||
 | 
			
		||||
import {Address} from '@openzeppelin/contracts/utils/Address.sol';
 | 
			
		||||
import {IERC20} from '@openzeppelin/contracts/token/ERC20/IERC20.sol';
 | 
			
		||||
 | 
			
		||||
import {LendingPoolAddressesProvider} from '../configuration/LendingPoolAddressesProvider.sol';
 | 
			
		||||
import {ILendingPool} from '../interfaces/ILendingPool.sol';
 | 
			
		||||
import {SafeERC20} from '@openzeppelin/contracts/token/ERC20/SafeERC20.sol';
 | 
			
		||||
import {ReserveConfiguration} from '../libraries/configuration/ReserveConfiguration.sol';
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @title WalletBalanceProvider contract
 | 
			
		||||
| 
						 | 
				
			
			@ -19,6 +22,7 @@ contract WalletBalanceProvider {
 | 
			
		|||
  using Address for address payable;
 | 
			
		||||
  using Address for address;
 | 
			
		||||
  using SafeERC20 for IERC20;
 | 
			
		||||
  using ReserveConfiguration for ReserveConfiguration.Map;
 | 
			
		||||
 | 
			
		||||
  LendingPoolAddressesProvider internal immutable _provider;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -91,7 +95,9 @@ contract WalletBalanceProvider {
 | 
			
		|||
    uint256[] memory balances = new uint256[](reserves.length);
 | 
			
		||||
 | 
			
		||||
    for (uint256 j = 0; j < reserves.length; j++) {
 | 
			
		||||
      (, , , , , , , , , bool isActive, ) = pool.getReserveConfigurationData(reserves[j]);
 | 
			
		||||
      ReserveConfiguration.Map memory configuration = pool.getConfiguration(reserves[j]);
 | 
			
		||||
 | 
			
		||||
      (bool isActive, , , ) = configuration.getFlagsMemory();
 | 
			
		||||
 | 
			
		||||
      if (!isActive) {
 | 
			
		||||
        balances[j] = 0;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue
	
	Block a user