mirror of
https://github.com/Instadapp/aave-protocol-v2.git
synced 2024-07-29 21:47:30 +00:00
Merge branch 'fix/177' into 'master'
Resolve "Update the configuration parameters for mainnet" Closes #177 See merge request aave-tech/protocol-v2!200
This commit is contained in:
commit
0ebcc04d50
|
@ -3,14 +3,15 @@ import { IAaveConfiguration, EthereumNetwork, eEthereumNetwork } from '../../hel
|
||||||
|
|
||||||
import { CommonsConfig } from './commons';
|
import { CommonsConfig } from './commons';
|
||||||
import {
|
import {
|
||||||
stablecoinStrategyBUSD,
|
strategyBUSD,
|
||||||
stablecoinStrategyDAI,
|
strategyDAI,
|
||||||
stablecoinStrategySUSD,
|
strategySUSD,
|
||||||
stablecoinStrategyTUSD,
|
strategyTUSD,
|
||||||
stablecoinStrategyUSDC,
|
strategyUSDC,
|
||||||
stablecoinStrategyUSDT,
|
strategyUSDT,
|
||||||
strategyAAVE,
|
strategyAAVE,
|
||||||
strategyBase,
|
strategyBAT,
|
||||||
|
strategyZRX,
|
||||||
strategyKNC,
|
strategyKNC,
|
||||||
strategyLINK,
|
strategyLINK,
|
||||||
strategyMANA,
|
strategyMANA,
|
||||||
|
@ -33,9 +34,9 @@ export const AaveConfig: IAaveConfiguration = {
|
||||||
ProviderId: 1,
|
ProviderId: 1,
|
||||||
ReservesConfig: {
|
ReservesConfig: {
|
||||||
AAVE: strategyAAVE,
|
AAVE: strategyAAVE,
|
||||||
BAT: strategyBase,
|
BAT: strategyBAT,
|
||||||
BUSD: stablecoinStrategyBUSD,
|
BUSD: strategyBUSD,
|
||||||
DAI: stablecoinStrategyDAI,
|
DAI: strategyDAI,
|
||||||
ENJ: strategyREN,
|
ENJ: strategyREN,
|
||||||
KNC: strategyKNC,
|
KNC: strategyKNC,
|
||||||
LINK: strategyLINK,
|
LINK: strategyLINK,
|
||||||
|
@ -43,15 +44,15 @@ export const AaveConfig: IAaveConfiguration = {
|
||||||
MKR: strategyMKR,
|
MKR: strategyMKR,
|
||||||
REN: strategyREN,
|
REN: strategyREN,
|
||||||
SNX: strategySNX,
|
SNX: strategySNX,
|
||||||
SUSD: stablecoinStrategySUSD,
|
SUSD: strategySUSD,
|
||||||
TUSD: stablecoinStrategyTUSD,
|
TUSD: strategyTUSD,
|
||||||
UNI: strategyUNI,
|
UNI: strategyUNI,
|
||||||
USDC: stablecoinStrategyUSDC,
|
USDC: strategyUSDC,
|
||||||
USDT: stablecoinStrategyUSDT,
|
USDT: strategyUSDT,
|
||||||
WBTC: strategyWBTC,
|
WBTC: strategyWBTC,
|
||||||
WETH: strategyWETH,
|
WETH: strategyWETH,
|
||||||
YFI: strategyYFI,
|
YFI: strategyYFI,
|
||||||
ZRX: strategyBase,
|
ZRX: strategyZRX,
|
||||||
},
|
},
|
||||||
ReserveAssets: {
|
ReserveAssets: {
|
||||||
[eEthereumNetwork.buidlerevm]: {},
|
[eEthereumNetwork.buidlerevm]: {},
|
||||||
|
|
|
@ -2,9 +2,213 @@ import BigNumber from 'bignumber.js';
|
||||||
import { oneRay } from '../../helpers/constants';
|
import { oneRay } from '../../helpers/constants';
|
||||||
import { eContractid, IReserveParams } from '../../helpers/types';
|
import { eContractid, IReserveParams } from '../../helpers/types';
|
||||||
|
|
||||||
export const strategyBase: IReserveParams = {
|
export const strategyBUSD: IReserveParams = {
|
||||||
optimalUtilizationRate: new BigNumber(0.8).multipliedBy(oneRay).toFixed(),
|
optimalUtilizationRate: new BigNumber(0.8).multipliedBy(oneRay).toFixed(),
|
||||||
baseVariableBorrowRate: new BigNumber(0).multipliedBy(oneRay).toFixed(),
|
baseVariableBorrowRate: new BigNumber(0).multipliedBy(oneRay).toFixed(),
|
||||||
|
variableRateSlope1: new BigNumber(0.04).multipliedBy(oneRay).toFixed(),
|
||||||
|
variableRateSlope2: new BigNumber(1).multipliedBy(oneRay).toFixed(),
|
||||||
|
stableRateSlope1: '0',
|
||||||
|
stableRateSlope2: '0',
|
||||||
|
baseLTVAsCollateral: '0',
|
||||||
|
liquidationThreshold: '0',
|
||||||
|
liquidationBonus: '0',
|
||||||
|
borrowingEnabled: true,
|
||||||
|
stableBorrowRateEnabled: false,
|
||||||
|
reserveDecimals: '18',
|
||||||
|
aTokenImpl: eContractid.AToken,
|
||||||
|
reserveFactor: '1000'
|
||||||
|
};
|
||||||
|
|
||||||
|
export const strategyDAI: IReserveParams = {
|
||||||
|
optimalUtilizationRate: new BigNumber(0.8).multipliedBy(oneRay).toFixed(),
|
||||||
|
baseVariableBorrowRate: new BigNumber(0).multipliedBy(oneRay).toFixed(),
|
||||||
|
variableRateSlope1: new BigNumber(0.04).multipliedBy(oneRay).toFixed(),
|
||||||
|
variableRateSlope2: new BigNumber(0.75).multipliedBy(oneRay).toFixed(),
|
||||||
|
stableRateSlope1: new BigNumber(0.02).multipliedBy(oneRay).toFixed(),
|
||||||
|
stableRateSlope2: new BigNumber(0.75).multipliedBy(oneRay).toFixed(),
|
||||||
|
baseLTVAsCollateral: '7500',
|
||||||
|
liquidationThreshold: '8000',
|
||||||
|
liquidationBonus: '10500',
|
||||||
|
borrowingEnabled: true,
|
||||||
|
stableBorrowRateEnabled: true,
|
||||||
|
reserveDecimals: '18',
|
||||||
|
aTokenImpl: eContractid.AToken,
|
||||||
|
reserveFactor: '1000'
|
||||||
|
};
|
||||||
|
|
||||||
|
export const strategySUSD: IReserveParams = {
|
||||||
|
optimalUtilizationRate: new BigNumber(0.8).multipliedBy(oneRay).toFixed(),
|
||||||
|
baseVariableBorrowRate: new BigNumber(0).multipliedBy(oneRay).toFixed(),
|
||||||
|
variableRateSlope1: new BigNumber(0.04).multipliedBy(oneRay).toFixed(),
|
||||||
|
variableRateSlope2: new BigNumber(1).multipliedBy(oneRay).toFixed(),
|
||||||
|
stableRateSlope1: '0',
|
||||||
|
stableRateSlope2: '0',
|
||||||
|
baseLTVAsCollateral: '0',
|
||||||
|
liquidationThreshold: '0',
|
||||||
|
liquidationBonus: '0',
|
||||||
|
borrowingEnabled: true,
|
||||||
|
stableBorrowRateEnabled: false,
|
||||||
|
reserveDecimals: '18',
|
||||||
|
aTokenImpl: eContractid.AToken,
|
||||||
|
reserveFactor: '2000'
|
||||||
|
};
|
||||||
|
|
||||||
|
export const strategyTUSD: IReserveParams = {
|
||||||
|
optimalUtilizationRate: new BigNumber(0.8).multipliedBy(oneRay).toFixed(),
|
||||||
|
baseVariableBorrowRate: new BigNumber(0).multipliedBy(oneRay).toFixed(),
|
||||||
|
variableRateSlope1: new BigNumber(0.04).multipliedBy(oneRay).toFixed(),
|
||||||
|
variableRateSlope2: new BigNumber(0.75).multipliedBy(oneRay).toFixed(),
|
||||||
|
stableRateSlope1: new BigNumber(0.02).multipliedBy(oneRay).toFixed(),
|
||||||
|
stableRateSlope2: new BigNumber(0.75).multipliedBy(oneRay).toFixed(),
|
||||||
|
baseLTVAsCollateral: '7500',
|
||||||
|
liquidationThreshold: '8000',
|
||||||
|
liquidationBonus: '10500',
|
||||||
|
borrowingEnabled: true,
|
||||||
|
stableBorrowRateEnabled: true,
|
||||||
|
reserveDecimals: '18',
|
||||||
|
aTokenImpl: eContractid.AToken,
|
||||||
|
reserveFactor: '1000'
|
||||||
|
};
|
||||||
|
|
||||||
|
export const strategyUSDC: IReserveParams = {
|
||||||
|
optimalUtilizationRate: new BigNumber(0.9).multipliedBy(oneRay).toFixed(),
|
||||||
|
baseVariableBorrowRate: new BigNumber(0).multipliedBy(oneRay).toFixed(),
|
||||||
|
variableRateSlope1: new BigNumber(0.04).multipliedBy(oneRay).toFixed(),
|
||||||
|
variableRateSlope2: new BigNumber(0.60).multipliedBy(oneRay).toFixed(),
|
||||||
|
stableRateSlope1: new BigNumber(0.02).multipliedBy(oneRay).toFixed(),
|
||||||
|
stableRateSlope2: new BigNumber(0.60).multipliedBy(oneRay).toFixed(),
|
||||||
|
baseLTVAsCollateral: '8000',
|
||||||
|
liquidationThreshold: '8500',
|
||||||
|
liquidationBonus: '10500',
|
||||||
|
borrowingEnabled: true,
|
||||||
|
stableBorrowRateEnabled: true,
|
||||||
|
reserveDecimals: '6',
|
||||||
|
aTokenImpl: eContractid.AToken,
|
||||||
|
reserveFactor: '1000'
|
||||||
|
};
|
||||||
|
|
||||||
|
export const strategyUSDT: IReserveParams = {
|
||||||
|
optimalUtilizationRate: new BigNumber(0.9).multipliedBy(oneRay).toFixed(),
|
||||||
|
baseVariableBorrowRate: new BigNumber(0).multipliedBy(oneRay).toFixed(),
|
||||||
|
variableRateSlope1: new BigNumber(0.04).multipliedBy(oneRay).toFixed(),
|
||||||
|
variableRateSlope2: new BigNumber(0.60).multipliedBy(oneRay).toFixed(),
|
||||||
|
stableRateSlope1: new BigNumber(0.02).multipliedBy(oneRay).toFixed(),
|
||||||
|
stableRateSlope2: new BigNumber(0.60).multipliedBy(oneRay).toFixed(),
|
||||||
|
baseLTVAsCollateral: '8000',
|
||||||
|
liquidationThreshold: '8500',
|
||||||
|
liquidationBonus: '10500',
|
||||||
|
borrowingEnabled: true,
|
||||||
|
stableBorrowRateEnabled: true,
|
||||||
|
reserveDecimals: '6',
|
||||||
|
aTokenImpl: eContractid.AToken,
|
||||||
|
reserveFactor: '1000'
|
||||||
|
};
|
||||||
|
|
||||||
|
export const strategyAAVE: IReserveParams = {
|
||||||
|
optimalUtilizationRate: new BigNumber(0.45).multipliedBy(oneRay).toFixed(),
|
||||||
|
baseVariableBorrowRate: '0',
|
||||||
|
variableRateSlope1: '0',
|
||||||
|
variableRateSlope2: '0',
|
||||||
|
stableRateSlope1: '0',
|
||||||
|
stableRateSlope2: '0',
|
||||||
|
baseLTVAsCollateral: '5000',
|
||||||
|
liquidationThreshold: '6500',
|
||||||
|
liquidationBonus: '11000',
|
||||||
|
borrowingEnabled: false,
|
||||||
|
stableBorrowRateEnabled: false,
|
||||||
|
reserveDecimals: '18',
|
||||||
|
aTokenImpl: eContractid.AToken,
|
||||||
|
reserveFactor: '0'
|
||||||
|
};
|
||||||
|
|
||||||
|
export const strategyBAT: IReserveParams = {
|
||||||
|
optimalUtilizationRate: new BigNumber(0.45).multipliedBy(oneRay).toFixed(),
|
||||||
|
baseVariableBorrowRate: new BigNumber(0).multipliedBy(oneRay).toFixed(),
|
||||||
|
variableRateSlope1: new BigNumber(0.07).multipliedBy(oneRay).toFixed(),
|
||||||
|
variableRateSlope2: new BigNumber(3).multipliedBy(oneRay).toFixed(),
|
||||||
|
stableRateSlope1: new BigNumber(0.1).multipliedBy(oneRay).toFixed(),
|
||||||
|
stableRateSlope2: new BigNumber(3).multipliedBy(oneRay).toFixed(),
|
||||||
|
baseLTVAsCollateral: '7000',
|
||||||
|
liquidationThreshold: '7500',
|
||||||
|
liquidationBonus: '11000',
|
||||||
|
borrowingEnabled: true,
|
||||||
|
stableBorrowRateEnabled: true,
|
||||||
|
reserveDecimals: '18',
|
||||||
|
aTokenImpl: eContractid.AToken,
|
||||||
|
reserveFactor: '2000'
|
||||||
|
};
|
||||||
|
|
||||||
|
export const strategyENJ: IReserveParams = {
|
||||||
|
optimalUtilizationRate: new BigNumber(0.45).multipliedBy(oneRay).toFixed(),
|
||||||
|
baseVariableBorrowRate: new BigNumber(0).multipliedBy(oneRay).toFixed(),
|
||||||
|
variableRateSlope1: new BigNumber(0.07).multipliedBy(oneRay).toFixed(),
|
||||||
|
variableRateSlope2: new BigNumber(3).multipliedBy(oneRay).toFixed(),
|
||||||
|
stableRateSlope1: new BigNumber(0.1).multipliedBy(oneRay).toFixed(),
|
||||||
|
stableRateSlope2: new BigNumber(3).multipliedBy(oneRay).toFixed(),
|
||||||
|
baseLTVAsCollateral: '5500',
|
||||||
|
liquidationThreshold: '6000',
|
||||||
|
liquidationBonus: '11000',
|
||||||
|
borrowingEnabled: true,
|
||||||
|
stableBorrowRateEnabled: true,
|
||||||
|
reserveDecimals: '18',
|
||||||
|
aTokenImpl: eContractid.AToken,
|
||||||
|
reserveFactor: '2000'
|
||||||
|
};
|
||||||
|
|
||||||
|
export const strategyWETH: IReserveParams = {
|
||||||
|
optimalUtilizationRate: new BigNumber(0.65).multipliedBy(oneRay).toFixed(),
|
||||||
|
baseVariableBorrowRate: new BigNumber(0).multipliedBy(oneRay).toFixed(),
|
||||||
|
variableRateSlope1: new BigNumber(0.08).multipliedBy(oneRay).toFixed(),
|
||||||
|
variableRateSlope2: new BigNumber(1).multipliedBy(oneRay).toFixed(),
|
||||||
|
stableRateSlope1: new BigNumber(0.1).multipliedBy(oneRay).toFixed(),
|
||||||
|
stableRateSlope2: new BigNumber(1).multipliedBy(oneRay).toFixed(),
|
||||||
|
baseLTVAsCollateral: '8000',
|
||||||
|
liquidationThreshold: '8250',
|
||||||
|
liquidationBonus: '10500',
|
||||||
|
borrowingEnabled: true,
|
||||||
|
stableBorrowRateEnabled: true,
|
||||||
|
reserveDecimals: '18',
|
||||||
|
aTokenImpl: eContractid.AToken,
|
||||||
|
reserveFactor: '1000'
|
||||||
|
};
|
||||||
|
|
||||||
|
export const strategyKNC: IReserveParams = {
|
||||||
|
optimalUtilizationRate: new BigNumber(0.65).multipliedBy(oneRay).toFixed(),
|
||||||
|
baseVariableBorrowRate: new BigNumber(0).multipliedBy(oneRay).toFixed(),
|
||||||
|
variableRateSlope1: new BigNumber(0.08).multipliedBy(oneRay).toFixed(),
|
||||||
|
variableRateSlope2: new BigNumber(3).multipliedBy(oneRay).toFixed(),
|
||||||
|
stableRateSlope1: new BigNumber(0.1).multipliedBy(oneRay).toFixed(),
|
||||||
|
stableRateSlope2: new BigNumber(3).multipliedBy(oneRay).toFixed(),
|
||||||
|
baseLTVAsCollateral: '6000',
|
||||||
|
liquidationThreshold: '6500',
|
||||||
|
liquidationBonus: '11000',
|
||||||
|
borrowingEnabled: true,
|
||||||
|
stableBorrowRateEnabled: true,
|
||||||
|
reserveDecimals: '18',
|
||||||
|
aTokenImpl: eContractid.AToken,
|
||||||
|
reserveFactor: '2000'
|
||||||
|
};
|
||||||
|
|
||||||
|
export const strategyLINK: IReserveParams = {
|
||||||
|
optimalUtilizationRate: new BigNumber(0.45).multipliedBy(oneRay).toFixed(),
|
||||||
|
baseVariableBorrowRate: new BigNumber(0).multipliedBy(oneRay).toFixed(),
|
||||||
|
variableRateSlope1: new BigNumber(0.07).multipliedBy(oneRay).toFixed(),
|
||||||
|
variableRateSlope2: new BigNumber(3).multipliedBy(oneRay).toFixed(),
|
||||||
|
stableRateSlope1: new BigNumber(0.1).multipliedBy(oneRay).toFixed(),
|
||||||
|
stableRateSlope2: new BigNumber(3).multipliedBy(oneRay).toFixed(),
|
||||||
|
baseLTVAsCollateral: '7000',
|
||||||
|
liquidationThreshold: '7500',
|
||||||
|
liquidationBonus: '11000',
|
||||||
|
borrowingEnabled: true,
|
||||||
|
stableBorrowRateEnabled: true,
|
||||||
|
reserveDecimals: '18',
|
||||||
|
aTokenImpl: eContractid.AToken,
|
||||||
|
reserveFactor: '2000'
|
||||||
|
};
|
||||||
|
|
||||||
|
export const strategyMANA: IReserveParams = {
|
||||||
|
optimalUtilizationRate: new BigNumber(0.45).multipliedBy(oneRay).toFixed(),
|
||||||
|
baseVariableBorrowRate: new BigNumber(0).multipliedBy(oneRay).toFixed(),
|
||||||
variableRateSlope1: new BigNumber(0.07).multipliedBy(oneRay).toFixed(),
|
variableRateSlope1: new BigNumber(0.07).multipliedBy(oneRay).toFixed(),
|
||||||
variableRateSlope2: new BigNumber(3).multipliedBy(oneRay).toFixed(),
|
variableRateSlope2: new BigNumber(3).multipliedBy(oneRay).toFixed(),
|
||||||
stableRateSlope1: new BigNumber(0.1).multipliedBy(oneRay).toFixed(),
|
stableRateSlope1: new BigNumber(0.1).multipliedBy(oneRay).toFixed(),
|
||||||
|
@ -16,210 +220,124 @@ export const strategyBase: IReserveParams = {
|
||||||
stableBorrowRateEnabled: true,
|
stableBorrowRateEnabled: true,
|
||||||
reserveDecimals: '18',
|
reserveDecimals: '18',
|
||||||
aTokenImpl: eContractid.AToken,
|
aTokenImpl: eContractid.AToken,
|
||||||
reserveFactor: '1000'
|
reserveFactor: '3500'
|
||||||
};
|
};
|
||||||
|
|
||||||
export const stablecoinStrategyBase: IReserveParams = {
|
export const strategyMKR: IReserveParams = {
|
||||||
optimalUtilizationRate: new BigNumber(0.8).multipliedBy(oneRay).toFixed(),
|
optimalUtilizationRate: new BigNumber(0.45).multipliedBy(oneRay).toFixed(),
|
||||||
baseVariableBorrowRate: new BigNumber(0.01).multipliedBy(oneRay).toFixed(),
|
baseVariableBorrowRate: new BigNumber(0).multipliedBy(oneRay).toFixed(),
|
||||||
variableRateSlope1: new BigNumber(0.07).multipliedBy(oneRay).toFixed(),
|
variableRateSlope1: new BigNumber(0.07).multipliedBy(oneRay).toFixed(),
|
||||||
variableRateSlope2: new BigNumber(1.5).multipliedBy(oneRay).toFixed(),
|
variableRateSlope2: new BigNumber(3).multipliedBy(oneRay).toFixed(),
|
||||||
stableRateSlope1: new BigNumber(0.06).multipliedBy(oneRay).toFixed(),
|
stableRateSlope1: new BigNumber(0.1).multipliedBy(oneRay).toFixed(),
|
||||||
stableRateSlope2: new BigNumber(1.5).multipliedBy(oneRay).toFixed(),
|
stableRateSlope2: new BigNumber(3).multipliedBy(oneRay).toFixed(),
|
||||||
baseLTVAsCollateral: '7500',
|
baseLTVAsCollateral: '6000',
|
||||||
liquidationThreshold: '8000',
|
liquidationThreshold: '6500',
|
||||||
liquidationBonus: '10500',
|
liquidationBonus: '11000',
|
||||||
borrowingEnabled: true,
|
borrowingEnabled: true,
|
||||||
stableBorrowRateEnabled: true,
|
stableBorrowRateEnabled: true,
|
||||||
reserveDecimals: '18',
|
reserveDecimals: '18',
|
||||||
aTokenImpl: eContractid.AToken,
|
aTokenImpl: eContractid.AToken,
|
||||||
reserveFactor: '1000'
|
reserveFactor: '2000'
|
||||||
};
|
};
|
||||||
|
|
||||||
export const stablecoinStrategyCentralized: IReserveParams = {
|
export const strategyREN: IReserveParams = {
|
||||||
optimalUtilizationRate: new BigNumber(0.8).multipliedBy(oneRay).toFixed(),
|
optimalUtilizationRate: new BigNumber(0.45).multipliedBy(oneRay).toFixed(),
|
||||||
baseVariableBorrowRate: new BigNumber(0.01).multipliedBy(oneRay).toFixed(),
|
baseVariableBorrowRate: new BigNumber(0).multipliedBy(oneRay).toFixed(),
|
||||||
variableRateSlope1: new BigNumber(0.07).multipliedBy(oneRay).toFixed(),
|
variableRateSlope1: new BigNumber(0.07).multipliedBy(oneRay).toFixed(),
|
||||||
variableRateSlope2: new BigNumber(0.6).multipliedBy(oneRay).toFixed(),
|
variableRateSlope2: new BigNumber(3).multipliedBy(oneRay).toFixed(),
|
||||||
stableRateSlope1: new BigNumber(0.06).multipliedBy(oneRay).toFixed(),
|
stableRateSlope1: new BigNumber(0.1).multipliedBy(oneRay).toFixed(),
|
||||||
stableRateSlope2: new BigNumber(0.6).multipliedBy(oneRay).toFixed(),
|
stableRateSlope2: new BigNumber(3).multipliedBy(oneRay).toFixed(),
|
||||||
baseLTVAsCollateral: '7500',
|
baseLTVAsCollateral: '5500',
|
||||||
liquidationThreshold: '8000',
|
liquidationThreshold: '6000',
|
||||||
liquidationBonus: '10500',
|
liquidationBonus: '11000',
|
||||||
borrowingEnabled: true,
|
borrowingEnabled: true,
|
||||||
stableBorrowRateEnabled: true,
|
stableBorrowRateEnabled: true,
|
||||||
reserveDecimals: '6',
|
|
||||||
aTokenImpl: eContractid.AToken,
|
|
||||||
reserveFactor: '1000'
|
|
||||||
};
|
|
||||||
|
|
||||||
export const strategyGovernanceTokens: IReserveParams = {
|
|
||||||
...strategyBase,
|
|
||||||
baseLTVAsCollateral: '4000',
|
|
||||||
liquidationBonus: '11500',
|
|
||||||
};
|
|
||||||
|
|
||||||
export const stablecoinStrategyBUSD: IReserveParams = {
|
|
||||||
...stablecoinStrategyCentralized,
|
|
||||||
reserveDecimals: '18',
|
reserveDecimals: '18',
|
||||||
baseLTVAsCollateral: '-1',
|
aTokenImpl: eContractid.AToken,
|
||||||
liquidationThreshold: '0',
|
reserveFactor: '2000'
|
||||||
liquidationBonus: '0',
|
};
|
||||||
baseVariableBorrowRate: new BigNumber(0.01).multipliedBy(oneRay).toFixed(),
|
|
||||||
variableRateSlope1: new BigNumber(0.04).multipliedBy(oneRay).toFixed(),
|
export const strategySNX: IReserveParams = {
|
||||||
variableRateSlope2: new BigNumber(0.5).multipliedBy(oneRay).toFixed(),
|
optimalUtilizationRate: new BigNumber(0.8).multipliedBy(oneRay).toFixed(),
|
||||||
|
baseVariableBorrowRate: new BigNumber(0.03).multipliedBy(oneRay).toFixed(),
|
||||||
|
variableRateSlope1: new BigNumber(0.12).multipliedBy(oneRay).toFixed(),
|
||||||
|
variableRateSlope2: new BigNumber(1).multipliedBy(oneRay).toFixed(),
|
||||||
|
stableRateSlope1: '0',
|
||||||
|
stableRateSlope2: '0',
|
||||||
|
baseLTVAsCollateral: '1500',
|
||||||
|
liquidationThreshold: '4000',
|
||||||
|
liquidationBonus: '11000',
|
||||||
|
borrowingEnabled: true,
|
||||||
stableBorrowRateEnabled: false,
|
stableBorrowRateEnabled: false,
|
||||||
stableRateSlope1: new BigNumber(0.14).multipliedBy(oneRay).toFixed(),
|
reserveDecimals: '18',
|
||||||
stableRateSlope2: new BigNumber(0.6).multipliedBy(oneRay).toFixed(),
|
aTokenImpl: eContractid.AToken,
|
||||||
|
reserveFactor: '3500'
|
||||||
};
|
};
|
||||||
|
|
||||||
export const strategyAAVE: IReserveParams = {
|
export const strategyUNI: IReserveParams = {
|
||||||
...strategyBase,
|
optimalUtilizationRate: new BigNumber(0.45).multipliedBy(oneRay).toFixed(),
|
||||||
baseLTVAsCollateral: '5000',
|
baseVariableBorrowRate: '0',
|
||||||
|
variableRateSlope1: '0',
|
||||||
|
variableRateSlope2: '0',
|
||||||
|
stableRateSlope1: '0',
|
||||||
|
stableRateSlope2: '0',
|
||||||
|
baseLTVAsCollateral: '6000',
|
||||||
liquidationThreshold: '6500',
|
liquidationThreshold: '6500',
|
||||||
liquidationBonus: '11000',
|
liquidationBonus: '11000',
|
||||||
borrowingEnabled: false,
|
borrowingEnabled: false,
|
||||||
stableBorrowRateEnabled: false,
|
stableBorrowRateEnabled: false,
|
||||||
reserveDecimals: '18',
|
reserveDecimals: '18',
|
||||||
};
|
|
||||||
|
|
||||||
export const stablecoinStrategyDAI: IReserveParams = {
|
|
||||||
...stablecoinStrategyBase,
|
|
||||||
};
|
|
||||||
|
|
||||||
export const strategyENJ: IReserveParams = {
|
|
||||||
...strategyBase,
|
|
||||||
baseLTVAsCollateral: '5500',
|
|
||||||
stableBorrowRateEnabled: false,
|
|
||||||
};
|
|
||||||
|
|
||||||
export const strategyKNC: IReserveParams = {
|
|
||||||
...strategyBase,
|
|
||||||
variableRateSlope1: new BigNumber(0.08).multipliedBy(oneRay).toFixed(),
|
|
||||||
};
|
|
||||||
|
|
||||||
export const strategyLINK: IReserveParams = {
|
|
||||||
...strategyBase,
|
|
||||||
baseLTVAsCollateral: '6500',
|
|
||||||
liquidationThreshold: '7000',
|
|
||||||
};
|
|
||||||
|
|
||||||
export const strategyMANA: IReserveParams = {
|
|
||||||
...strategyBase,
|
|
||||||
variableRateSlope1: new BigNumber(0.08).multipliedBy(oneRay).toFixed(),
|
|
||||||
variableRateSlope2: new BigNumber(0.5).multipliedBy(oneRay).toFixed(),
|
|
||||||
stableRateSlope2: new BigNumber(0.6).multipliedBy(oneRay).toFixed(),
|
|
||||||
};
|
|
||||||
|
|
||||||
export const strategyMKR: IReserveParams = {
|
|
||||||
...strategyBase,
|
|
||||||
baseLTVAsCollateral: '3500',
|
|
||||||
};
|
|
||||||
|
|
||||||
export const strategyREN: IReserveParams = {
|
|
||||||
...strategyBase,
|
|
||||||
baseLTVAsCollateral: '5000',
|
|
||||||
liquidationThreshold: '6500',
|
|
||||||
liquidationBonus: '11000',
|
|
||||||
borrowingEnabled: true,
|
|
||||||
stableBorrowRateEnabled: false,
|
|
||||||
};
|
|
||||||
|
|
||||||
export const stablecoinStrategySUSD: IReserveParams = {
|
|
||||||
optimalUtilizationRate: new BigNumber(0.8).multipliedBy(oneRay).toFixed(),
|
|
||||||
baseVariableBorrowRate: new BigNumber(0.01).multipliedBy(oneRay).toFixed(),
|
|
||||||
variableRateSlope1: new BigNumber(0.04).multipliedBy(oneRay).toFixed(),
|
|
||||||
variableRateSlope2: new BigNumber(1).multipliedBy(oneRay).toFixed(),
|
|
||||||
stableRateSlope1: new BigNumber(0.14).multipliedBy(oneRay).toFixed(),
|
|
||||||
stableRateSlope2: new BigNumber(0.6).multipliedBy(oneRay).toFixed(),
|
|
||||||
baseLTVAsCollateral: '-1',
|
|
||||||
liquidationThreshold: '0',
|
|
||||||
liquidationBonus: '0',
|
|
||||||
borrowingEnabled: true,
|
|
||||||
stableBorrowRateEnabled: false,
|
|
||||||
reserveDecimals: '18',
|
|
||||||
aTokenImpl: eContractid.AToken,
|
|
||||||
reserveFactor: '1000'
|
|
||||||
};
|
|
||||||
|
|
||||||
export const strategySNX: IReserveParams = {
|
|
||||||
...strategyBase,
|
|
||||||
baseLTVAsCollateral: '1500',
|
|
||||||
liquidationThreshold: '4000',
|
|
||||||
baseVariableBorrowRate: new BigNumber(0.03).multipliedBy(oneRay).toFixed(),
|
|
||||||
variableRateSlope1: new BigNumber(0.12).multipliedBy(oneRay).toFixed(),
|
|
||||||
variableRateSlope2: new BigNumber(1).multipliedBy(oneRay).toFixed(),
|
|
||||||
stableBorrowRateEnabled: false,
|
|
||||||
};
|
|
||||||
|
|
||||||
export const stablecoinStrategyTUSD: IReserveParams = {
|
|
||||||
...stablecoinStrategyCentralized,
|
|
||||||
baseVariableBorrowRate: new BigNumber(0.01).multipliedBy(oneRay).toFixed(),
|
|
||||||
variableRateSlope1: new BigNumber(0.04).multipliedBy(oneRay).toFixed(),
|
|
||||||
variableRateSlope2: new BigNumber(1.5).multipliedBy(oneRay).toFixed(),
|
|
||||||
stableRateSlope1: new BigNumber(0.14).multipliedBy(oneRay).toFixed(),
|
|
||||||
stableRateSlope2: new BigNumber(0.6).multipliedBy(oneRay).toFixed(),
|
|
||||||
borrowingEnabled: true,
|
|
||||||
stableBorrowRateEnabled: false,
|
|
||||||
reserveDecimals: '18',
|
|
||||||
};
|
|
||||||
|
|
||||||
export const strategyUNI: IReserveParams = {
|
|
||||||
...strategyGovernanceTokens,
|
|
||||||
stableBorrowRateEnabled: false,
|
|
||||||
aTokenImpl: eContractid.DelegationAwareAToken,
|
aTokenImpl: eContractid.DelegationAwareAToken,
|
||||||
};
|
reserveFactor: '2000'
|
||||||
|
|
||||||
export const stablecoinStrategyUSDC: IReserveParams = {
|
|
||||||
...stablecoinStrategyBase,
|
|
||||||
variableRateSlope2: new BigNumber(0.6).multipliedBy(oneRay).toFixed(),
|
|
||||||
reserveDecimals: '6',
|
|
||||||
};
|
|
||||||
|
|
||||||
export const stablecoinStrategyUSDT: IReserveParams = {
|
|
||||||
...stablecoinStrategyBase,
|
|
||||||
baseLTVAsCollateral: '-1',
|
|
||||||
liquidationThreshold: '7000',
|
|
||||||
liquidationBonus: '0',
|
|
||||||
borrowingEnabled: true,
|
|
||||||
stableBorrowRateEnabled: true,
|
|
||||||
reserveDecimals: '6',
|
|
||||||
};
|
};
|
||||||
|
|
||||||
export const strategyWBTC: IReserveParams = {
|
export const strategyWBTC: IReserveParams = {
|
||||||
optimalUtilizationRate: new BigNumber(0.8).multipliedBy(oneRay).toFixed(),
|
optimalUtilizationRate: new BigNumber(0.65).multipliedBy(oneRay).toFixed(),
|
||||||
baseVariableBorrowRate: new BigNumber(0).multipliedBy(oneRay).toFixed(),
|
baseVariableBorrowRate: '0',
|
||||||
variableRateSlope1: new BigNumber(0.08).multipliedBy(oneRay).toFixed(),
|
variableRateSlope1: new BigNumber(0.08).multipliedBy(oneRay).toFixed(),
|
||||||
variableRateSlope2: new BigNumber(0.5).multipliedBy(oneRay).toFixed(),
|
variableRateSlope2: new BigNumber(3).multipliedBy(oneRay).toFixed(),
|
||||||
stableRateSlope1: new BigNumber(0.1).multipliedBy(oneRay).toFixed(),
|
stableRateSlope1: new BigNumber(0.1).multipliedBy(oneRay).toFixed(),
|
||||||
stableRateSlope2: new BigNumber(0.6).multipliedBy(oneRay).toFixed(),
|
stableRateSlope2: new BigNumber(3).multipliedBy(oneRay).toFixed(),
|
||||||
baseLTVAsCollateral: '6000',
|
baseLTVAsCollateral: '7000',
|
||||||
liquidationThreshold: '6500',
|
liquidationThreshold: '7500',
|
||||||
liquidationBonus: '11500',
|
liquidationBonus: '11000',
|
||||||
borrowingEnabled: true,
|
borrowingEnabled: true,
|
||||||
stableBorrowRateEnabled: true,
|
stableBorrowRateEnabled: true,
|
||||||
reserveDecimals: '8',
|
reserveDecimals: '8',
|
||||||
aTokenImpl: eContractid.AToken,
|
aTokenImpl: eContractid.AToken,
|
||||||
reserveFactor: '1000'
|
reserveFactor: '2000'
|
||||||
};
|
};
|
||||||
|
|
||||||
export const strategyWETH: IReserveParams = {
|
export const strategyYFI: IReserveParams = {
|
||||||
optimalUtilizationRate: new BigNumber(0.8).multipliedBy(oneRay).toFixed(),
|
optimalUtilizationRate: new BigNumber(0.45).multipliedBy(oneRay).toFixed(),
|
||||||
baseVariableBorrowRate: new BigNumber(0).multipliedBy(oneRay).toFixed(),
|
baseVariableBorrowRate: '0',
|
||||||
variableRateSlope1: new BigNumber(0.08).multipliedBy(oneRay).toFixed(),
|
variableRateSlope1: new BigNumber(0.07).multipliedBy(oneRay).toFixed(),
|
||||||
variableRateSlope2: new BigNumber(1).multipliedBy(oneRay).toFixed(),
|
variableRateSlope2: new BigNumber(3).multipliedBy(oneRay).toFixed(),
|
||||||
stableRateSlope1: new BigNumber(0.1).multipliedBy(oneRay).toFixed(),
|
stableRateSlope1: new BigNumber(0.1).multipliedBy(oneRay).toFixed(),
|
||||||
stableRateSlope2: new BigNumber(1).multipliedBy(oneRay).toFixed(),
|
stableRateSlope2: new BigNumber(3).multipliedBy(oneRay).toFixed(),
|
||||||
baseLTVAsCollateral: '7500',
|
baseLTVAsCollateral: '4000',
|
||||||
liquidationThreshold: '8000',
|
liquidationThreshold: '5500',
|
||||||
liquidationBonus: '10500',
|
liquidationBonus: '11500',
|
||||||
borrowingEnabled: true,
|
borrowingEnabled: true,
|
||||||
stableBorrowRateEnabled: true,
|
stableBorrowRateEnabled: true,
|
||||||
reserveDecimals: '18',
|
reserveDecimals: '18',
|
||||||
aTokenImpl: eContractid.AToken,
|
aTokenImpl: eContractid.AToken,
|
||||||
reserveFactor: '1000'
|
reserveFactor: '2000'
|
||||||
};
|
};
|
||||||
|
|
||||||
export const strategyYFI: IReserveParams = {
|
export const strategyZRX: IReserveParams = {
|
||||||
...strategyGovernanceTokens,
|
optimalUtilizationRate: new BigNumber(0.45).multipliedBy(oneRay).toFixed(),
|
||||||
};
|
baseVariableBorrowRate: '0',
|
||||||
|
variableRateSlope1: new BigNumber(0.07).multipliedBy(oneRay).toFixed(),
|
||||||
|
variableRateSlope2: new BigNumber(3).multipliedBy(oneRay).toFixed(),
|
||||||
|
stableRateSlope1: new BigNumber(0.1).multipliedBy(oneRay).toFixed(),
|
||||||
|
stableRateSlope2: new BigNumber(3).multipliedBy(oneRay).toFixed(),
|
||||||
|
baseLTVAsCollateral: '6000',
|
||||||
|
liquidationThreshold: '6500',
|
||||||
|
liquidationBonus: '11000',
|
||||||
|
borrowingEnabled: true,
|
||||||
|
stableBorrowRateEnabled: true,
|
||||||
|
reserveDecimals: '18',
|
||||||
|
aTokenImpl: eContractid.AToken,
|
||||||
|
reserveFactor: '2000'
|
||||||
|
};
|
|
@ -2,6 +2,7 @@ import {TestEnv, makeSuite} from './helpers/make-suite';
|
||||||
import {APPROVAL_AMOUNT_LENDING_POOL, RAY} from '../helpers/constants';
|
import {APPROVAL_AMOUNT_LENDING_POOL, RAY} from '../helpers/constants';
|
||||||
import {convertToCurrencyDecimals} from '../helpers/contracts-helpers';
|
import {convertToCurrencyDecimals} from '../helpers/contracts-helpers';
|
||||||
import {ProtocolErrors} from '../helpers/types';
|
import {ProtocolErrors} from '../helpers/types';
|
||||||
|
import { strategyWETH } from '../markets/aave/reservesConfigs';
|
||||||
|
|
||||||
const {expect} = require('chai');
|
const {expect} = require('chai');
|
||||||
|
|
||||||
|
@ -58,7 +59,10 @@ makeSuite('LendingPoolConfigurator', (testEnv: TestEnv) => {
|
||||||
});
|
});
|
||||||
|
|
||||||
it('Freezes the ETH reserve', async () => {
|
it('Freezes the ETH reserve', async () => {
|
||||||
const {configurator, pool, weth, helpersContract} = testEnv;
|
const {configurator, weth, helpersContract} = testEnv;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
await configurator.freezeReserve(weth.address);
|
await configurator.freezeReserve(weth.address);
|
||||||
const {
|
const {
|
||||||
decimals,
|
decimals,
|
||||||
|
@ -75,12 +79,12 @@ makeSuite('LendingPoolConfigurator', (testEnv: TestEnv) => {
|
||||||
expect(borrowingEnabled).to.be.equal(true);
|
expect(borrowingEnabled).to.be.equal(true);
|
||||||
expect(isActive).to.be.equal(true);
|
expect(isActive).to.be.equal(true);
|
||||||
expect(isFrozen).to.be.equal(true);
|
expect(isFrozen).to.be.equal(true);
|
||||||
expect(decimals).to.be.equal(18);
|
expect(decimals).to.be.equal(strategyWETH.reserveDecimals);
|
||||||
expect(ltv).to.be.equal(7500);
|
expect(ltv).to.be.equal(strategyWETH.baseLTVAsCollateral);
|
||||||
expect(liquidationThreshold).to.be.equal(8000);
|
expect(liquidationThreshold).to.be.equal(strategyWETH.liquidationThreshold);
|
||||||
expect(liquidationBonus).to.be.equal(10500);
|
expect(liquidationBonus).to.be.equal(strategyWETH.liquidationBonus);
|
||||||
expect(stableBorrowRateEnabled).to.be.equal(true);
|
expect(stableBorrowRateEnabled).to.be.equal(strategyWETH.stableBorrowRateEnabled);
|
||||||
expect(reserveFactor).to.be.equal(1000);
|
expect(reserveFactor).to.be.equal(strategyWETH.reserveFactor);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('Unfreezes the ETH reserve', async () => {
|
it('Unfreezes the ETH reserve', async () => {
|
||||||
|
@ -102,12 +106,12 @@ makeSuite('LendingPoolConfigurator', (testEnv: TestEnv) => {
|
||||||
expect(borrowingEnabled).to.be.equal(true);
|
expect(borrowingEnabled).to.be.equal(true);
|
||||||
expect(isActive).to.be.equal(true);
|
expect(isActive).to.be.equal(true);
|
||||||
expect(isFrozen).to.be.equal(false);
|
expect(isFrozen).to.be.equal(false);
|
||||||
expect(decimals).to.be.equal(18);
|
expect(decimals).to.be.equal(strategyWETH.reserveDecimals);
|
||||||
expect(ltv).to.be.equal(7500);
|
expect(ltv).to.be.equal(strategyWETH.baseLTVAsCollateral);
|
||||||
expect(liquidationThreshold).to.be.equal(8000);
|
expect(liquidationThreshold).to.be.equal(strategyWETH.liquidationThreshold);
|
||||||
expect(liquidationBonus).to.be.equal(10500);
|
expect(liquidationBonus).to.be.equal(strategyWETH.liquidationBonus);
|
||||||
expect(stableBorrowRateEnabled).to.be.equal(true);
|
expect(stableBorrowRateEnabled).to.be.equal(strategyWETH.stableBorrowRateEnabled);
|
||||||
expect(reserveFactor).to.be.equal(1000);
|
expect(reserveFactor).to.be.equal(strategyWETH.reserveFactor);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('Check the onlyAaveAdmin on freezeReserve ', async () => {
|
it('Check the onlyAaveAdmin on freezeReserve ', async () => {
|
||||||
|
@ -144,12 +148,12 @@ makeSuite('LendingPoolConfigurator', (testEnv: TestEnv) => {
|
||||||
expect(borrowingEnabled).to.be.equal(false);
|
expect(borrowingEnabled).to.be.equal(false);
|
||||||
expect(isActive).to.be.equal(true);
|
expect(isActive).to.be.equal(true);
|
||||||
expect(isFrozen).to.be.equal(false);
|
expect(isFrozen).to.be.equal(false);
|
||||||
expect(decimals).to.be.equal(18);
|
expect(decimals).to.be.equal(strategyWETH.reserveDecimals);
|
||||||
expect(ltv).to.be.equal(7500);
|
expect(ltv).to.be.equal(strategyWETH.baseLTVAsCollateral);
|
||||||
expect(liquidationThreshold).to.be.equal(8000);
|
expect(liquidationThreshold).to.be.equal(strategyWETH.liquidationThreshold);
|
||||||
expect(liquidationBonus).to.be.equal(10500);
|
expect(liquidationBonus).to.be.equal(strategyWETH.liquidationBonus);
|
||||||
expect(stableBorrowRateEnabled).to.be.equal(true);
|
expect(stableBorrowRateEnabled).to.be.equal(strategyWETH.stableBorrowRateEnabled);
|
||||||
expect(reserveFactor).to.be.equal(1000);
|
expect(reserveFactor).to.be.equal(strategyWETH.reserveFactor);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('Activates the ETH reserve for borrowing', async () => {
|
it('Activates the ETH reserve for borrowing', async () => {
|
||||||
|
@ -172,12 +176,12 @@ makeSuite('LendingPoolConfigurator', (testEnv: TestEnv) => {
|
||||||
expect(borrowingEnabled).to.be.equal(true);
|
expect(borrowingEnabled).to.be.equal(true);
|
||||||
expect(isActive).to.be.equal(true);
|
expect(isActive).to.be.equal(true);
|
||||||
expect(isFrozen).to.be.equal(false);
|
expect(isFrozen).to.be.equal(false);
|
||||||
expect(decimals).to.be.equal(18);
|
expect(decimals).to.be.equal(strategyWETH.reserveDecimals);
|
||||||
expect(ltv).to.be.equal(7500);
|
expect(ltv).to.be.equal(strategyWETH.baseLTVAsCollateral);
|
||||||
expect(liquidationThreshold).to.be.equal(8000);
|
expect(liquidationThreshold).to.be.equal(strategyWETH.liquidationThreshold);
|
||||||
expect(liquidationBonus).to.be.equal(10500);
|
expect(liquidationBonus).to.be.equal(strategyWETH.liquidationBonus);
|
||||||
expect(stableBorrowRateEnabled).to.be.equal(true);
|
expect(stableBorrowRateEnabled).to.be.equal(strategyWETH.stableBorrowRateEnabled);
|
||||||
expect(reserveFactor).to.be.equal(1000);
|
expect(reserveFactor).to.be.equal(strategyWETH.reserveFactor);
|
||||||
|
|
||||||
expect(variableBorrowIndex.toString()).to.be.equal(RAY);
|
expect(variableBorrowIndex.toString()).to.be.equal(RAY);
|
||||||
});
|
});
|
||||||
|
@ -222,12 +226,12 @@ makeSuite('LendingPoolConfigurator', (testEnv: TestEnv) => {
|
||||||
expect(liquidationThreshold).to.be.equal(0);
|
expect(liquidationThreshold).to.be.equal(0);
|
||||||
expect(liquidationBonus).to.be.equal(0);
|
expect(liquidationBonus).to.be.equal(0);
|
||||||
expect(stableBorrowRateEnabled).to.be.equal(true);
|
expect(stableBorrowRateEnabled).to.be.equal(true);
|
||||||
expect(reserveFactor).to.be.equal(1000);
|
expect(reserveFactor).to.be.equal(strategyWETH.reserveFactor);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('Activates the ETH reserve as collateral', async () => {
|
it('Activates the ETH reserve as collateral', async () => {
|
||||||
const {configurator, helpersContract, weth} = testEnv;
|
const {configurator, helpersContract, weth} = testEnv;
|
||||||
await configurator.configureReserveAsCollateral(weth.address, '7500', '8000', '10500');
|
await configurator.configureReserveAsCollateral(weth.address, '8000', '8250', '10500');
|
||||||
|
|
||||||
const {
|
const {
|
||||||
decimals,
|
decimals,
|
||||||
|
@ -244,12 +248,12 @@ makeSuite('LendingPoolConfigurator', (testEnv: TestEnv) => {
|
||||||
expect(borrowingEnabled).to.be.equal(true);
|
expect(borrowingEnabled).to.be.equal(true);
|
||||||
expect(isActive).to.be.equal(true);
|
expect(isActive).to.be.equal(true);
|
||||||
expect(isFrozen).to.be.equal(false);
|
expect(isFrozen).to.be.equal(false);
|
||||||
expect(decimals).to.be.equal(18);
|
expect(decimals).to.be.equal(strategyWETH.reserveDecimals);
|
||||||
expect(ltv).to.be.equal(7500);
|
expect(ltv).to.be.equal(strategyWETH.baseLTVAsCollateral);
|
||||||
expect(liquidationThreshold).to.be.equal(8000);
|
expect(liquidationThreshold).to.be.equal(strategyWETH.liquidationThreshold);
|
||||||
expect(liquidationBonus).to.be.equal(10500);
|
expect(liquidationBonus).to.be.equal(strategyWETH.liquidationBonus);
|
||||||
expect(stableBorrowRateEnabled).to.be.equal(true);
|
expect(stableBorrowRateEnabled).to.be.equal(strategyWETH.stableBorrowRateEnabled);
|
||||||
expect(reserveFactor).to.be.equal(1000);
|
expect(reserveFactor).to.be.equal(strategyWETH.reserveFactor);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('Check the onlyAaveAdmin on configureReserveAsCollateral ', async () => {
|
it('Check the onlyAaveAdmin on configureReserveAsCollateral ', async () => {
|
||||||
|
@ -280,12 +284,12 @@ makeSuite('LendingPoolConfigurator', (testEnv: TestEnv) => {
|
||||||
expect(borrowingEnabled).to.be.equal(true);
|
expect(borrowingEnabled).to.be.equal(true);
|
||||||
expect(isActive).to.be.equal(true);
|
expect(isActive).to.be.equal(true);
|
||||||
expect(isFrozen).to.be.equal(false);
|
expect(isFrozen).to.be.equal(false);
|
||||||
expect(decimals).to.be.equal(18);
|
expect(decimals).to.be.equal(strategyWETH.reserveDecimals);
|
||||||
expect(ltv).to.be.equal(7500);
|
expect(ltv).to.be.equal(strategyWETH.baseLTVAsCollateral);
|
||||||
expect(liquidationThreshold).to.be.equal(8000);
|
expect(liquidationThreshold).to.be.equal(strategyWETH.liquidationThreshold);
|
||||||
expect(liquidationBonus).to.be.equal(10500);
|
expect(liquidationBonus).to.be.equal(strategyWETH.liquidationBonus);
|
||||||
expect(stableBorrowRateEnabled).to.be.equal(false);
|
expect(stableBorrowRateEnabled).to.be.equal(false);
|
||||||
expect(reserveFactor).to.be.equal(1000);
|
expect(reserveFactor).to.be.equal(strategyWETH.reserveFactor);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('Enables stable borrow rate on the ETH reserve', async () => {
|
it('Enables stable borrow rate on the ETH reserve', async () => {
|
||||||
|
@ -306,12 +310,12 @@ makeSuite('LendingPoolConfigurator', (testEnv: TestEnv) => {
|
||||||
expect(borrowingEnabled).to.be.equal(true);
|
expect(borrowingEnabled).to.be.equal(true);
|
||||||
expect(isActive).to.be.equal(true);
|
expect(isActive).to.be.equal(true);
|
||||||
expect(isFrozen).to.be.equal(false);
|
expect(isFrozen).to.be.equal(false);
|
||||||
expect(decimals).to.be.equal(18);
|
expect(decimals).to.be.equal(strategyWETH.reserveDecimals);
|
||||||
expect(ltv).to.be.equal(7500);
|
expect(ltv).to.be.equal(strategyWETH.baseLTVAsCollateral);
|
||||||
expect(liquidationThreshold).to.be.equal(8000);
|
expect(liquidationThreshold).to.be.equal(strategyWETH.liquidationThreshold);
|
||||||
expect(liquidationBonus).to.be.equal(10500);
|
expect(liquidationBonus).to.be.equal(strategyWETH.liquidationBonus);
|
||||||
expect(stableBorrowRateEnabled).to.be.equal(true);
|
expect(stableBorrowRateEnabled).to.be.equal(true);
|
||||||
expect(reserveFactor).to.be.equal(1000);
|
expect(reserveFactor).to.be.equal(strategyWETH.reserveFactor);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('Check the onlyAaveAdmin on disableReserveStableRate', async () => {
|
it('Check the onlyAaveAdmin on disableReserveStableRate', async () => {
|
||||||
|
@ -348,11 +352,11 @@ makeSuite('LendingPoolConfigurator', (testEnv: TestEnv) => {
|
||||||
expect(borrowingEnabled).to.be.equal(true);
|
expect(borrowingEnabled).to.be.equal(true);
|
||||||
expect(isActive).to.be.equal(true);
|
expect(isActive).to.be.equal(true);
|
||||||
expect(isFrozen).to.be.equal(false);
|
expect(isFrozen).to.be.equal(false);
|
||||||
expect(decimals).to.be.equal(18);
|
expect(decimals).to.be.equal(strategyWETH.reserveDecimals);
|
||||||
expect(ltv).to.be.equal(7500);
|
expect(ltv).to.be.equal(strategyWETH.baseLTVAsCollateral);
|
||||||
expect(liquidationThreshold).to.be.equal(8000);
|
expect(liquidationThreshold).to.be.equal(strategyWETH.liquidationThreshold);
|
||||||
expect(liquidationBonus).to.be.equal(10500);
|
expect(liquidationBonus).to.be.equal(strategyWETH.liquidationBonus);
|
||||||
expect(stableBorrowRateEnabled).to.be.equal(true);
|
expect(stableBorrowRateEnabled).to.be.equal(strategyWETH.stableBorrowRateEnabled);
|
||||||
expect(reserveFactor).to.be.equal(1000);
|
expect(reserveFactor).to.be.equal(1000);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -3,8 +3,6 @@ import {
|
||||||
ONE_YEAR,
|
ONE_YEAR,
|
||||||
RAY,
|
RAY,
|
||||||
MAX_UINT_AMOUNT,
|
MAX_UINT_AMOUNT,
|
||||||
OPTIMAL_UTILIZATION_RATE,
|
|
||||||
EXCESS_UTILIZATION_RATE,
|
|
||||||
PERCENTAGE_FACTOR,
|
PERCENTAGE_FACTOR,
|
||||||
} from '../../../helpers/constants';
|
} from '../../../helpers/constants';
|
||||||
import {
|
import {
|
||||||
|
@ -1210,6 +1208,7 @@ export const calcExpectedInterestRates = (
|
||||||
): BigNumber[] => {
|
): BigNumber[] => {
|
||||||
const { reservesParams } = configuration;
|
const { reservesParams } = configuration;
|
||||||
|
|
||||||
|
|
||||||
const reserveIndex = Object.keys(reservesParams).findIndex((value) => value === reserveSymbol);
|
const reserveIndex = Object.keys(reservesParams).findIndex((value) => value === reserveSymbol);
|
||||||
const [, reserveConfiguration] = (Object.entries(reservesParams) as [string, IReserveParams][])[
|
const [, reserveConfiguration] = (Object.entries(reservesParams) as [string, IReserveParams][])[
|
||||||
reserveIndex
|
reserveIndex
|
||||||
|
@ -1218,10 +1217,12 @@ export const calcExpectedInterestRates = (
|
||||||
let stableBorrowRate: BigNumber = marketStableRate;
|
let stableBorrowRate: BigNumber = marketStableRate;
|
||||||
let variableBorrowRate: BigNumber = new BigNumber(reserveConfiguration.baseVariableBorrowRate);
|
let variableBorrowRate: BigNumber = new BigNumber(reserveConfiguration.baseVariableBorrowRate);
|
||||||
|
|
||||||
if (utilizationRate.gt(OPTIMAL_UTILIZATION_RATE)) {
|
const optimalRate = new BigNumber(reserveConfiguration.optimalUtilizationRate);
|
||||||
|
const excessRate = new BigNumber(RAY).minus(optimalRate);
|
||||||
|
if (utilizationRate.gt(optimalRate)) {
|
||||||
const excessUtilizationRateRatio = utilizationRate
|
const excessUtilizationRateRatio = utilizationRate
|
||||||
.minus(OPTIMAL_UTILIZATION_RATE)
|
.minus(reserveConfiguration.optimalUtilizationRate)
|
||||||
.rayDiv(EXCESS_UTILIZATION_RATE);
|
.rayDiv(excessRate);
|
||||||
|
|
||||||
stableBorrowRate = stableBorrowRate
|
stableBorrowRate = stableBorrowRate
|
||||||
.plus(reserveConfiguration.stableRateSlope1)
|
.plus(reserveConfiguration.stableRateSlope1)
|
||||||
|
@ -1237,13 +1238,13 @@ export const calcExpectedInterestRates = (
|
||||||
} else {
|
} else {
|
||||||
stableBorrowRate = stableBorrowRate.plus(
|
stableBorrowRate = stableBorrowRate.plus(
|
||||||
new BigNumber(reserveConfiguration.stableRateSlope1).rayMul(
|
new BigNumber(reserveConfiguration.stableRateSlope1).rayMul(
|
||||||
utilizationRate.rayDiv(new BigNumber(OPTIMAL_UTILIZATION_RATE))
|
utilizationRate.rayDiv(new BigNumber(optimalRate))
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
variableBorrowRate = variableBorrowRate.plus(
|
variableBorrowRate = variableBorrowRate.plus(
|
||||||
utilizationRate
|
utilizationRate
|
||||||
.rayDiv(OPTIMAL_UTILIZATION_RATE)
|
.rayDiv(optimalRate)
|
||||||
.rayMul(new BigNumber(reserveConfiguration.variableRateSlope1))
|
.rayMul(new BigNumber(reserveConfiguration.variableRateSlope1))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,7 +20,7 @@ makeSuite('LendingPool liquidation - liquidator receiving aToken', (testEnv) =>
|
||||||
LP_IS_PAUSED,
|
LP_IS_PAUSED,
|
||||||
} = ProtocolErrors;
|
} = ProtocolErrors;
|
||||||
|
|
||||||
it('LIQUIDATION - Deposits WETH, borrows DAI/Check liquidation fails because health factor is above 1', async () => {
|
it('Deposits WETH, borrows DAI/Check liquidation fails because health factor is above 1', async () => {
|
||||||
const { dai, weth, users, pool, oracle } = testEnv;
|
const { dai, weth, users, pool, oracle } = testEnv;
|
||||||
const depositor = users[0];
|
const depositor = users[0];
|
||||||
const borrower = users[1];
|
const borrower = users[1];
|
||||||
|
@ -69,7 +69,7 @@ makeSuite('LendingPool liquidation - liquidator receiving aToken', (testEnv) =>
|
||||||
const userGlobalDataAfter = await pool.getUserAccountData(borrower.address);
|
const userGlobalDataAfter = await pool.getUserAccountData(borrower.address);
|
||||||
|
|
||||||
expect(userGlobalDataAfter.currentLiquidationThreshold.toString()).to.be.bignumber.equal(
|
expect(userGlobalDataAfter.currentLiquidationThreshold.toString()).to.be.bignumber.equal(
|
||||||
'8000',
|
'8250',
|
||||||
'Invalid liquidation threshold'
|
'Invalid liquidation threshold'
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -79,7 +79,7 @@ makeSuite('LendingPool liquidation - liquidator receiving aToken', (testEnv) =>
|
||||||
).to.be.revertedWith(LPCM_HEALTH_FACTOR_NOT_BELOW_THRESHOLD);
|
).to.be.revertedWith(LPCM_HEALTH_FACTOR_NOT_BELOW_THRESHOLD);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('LIQUIDATION - Drop the health factor below 1', async () => {
|
it('Drop the health factor below 1', async () => {
|
||||||
const { dai, users, pool, oracle } = testEnv;
|
const { dai, users, pool, oracle } = testEnv;
|
||||||
const borrower = users[1];
|
const borrower = users[1];
|
||||||
|
|
||||||
|
@ -98,7 +98,7 @@ makeSuite('LendingPool liquidation - liquidator receiving aToken', (testEnv) =>
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('LIQUIDATION - Tries to liquidate a different currency than the loan principal', async () => {
|
it('Tries to liquidate a different currency than the loan principal', async () => {
|
||||||
const { pool, users, weth } = testEnv;
|
const { pool, users, weth } = testEnv;
|
||||||
const borrower = users[1];
|
const borrower = users[1];
|
||||||
//user 2 tries to borrow
|
//user 2 tries to borrow
|
||||||
|
@ -107,7 +107,7 @@ makeSuite('LendingPool liquidation - liquidator receiving aToken', (testEnv) =>
|
||||||
).revertedWith(LPCM_SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER);
|
).revertedWith(LPCM_SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('LIQUIDATION - Tries to liquidate a different collateral than the borrower collateral', async () => {
|
it('Tries to liquidate a different collateral than the borrower collateral', async () => {
|
||||||
const { pool, dai, users } = testEnv;
|
const { pool, dai, users } = testEnv;
|
||||||
const borrower = users[1];
|
const borrower = users[1];
|
||||||
|
|
||||||
|
@ -116,7 +116,7 @@ makeSuite('LendingPool liquidation - liquidator receiving aToken', (testEnv) =>
|
||||||
).revertedWith(LPCM_COLLATERAL_CANNOT_BE_LIQUIDATED);
|
).revertedWith(LPCM_COLLATERAL_CANNOT_BE_LIQUIDATED);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('LIQUIDATION - Liquidates the borrow', async () => {
|
it('Liquidates the borrow', async () => {
|
||||||
const { pool, dai, weth, aWETH, aDai, users, oracle, helpersContract, deployer } = testEnv;
|
const { pool, dai, weth, aWETH, aDai, users, oracle, helpersContract, deployer } = testEnv;
|
||||||
const borrower = users[1];
|
const borrower = users[1];
|
||||||
|
|
||||||
|
@ -284,7 +284,7 @@ makeSuite('LendingPool liquidation - liquidator receiving aToken', (testEnv) =>
|
||||||
|
|
||||||
await oracle.setAssetPrice(
|
await oracle.setAssetPrice(
|
||||||
usdc.address,
|
usdc.address,
|
||||||
new BigNumber(usdcPrice.toString()).multipliedBy(1.2).toFixed(0)
|
new BigNumber(usdcPrice.toString()).multipliedBy(1.12).toFixed(0)
|
||||||
);
|
);
|
||||||
|
|
||||||
//mints dai to the liquidator
|
//mints dai to the liquidator
|
||||||
|
|
|
@ -46,7 +46,7 @@ makeSuite('LendingPool liquidation - liquidator receiving the underlying asset',
|
||||||
await configurator.activateReserve(dai.address);
|
await configurator.activateReserve(dai.address);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('LIQUIDATION - Deposits WETH, borrows DAI', async () => {
|
it('Deposits WETH, borrows DAI', async () => {
|
||||||
const {dai, weth, users, pool, oracle} = testEnv;
|
const {dai, weth, users, pool, oracle} = testEnv;
|
||||||
const depositor = users[0];
|
const depositor = users[0];
|
||||||
const borrower = users[1];
|
const borrower = users[1];
|
||||||
|
@ -96,12 +96,12 @@ makeSuite('LendingPool liquidation - liquidator receiving the underlying asset',
|
||||||
const userGlobalDataAfter = await pool.getUserAccountData(borrower.address);
|
const userGlobalDataAfter = await pool.getUserAccountData(borrower.address);
|
||||||
|
|
||||||
expect(userGlobalDataAfter.currentLiquidationThreshold.toString()).to.be.bignumber.equal(
|
expect(userGlobalDataAfter.currentLiquidationThreshold.toString()).to.be.bignumber.equal(
|
||||||
'8000',
|
'8250',
|
||||||
INVALID_HF
|
INVALID_HF
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('LIQUIDATION - Drop the health factor below 1', async () => {
|
it('Drop the health factor below 1', async () => {
|
||||||
const {dai, weth, users, pool, oracle} = testEnv;
|
const {dai, weth, users, pool, oracle} = testEnv;
|
||||||
const borrower = users[1];
|
const borrower = users[1];
|
||||||
|
|
||||||
|
@ -109,7 +109,7 @@ makeSuite('LendingPool liquidation - liquidator receiving the underlying asset',
|
||||||
|
|
||||||
await oracle.setAssetPrice(
|
await oracle.setAssetPrice(
|
||||||
dai.address,
|
dai.address,
|
||||||
new BigNumber(daiPrice.toString()).multipliedBy(1.25).toFixed(0)
|
new BigNumber(daiPrice.toString()).multipliedBy(1.18).toFixed(0)
|
||||||
);
|
);
|
||||||
|
|
||||||
const userGlobalData = await pool.getUserAccountData(borrower.address);
|
const userGlobalData = await pool.getUserAccountData(borrower.address);
|
||||||
|
@ -120,7 +120,7 @@ makeSuite('LendingPool liquidation - liquidator receiving the underlying asset',
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('LIQUIDATION - Liquidates the borrow', async () => {
|
it('Liquidates the borrow', async () => {
|
||||||
const {dai, weth, users, pool, oracle, helpersContract} = testEnv;
|
const {dai, weth, users, pool, oracle, helpersContract} = testEnv;
|
||||||
const liquidator = users[3];
|
const liquidator = users[3];
|
||||||
const borrower = users[1];
|
const borrower = users[1];
|
||||||
|
@ -280,7 +280,7 @@ makeSuite('LendingPool liquidation - liquidator receiving the underlying asset',
|
||||||
//drops HF below 1
|
//drops HF below 1
|
||||||
await oracle.setAssetPrice(
|
await oracle.setAssetPrice(
|
||||||
usdc.address,
|
usdc.address,
|
||||||
new BigNumber(usdcPrice.toString()).multipliedBy(1.2).toFixed(0)
|
new BigNumber(usdcPrice.toString()).multipliedBy(1.12).toFixed(0)
|
||||||
);
|
);
|
||||||
|
|
||||||
//mints dai to the liquidator
|
//mints dai to the liquidator
|
||||||
|
@ -402,7 +402,7 @@ makeSuite('LendingPool liquidation - liquidator receiving the underlying asset',
|
||||||
//drops HF below 1
|
//drops HF below 1
|
||||||
await oracle.setAssetPrice(
|
await oracle.setAssetPrice(
|
||||||
usdc.address,
|
usdc.address,
|
||||||
new BigNumber(usdcPrice.toString()).multipliedBy(1.12).toFixed(0)
|
new BigNumber(usdcPrice.toString()).multipliedBy(1.14).toFixed(0)
|
||||||
);
|
);
|
||||||
|
|
||||||
//mints usdc to the liquidator
|
//mints usdc to the liquidator
|
||||||
|
|
Loading…
Reference in New Issue
Block a user