@defisaver/positions-sdk 0.0.199 → 0.0.201-fluid-dev
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/config/contracts.d.ts +169 -4
- package/cjs/config/contracts.js +20 -0
- package/cjs/contracts.d.ts +2 -0
- package/cjs/contracts.js +3 -1
- package/cjs/fluid/index.d.ts +38 -0
- package/cjs/fluid/index.js +163 -0
- package/cjs/helpers/fluidHelpers/index.d.ts +6 -0
- package/cjs/helpers/fluidHelpers/index.js +40 -0
- package/cjs/helpers/index.d.ts +2 -0
- package/cjs/helpers/index.js +3 -1
- package/cjs/helpers/liquityV2Helpers/index.d.ts +12 -0
- package/cjs/helpers/liquityV2Helpers/index.js +63 -0
- package/cjs/index.d.ts +3 -1
- package/cjs/index.js +5 -1
- package/cjs/liquityV2/index.d.ts +18 -0
- package/cjs/liquityV2/index.js +194 -0
- package/cjs/markets/aave/marketAssets.js +1 -1
- package/cjs/markets/fluid/index.d.ts +174 -0
- package/cjs/markets/fluid/index.js +1286 -0
- package/cjs/markets/index.d.ts +2 -0
- package/cjs/markets/index.js +5 -1
- package/cjs/markets/liquityV2/index.d.ts +10 -0
- package/cjs/markets/liquityV2/index.js +47 -0
- package/cjs/moneymarket/moneymarketCommonService.js +1 -1
- package/cjs/types/contracts/generated/FluidView.d.ts +318 -0
- package/cjs/types/contracts/generated/FluidView.js +5 -0
- package/cjs/types/contracts/generated/LiquityV2CollSurplusPool.d.ts +64 -0
- package/cjs/types/contracts/generated/LiquityV2CollSurplusPool.js +5 -0
- package/cjs/types/contracts/generated/LiquityV2TroveNFT.d.ts +73 -0
- package/cjs/types/contracts/generated/LiquityV2TroveNFT.js +5 -0
- package/cjs/types/contracts/generated/LiquityV2View.d.ts +244 -0
- package/cjs/types/contracts/generated/LiquityV2View.js +5 -0
- package/cjs/types/contracts/generated/index.d.ts +4 -0
- package/cjs/types/fluid.d.ts +225 -0
- package/cjs/types/fluid.js +129 -0
- package/cjs/types/index.d.ts +2 -0
- package/cjs/types/index.js +2 -0
- package/cjs/types/liquityV2.d.ts +111 -0
- package/cjs/types/liquityV2.js +24 -0
- package/esm/config/contracts.d.ts +169 -4
- package/esm/config/contracts.js +20 -0
- package/esm/contracts.d.ts +2 -0
- package/esm/contracts.js +2 -0
- package/esm/fluid/index.d.ts +38 -0
- package/esm/fluid/index.js +153 -0
- package/esm/helpers/fluidHelpers/index.d.ts +6 -0
- package/esm/helpers/fluidHelpers/index.js +33 -0
- package/esm/helpers/index.d.ts +2 -0
- package/esm/helpers/index.js +2 -0
- package/esm/helpers/liquityV2Helpers/index.d.ts +12 -0
- package/esm/helpers/liquityV2Helpers/index.js +55 -0
- package/esm/index.d.ts +3 -1
- package/esm/index.js +3 -1
- package/esm/liquityV2/index.d.ts +18 -0
- package/esm/liquityV2/index.js +183 -0
- package/esm/markets/aave/marketAssets.js +1 -1
- package/esm/markets/fluid/index.d.ts +174 -0
- package/esm/markets/fluid/index.js +1196 -0
- package/esm/markets/index.d.ts +2 -0
- package/esm/markets/index.js +2 -0
- package/esm/markets/liquityV2/index.d.ts +10 -0
- package/esm/markets/liquityV2/index.js +40 -0
- package/esm/moneymarket/moneymarketCommonService.js +1 -1
- package/esm/types/contracts/generated/FluidView.d.ts +318 -0
- package/esm/types/contracts/generated/FluidView.js +4 -0
- package/esm/types/contracts/generated/LiquityV2CollSurplusPool.d.ts +64 -0
- package/esm/types/contracts/generated/LiquityV2CollSurplusPool.js +4 -0
- package/esm/types/contracts/generated/LiquityV2TroveNFT.d.ts +73 -0
- package/esm/types/contracts/generated/LiquityV2TroveNFT.js +4 -0
- package/esm/types/contracts/generated/LiquityV2View.d.ts +244 -0
- package/esm/types/contracts/generated/LiquityV2View.js +4 -0
- package/esm/types/contracts/generated/index.d.ts +4 -0
- package/esm/types/fluid.d.ts +225 -0
- package/esm/types/fluid.js +126 -0
- package/esm/types/index.d.ts +2 -0
- package/esm/types/index.js +2 -0
- package/esm/types/liquityV2.d.ts +111 -0
- package/esm/types/liquityV2.js +21 -0
- package/package.json +2 -2
- package/src/config/contracts.js +20 -0
- package/src/contracts.ts +2 -0
- package/src/fluid/index.ts +220 -0
- package/src/helpers/fluidHelpers/index.ts +54 -0
- package/src/helpers/index.ts +3 -1
- package/src/helpers/liquityV2Helpers/index.ts +80 -0
- package/src/index.ts +4 -0
- package/src/liquityV2/index.ts +228 -0
- package/src/markets/aave/marketAssets.ts +1 -1
- package/src/markets/fluid/index.ts +1290 -0
- package/src/markets/index.ts +3 -2
- package/src/markets/liquityV2/index.ts +44 -0
- package/src/moneymarket/moneymarketCommonService.ts +1 -1
- package/src/types/contracts/generated/FluidView.ts +399 -0
- package/src/types/contracts/generated/LiquityV2CollSurplusPool.ts +130 -0
- package/src/types/contracts/generated/LiquityV2TroveNFT.ts +150 -0
- package/src/types/contracts/generated/LiquityV2View.ts +315 -0
- package/src/types/contracts/generated/index.ts +4 -0
- package/src/types/fluid.ts +240 -0
- package/src/types/index.ts +3 -1
- package/src/types/liquityV2.ts +119 -0
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import Web3 from 'web3';
|
|
2
|
+
import { EthAddress, NetworkNumber } from '../types/common';
|
|
3
|
+
import { FluidAssetsData, FluidMarketData, FluidMarketInfo, FluidVaultData, InnerFluidMarketData } from '../types';
|
|
4
|
+
export declare const EMPTY_USED_ASSET: {
|
|
5
|
+
isSupplied: boolean;
|
|
6
|
+
isBorrowed: boolean;
|
|
7
|
+
supplied: string;
|
|
8
|
+
suppliedUsd: string;
|
|
9
|
+
borrowed: string;
|
|
10
|
+
borrowedUsd: string;
|
|
11
|
+
symbol: string;
|
|
12
|
+
collateral: boolean;
|
|
13
|
+
};
|
|
14
|
+
export declare const EMPTY_FLUID_DATA: {
|
|
15
|
+
usedAssets: {};
|
|
16
|
+
suppliedUsd: string;
|
|
17
|
+
borrowedUsd: string;
|
|
18
|
+
borrowLimitUsd: string;
|
|
19
|
+
leftToBorrowUsd: string;
|
|
20
|
+
ratio: string;
|
|
21
|
+
minRatio: string;
|
|
22
|
+
netApy: string;
|
|
23
|
+
incentiveUsd: string;
|
|
24
|
+
totalInterestUsd: string;
|
|
25
|
+
isSubscribedToAutomation: boolean;
|
|
26
|
+
automationResubscribeRequired: boolean;
|
|
27
|
+
lastUpdated: number;
|
|
28
|
+
};
|
|
29
|
+
export declare const getFluidMarketData: (web3: Web3, network: NetworkNumber, market: FluidMarketInfo) => Promise<FluidMarketData>;
|
|
30
|
+
export declare const getFluidVaultIdsForUser: (web3: Web3, network: NetworkNumber, user: EthAddress) => Promise<string[]>;
|
|
31
|
+
export declare const getFluidPosition: (web3: Web3, network: NetworkNumber, vaultId: string, extractedState: {
|
|
32
|
+
assetsData: FluidAssetsData;
|
|
33
|
+
marketData: InnerFluidMarketData;
|
|
34
|
+
}) => Promise<FluidVaultData>;
|
|
35
|
+
export declare const getFluidPositionWithMarket: (web3: Web3, network: NetworkNumber, vaultId: string) => Promise<{
|
|
36
|
+
userData: FluidVaultData;
|
|
37
|
+
marketData: FluidMarketData;
|
|
38
|
+
}>;
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import Dec from 'decimal.js';
|
|
11
|
+
import { getAssetInfo, getAssetInfoByAddress } from '@defisaver/tokens';
|
|
12
|
+
import { FluidVaultType, } from '../types';
|
|
13
|
+
import { FluidViewContract } from '../contracts';
|
|
14
|
+
import { getEthAmountForDecimals } from '../services/utils';
|
|
15
|
+
import { getFluidAggregatedData } from '../helpers/fluidHelpers';
|
|
16
|
+
export const EMPTY_USED_ASSET = {
|
|
17
|
+
isSupplied: false,
|
|
18
|
+
isBorrowed: false,
|
|
19
|
+
supplied: '0',
|
|
20
|
+
suppliedUsd: '0',
|
|
21
|
+
borrowed: '0',
|
|
22
|
+
borrowedUsd: '0',
|
|
23
|
+
symbol: '',
|
|
24
|
+
collateral: false,
|
|
25
|
+
};
|
|
26
|
+
const parseVaultType = (vaultType) => {
|
|
27
|
+
switch (vaultType) {
|
|
28
|
+
case 10000: return FluidVaultType.T1;
|
|
29
|
+
case 20000: return FluidVaultType.T2;
|
|
30
|
+
case 30000: return FluidVaultType.T3;
|
|
31
|
+
case 40000: return FluidVaultType.T4;
|
|
32
|
+
default: return FluidVaultType.Unknown;
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
const parseMarketData = (data) => {
|
|
36
|
+
const collAsset = getAssetInfoByAddress(data.supplyToken0);
|
|
37
|
+
const debtAsset = getAssetInfoByAddress(data.borrowToken0);
|
|
38
|
+
const collAssetData = {
|
|
39
|
+
symbol: collAsset.symbol,
|
|
40
|
+
address: collAsset.address,
|
|
41
|
+
price: getEthAmountForDecimals(data.priceOfSupplyToken0InUSD, 8),
|
|
42
|
+
totalSupply: data.totalSupplyVault,
|
|
43
|
+
totalBorrow: data.totalBorrowVault,
|
|
44
|
+
canBeSupplied: true,
|
|
45
|
+
canBeBorrowed: false,
|
|
46
|
+
supplyRate: new Dec(data.supplyRateVault).div(100).toString(),
|
|
47
|
+
borrowRate: '0',
|
|
48
|
+
};
|
|
49
|
+
const debtAssetData = {
|
|
50
|
+
symbol: debtAsset.symbol,
|
|
51
|
+
address: debtAsset.address,
|
|
52
|
+
price: getEthAmountForDecimals(data.priceOfBorrowToken0InUSD, 8),
|
|
53
|
+
totalSupply: data.totalSupplyVault,
|
|
54
|
+
totalBorrow: data.totalBorrowVault,
|
|
55
|
+
canBeSupplied: false,
|
|
56
|
+
canBeBorrowed: true,
|
|
57
|
+
supplyRate: '0',
|
|
58
|
+
borrowRate: new Dec(data.borrowRateVault).div(100).toString(),
|
|
59
|
+
};
|
|
60
|
+
const assetsData = {
|
|
61
|
+
[collAsset.symbol]: collAssetData,
|
|
62
|
+
[debtAsset.symbol]: debtAssetData,
|
|
63
|
+
};
|
|
64
|
+
const marketData = {
|
|
65
|
+
vaultId: +data.vaultId,
|
|
66
|
+
isSmartColl: data.isSmartColl,
|
|
67
|
+
isSmartDebt: data.isSmartDebt,
|
|
68
|
+
marketAddress: data.vault,
|
|
69
|
+
vaultType: parseVaultType(+data.vaultType),
|
|
70
|
+
oracle: data.oracle,
|
|
71
|
+
liquidationPenaltyPercent: new Dec(data.liquidationPenalty).div(100).toString(),
|
|
72
|
+
collFactor: new Dec(data.collateralFactor).div(10000).toString(),
|
|
73
|
+
liquidationRatio: new Dec(data.liquidationThreshold).div(100).toString(),
|
|
74
|
+
collAsset0: collAsset.symbol,
|
|
75
|
+
debtAsset0: debtAsset.symbol,
|
|
76
|
+
totalPositions: data.totalPositions,
|
|
77
|
+
totalSupplyVault: getEthAmountForDecimals(data.totalSupplyVault, collAsset.decimals),
|
|
78
|
+
totalBorrowVault: getEthAmountForDecimals(data.totalBorrowVault, debtAsset.decimals),
|
|
79
|
+
withdrawalLimit: getEthAmountForDecimals(data.withdrawalLimit, collAsset.decimals),
|
|
80
|
+
withdrawableUntilLimit: getEthAmountForDecimals(data.withdrawableUntilLimit, collAsset.decimals),
|
|
81
|
+
withdrawable: getEthAmountForDecimals(data.withdrawable, collAsset.decimals),
|
|
82
|
+
borrowLimit: getEthAmountForDecimals(data.borrowLimit, debtAsset.decimals),
|
|
83
|
+
borrowableUntilLimit: getEthAmountForDecimals(data.borrowableUntilLimit, debtAsset.decimals),
|
|
84
|
+
borrowable: getEthAmountForDecimals(data.borrowable, debtAsset.decimals),
|
|
85
|
+
borrowLimitUtilization: getEthAmountForDecimals(data.borrowLimitUtilization, debtAsset.decimals),
|
|
86
|
+
maxBorrowLimit: getEthAmountForDecimals(data.maxBorrowLimit, debtAsset.decimals),
|
|
87
|
+
baseBorrowLimit: getEthAmountForDecimals(data.baseBorrowLimit, debtAsset.decimals),
|
|
88
|
+
minimumBorrowing: getEthAmountForDecimals(data.minimumBorrowing, debtAsset.decimals),
|
|
89
|
+
};
|
|
90
|
+
return {
|
|
91
|
+
assetsData,
|
|
92
|
+
marketData,
|
|
93
|
+
};
|
|
94
|
+
};
|
|
95
|
+
export const EMPTY_FLUID_DATA = {
|
|
96
|
+
usedAssets: {},
|
|
97
|
+
suppliedUsd: '0',
|
|
98
|
+
borrowedUsd: '0',
|
|
99
|
+
borrowLimitUsd: '0',
|
|
100
|
+
leftToBorrowUsd: '0',
|
|
101
|
+
ratio: '0',
|
|
102
|
+
minRatio: '0',
|
|
103
|
+
netApy: '0',
|
|
104
|
+
incentiveUsd: '0',
|
|
105
|
+
totalInterestUsd: '0',
|
|
106
|
+
isSubscribedToAutomation: false,
|
|
107
|
+
automationResubscribeRequired: false,
|
|
108
|
+
lastUpdated: Date.now(),
|
|
109
|
+
};
|
|
110
|
+
const parseUserData = (userPositionData, vaultData) => {
|
|
111
|
+
const { assetsData, marketData, } = vaultData;
|
|
112
|
+
const payload = Object.assign(Object.assign({ owner: userPositionData.owner, vaultId: marketData.vaultId }, EMPTY_FLUID_DATA), { lastUpdated: Date.now() });
|
|
113
|
+
const collAsset = getAssetInfo(marketData.collAsset0);
|
|
114
|
+
const debtAsset = getAssetInfo(marketData.debtAsset0);
|
|
115
|
+
const supplied = getEthAmountForDecimals(userPositionData.supply, collAsset.decimals);
|
|
116
|
+
const borrowed = getEthAmountForDecimals(userPositionData.borrow, debtAsset.decimals);
|
|
117
|
+
const collUsedAsset = Object.assign(Object.assign({}, EMPTY_USED_ASSET), { symbol: collAsset.symbol, collateral: true, supplied, suppliedUsd: new Dec(supplied).mul(assetsData[collAsset.symbol].price).toString(), isSupplied: new Dec(supplied).gt(0) });
|
|
118
|
+
const debtUsedAsset = Object.assign(Object.assign({}, EMPTY_USED_ASSET), { symbol: debtAsset.symbol, collateral: false, borrowed, borrowedUsd: new Dec(borrowed).mul(assetsData[debtAsset.symbol].price).toString(), isBorrowed: new Dec(borrowed).gt(0) });
|
|
119
|
+
const usedAssets = {
|
|
120
|
+
[collAsset.symbol]: collUsedAsset,
|
|
121
|
+
[debtAsset.symbol]: debtUsedAsset,
|
|
122
|
+
};
|
|
123
|
+
return Object.assign(Object.assign(Object.assign({}, payload), { usedAssets }), getFluidAggregatedData({
|
|
124
|
+
usedAssets,
|
|
125
|
+
assetsData,
|
|
126
|
+
marketData,
|
|
127
|
+
}));
|
|
128
|
+
};
|
|
129
|
+
export const getFluidMarketData = (web3, network, market) => __awaiter(void 0, void 0, void 0, function* () {
|
|
130
|
+
const view = FluidViewContract(web3, network);
|
|
131
|
+
const data = yield view.methods.getVaultData(market.marketAddress).call();
|
|
132
|
+
return parseMarketData(data);
|
|
133
|
+
});
|
|
134
|
+
export const getFluidVaultIdsForUser = (web3, network, user) => __awaiter(void 0, void 0, void 0, function* () {
|
|
135
|
+
const view = FluidViewContract(web3, network);
|
|
136
|
+
return view.methods.getUserNftIds(user).call();
|
|
137
|
+
});
|
|
138
|
+
export const getFluidPosition = (web3, network, vaultId, extractedState) => __awaiter(void 0, void 0, void 0, function* () {
|
|
139
|
+
const view = FluidViewContract(web3, network);
|
|
140
|
+
const data = yield view.methods.getPositionByNftId(vaultId).call();
|
|
141
|
+
const userPositionData = data[0];
|
|
142
|
+
return parseUserData(userPositionData, extractedState);
|
|
143
|
+
});
|
|
144
|
+
export const getFluidPositionWithMarket = (web3, network, vaultId) => __awaiter(void 0, void 0, void 0, function* () {
|
|
145
|
+
const view = FluidViewContract(web3, network);
|
|
146
|
+
const data = yield view.methods.getPositionByNftId(vaultId).call();
|
|
147
|
+
const marketData = parseMarketData(data.vault);
|
|
148
|
+
const userData = parseUserData(data.position, marketData);
|
|
149
|
+
return {
|
|
150
|
+
userData,
|
|
151
|
+
marketData,
|
|
152
|
+
};
|
|
153
|
+
});
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { FluidAggregatedVaultData, FluidAssetsData, FluidUsedAssets, InnerFluidMarketData } from '../../types';
|
|
2
|
+
export declare const getFluidAggregatedData: ({ usedAssets, assetsData, marketData, }: {
|
|
3
|
+
usedAssets: FluidUsedAssets;
|
|
4
|
+
marketData: InnerFluidMarketData;
|
|
5
|
+
assetsData: FluidAssetsData;
|
|
6
|
+
}) => FluidAggregatedVaultData;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import Dec from 'decimal.js';
|
|
2
|
+
import { calcLeverageLiqPrice, getAssetsTotal, isLeveragedPos } from '../../moneymarket';
|
|
3
|
+
import { calculateNetApy } from '../../staking';
|
|
4
|
+
export const getFluidAggregatedData = ({ usedAssets, assetsData, marketData, }) => {
|
|
5
|
+
const payload = {};
|
|
6
|
+
payload.suppliedUsd = getAssetsTotal(usedAssets, ({ isSupplied }) => isSupplied, ({ suppliedUsd }) => suppliedUsd);
|
|
7
|
+
payload.borrowedUsd = getAssetsTotal(usedAssets, ({ isBorrowed }) => isBorrowed, ({ borrowedUsd }) => borrowedUsd);
|
|
8
|
+
const { netApy, incentiveUsd, totalInterestUsd } = calculateNetApy({ usedAssets, assetsData: assetsData });
|
|
9
|
+
payload.netApy = netApy;
|
|
10
|
+
payload.incentiveUsd = incentiveUsd;
|
|
11
|
+
payload.totalInterestUsd = totalInterestUsd;
|
|
12
|
+
const collFactor = marketData.collFactor;
|
|
13
|
+
const liqRatio = marketData.liquidationRatio;
|
|
14
|
+
payload.borrowLimitUsd = new Dec(payload.suppliedUsd).mul(collFactor).toString();
|
|
15
|
+
payload.liquidationLimitUsd = new Dec(payload.suppliedUsd).mul(liqRatio).div(100).toString();
|
|
16
|
+
const leftToBorrowUsd = new Dec(payload.borrowLimitUsd).sub(payload.borrowedUsd);
|
|
17
|
+
payload.leftToBorrowUsd = leftToBorrowUsd.lte('0') ? '0' : leftToBorrowUsd.toString();
|
|
18
|
+
payload.ratio = +payload.suppliedUsd ? new Dec(payload.borrowLimitUsd).div(payload.borrowedUsd).mul(100).toString() : '0';
|
|
19
|
+
payload.collRatio = +payload.suppliedUsd ? new Dec(payload.suppliedUsd).div(payload.borrowedUsd).mul(100).toString() : '0';
|
|
20
|
+
const { leveragedType, leveragedAsset } = isLeveragedPos(usedAssets);
|
|
21
|
+
payload.leveragedType = leveragedType;
|
|
22
|
+
if (leveragedType !== '') {
|
|
23
|
+
payload.leveragedAsset = leveragedAsset;
|
|
24
|
+
let assetPrice = assetsData[leveragedAsset].price;
|
|
25
|
+
if (leveragedType === 'lsd-leverage') {
|
|
26
|
+
// Treat ETH like a stablecoin in a long stETH position
|
|
27
|
+
payload.leveragedLsdAssetRatio = new Dec(assetsData[leveragedAsset].price).div(assetsData.ETH.price).toDP(18).toString();
|
|
28
|
+
assetPrice = new Dec(assetPrice).div(assetsData.ETH.price).toString();
|
|
29
|
+
}
|
|
30
|
+
payload.liquidationPrice = calcLeverageLiqPrice(leveragedType, assetPrice, payload.borrowedUsd, payload.liquidationLimitUsd);
|
|
31
|
+
}
|
|
32
|
+
return payload;
|
|
33
|
+
};
|
package/esm/helpers/index.d.ts
CHANGED
|
@@ -6,4 +6,6 @@ export * as makerHelpers from './makerHelpers';
|
|
|
6
6
|
export * as chickenBondsHelpers from './chickenBondsHelpers';
|
|
7
7
|
export * as morphoBlueHelpers from './morphoBlueHelpers';
|
|
8
8
|
export * as llamaLendHelpers from './llamaLendHelpers';
|
|
9
|
+
export * as liquityV2Helpers from './liquityV2Helpers';
|
|
9
10
|
export * as eulerV2Helpers from './eulerHelpers';
|
|
11
|
+
export * as fluidHelpers from './fluidHelpers';
|
package/esm/helpers/index.js
CHANGED
|
@@ -6,4 +6,6 @@ export * as makerHelpers from './makerHelpers';
|
|
|
6
6
|
export * as chickenBondsHelpers from './chickenBondsHelpers';
|
|
7
7
|
export * as morphoBlueHelpers from './morphoBlueHelpers';
|
|
8
8
|
export * as llamaLendHelpers from './llamaLendHelpers';
|
|
9
|
+
export * as liquityV2Helpers from './liquityV2Helpers';
|
|
9
10
|
export * as eulerV2Helpers from './eulerHelpers';
|
|
11
|
+
export * as fluidHelpers from './fluidHelpers';
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { LiquityV2AggregatedTroveData, LiquityV2AssetsData, LiquityV2UsedAssets } from '../../types';
|
|
2
|
+
export declare const calculateNetApyLiquityV2: (usedAssets: LiquityV2UsedAssets, assetsData: LiquityV2AssetsData, interestRate: string) => {
|
|
3
|
+
netApy: string;
|
|
4
|
+
totalInterestUsd: string;
|
|
5
|
+
incentiveUsd: string;
|
|
6
|
+
};
|
|
7
|
+
export declare const getLiquityV2AggregatedPositionData: ({ usedAssets, assetsData, minCollRatio, interestRate, }: {
|
|
8
|
+
usedAssets: LiquityV2UsedAssets;
|
|
9
|
+
assetsData: LiquityV2AssetsData;
|
|
10
|
+
minCollRatio: string;
|
|
11
|
+
interestRate: string;
|
|
12
|
+
}) => LiquityV2AggregatedTroveData;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import Dec from 'decimal.js';
|
|
2
|
+
import { calcLeverageLiqPrice, getAssetsTotal, isLeveragedPos } from '../../moneymarket';
|
|
3
|
+
import { calculateInterestEarned } from '../../staking';
|
|
4
|
+
export const calculateNetApyLiquityV2 = (usedAssets, assetsData, interestRate) => {
|
|
5
|
+
const sumValues = Object.values(usedAssets).reduce((_acc, usedAsset) => {
|
|
6
|
+
const acc = Object.assign({}, _acc);
|
|
7
|
+
const assetData = assetsData[usedAsset.symbol];
|
|
8
|
+
if (usedAsset.suppliedUsd) {
|
|
9
|
+
const amount = usedAsset.suppliedUsd;
|
|
10
|
+
acc.suppliedUsd = new Dec(acc.suppliedUsd).add(amount).toString();
|
|
11
|
+
if (assetData.incentiveSupplyApy) {
|
|
12
|
+
const incentiveInterest = calculateInterestEarned(amount, assetData.incentiveSupplyApy, 'year', true);
|
|
13
|
+
acc.incentiveUsd = new Dec(acc.incentiveUsd).add(incentiveInterest).toString();
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
if (usedAsset.borrowedUsd) {
|
|
17
|
+
const amount = usedAsset.borrowedUsd;
|
|
18
|
+
acc.borrowedUsd = new Dec(acc.borrowedUsd).add(amount).toString();
|
|
19
|
+
const rate = interestRate;
|
|
20
|
+
const borrowInterest = calculateInterestEarned(amount, rate, 'year', true);
|
|
21
|
+
acc.borrowInterest = new Dec(acc.borrowInterest).sub(borrowInterest.toString()).toString();
|
|
22
|
+
}
|
|
23
|
+
return acc;
|
|
24
|
+
}, {
|
|
25
|
+
borrowInterest: '0', supplyInterest: '0', incentiveUsd: '0', borrowedUsd: '0', suppliedUsd: '0',
|
|
26
|
+
});
|
|
27
|
+
const { borrowedUsd, suppliedUsd, borrowInterest, supplyInterest, incentiveUsd, } = sumValues;
|
|
28
|
+
const totalInterestUsd = new Dec(borrowInterest).add(supplyInterest).add(incentiveUsd).toString();
|
|
29
|
+
const balance = new Dec(suppliedUsd).sub(borrowedUsd);
|
|
30
|
+
const netApy = new Dec(totalInterestUsd).div(balance).times(100).toString();
|
|
31
|
+
return { netApy, totalInterestUsd, incentiveUsd };
|
|
32
|
+
};
|
|
33
|
+
export const getLiquityV2AggregatedPositionData = ({ usedAssets, assetsData, minCollRatio, interestRate, }) => {
|
|
34
|
+
const payload = {};
|
|
35
|
+
payload.suppliedUsd = getAssetsTotal(usedAssets, (usedAsset) => usedAsset, ({ suppliedUsd }) => suppliedUsd);
|
|
36
|
+
payload.borrowedUsd = getAssetsTotal(usedAssets, (usedAsset) => usedAsset, ({ borrowedUsd }) => borrowedUsd);
|
|
37
|
+
payload.borrowLimitUsd = new Dec(payload.suppliedUsd).div(minCollRatio).mul(100).toString();
|
|
38
|
+
const leftToBorrowUsd = new Dec(payload.borrowLimitUsd).sub(payload.borrowedUsd);
|
|
39
|
+
payload.leftToBorrowUsd = leftToBorrowUsd.lte('0') ? '0' : leftToBorrowUsd.toString();
|
|
40
|
+
payload.ratio = +payload.suppliedUsd ? new Dec(payload.borrowLimitUsd).div(payload.borrowedUsd).mul(100).toString() : '0';
|
|
41
|
+
payload.collRatio = +payload.suppliedUsd ? new Dec(payload.suppliedUsd).div(payload.borrowedUsd).mul(100).toString() : '0';
|
|
42
|
+
const { netApy, incentiveUsd, totalInterestUsd } = calculateNetApyLiquityV2(usedAssets, assetsData, interestRate);
|
|
43
|
+
payload.netApy = netApy;
|
|
44
|
+
payload.incentiveUsd = incentiveUsd;
|
|
45
|
+
payload.totalInterestUsd = totalInterestUsd;
|
|
46
|
+
const { leveragedType, leveragedAsset } = isLeveragedPos(usedAssets);
|
|
47
|
+
payload.leveragedType = leveragedType;
|
|
48
|
+
payload.leveragedAsset = leveragedAsset;
|
|
49
|
+
payload.liquidationPrice = '';
|
|
50
|
+
if (leveragedType !== '') {
|
|
51
|
+
const assetPrice = assetsData[leveragedAsset].price;
|
|
52
|
+
payload.liquidationPrice = calcLeverageLiqPrice(leveragedType, assetPrice, payload.borrowedUsd, payload.borrowLimitUsd);
|
|
53
|
+
}
|
|
54
|
+
return payload;
|
|
55
|
+
};
|
package/esm/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import './setup';
|
|
2
|
+
import * as fluid from './fluid';
|
|
2
3
|
import * as aaveV3 from './aaveV3';
|
|
3
4
|
import * as morphoAaveV3 from './morphoAaveV3';
|
|
4
5
|
import * as aaveV2 from './aaveV2';
|
|
@@ -8,6 +9,7 @@ import * as compoundV2 from './compoundV2';
|
|
|
8
9
|
import * as spark from './spark';
|
|
9
10
|
import * as curveUsd from './curveUsd';
|
|
10
11
|
import * as liquity from './liquity';
|
|
12
|
+
import * as liquityV2 from './liquityV2';
|
|
11
13
|
import * as maker from './maker';
|
|
12
14
|
import * as staking from './staking';
|
|
13
15
|
import * as multicall from './multicall';
|
|
@@ -20,4 +22,4 @@ import * as morphoBlue from './morphoBlue';
|
|
|
20
22
|
import * as llamaLend from './llamaLend';
|
|
21
23
|
import * as eulerV2 from './eulerV2';
|
|
22
24
|
export * from './types';
|
|
23
|
-
export { aaveV2, aaveV3, morphoAaveV2, morphoAaveV3, compoundV2, compoundV3, spark, curveUsd, liquity, maker, chickenBonds, exchange, staking, multicall, moneymarket, markets, helpers, morphoBlue, llamaLend, eulerV2, };
|
|
25
|
+
export { aaveV2, aaveV3, morphoAaveV2, morphoAaveV3, compoundV2, compoundV3, spark, curveUsd, liquity, liquityV2, maker, chickenBonds, exchange, staking, multicall, moneymarket, markets, helpers, morphoBlue, llamaLend, eulerV2, fluid, };
|
package/esm/index.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import './setup';
|
|
2
|
+
import * as fluid from './fluid';
|
|
2
3
|
import * as aaveV3 from './aaveV3';
|
|
3
4
|
import * as morphoAaveV3 from './morphoAaveV3';
|
|
4
5
|
import * as aaveV2 from './aaveV2';
|
|
@@ -8,6 +9,7 @@ import * as compoundV2 from './compoundV2';
|
|
|
8
9
|
import * as spark from './spark';
|
|
9
10
|
import * as curveUsd from './curveUsd';
|
|
10
11
|
import * as liquity from './liquity';
|
|
12
|
+
import * as liquityV2 from './liquityV2';
|
|
11
13
|
import * as maker from './maker';
|
|
12
14
|
import * as staking from './staking';
|
|
13
15
|
import * as multicall from './multicall';
|
|
@@ -20,4 +22,4 @@ import * as morphoBlue from './morphoBlue';
|
|
|
20
22
|
import * as llamaLend from './llamaLend';
|
|
21
23
|
import * as eulerV2 from './eulerV2';
|
|
22
24
|
export * from './types';
|
|
23
|
-
export { aaveV2, aaveV3, morphoAaveV2, morphoAaveV3, compoundV2, compoundV3, spark, curveUsd, liquity, maker, chickenBonds, exchange, staking, multicall, moneymarket, markets, helpers, morphoBlue, llamaLend, eulerV2, };
|
|
25
|
+
export { aaveV2, aaveV3, morphoAaveV2, morphoAaveV3, compoundV2, compoundV3, spark, curveUsd, liquity, liquityV2, maker, chickenBonds, exchange, staking, multicall, moneymarket, markets, helpers, morphoBlue, llamaLend, eulerV2, fluid, };
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import Web3 from 'web3';
|
|
2
|
+
import { EthAddress, NetworkNumber } from '../types/common';
|
|
3
|
+
import { InnerLiquityV2MarketData, LiquityV2AssetsData, LiquityV2MarketData, LiquityV2MarketInfo, LiquityV2TroveData } from '../types';
|
|
4
|
+
export declare const getLiquityV2MarketData: (web3: Web3, network: NetworkNumber, selectedMarket: LiquityV2MarketInfo, mainnetWeb3: Web3) => Promise<LiquityV2MarketData>;
|
|
5
|
+
export declare const getLiquityV2UserTroveIds: (web3: Web3, network: NetworkNumber, selectedMarket: LiquityV2MarketInfo, troveNFTAddress: EthAddress, limitBlocksForEventFetching: boolean, account: EthAddress) => Promise<{
|
|
6
|
+
troves: {
|
|
7
|
+
troveId: string;
|
|
8
|
+
}[];
|
|
9
|
+
nextFreeTroveIndex: string;
|
|
10
|
+
}>;
|
|
11
|
+
export declare const getDebtInFrontLiquityV2: (viewContract: any, marketAddress: EthAddress, troveId: string, accumulatedSum?: string, iterations?: number) => Promise<string>;
|
|
12
|
+
export declare const getLiquityV2TroveData: (web3: Web3, network: NetworkNumber, { selectedMarket, assetsData, marketData, troveId, }: {
|
|
13
|
+
selectedMarket: LiquityV2MarketInfo;
|
|
14
|
+
assetsData: LiquityV2AssetsData;
|
|
15
|
+
marketData: InnerLiquityV2MarketData;
|
|
16
|
+
troveId: string;
|
|
17
|
+
}) => Promise<LiquityV2TroveData>;
|
|
18
|
+
export declare const getLiquityV2ClaimableCollateral: (collSurplusPoolAddress: EthAddress, account: EthAddress, web3: Web3, network: NetworkNumber) => Promise<string>;
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import Dec from 'decimal.js';
|
|
11
|
+
import { assetAmountInEth, getAssetInfo } from '@defisaver/tokens';
|
|
12
|
+
import { createContractWrapper, LiquityV2ViewContract } from '../contracts';
|
|
13
|
+
import { LIQUITY_V2_TROVE_STATUS_ENUM, } from '../types';
|
|
14
|
+
import { getStakingApy, STAKING_ASSETS } from '../staking';
|
|
15
|
+
import { getLiquityV2AggregatedPositionData } from '../helpers/liquityV2Helpers';
|
|
16
|
+
import { compareAddresses, ethToWeth } from '../services/utils';
|
|
17
|
+
import { ZERO_ADDRESS } from '../constants';
|
|
18
|
+
export const getLiquityV2MarketData = (web3, network, selectedMarket, mainnetWeb3) => __awaiter(void 0, void 0, void 0, function* () {
|
|
19
|
+
const viewContract = LiquityV2ViewContract(web3, network);
|
|
20
|
+
const { marketAddress, debtToken, collateralToken } = selectedMarket;
|
|
21
|
+
const data = yield viewContract.methods.getMarketData(marketAddress).call();
|
|
22
|
+
const hintHelperAddress = data.hintHelpers;
|
|
23
|
+
const troveNFTAddress = data.troveNFT;
|
|
24
|
+
const borrowerOperationsAddress = data.borrowerOperations;
|
|
25
|
+
const troveManagerAddress = data.troveManager;
|
|
26
|
+
const stabilityPoolAddress = data.stabilityPool;
|
|
27
|
+
const collSurplusPoolAddress = data.collSurplusPool;
|
|
28
|
+
const activePoolAddress = data.activePool;
|
|
29
|
+
const minCollRatio = new Dec(data.MCR).div(1e16).toString();
|
|
30
|
+
const criticalCollRatio = new Dec(data.CCR).div(1e18).toString();
|
|
31
|
+
const totalMarketBorrow = assetAmountInEth(data.entireSystemDebt);
|
|
32
|
+
const totalMarketSupply = assetAmountInEth(data.entireSystemColl);
|
|
33
|
+
const collPrice = assetAmountInEth(data.collPrice);
|
|
34
|
+
const totalCollRatio = new Dec(totalMarketSupply).mul(collPrice).div(totalMarketBorrow).toString();
|
|
35
|
+
const leftToBorrowGlobal = new Dec(totalMarketSupply).mul(collPrice).div(criticalCollRatio).sub(totalMarketBorrow)
|
|
36
|
+
.toString();
|
|
37
|
+
const minCollAmountForCurrentBorrow = new Dec(totalMarketBorrow).mul(criticalCollRatio).div(collPrice).toString();
|
|
38
|
+
const leftToWithdrawGlobal = new Dec(totalMarketSupply).sub(minCollAmountForCurrentBorrow).toString();
|
|
39
|
+
const assetsData = {};
|
|
40
|
+
assetsData[debtToken] = {
|
|
41
|
+
symbol: debtToken,
|
|
42
|
+
address: getAssetInfo(debtToken, network).address,
|
|
43
|
+
price: '1',
|
|
44
|
+
totalSupply: '0',
|
|
45
|
+
totalBorrow: totalMarketBorrow,
|
|
46
|
+
canBeSupplied: false,
|
|
47
|
+
canBeBorrowed: true,
|
|
48
|
+
leftToBorrowGlobal,
|
|
49
|
+
leftToWithdrawGlobal: '0',
|
|
50
|
+
};
|
|
51
|
+
assetsData[collateralToken] = {
|
|
52
|
+
symbol: collateralToken,
|
|
53
|
+
address: getAssetInfo(ethToWeth(collateralToken), network).address,
|
|
54
|
+
price: collPrice,
|
|
55
|
+
totalSupply: totalMarketSupply,
|
|
56
|
+
totalBorrow: '0',
|
|
57
|
+
canBeSupplied: true,
|
|
58
|
+
canBeBorrowed: false,
|
|
59
|
+
leftToBorrowGlobal: '0',
|
|
60
|
+
leftToWithdrawGlobal,
|
|
61
|
+
};
|
|
62
|
+
if (STAKING_ASSETS.includes(collateralToken)) {
|
|
63
|
+
assetsData[collateralToken].incentiveSupplyApy = yield getStakingApy(collateralToken, mainnetWeb3);
|
|
64
|
+
assetsData[collateralToken].incentiveSupplyToken = collateralToken;
|
|
65
|
+
}
|
|
66
|
+
return {
|
|
67
|
+
assetsData,
|
|
68
|
+
marketData: {
|
|
69
|
+
minCollRatio,
|
|
70
|
+
totalCollRatio: new Dec(totalCollRatio).mul(100).toString(),
|
|
71
|
+
criticalCollRatio: new Dec(criticalCollRatio).mul(100).toString(),
|
|
72
|
+
isUnderCollateralized: new Dec(totalCollRatio).lt(criticalCollRatio),
|
|
73
|
+
hintHelperAddress,
|
|
74
|
+
troveNFTAddress,
|
|
75
|
+
borrowerOperationsAddress,
|
|
76
|
+
troveManagerAddress,
|
|
77
|
+
stabilityPoolAddress,
|
|
78
|
+
collSurplusPoolAddress,
|
|
79
|
+
activePoolAddress,
|
|
80
|
+
},
|
|
81
|
+
};
|
|
82
|
+
});
|
|
83
|
+
const _getUserTroves = (viewContract, account, marketAddress, startIndex = 0, endIndex = 100) => __awaiter(void 0, void 0, void 0, function* () { return viewContract.methods.getUserTroves(account, marketAddress, startIndex, endIndex).call(); });
|
|
84
|
+
const getUserTroves = (viewContract, account, marketAddress, startIndex = 0, endIndex = 100, troves = []) => __awaiter(void 0, void 0, void 0, function* () {
|
|
85
|
+
const result = yield _getUserTroves(viewContract, account, marketAddress, startIndex, endIndex);
|
|
86
|
+
const newStartIndex = endIndex + 1;
|
|
87
|
+
const nextFreeTroveIndex = result.nextFreeTroveIndex;
|
|
88
|
+
const existingTroves = [...troves, ...result.troves];
|
|
89
|
+
if (nextFreeTroveIndex !== '-1')
|
|
90
|
+
return { troves: existingTroves.filter((trove) => trove.ownedByUser), nextFreeTroveIndex };
|
|
91
|
+
return getUserTroves(viewContract, account, marketAddress, newStartIndex, newStartIndex + 100, existingTroves);
|
|
92
|
+
});
|
|
93
|
+
const TransferEventSig = '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef';
|
|
94
|
+
const nftContractCreationBlockMapping = {
|
|
95
|
+
ETH: 21686215,
|
|
96
|
+
wstETH: 21686238,
|
|
97
|
+
rETH: 21686257,
|
|
98
|
+
};
|
|
99
|
+
const getTransferredTroves = (web3, network, troveNFTAddress, limitBlocksForEventFetching, collAsset, account) => __awaiter(void 0, void 0, void 0, function* () {
|
|
100
|
+
const nftContract = createContractWrapper(web3, network, 'LiquityV2TroveNFT', troveNFTAddress);
|
|
101
|
+
// @ts-ignore
|
|
102
|
+
const nftContractCreationBlock = nftContractCreationBlockMapping[collAsset];
|
|
103
|
+
const currentBlock = yield web3.eth.getBlockNumber();
|
|
104
|
+
const events = yield nftContract.getPastEvents(TransferEventSig, {
|
|
105
|
+
filter: { to: account },
|
|
106
|
+
fromBlock: limitBlocksForEventFetching ? (currentBlock - 1000) : nftContractCreationBlock,
|
|
107
|
+
});
|
|
108
|
+
const userTransferredTroves = events.filter((event) => !compareAddresses(event.returnValues.from, ZERO_ADDRESS) && compareAddresses(event.returnValues.to, account));
|
|
109
|
+
// check if the last know transfer address is the user
|
|
110
|
+
userTransferredTroves.forEach((event, index) => {
|
|
111
|
+
const otherTransfers = events.filter((e) => event.blockNumber < e.blockNumber && e.returnValues.tokenId === event.returnValues.tokenId);
|
|
112
|
+
// @ts-ignore
|
|
113
|
+
userTransferredTroves[index].invalid = !!otherTransfers.length;
|
|
114
|
+
});
|
|
115
|
+
// @ts-ignore
|
|
116
|
+
return userTransferredTroves.filter((event) => !event.invalid).map((event) => ({ troveId: event.returnValues.tokenId }));
|
|
117
|
+
});
|
|
118
|
+
export const getLiquityV2UserTroveIds = (web3, network, selectedMarket, troveNFTAddress, limitBlocksForEventFetching, account) => __awaiter(void 0, void 0, void 0, function* () {
|
|
119
|
+
const viewContract = LiquityV2ViewContract(web3, network);
|
|
120
|
+
const [{ troves: userTroves, nextFreeTroveIndex }, userTransferredTroves] = yield Promise.all([
|
|
121
|
+
getUserTroves(viewContract, account, selectedMarket.marketAddress),
|
|
122
|
+
getTransferredTroves(web3, network, troveNFTAddress, limitBlocksForEventFetching, selectedMarket.collateralToken, account),
|
|
123
|
+
]);
|
|
124
|
+
const troves = [...userTroves.map(({ troveId }) => ({ troveId })), ...userTransferredTroves];
|
|
125
|
+
const filteredTroves = troves.filter((value, index, self) => index === self.findIndex((t) => (t.troveId === value.troveId)));
|
|
126
|
+
return { troves: filteredTroves, nextFreeTroveIndex };
|
|
127
|
+
});
|
|
128
|
+
const _getDebtInFront = (viewContract, marketAddress, troveId, accumulatedSum = '0', iterations = 2000) => __awaiter(void 0, void 0, void 0, function* () { return viewContract.methods.getDebtInFront(marketAddress, troveId, accumulatedSum, iterations).call(); });
|
|
129
|
+
export const getDebtInFrontLiquityV2 = (viewContract, marketAddress, troveId, accumulatedSum = '0', iterations = 2000) => __awaiter(void 0, void 0, void 0, function* () {
|
|
130
|
+
const { debt, next } = yield _getDebtInFront(viewContract, marketAddress, troveId, accumulatedSum, iterations);
|
|
131
|
+
if (next === '0')
|
|
132
|
+
return assetAmountInEth(debt);
|
|
133
|
+
return getDebtInFrontLiquityV2(viewContract, marketAddress, next, debt, iterations);
|
|
134
|
+
});
|
|
135
|
+
export const getLiquityV2TroveData = (web3, network, { selectedMarket, assetsData, marketData, troveId, }) => __awaiter(void 0, void 0, void 0, function* () {
|
|
136
|
+
const viewContract = LiquityV2ViewContract(web3, network);
|
|
137
|
+
const { minCollRatio } = marketData;
|
|
138
|
+
const { collateralToken, marketAddress, debtToken } = selectedMarket;
|
|
139
|
+
const [data, debtInFront] = yield Promise.all([
|
|
140
|
+
viewContract.methods.getTroveInfo(marketAddress, troveId).call(),
|
|
141
|
+
getDebtInFrontLiquityV2(viewContract, marketAddress, troveId),
|
|
142
|
+
]);
|
|
143
|
+
const usedAssets = {};
|
|
144
|
+
const debtAssetData = assetsData[debtToken];
|
|
145
|
+
const borrowed = assetAmountInEth(data.debtAmount);
|
|
146
|
+
usedAssets[debtToken] = {
|
|
147
|
+
symbol: debtToken,
|
|
148
|
+
supplied: '0',
|
|
149
|
+
suppliedUsd: '0',
|
|
150
|
+
borrowed,
|
|
151
|
+
borrowedUsd: new Dec(borrowed).mul(debtAssetData.price).toString(),
|
|
152
|
+
isBorrowed: true,
|
|
153
|
+
isSupplied: false,
|
|
154
|
+
};
|
|
155
|
+
const collAssetData = assetsData[collateralToken];
|
|
156
|
+
const suppliedColl = assetAmountInEth(data.collAmount);
|
|
157
|
+
usedAssets[collateralToken] = {
|
|
158
|
+
symbol: collateralToken,
|
|
159
|
+
supplied: suppliedColl,
|
|
160
|
+
suppliedUsd: new Dec(suppliedColl).mul(collAssetData.price).toString(),
|
|
161
|
+
borrowed: '0',
|
|
162
|
+
borrowedUsd: '0',
|
|
163
|
+
isBorrowed: false,
|
|
164
|
+
isSupplied: true,
|
|
165
|
+
collateral: true,
|
|
166
|
+
};
|
|
167
|
+
const collRatio = new Dec(data.TCRatio).div(1e16).toString();
|
|
168
|
+
const interestRate = new Dec(data.annualInterestRate).div(1e16).toString();
|
|
169
|
+
const interestBatchManager = data.interestBatchManager;
|
|
170
|
+
const payload = Object.assign(Object.assign({ usedAssets,
|
|
171
|
+
troveId,
|
|
172
|
+
interestRate,
|
|
173
|
+
interestBatchManager,
|
|
174
|
+
debtInFront, troveStatus: LIQUITY_V2_TROVE_STATUS_ENUM[parseInt(data.status, 10)] }, getLiquityV2AggregatedPositionData({
|
|
175
|
+
usedAssets, assetsData, minCollRatio, interestRate,
|
|
176
|
+
})), { collRatio });
|
|
177
|
+
return payload;
|
|
178
|
+
});
|
|
179
|
+
export const getLiquityV2ClaimableCollateral = (collSurplusPoolAddress, account, web3, network) => __awaiter(void 0, void 0, void 0, function* () {
|
|
180
|
+
const collSurplusPoolContract = createContractWrapper(web3, network, 'LiquityV2CollSurplusPool', collSurplusPoolAddress);
|
|
181
|
+
const claimableCollateral = yield collSurplusPoolContract.methods.getCollateral(account).call();
|
|
182
|
+
return claimableCollateral;
|
|
183
|
+
});
|
|
@@ -7,7 +7,7 @@ export const aaveV1AssetsDefaultMarket = [
|
|
|
7
7
|
export const aaveV2AssetsDefaultMarket = ['USDT', 'WBTC', 'ETH', 'YFI', 'ZRX', 'UNI', 'AAVE', 'BAT', 'BUSD', 'DAI', 'ENJ', 'KNCL', 'LINK', 'MANA', 'MKR', 'REN', 'SNX', 'SUSD', 'TUSD', 'USDC', 'CRV', 'GUSD', 'BAL', 'xSUSHI', 'RENFIL', 'RAI', 'AMPL', 'USDP', 'DPI', 'FRAX', 'FEI', 'stETH', 'ENS', 'UST', 'CVX', '1INCH', 'LUSD'];
|
|
8
8
|
export const morphoAaveV2AssetDefaultMarket = ['DAI', 'ETH', 'USDC', 'USDT', 'WBTC', 'stETH', 'CRV'];
|
|
9
9
|
export const morphoAaveV3AssetEthMarket = ['ETH', 'wstETH', 'DAI', 'USDC', 'WBTC', 'rETH', 'cbETH', 'sDAI', 'USDT'];
|
|
10
|
-
export const aaveV3AssetsDefaultMarketEth = ['ETH', 'wstETH', 'WBTC', 'USDC', 'DAI', 'LINK', 'AAVE', 'cbETH', 'USDT', 'rETH', 'LUSD', 'CRV', 'MKR', 'SNX', 'BAL', 'UNI', 'LDO', 'ENS', '1INCH', 'FRAX', 'GHO', 'RPL', 'sDAI', 'STG', 'KNC', 'FXS', 'crvUSD', 'PYUSD', 'weETH', 'osETH', 'USDe', 'ETHx', 'sUSDe', 'tBTC', 'cbBTC', 'USDS', 'rsETH'];
|
|
10
|
+
export const aaveV3AssetsDefaultMarketEth = ['ETH', 'wstETH', 'WBTC', 'USDC', 'DAI', 'LINK', 'AAVE', 'cbETH', 'USDT', 'rETH', 'LUSD', 'CRV', 'MKR', 'SNX', 'BAL', 'UNI', 'LDO', 'ENS', '1INCH', 'FRAX', 'GHO', 'RPL', 'sDAI', 'STG', 'KNC', 'FXS', 'crvUSD', 'PYUSD', 'weETH', 'osETH', 'USDe', 'ETHx', 'sUSDe', 'tBTC', 'cbBTC', 'USDS', 'rsETH', 'LBTC'];
|
|
11
11
|
export const aaveV3AssetsDefaultMarketOpt = [
|
|
12
12
|
'DAI', 'USDC.e', 'USDT', 'SUSD', 'AAVE', 'LINK', 'WBTC', 'ETH', 'OP', 'wstETH', 'LUSD', 'MAI', 'rETH', 'USDC',
|
|
13
13
|
];
|