Skip to content
This repository has been archived by the owner on Jan 24, 2024. It is now read-only.

Commit

Permalink
feat(aave-v2): Add enabled as collateral and liquidation threshold da…
Browse files Browse the repository at this point in the history
…ta props (#610)
  • Loading branch information
immasandwich authored Jun 9, 2022
1 parent 0f495dc commit c75f883
Showing 1 changed file with 23 additions and 5 deletions.
28 changes: 23 additions & 5 deletions src/apps/aave-v2/helpers/aave-v2.lending.token-helper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,14 +22,21 @@ type ReserveTokenAddressesData = {
variableDebtTokenAddress: string;
};

type ReserveDataData = {
type ReserveData = {
liquidityRate: BigNumber;
stableBorrowRate: BigNumber;
variableBorrowRate: BigNumber;
};

type ReserveConfigurationData = {
usageAsCollateralEnabled: boolean;
liquidationThreshold: BigNumber;
};

export type AaveV2LendingTokenDataProps = ExchangeableAppTokenDataProps & {
apy: number;
enabledAsCollateral: boolean;
liquidationThreshold: number;
};

type AaveV2LendingTokenHelperParams<T = AaveProtocolDataProvider> = {
Expand All @@ -49,10 +56,15 @@ type AaveV2LendingTokenHelperParams<T = AaveProtocolDataProvider> = {
contract: T;
multicall: Multicall;
reserveTokenAddress: string;
}) => Promise<ReserveDataData>;
}) => Promise<ReserveData>;
resolveReserveConfigurationData?: (opts: {
contract: T;
multicall: Multicall;
reserveTokenAddress: string;
}) => Promise<ReserveConfigurationData>;
exchangeable?: boolean;
resolveTokenAddress: (opts: { reserveTokenAddressesData: ReserveTokenAddressesData }) => string;
resolveLendingRate: (opts: { reserveData: ReserveDataData }) => BigNumber;
resolveLendingRate: (opts: { reserveData: ReserveData }) => BigNumber;
resolveLabel: (opts: { reserveToken: Token }) => string;
resolveApyLabel: (opts: { apy: number }) => string;
};
Expand Down Expand Up @@ -83,6 +95,8 @@ export class AaveV2LendingTokenHelper {
multicall.wrap(contract as unknown as AaveProtocolDataProvider).getReserveTokensAddresses(reserveTokenAddress),
resolveReserveData = ({ contract, multicall, reserveTokenAddress }) =>
multicall.wrap(contract as unknown as AaveProtocolDataProvider).getReserveData(reserveTokenAddress),
resolveReserveConfigurationData = ({ contract, multicall, reserveTokenAddress }) =>
multicall.wrap(contract as unknown as AaveProtocolDataProvider).getReserveConfigurationData(reserveTokenAddress),
}: AaveV2LendingTokenHelperParams<T>): Promise<AppTokenPosition<AaveV2LendingTokenDataProps>[]> {
const multicall = this.appToolkit.getMulticall(network);

Expand All @@ -105,11 +119,12 @@ export class AaveV2LendingTokenHelper {
const reserveToken = allTokens.find(v => v.address === reserveTokenAddress);
if (!reserveToken) return null;

const [symbol, decimalsRaw, supplyRaw, reserveData] = await Promise.all([
const [symbol, decimalsRaw, supplyRaw, reserveData, reserveConfigurationData] = await Promise.all([
multicall.wrap(this.appToolkit.globalContracts.erc20({ network, address: tokenAddress })).symbol(),
multicall.wrap(this.appToolkit.globalContracts.erc20({ network, address: tokenAddress })).decimals(),
multicall.wrap(this.appToolkit.globalContracts.erc20({ network, address: tokenAddress })).totalSupply(),
resolveReserveData({ contract, multicall, reserveTokenAddress }),
resolveReserveConfigurationData({ contract, multicall, reserveTokenAddress }),
]);

// Data Props
Expand All @@ -120,8 +135,11 @@ export class AaveV2LendingTokenHelper {
const liquidity = price * supply;
const lendingRateRaw = resolveLendingRate({ reserveData });
const apy = Number(lendingRateRaw) / 10 ** 27;
const liquidationThresholdRaw = reserveConfigurationData.liquidationThreshold;
const liquidationThreshold = Number(liquidationThresholdRaw) / 10 ** 4;
const enabledAsCollateral = reserveConfigurationData.usageAsCollateralEnabled;
const tokens = [reserveToken];
const dataProps = { apy, exchangeable: exchangeable ?? false };
const dataProps = { apy, exchangeable: exchangeable ?? false, enabledAsCollateral, liquidationThreshold };

// Display Props
const label = resolveLabel({ reserveToken });
Expand Down

0 comments on commit c75f883

Please sign in to comment.