@defisaver/positions-sdk 1.0.11-dev → 1.0.11-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/.mocharc.json +4 -4
- package/.nvmrc +1 -1
- package/README.md +69 -69
- package/cjs/config/contracts.d.ts +113 -49
- package/cjs/config/contracts.js +10 -2
- package/cjs/contracts.d.ts +1 -0
- package/cjs/contracts.js +2 -1
- package/cjs/fluid/index.d.ts +2 -0
- package/cjs/fluid/index.js +636 -13
- package/cjs/helpers/fluidHelpers/index.d.ts +59 -2
- package/cjs/helpers/fluidHelpers/index.js +142 -4
- package/cjs/helpers/morphoBlueHelpers/index.js +66 -66
- package/cjs/markets/fluid/index.js +276 -245
- package/cjs/services/priceService.d.ts +23 -0
- package/cjs/services/priceService.js +44 -5
- package/cjs/types/contracts/generated/FluidView.d.ts +220 -3
- package/cjs/types/contracts/generated/WeETHPriceFeed.d.ts +135 -0
- package/cjs/types/contracts/generated/WeETHPriceFeed.js +5 -0
- package/cjs/types/contracts/generated/index.d.ts +1 -0
- package/cjs/types/fluid.d.ts +39 -10
- package/esm/config/contracts.d.ts +113 -49
- package/esm/config/contracts.js +10 -2
- package/esm/contracts.d.ts +1 -0
- package/esm/contracts.js +1 -0
- package/esm/fluid/index.d.ts +2 -0
- package/esm/fluid/index.js +639 -16
- package/esm/helpers/fluidHelpers/index.d.ts +59 -2
- package/esm/helpers/fluidHelpers/index.js +137 -3
- package/esm/helpers/morphoBlueHelpers/index.js +66 -66
- package/esm/markets/fluid/index.js +276 -245
- package/esm/services/priceService.d.ts +23 -0
- package/esm/services/priceService.js +40 -5
- package/esm/types/contracts/generated/FluidView.d.ts +220 -3
- package/esm/types/contracts/generated/WeETHPriceFeed.d.ts +135 -0
- package/esm/types/contracts/generated/WeETHPriceFeed.js +4 -0
- package/esm/types/contracts/generated/index.d.ts +1 -0
- package/esm/types/fluid.d.ts +39 -10
- package/package.json +54 -54
- package/src/aaveV2/index.ts +227 -227
- package/src/aaveV3/index.ts +624 -624
- package/src/assets/index.ts +60 -60
- package/src/chickenBonds/index.ts +123 -123
- package/src/compoundV2/index.ts +220 -220
- package/src/compoundV3/index.ts +291 -291
- package/src/config/contracts.js +1155 -1147
- package/src/constants/index.ts +6 -6
- package/src/contracts.ts +135 -134
- package/src/curveUsd/index.ts +239 -239
- package/src/eulerV2/index.ts +303 -303
- package/src/exchange/index.ts +17 -17
- package/src/fluid/index.ts +1216 -354
- package/src/helpers/aaveHelpers/index.ts +203 -203
- package/src/helpers/chickenBondsHelpers/index.ts +23 -23
- package/src/helpers/compoundHelpers/index.ts +248 -248
- package/src/helpers/curveUsdHelpers/index.ts +40 -40
- package/src/helpers/eulerHelpers/index.ts +234 -234
- package/src/helpers/fluidHelpers/index.ts +295 -57
- package/src/helpers/index.ts +11 -11
- package/src/helpers/liquityV2Helpers/index.ts +80 -80
- package/src/helpers/llamaLendHelpers/index.ts +53 -53
- package/src/helpers/makerHelpers/index.ts +94 -94
- package/src/helpers/morphoBlueHelpers/index.ts +367 -367
- package/src/helpers/sparkHelpers/index.ts +154 -154
- package/src/index.ts +52 -52
- package/src/liquity/index.ts +116 -116
- package/src/liquityV2/index.ts +295 -295
- package/src/llamaLend/index.ts +275 -275
- package/src/maker/index.ts +117 -117
- package/src/markets/aave/index.ts +152 -152
- package/src/markets/aave/marketAssets.ts +46 -46
- package/src/markets/compound/index.ts +213 -213
- package/src/markets/compound/marketsAssets.ts +82 -82
- package/src/markets/curveUsd/index.ts +69 -69
- package/src/markets/euler/index.ts +26 -26
- package/src/markets/fluid/index.ts +2043 -2012
- package/src/markets/index.ts +27 -27
- package/src/markets/liquityV2/index.ts +54 -54
- package/src/markets/llamaLend/contractAddresses.ts +141 -141
- package/src/markets/llamaLend/index.ts +235 -235
- package/src/markets/morphoBlue/index.ts +895 -895
- package/src/markets/spark/index.ts +29 -29
- package/src/markets/spark/marketAssets.ts +10 -10
- package/src/moneymarket/moneymarketCommonService.ts +80 -80
- package/src/morphoAaveV2/index.ts +256 -256
- package/src/morphoAaveV3/index.ts +630 -630
- package/src/morphoBlue/index.ts +202 -202
- package/src/multicall/index.ts +33 -33
- package/src/services/priceService.ts +130 -91
- package/src/services/utils.ts +59 -59
- package/src/setup.ts +8 -8
- package/src/spark/index.ts +460 -460
- package/src/staking/staking.ts +217 -217
- package/src/types/aave.ts +275 -275
- package/src/types/chickenBonds.ts +45 -45
- package/src/types/common.ts +84 -84
- package/src/types/compound.ts +133 -133
- package/src/types/contracts/generated/FluidView.ts +263 -2
- package/src/types/contracts/generated/WeETHPriceFeed.ts +202 -0
- package/src/types/contracts/generated/index.ts +1 -0
- package/src/types/curveUsd.ts +119 -119
- package/src/types/euler.ts +173 -173
- package/src/types/fluid.ts +299 -268
- package/src/types/index.ts +11 -11
- package/src/types/liquity.ts +30 -30
- package/src/types/liquityV2.ts +119 -119
- package/src/types/llamaLend.ts +155 -155
- package/src/types/maker.ts +50 -50
- package/src/types/morphoBlue.ts +194 -194
- package/src/types/spark.ts +135 -135
package/cjs/fluid/index.js
CHANGED
|
@@ -44,19 +44,67 @@ const parseVaultType = (vaultType) => {
|
|
|
44
44
|
default: return types_1.FluidVaultType.Unknown;
|
|
45
45
|
}
|
|
46
46
|
};
|
|
47
|
-
const
|
|
48
|
-
const collAsset = (0, tokens_1.getAssetInfoByAddress)(data.supplyToken0, network);
|
|
49
|
-
const debtAsset = (0, tokens_1.getAssetInfoByAddress)(data.borrowToken0, network);
|
|
50
|
-
const supplyRate = new decimal_js_1.default(data.supplyRateVault).div(100).toString();
|
|
51
|
-
const borrowRate = new decimal_js_1.default(data.borrowRateVault).div(100).toString();
|
|
52
|
-
const oracleScaleFactor = new decimal_js_1.default(27).add(debtAsset.decimals).sub(collAsset.decimals).toString();
|
|
53
|
-
const oracleScale = new decimal_js_1.default(10).pow(oracleScaleFactor).toString();
|
|
54
|
-
const oraclePrice = new decimal_js_1.default(data.oraclePriceOperate).div(oracleScale).toString();
|
|
55
|
-
const isTokenUSDA = debtAsset.symbol === 'USDA';
|
|
47
|
+
const getChainLinkPricesForTokens = (tokens, network, web3) => __awaiter(void 0, void 0, void 0, function* () {
|
|
56
48
|
const isMainnet = (0, utils_1.isMainnetNetwork)(network);
|
|
57
|
-
const
|
|
49
|
+
const noDuplicateTokens = new Array(...new Set(tokens));
|
|
50
|
+
const calls = noDuplicateTokens.flatMap((address) => {
|
|
51
|
+
const assetInfo = (0, tokens_1.getAssetInfoByAddress)(address, network);
|
|
52
|
+
const isTokenUSDA = assetInfo.symbol === 'USDA';
|
|
53
|
+
if (isTokenUSDA)
|
|
54
|
+
return;
|
|
55
|
+
const chainLinkFeedAddress = (0, priceService_1.getChainlinkAssetAddress)(assetInfo.symbol, network);
|
|
56
|
+
if (assetInfo.symbol === 'wstETH')
|
|
57
|
+
return (0, priceService_1.getWstETHChainLinkPriceCalls)(web3, network);
|
|
58
|
+
if (assetInfo.symbol === 'weETH')
|
|
59
|
+
return (0, priceService_1.getWeETHChainLinkPriceCalls)(web3, network);
|
|
60
|
+
if (isMainnet) {
|
|
61
|
+
const feedRegistryContract = (0, contracts_1.FeedRegistryContract)(web3, common_1.NetworkNumber.Eth);
|
|
62
|
+
return ({
|
|
63
|
+
target: feedRegistryContract.options.address,
|
|
64
|
+
abiItem: feedRegistryContract.options.jsonInterface.find(({ name }) => name === 'latestAnswer'),
|
|
65
|
+
params: [chainLinkFeedAddress, constants_1.USD_QUOTE],
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
const feedRegistryContract = (0, contracts_1.DFSFeedRegistryContract)(web3, network);
|
|
69
|
+
return ({
|
|
70
|
+
target: feedRegistryContract.options.address,
|
|
71
|
+
abiItem: feedRegistryContract.options.jsonInterface.find(({ name }) => name === 'latestRoundData'),
|
|
72
|
+
params: [chainLinkFeedAddress, constants_1.USD_QUOTE],
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
const prices = yield (0, multicall_1.chunkAndMulticall)(calls, 10, 'latest', web3, network);
|
|
76
|
+
let offset = 0; // wstETH has 3 calls, while others have only 1, so we need to keep track
|
|
77
|
+
return noDuplicateTokens.reduce((acc, token, i) => {
|
|
78
|
+
const assetInfo = (0, tokens_1.getAssetInfoByAddress)(token, network);
|
|
79
|
+
switch (assetInfo.symbol) {
|
|
80
|
+
case 'USDA':
|
|
81
|
+
acc[token] = '100000000';
|
|
82
|
+
break;
|
|
83
|
+
case 'wstETH': {
|
|
84
|
+
const { ethPrice, wstETHRate, } = (0, priceService_1.parseWstETHPriceCalls)(prices[i + offset][0], prices[i + offset + 1], prices[i + offset + 2][0]);
|
|
85
|
+
offset += 2;
|
|
86
|
+
acc[token] = new decimal_js_1.default(ethPrice).mul(wstETHRate).toString();
|
|
87
|
+
break;
|
|
88
|
+
}
|
|
89
|
+
case 'weETH': {
|
|
90
|
+
const { ethPrice, weETHRate, } = (0, priceService_1.parseWeETHPriceCalls)(prices[i + offset][0], prices[i + offset + 1], prices[i + offset + 2][0]);
|
|
91
|
+
offset += 2;
|
|
92
|
+
acc[token] = new decimal_js_1.default(ethPrice).mul(weETHRate).toString();
|
|
93
|
+
break;
|
|
94
|
+
}
|
|
95
|
+
default:
|
|
96
|
+
acc[token] = new decimal_js_1.default(prices[i + offset].answer).div(1e8).toString();
|
|
97
|
+
break;
|
|
98
|
+
}
|
|
99
|
+
return acc;
|
|
100
|
+
}, {});
|
|
101
|
+
});
|
|
102
|
+
const getTokenPriceFromChainlink = (asset, network, web3) => __awaiter(void 0, void 0, void 0, function* () {
|
|
103
|
+
const isTokenUSDA = asset.symbol === 'USDA';
|
|
104
|
+
const isMainnet = (0, utils_1.isMainnetNetwork)(network);
|
|
105
|
+
const loanTokenFeedAddress = (0, priceService_1.getChainlinkAssetAddress)(asset.symbol, network);
|
|
58
106
|
let loanTokenPrice;
|
|
59
|
-
if (
|
|
107
|
+
if (asset.symbol === 'wstETH') {
|
|
60
108
|
// need to handle wstETH for l2s inside getWstETHPrice
|
|
61
109
|
loanTokenPrice = yield (0, priceService_1.getWstETHPriceFluid)(web3, network);
|
|
62
110
|
}
|
|
@@ -70,7 +118,17 @@ const parseMarketData = (web3, data, network, mainnetWeb3) => __awaiter(void 0,
|
|
|
70
118
|
const roundPriceData = isTokenUSDA ? { answer: '100000000' } : yield feedRegistryContract.methods.latestRoundData(loanTokenFeedAddress, constants_1.USD_QUOTE).call();
|
|
71
119
|
loanTokenPrice = roundPriceData.answer;
|
|
72
120
|
}
|
|
73
|
-
|
|
121
|
+
return new decimal_js_1.default(loanTokenPrice).div(1e8).toString();
|
|
122
|
+
});
|
|
123
|
+
const parseT1MarketData = (web3, data, network, mainnetWeb3) => __awaiter(void 0, void 0, void 0, function* () {
|
|
124
|
+
const collAsset = (0, tokens_1.getAssetInfoByAddress)(data.supplyToken0, network);
|
|
125
|
+
const debtAsset = (0, tokens_1.getAssetInfoByAddress)(data.borrowToken0, network);
|
|
126
|
+
const supplyRate = new decimal_js_1.default(data.supplyRateVault).div(100).toString();
|
|
127
|
+
const borrowRate = new decimal_js_1.default(data.borrowRateVault).div(100).toString();
|
|
128
|
+
const oracleScaleFactor = new decimal_js_1.default(27).add(debtAsset.decimals).sub(collAsset.decimals).toString();
|
|
129
|
+
const oracleScale = new decimal_js_1.default(10).pow(oracleScaleFactor).toString();
|
|
130
|
+
const oraclePrice = new decimal_js_1.default(data.oraclePriceOperate).div(oracleScale).toString();
|
|
131
|
+
const debtPriceParsed = yield getTokenPriceFromChainlink(debtAsset, network, web3);
|
|
74
132
|
const collAssetData = {
|
|
75
133
|
symbol: collAsset.symbol,
|
|
76
134
|
address: collAsset.address,
|
|
@@ -101,6 +159,10 @@ const parseMarketData = (web3, data, network, mainnetWeb3) => __awaiter(void 0,
|
|
|
101
159
|
debtAssetData.incentiveBorrowApy = yield (0, staking_1.getStakingApy)(debtAsset.symbol, mainnetWeb3);
|
|
102
160
|
debtAssetData.incentiveBorrowToken = debtAsset.symbol;
|
|
103
161
|
}
|
|
162
|
+
if (staking_1.STAKING_ASSETS.includes(debtAssetData.symbol)) {
|
|
163
|
+
debtAssetData.incentiveBorrowApy = yield (0, staking_1.getStakingApy)(debtAsset.symbol, mainnetWeb3);
|
|
164
|
+
debtAssetData.incentiveBorrowToken = debtAsset.symbol;
|
|
165
|
+
}
|
|
104
166
|
const assetsData = {
|
|
105
167
|
[collAsset.symbol]: collAssetData,
|
|
106
168
|
[debtAsset.symbol]: debtAssetData,
|
|
@@ -150,6 +212,398 @@ const parseMarketData = (web3, data, network, mainnetWeb3) => __awaiter(void 0,
|
|
|
150
212
|
marketData,
|
|
151
213
|
};
|
|
152
214
|
});
|
|
215
|
+
const parseT2MarketData = (web3, data, network, mainnetWeb3) => __awaiter(void 0, void 0, void 0, function* () {
|
|
216
|
+
const collAsset0 = (0, tokens_1.getAssetInfoByAddress)(data.supplyToken0, network);
|
|
217
|
+
const collAsset1 = (0, tokens_1.getAssetInfoByAddress)(data.supplyToken1, network);
|
|
218
|
+
const debtAsset = (0, tokens_1.getAssetInfoByAddress)(data.borrowToken0, network);
|
|
219
|
+
// 18 because collateral is represented in shares for which they use 18 decimals
|
|
220
|
+
const oracleScaleFactor = new decimal_js_1.default(27).add(debtAsset.decimals).sub(18).toString();
|
|
221
|
+
const oracleScale = new decimal_js_1.default(10).pow(oracleScaleFactor).toString();
|
|
222
|
+
const oraclePrice = new decimal_js_1.default(data.oraclePriceOperate).div(oracleScale).toString();
|
|
223
|
+
const prices = yield getChainLinkPricesForTokens([collAsset0.address, collAsset1.address, debtAsset.address], network, web3);
|
|
224
|
+
const { supplyDexFee, totalSupplyShares, supplyRate1, totalSupplyToken1, token0PerSupplyShare, token1PerSupplyShare, totalSupplyToken0, maxSupplyShares, withdrawableToken0, withdrawable0, withdrawableToken1, withdrawable1, supplyRate0, utilizationSupply0, utilizationSupply1, withdrawableShares, reservesSupplyToken0, reservesSupplyToken1, } = (0, fluidHelpers_1.parseDexSupplyData)(data.dexSupplyData, collAsset0.symbol, collAsset1.symbol);
|
|
225
|
+
const collFirstAssetData = {
|
|
226
|
+
symbol: collAsset0.symbol,
|
|
227
|
+
address: collAsset0.address,
|
|
228
|
+
price: prices[collAsset0.address],
|
|
229
|
+
totalSupply: new decimal_js_1.default(totalSupplyShares).mul(token0PerSupplyShare).toString(),
|
|
230
|
+
canBeSupplied: true,
|
|
231
|
+
supplyRate: supplyRate0,
|
|
232
|
+
utilization: utilizationSupply0,
|
|
233
|
+
withdrawable: withdrawable0,
|
|
234
|
+
tokenPerSupplyShare: token0PerSupplyShare,
|
|
235
|
+
supplyReserves: reservesSupplyToken0,
|
|
236
|
+
};
|
|
237
|
+
if (staking_1.STAKING_ASSETS.includes(collFirstAssetData.symbol)) {
|
|
238
|
+
collFirstAssetData.incentiveSupplyApy = yield (0, staking_1.getStakingApy)(collAsset0.symbol, mainnetWeb3);
|
|
239
|
+
collFirstAssetData.incentiveSupplyToken = collAsset0.symbol;
|
|
240
|
+
}
|
|
241
|
+
const collSecondAssetData = {
|
|
242
|
+
symbol: collAsset1.symbol,
|
|
243
|
+
address: collAsset1.address,
|
|
244
|
+
price: prices[collAsset1.address],
|
|
245
|
+
totalSupply: new decimal_js_1.default(totalSupplyShares).mul(token1PerSupplyShare).toString(),
|
|
246
|
+
canBeSupplied: true,
|
|
247
|
+
supplyRate: supplyRate1,
|
|
248
|
+
withdrawable: withdrawable1,
|
|
249
|
+
utilization: utilizationSupply1,
|
|
250
|
+
tokenPerSupplyShare: token1PerSupplyShare,
|
|
251
|
+
supplyReserves: reservesSupplyToken1,
|
|
252
|
+
};
|
|
253
|
+
if (staking_1.STAKING_ASSETS.includes(collFirstAssetData.symbol)) {
|
|
254
|
+
collFirstAssetData.incentiveSupplyApy = yield (0, staking_1.getStakingApy)(collAsset1.symbol, mainnetWeb3);
|
|
255
|
+
collFirstAssetData.incentiveSupplyToken = collAsset1.symbol;
|
|
256
|
+
}
|
|
257
|
+
const borrowRate = new decimal_js_1.default(data.borrowRateVault).div(100).toString();
|
|
258
|
+
const debtAssetData = {
|
|
259
|
+
symbol: debtAsset.symbol,
|
|
260
|
+
address: debtAsset.address,
|
|
261
|
+
price: prices[debtAsset.address],
|
|
262
|
+
totalBorrow: data.totalBorrowVault,
|
|
263
|
+
canBeBorrowed: true,
|
|
264
|
+
borrowRate,
|
|
265
|
+
};
|
|
266
|
+
if (staking_1.STAKING_ASSETS.includes(debtAssetData.symbol)) {
|
|
267
|
+
debtAssetData.incentiveBorrowApy = yield (0, staking_1.getStakingApy)(debtAsset.symbol, mainnetWeb3);
|
|
268
|
+
debtAssetData.incentiveBorrowToken = debtAsset.symbol;
|
|
269
|
+
}
|
|
270
|
+
const assetsData = [
|
|
271
|
+
[collAsset0.symbol, collFirstAssetData],
|
|
272
|
+
[collAsset1.symbol, collSecondAssetData],
|
|
273
|
+
[debtAsset.symbol, debtAssetData],
|
|
274
|
+
]
|
|
275
|
+
.reduce((acc, [symbol, partialData]) => (Object.assign(Object.assign({}, acc), { [symbol]: (0, fluidHelpers_1.mergeAssetData)(acc[symbol], partialData) })), {});
|
|
276
|
+
const marketInfo = (0, markets_1.getFluidMarketInfoById)(+data.vaultId, network);
|
|
277
|
+
const totalBorrowVault = (0, utils_1.getEthAmountForDecimals)(data.totalBorrowVault, debtAsset.decimals);
|
|
278
|
+
const liqRatio = new decimal_js_1.default(data.liquidationThreshold).div(100).toString();
|
|
279
|
+
const liquidationMaxLimit = new decimal_js_1.default(data.liquidationMaxLimit).div(100).toString();
|
|
280
|
+
const liqFactor = new decimal_js_1.default(data.liquidationThreshold).div(10000).toString();
|
|
281
|
+
const totalSupplySharesInVault = (0, tokens_1.assetAmountInEth)(data.totalSupplyVault);
|
|
282
|
+
const collSharePrice = new decimal_js_1.default(oraclePrice).mul(prices[debtAsset.address]).toString();
|
|
283
|
+
const totalSupplyVaultUsd = new decimal_js_1.default(totalSupplySharesInVault).mul(collSharePrice).toString();
|
|
284
|
+
const withdrawableUSD = new decimal_js_1.default(withdrawableShares).mul(collSharePrice).toString();
|
|
285
|
+
const marketData = {
|
|
286
|
+
vaultId: +data.vaultId,
|
|
287
|
+
vaultValue: marketInfo === null || marketInfo === void 0 ? void 0 : marketInfo.value,
|
|
288
|
+
isSmartColl: data.isSmartColl,
|
|
289
|
+
isSmartDebt: data.isSmartDebt,
|
|
290
|
+
marketAddress: data.vault,
|
|
291
|
+
vaultType: parseVaultType(+data.vaultType),
|
|
292
|
+
oracle: data.oracle,
|
|
293
|
+
liquidationPenaltyPercent: new decimal_js_1.default(data.liquidationPenalty).div(100).toString(),
|
|
294
|
+
collFactor: new decimal_js_1.default(data.collateralFactor).div(10000).toString(),
|
|
295
|
+
liquidationRatio: liqRatio,
|
|
296
|
+
liqFactor,
|
|
297
|
+
minRatio: new decimal_js_1.default(1).div(liqFactor).mul(100).toString(),
|
|
298
|
+
collAsset0: collAsset0.symbol,
|
|
299
|
+
collAsset1: collAsset1.symbol,
|
|
300
|
+
debtAsset0: debtAsset.symbol,
|
|
301
|
+
totalPositions: data.totalPositions,
|
|
302
|
+
totalSupplyVault: totalSupplyShares,
|
|
303
|
+
totalBorrowVault,
|
|
304
|
+
totalSupplyVaultUsd,
|
|
305
|
+
collSharePrice,
|
|
306
|
+
totalBorrowVaultUsd: new decimal_js_1.default(totalBorrowVault).mul(assetsData[debtAsset.symbol].price).toString(),
|
|
307
|
+
borrowLimit: (0, utils_1.getEthAmountForDecimals)(data.borrowLimit, debtAsset.decimals),
|
|
308
|
+
borrowableUntilLimit: (0, utils_1.getEthAmountForDecimals)(data.borrowableUntilLimit, debtAsset.decimals),
|
|
309
|
+
borrowable: (0, utils_1.getEthAmountForDecimals)(data.borrowable, debtAsset.decimals),
|
|
310
|
+
borrowLimitUtilization: (0, utils_1.getEthAmountForDecimals)(data.borrowLimitUtilization, debtAsset.decimals),
|
|
311
|
+
maxBorrowLimit: (0, utils_1.getEthAmountForDecimals)(data.maxBorrowLimit, debtAsset.decimals),
|
|
312
|
+
baseBorrowLimit: (0, utils_1.getEthAmountForDecimals)(data.baseBorrowLimit, debtAsset.decimals),
|
|
313
|
+
minimumBorrowing: (0, utils_1.getEthAmountForDecimals)(data.minimumBorrowing, debtAsset.decimals),
|
|
314
|
+
liquidationMaxLimit,
|
|
315
|
+
borrowRate,
|
|
316
|
+
supplyRate: '0',
|
|
317
|
+
totalSupplyToken0,
|
|
318
|
+
totalSupplyToken1,
|
|
319
|
+
withdrawableToken0,
|
|
320
|
+
withdrawableToken1,
|
|
321
|
+
withdrawableUSD,
|
|
322
|
+
withdrawable: withdrawableShares,
|
|
323
|
+
widthdrawableDex: new decimal_js_1.default(maxSupplyShares).minus(totalSupplyShares).toString(),
|
|
324
|
+
maxSupplyShares,
|
|
325
|
+
collDexFee: supplyDexFee,
|
|
326
|
+
};
|
|
327
|
+
return {
|
|
328
|
+
assetsData,
|
|
329
|
+
marketData,
|
|
330
|
+
};
|
|
331
|
+
});
|
|
332
|
+
const parseT3MarketData = (web3, data, network, mainnetWeb3) => __awaiter(void 0, void 0, void 0, function* () {
|
|
333
|
+
const collAsset = (0, tokens_1.getAssetInfoByAddress)(data.supplyToken0, network);
|
|
334
|
+
const debtAsset0 = (0, tokens_1.getAssetInfoByAddress)(data.borrowToken0, network);
|
|
335
|
+
const debtAsset1 = (0, tokens_1.getAssetInfoByAddress)(data.borrowToken1, network);
|
|
336
|
+
const { borrowableShares, maxBorrowShares, borrowDexFee, utilizationBorrow0, utilizationBorrow1, borrowable0, borrowable1, borrowRate0, borrowRate1, totalBorrowShares, token0PerBorrowShare, token1PerBorrowShare, borrowableToken0, borrowableToken1, totalBorrowToken0, totalBorrowToken1, reservesBorrowToken0, reservesBorrowToken1, } = (0, fluidHelpers_1.parseDexBorrowData)(data.dexBorrowData, debtAsset0.symbol, debtAsset1.symbol);
|
|
337
|
+
// 18 because debt is represented in shares for which they use 18 decimals
|
|
338
|
+
const oracleScaleFactor = new decimal_js_1.default(27).add(18).sub(collAsset.decimals).toString();
|
|
339
|
+
const oracleScale = new decimal_js_1.default(10).pow(oracleScaleFactor).toString();
|
|
340
|
+
const oraclePrice = new decimal_js_1.default(1).div(new decimal_js_1.default(data.oraclePriceOperate).div(oracleScale)).toString();
|
|
341
|
+
const prices = yield getChainLinkPricesForTokens([collAsset.address, debtAsset0.address, debtAsset1.address], network, web3);
|
|
342
|
+
const supplyRate = new decimal_js_1.default(data.supplyRateVault).div(100).toString();
|
|
343
|
+
const collAssetData = {
|
|
344
|
+
symbol: collAsset.symbol,
|
|
345
|
+
address: collAsset.address,
|
|
346
|
+
price: prices[collAsset.address],
|
|
347
|
+
totalSupply: data.totalSupplyVault,
|
|
348
|
+
canBeSupplied: true,
|
|
349
|
+
supplyRate,
|
|
350
|
+
};
|
|
351
|
+
if (staking_1.STAKING_ASSETS.includes(collAssetData.symbol)) {
|
|
352
|
+
collAssetData.incentiveSupplyApy = yield (0, staking_1.getStakingApy)(collAsset.symbol, mainnetWeb3);
|
|
353
|
+
collAssetData.incentiveSupplyToken = collAsset.symbol;
|
|
354
|
+
}
|
|
355
|
+
const debtAsset0Data = {
|
|
356
|
+
symbol: debtAsset0.symbol,
|
|
357
|
+
address: debtAsset0.address,
|
|
358
|
+
price: prices[debtAsset0.address],
|
|
359
|
+
totalBorrow: new decimal_js_1.default(totalBorrowShares).mul(token0PerBorrowShare).toString(),
|
|
360
|
+
canBeBorrowed: true,
|
|
361
|
+
borrowRate: borrowRate0,
|
|
362
|
+
borrowable: borrowable0,
|
|
363
|
+
utilization: utilizationBorrow0,
|
|
364
|
+
tokenPerBorrowShare: token0PerBorrowShare,
|
|
365
|
+
borrowReserves: reservesBorrowToken0,
|
|
366
|
+
};
|
|
367
|
+
if (staking_1.STAKING_ASSETS.includes(debtAsset0Data.symbol)) {
|
|
368
|
+
debtAsset0Data.incentiveSupplyApy = yield (0, staking_1.getStakingApy)(debtAsset0.symbol, mainnetWeb3);
|
|
369
|
+
debtAsset0Data.incentiveSupplyToken = debtAsset0.symbol;
|
|
370
|
+
}
|
|
371
|
+
const debtAsset1Data = {
|
|
372
|
+
symbol: debtAsset1.symbol,
|
|
373
|
+
address: debtAsset1.address,
|
|
374
|
+
price: prices[debtAsset1.address],
|
|
375
|
+
totalBorrow: new decimal_js_1.default(totalBorrowShares).mul(token1PerBorrowShare).toString(),
|
|
376
|
+
canBeBorrowed: true,
|
|
377
|
+
borrowRate: borrowRate1,
|
|
378
|
+
borrowable: borrowable1,
|
|
379
|
+
utilization: utilizationBorrow1,
|
|
380
|
+
tokenPerBorrowShare: token1PerBorrowShare,
|
|
381
|
+
borrowReserves: reservesBorrowToken1,
|
|
382
|
+
};
|
|
383
|
+
if (staking_1.STAKING_ASSETS.includes(debtAsset1Data.symbol)) {
|
|
384
|
+
debtAsset1Data.incentiveSupplyApy = yield (0, staking_1.getStakingApy)(debtAsset1.symbol, mainnetWeb3);
|
|
385
|
+
debtAsset1Data.incentiveSupplyToken = debtAsset1.symbol;
|
|
386
|
+
}
|
|
387
|
+
const assetsData = [
|
|
388
|
+
[collAsset.symbol, collAssetData],
|
|
389
|
+
[debtAsset0.symbol, debtAsset0Data],
|
|
390
|
+
[debtAsset1.symbol, debtAsset1Data],
|
|
391
|
+
]
|
|
392
|
+
.reduce((acc, [symbol, partialData]) => (Object.assign(Object.assign({}, acc), { [symbol]: (0, fluidHelpers_1.mergeAssetData)(acc[symbol], partialData) })), {});
|
|
393
|
+
const marketInfo = (0, markets_1.getFluidMarketInfoById)(+data.vaultId, network);
|
|
394
|
+
const totalSupplyVault = (0, utils_1.getEthAmountForDecimals)(data.totalSupplyVault, collAsset.decimals);
|
|
395
|
+
const liqRatio = new decimal_js_1.default(data.liquidationThreshold).div(100).toString();
|
|
396
|
+
const liquidationMaxLimit = new decimal_js_1.default(data.liquidationMaxLimit).div(100).toString();
|
|
397
|
+
const liqFactor = new decimal_js_1.default(data.liquidationThreshold).div(10000).toString();
|
|
398
|
+
const debtSharePrice = new decimal_js_1.default(oraclePrice).mul(prices[collAsset.address]).toString();
|
|
399
|
+
const totalBorrowSharesInVault = (0, tokens_1.assetAmountInEth)(data.totalBorrowVault);
|
|
400
|
+
const totalBorrowVaultUsd = new decimal_js_1.default(totalBorrowSharesInVault).mul(debtSharePrice).toString();
|
|
401
|
+
const borrowableUSD = new decimal_js_1.default(borrowableShares).mul(debtSharePrice).toString();
|
|
402
|
+
const marketData = {
|
|
403
|
+
vaultId: +data.vaultId,
|
|
404
|
+
vaultValue: marketInfo === null || marketInfo === void 0 ? void 0 : marketInfo.value,
|
|
405
|
+
isSmartColl: data.isSmartColl,
|
|
406
|
+
isSmartDebt: data.isSmartDebt,
|
|
407
|
+
marketAddress: data.vault,
|
|
408
|
+
vaultType: parseVaultType(+data.vaultType),
|
|
409
|
+
oracle: data.oracle,
|
|
410
|
+
liquidationPenaltyPercent: new decimal_js_1.default(data.liquidationPenalty).div(100).toString(),
|
|
411
|
+
collFactor: new decimal_js_1.default(data.collateralFactor).div(10000).toString(),
|
|
412
|
+
liquidationRatio: liqRatio,
|
|
413
|
+
liqFactor,
|
|
414
|
+
minRatio: new decimal_js_1.default(1).div(liqFactor).mul(100).toString(),
|
|
415
|
+
collAsset0: collAsset.symbol,
|
|
416
|
+
debtAsset0: debtAsset0.symbol,
|
|
417
|
+
debtAsset1: debtAsset1.symbol,
|
|
418
|
+
totalPositions: data.totalPositions,
|
|
419
|
+
totalSupplyVault,
|
|
420
|
+
totalBorrowVault: totalBorrowShares,
|
|
421
|
+
totalSupplyVaultUsd: new decimal_js_1.default(totalSupplyVault).mul(assetsData[collAsset.symbol].price).toString(),
|
|
422
|
+
totalBorrowVaultUsd,
|
|
423
|
+
withdrawalLimit: (0, utils_1.getEthAmountForDecimals)(data.withdrawalLimit, collAsset.decimals),
|
|
424
|
+
withdrawableUntilLimit: (0, utils_1.getEthAmountForDecimals)(data.withdrawableUntilLimit, collAsset.decimals),
|
|
425
|
+
withdrawable: (0, utils_1.getEthAmountForDecimals)(data.withdrawable, collAsset.decimals),
|
|
426
|
+
liquidationMaxLimit,
|
|
427
|
+
borrowRate: '0',
|
|
428
|
+
supplyRate,
|
|
429
|
+
borrowableToken0,
|
|
430
|
+
borrowableToken1,
|
|
431
|
+
totalBorrowToken0,
|
|
432
|
+
totalBorrowToken1,
|
|
433
|
+
borrowableUSD,
|
|
434
|
+
borrowable: borrowableShares,
|
|
435
|
+
borrowableDex: new decimal_js_1.default(maxBorrowShares).minus(totalBorrowShares).toString(),
|
|
436
|
+
maxBorrowShares,
|
|
437
|
+
borrowDexFee,
|
|
438
|
+
debtSharePrice,
|
|
439
|
+
};
|
|
440
|
+
return {
|
|
441
|
+
assetsData,
|
|
442
|
+
marketData,
|
|
443
|
+
};
|
|
444
|
+
});
|
|
445
|
+
const parseT4MarketData = (web3, data, network, mainnetWeb3) => __awaiter(void 0, void 0, void 0, function* () {
|
|
446
|
+
const collAsset0 = (0, tokens_1.getAssetInfoByAddress)(data.supplyToken0, network);
|
|
447
|
+
const collAsset1 = (0, tokens_1.getAssetInfoByAddress)(data.supplyToken1, network);
|
|
448
|
+
const debtAsset0 = (0, tokens_1.getAssetInfoByAddress)(data.borrowToken0, network);
|
|
449
|
+
const debtAsset1 = (0, tokens_1.getAssetInfoByAddress)(data.borrowToken1, network);
|
|
450
|
+
const quoteToken = (0, tokens_1.getAssetInfoByAddress)(data.dexBorrowData.quoteToken, network);
|
|
451
|
+
// 27 - 18 + 18
|
|
452
|
+
const oracleScaleFactor = new decimal_js_1.default(27).toString();
|
|
453
|
+
const oracleScale = new decimal_js_1.default(10).pow(oracleScaleFactor).toString();
|
|
454
|
+
const oraclePrice = new decimal_js_1.default(data.oraclePriceOperate).div(oracleScale).toString();
|
|
455
|
+
const prices = yield getChainLinkPricesForTokens([collAsset0.address, collAsset1.address, debtAsset0.address, debtAsset1.address], network, web3);
|
|
456
|
+
const { supplyDexFee, totalSupplyShares, supplyRate1, token0PerSupplyShare, token1PerSupplyShare, totalSupplyToken0, totalSupplyToken1, maxSupplyShares, withdrawableToken0, withdrawable0, withdrawableToken1, withdrawable1, supplyRate0, utilizationSupply0, utilizationSupply1, withdrawableShares, reservesSupplyToken0, reservesSupplyToken1, } = (0, fluidHelpers_1.parseDexSupplyData)(data.dexSupplyData, collAsset0.symbol, collAsset1.symbol);
|
|
457
|
+
const { borrowableShares, maxBorrowShares, borrowDexFee, utilizationBorrow0, utilizationBorrow1, borrowable0, borrowable1, borrowRate0, borrowRate1, totalBorrowShares, token0PerBorrowShare, token1PerBorrowShare, borrowableToken0, borrowableToken1, totalBorrowToken0, totalBorrowToken1, quoteTokensPerShare, reservesBorrowToken0, reservesBorrowToken1, } = (0, fluidHelpers_1.parseDexBorrowData)(data.dexBorrowData, debtAsset0.symbol, debtAsset1.symbol);
|
|
458
|
+
const collAsset0Data = {
|
|
459
|
+
symbol: collAsset0.symbol,
|
|
460
|
+
address: collAsset0.address,
|
|
461
|
+
price: prices[collAsset0.address],
|
|
462
|
+
totalSupply: new decimal_js_1.default(totalSupplyShares).mul(token0PerSupplyShare).toString(),
|
|
463
|
+
canBeSupplied: true,
|
|
464
|
+
supplyRate: supplyRate0,
|
|
465
|
+
utilization: utilizationSupply0,
|
|
466
|
+
withdrawable: withdrawable0,
|
|
467
|
+
tokenPerSupplyShare: token0PerSupplyShare,
|
|
468
|
+
supplyReserves: reservesSupplyToken0,
|
|
469
|
+
};
|
|
470
|
+
if (staking_1.STAKING_ASSETS.includes(collAsset0Data.symbol)) {
|
|
471
|
+
collAsset0Data.incentiveSupplyApy = yield (0, staking_1.getStakingApy)(collAsset0.symbol, mainnetWeb3);
|
|
472
|
+
collAsset0Data.incentiveSupplyToken = collAsset0.symbol;
|
|
473
|
+
}
|
|
474
|
+
const collAsset1Data = {
|
|
475
|
+
symbol: collAsset1.symbol,
|
|
476
|
+
address: collAsset1.address,
|
|
477
|
+
price: prices[collAsset1.address],
|
|
478
|
+
totalSupply: new decimal_js_1.default(totalSupplyShares).mul(token1PerSupplyShare).toString(),
|
|
479
|
+
canBeSupplied: true,
|
|
480
|
+
supplyRate: supplyRate1,
|
|
481
|
+
withdrawable: withdrawable1,
|
|
482
|
+
utilization: utilizationSupply1,
|
|
483
|
+
tokenPerSupplyShare: token1PerSupplyShare,
|
|
484
|
+
supplyReserves: reservesSupplyToken1,
|
|
485
|
+
};
|
|
486
|
+
if (staking_1.STAKING_ASSETS.includes(collAsset1Data.symbol)) {
|
|
487
|
+
collAsset1Data.incentiveSupplyApy = yield (0, staking_1.getStakingApy)(collAsset1.symbol, mainnetWeb3);
|
|
488
|
+
collAsset1Data.incentiveSupplyToken = collAsset1.symbol;
|
|
489
|
+
}
|
|
490
|
+
const debtAsset0Data = {
|
|
491
|
+
symbol: debtAsset0.symbol,
|
|
492
|
+
address: debtAsset0.address,
|
|
493
|
+
price: prices[debtAsset0.address],
|
|
494
|
+
totalBorrow: new decimal_js_1.default(totalBorrowShares).mul(token0PerBorrowShare).toString(),
|
|
495
|
+
canBeBorrowed: true,
|
|
496
|
+
borrowRate: borrowRate0,
|
|
497
|
+
borrowable: borrowable0,
|
|
498
|
+
utilization: utilizationBorrow0,
|
|
499
|
+
tokenPerBorrowShare: token0PerBorrowShare,
|
|
500
|
+
borrowReserves: reservesBorrowToken0,
|
|
501
|
+
};
|
|
502
|
+
if (staking_1.STAKING_ASSETS.includes(debtAsset0Data.symbol)) {
|
|
503
|
+
debtAsset0Data.incentiveSupplyApy = yield (0, staking_1.getStakingApy)(debtAsset0.symbol, mainnetWeb3);
|
|
504
|
+
debtAsset0Data.incentiveSupplyToken = debtAsset0.symbol;
|
|
505
|
+
}
|
|
506
|
+
const debtAsset1Data = {
|
|
507
|
+
symbol: debtAsset1.symbol,
|
|
508
|
+
address: debtAsset1.address,
|
|
509
|
+
price: prices[debtAsset1.address],
|
|
510
|
+
totalBorrow: new decimal_js_1.default(totalBorrowShares).mul(token1PerBorrowShare).toString(),
|
|
511
|
+
canBeBorrowed: true,
|
|
512
|
+
borrowRate: borrowRate1,
|
|
513
|
+
borrowable: borrowable1,
|
|
514
|
+
utilization: utilizationBorrow1,
|
|
515
|
+
tokenPerBorrowShare: token1PerBorrowShare,
|
|
516
|
+
borrowReserves: reservesBorrowToken1,
|
|
517
|
+
};
|
|
518
|
+
if (staking_1.STAKING_ASSETS.includes(debtAsset1Data.symbol)) {
|
|
519
|
+
debtAsset1Data.incentiveSupplyApy = yield (0, staking_1.getStakingApy)(debtAsset1.symbol, mainnetWeb3);
|
|
520
|
+
debtAsset1Data.incentiveSupplyToken = debtAsset1.symbol;
|
|
521
|
+
}
|
|
522
|
+
const assetsData = [
|
|
523
|
+
[collAsset0.symbol, collAsset0Data],
|
|
524
|
+
[collAsset1.symbol, collAsset1Data],
|
|
525
|
+
[debtAsset0.symbol, debtAsset0Data],
|
|
526
|
+
[debtAsset1.symbol, debtAsset1Data],
|
|
527
|
+
]
|
|
528
|
+
.reduce((acc, [symbol, partialData]) => (Object.assign(Object.assign({}, acc), { [symbol]: (0, fluidHelpers_1.mergeAssetData)(acc[symbol], partialData) })), {});
|
|
529
|
+
const marketInfo = (0, markets_1.getFluidMarketInfoById)(+data.vaultId, network);
|
|
530
|
+
const liqRatio = new decimal_js_1.default(data.liquidationThreshold).div(100).toString();
|
|
531
|
+
const liquidationMaxLimit = new decimal_js_1.default(data.liquidationMaxLimit).div(100).toString();
|
|
532
|
+
const liqFactor = new decimal_js_1.default(data.liquidationThreshold).div(10000).toString();
|
|
533
|
+
const totalBorrowSharesInVault = (0, tokens_1.assetAmountInEth)(data.totalBorrowVault);
|
|
534
|
+
const debtSharePrice = new decimal_js_1.default(quoteTokensPerShare).mul(prices[quoteToken.address]).toString();
|
|
535
|
+
const totalBorrowVaultUsd = new decimal_js_1.default(totalBorrowSharesInVault).mul(debtSharePrice).toString();
|
|
536
|
+
const borrowableUSD = new decimal_js_1.default(borrowableShares).mul(debtSharePrice).toString();
|
|
537
|
+
const totalSupplySharesInVault = (0, tokens_1.assetAmountInEth)(data.totalSupplyVault);
|
|
538
|
+
const collSharePrice = new decimal_js_1.default(oraclePrice).mul(debtSharePrice).toString();
|
|
539
|
+
const totalSupplyVaultUsd = new decimal_js_1.default(totalSupplySharesInVault).mul(collSharePrice).toString();
|
|
540
|
+
const withdrawableUSD = new decimal_js_1.default(withdrawableShares).mul(collSharePrice).toString();
|
|
541
|
+
const marketData = {
|
|
542
|
+
vaultId: +data.vaultId,
|
|
543
|
+
vaultValue: marketInfo === null || marketInfo === void 0 ? void 0 : marketInfo.value,
|
|
544
|
+
isSmartColl: data.isSmartColl,
|
|
545
|
+
isSmartDebt: data.isSmartDebt,
|
|
546
|
+
marketAddress: data.vault,
|
|
547
|
+
vaultType: parseVaultType(+data.vaultType),
|
|
548
|
+
oracle: data.oracle,
|
|
549
|
+
liquidationPenaltyPercent: new decimal_js_1.default(data.liquidationPenalty).div(100).toString(),
|
|
550
|
+
collFactor: new decimal_js_1.default(data.collateralFactor).div(10000).toString(),
|
|
551
|
+
liquidationRatio: liqRatio,
|
|
552
|
+
liqFactor,
|
|
553
|
+
minRatio: new decimal_js_1.default(1).div(liqFactor).mul(100).toString(),
|
|
554
|
+
collAsset0: collAsset0.symbol,
|
|
555
|
+
collAsset1: collAsset1.symbol,
|
|
556
|
+
debtAsset0: debtAsset0.symbol,
|
|
557
|
+
debtAsset1: debtAsset1.symbol,
|
|
558
|
+
totalPositions: data.totalPositions,
|
|
559
|
+
totalSupplyVault: totalSupplyShares,
|
|
560
|
+
totalBorrowVault: totalBorrowShares,
|
|
561
|
+
totalSupplyVaultUsd,
|
|
562
|
+
totalBorrowVaultUsd,
|
|
563
|
+
liquidationMaxLimit,
|
|
564
|
+
borrowRate: '0',
|
|
565
|
+
supplyRate: '0',
|
|
566
|
+
borrowableToken0,
|
|
567
|
+
borrowableToken1,
|
|
568
|
+
totalBorrowToken0,
|
|
569
|
+
totalBorrowToken1,
|
|
570
|
+
borrowableUSD,
|
|
571
|
+
borrowable: borrowableShares,
|
|
572
|
+
borrowableDex: new decimal_js_1.default(maxBorrowShares).minus(totalBorrowShares).toString(),
|
|
573
|
+
maxBorrowShares,
|
|
574
|
+
borrowDexFee,
|
|
575
|
+
totalSupplyToken0,
|
|
576
|
+
totalSupplyToken1,
|
|
577
|
+
withdrawableToken0,
|
|
578
|
+
withdrawableToken1,
|
|
579
|
+
withdrawableUSD,
|
|
580
|
+
withdrawable: withdrawableShares,
|
|
581
|
+
widthdrawableDex: new decimal_js_1.default(maxSupplyShares).minus(totalSupplyShares).toString(),
|
|
582
|
+
maxSupplyShares,
|
|
583
|
+
collDexFee: supplyDexFee,
|
|
584
|
+
collSharePrice,
|
|
585
|
+
debtSharePrice,
|
|
586
|
+
};
|
|
587
|
+
return {
|
|
588
|
+
assetsData,
|
|
589
|
+
marketData,
|
|
590
|
+
};
|
|
591
|
+
});
|
|
592
|
+
const parseMarketData = (web3, data, network, mainnetWeb3) => __awaiter(void 0, void 0, void 0, function* () {
|
|
593
|
+
const vaultType = parseVaultType(+data.vaultType);
|
|
594
|
+
switch (vaultType) {
|
|
595
|
+
case types_1.FluidVaultType.T1:
|
|
596
|
+
return parseT1MarketData(web3, data, network, mainnetWeb3);
|
|
597
|
+
case types_1.FluidVaultType.T2:
|
|
598
|
+
return parseT2MarketData(web3, data, network, mainnetWeb3);
|
|
599
|
+
case types_1.FluidVaultType.T3:
|
|
600
|
+
return parseT3MarketData(web3, data, network, mainnetWeb3);
|
|
601
|
+
case types_1.FluidVaultType.T4:
|
|
602
|
+
return parseT4MarketData(web3, data, network, mainnetWeb3);
|
|
603
|
+
default:
|
|
604
|
+
throw new Error(`Unknown vault type: ${vaultType}`);
|
|
605
|
+
}
|
|
606
|
+
});
|
|
153
607
|
exports.EMPTY_FLUID_DATA = {
|
|
154
608
|
usedAssets: {},
|
|
155
609
|
suppliedUsd: '0',
|
|
@@ -165,11 +619,12 @@ exports.EMPTY_FLUID_DATA = {
|
|
|
165
619
|
automationResubscribeRequired: false,
|
|
166
620
|
lastUpdated: Date.now(),
|
|
167
621
|
};
|
|
168
|
-
const
|
|
622
|
+
const parseT1UserData = (userPositionData, vaultData) => {
|
|
169
623
|
const { assetsData, marketData, } = vaultData;
|
|
170
624
|
const payload = Object.assign(Object.assign({ owner: userPositionData.owner, vaultId: marketData.vaultId }, exports.EMPTY_FLUID_DATA), { lastUpdated: Date.now() });
|
|
171
625
|
const collAsset = (0, tokens_1.getAssetInfo)(marketData.collAsset0);
|
|
172
626
|
const debtAsset = (0, tokens_1.getAssetInfo)(marketData.debtAsset0);
|
|
627
|
+
// for T2 and T4 - this is the number of shares
|
|
173
628
|
const supplied = (0, utils_1.getEthAmountForDecimals)(userPositionData.supply, collAsset.decimals);
|
|
174
629
|
const borrowed = (0, utils_1.getEthAmountForDecimals)(userPositionData.borrow, debtAsset.decimals);
|
|
175
630
|
const collUsedAsset = Object.assign(Object.assign({}, exports.EMPTY_USED_ASSET), { symbol: collAsset.symbol, collateral: true, supplied, suppliedUsd: new decimal_js_1.default(supplied).mul(assetsData[collAsset.symbol].price).toString(), isSupplied: new decimal_js_1.default(supplied).gt(0) });
|
|
@@ -184,6 +639,174 @@ const parseUserData = (userPositionData, vaultData) => {
|
|
|
184
639
|
marketData,
|
|
185
640
|
}));
|
|
186
641
|
};
|
|
642
|
+
const parseT2UserData = (userPositionData, vaultData) => {
|
|
643
|
+
const { assetsData, marketData, } = vaultData;
|
|
644
|
+
const payload = Object.assign(Object.assign({ owner: userPositionData.owner, vaultId: marketData.vaultId }, exports.EMPTY_FLUID_DATA), { lastUpdated: Date.now() });
|
|
645
|
+
const collAsset0 = (0, tokens_1.getAssetInfo)(marketData.collAsset0);
|
|
646
|
+
const collAsset1 = (0, tokens_1.getAssetInfo)(marketData.collAsset1);
|
|
647
|
+
const debtAsset = (0, tokens_1.getAssetInfo)(marketData.debtAsset0);
|
|
648
|
+
const supplyShares = (0, utils_1.getEthAmountForDecimals)(userPositionData.supply, 18); // this is supplied in coll shares
|
|
649
|
+
const borrowed = (0, utils_1.getEthAmountForDecimals)(userPositionData.borrow, debtAsset.decimals); // this is actual token borrow
|
|
650
|
+
const supplied0 = new decimal_js_1.default(supplyShares).mul(assetsData[collAsset0.symbol].tokenPerSupplyShare).toString();
|
|
651
|
+
const supplied1 = new decimal_js_1.default(supplyShares).mul(assetsData[collAsset1.symbol].tokenPerSupplyShare).toString();
|
|
652
|
+
const collUsedAsset0 = {
|
|
653
|
+
symbol: collAsset0.symbol,
|
|
654
|
+
collateral: true,
|
|
655
|
+
supplied: supplied0,
|
|
656
|
+
suppliedUsd: new decimal_js_1.default(supplied0).mul(assetsData[collAsset0.symbol].price).toString(),
|
|
657
|
+
isSupplied: new decimal_js_1.default(supplied0).gt(0),
|
|
658
|
+
};
|
|
659
|
+
const collUsedAsset1 = {
|
|
660
|
+
symbol: collAsset1.symbol,
|
|
661
|
+
collateral: true,
|
|
662
|
+
supplied: supplied1,
|
|
663
|
+
suppliedUsd: new decimal_js_1.default(supplied1).mul(assetsData[collAsset1.symbol].price).toString(),
|
|
664
|
+
isSupplied: new decimal_js_1.default(supplied1).gt(0),
|
|
665
|
+
};
|
|
666
|
+
const debtUsedAsset = {
|
|
667
|
+
symbol: debtAsset.symbol,
|
|
668
|
+
collateral: false,
|
|
669
|
+
borrowed,
|
|
670
|
+
borrowedUsd: new decimal_js_1.default(borrowed).mul(assetsData[debtAsset.symbol].price).toString(),
|
|
671
|
+
isBorrowed: new decimal_js_1.default(borrowed).gt(0),
|
|
672
|
+
};
|
|
673
|
+
const usedAssets = [
|
|
674
|
+
[collAsset0.symbol, collUsedAsset0],
|
|
675
|
+
[collAsset1.symbol, collUsedAsset1],
|
|
676
|
+
[debtAsset.symbol, debtUsedAsset],
|
|
677
|
+
]
|
|
678
|
+
.reduce((acc, [symbol, partialData]) => {
|
|
679
|
+
acc[symbol] = (0, fluidHelpers_1.mergeUsedAssets)(acc[symbol], partialData);
|
|
680
|
+
return acc;
|
|
681
|
+
}, {});
|
|
682
|
+
return Object.assign(Object.assign(Object.assign({}, payload), { usedAssets,
|
|
683
|
+
supplyShares }), (0, fluidHelpers_1.getFluidAggregatedData)({
|
|
684
|
+
usedAssets,
|
|
685
|
+
assetsData,
|
|
686
|
+
marketData,
|
|
687
|
+
}, supplyShares));
|
|
688
|
+
};
|
|
689
|
+
const parseT3UserData = (userPositionData, vaultData) => {
|
|
690
|
+
const { assetsData, marketData, } = vaultData;
|
|
691
|
+
const payload = Object.assign(Object.assign({ owner: userPositionData.owner, vaultId: marketData.vaultId }, exports.EMPTY_FLUID_DATA), { lastUpdated: Date.now() });
|
|
692
|
+
const collAsset = (0, tokens_1.getAssetInfo)(marketData.collAsset0);
|
|
693
|
+
const debtAsset0 = (0, tokens_1.getAssetInfo)(marketData.debtAsset0);
|
|
694
|
+
const debtAsset1 = (0, tokens_1.getAssetInfo)(marketData.debtAsset1);
|
|
695
|
+
const supplied = (0, utils_1.getEthAmountForDecimals)(userPositionData.supply, collAsset.decimals); // this is actual token supply
|
|
696
|
+
const borrowShares = (0, utils_1.getEthAmountForDecimals)(userPositionData.borrow, 18); // this is actual token borrow
|
|
697
|
+
const borrowed0 = new decimal_js_1.default(borrowShares).mul(assetsData[debtAsset0.symbol].tokenPerBorrowShare).toString();
|
|
698
|
+
const borrowed1 = new decimal_js_1.default(borrowShares).mul(assetsData[debtAsset1.symbol].tokenPerBorrowShare).toString();
|
|
699
|
+
const collUsedAsset = {
|
|
700
|
+
symbol: collAsset.symbol,
|
|
701
|
+
collateral: true,
|
|
702
|
+
supplied,
|
|
703
|
+
suppliedUsd: new decimal_js_1.default(supplied).mul(assetsData[collAsset.symbol].price).toString(),
|
|
704
|
+
isSupplied: new decimal_js_1.default(supplied).gt(0),
|
|
705
|
+
};
|
|
706
|
+
const debtUsedAsset0 = {
|
|
707
|
+
symbol: debtAsset0.symbol,
|
|
708
|
+
collateral: false,
|
|
709
|
+
borrowed: borrowed0,
|
|
710
|
+
borrowedUsd: new decimal_js_1.default(borrowed0).mul(assetsData[debtAsset0.symbol].price).toString(),
|
|
711
|
+
isBorrowed: new decimal_js_1.default(borrowed0).gt(0),
|
|
712
|
+
};
|
|
713
|
+
const debtUsedAsset1 = {
|
|
714
|
+
symbol: debtAsset1.symbol,
|
|
715
|
+
collateral: false,
|
|
716
|
+
borrowed: borrowed1,
|
|
717
|
+
borrowedUsd: new decimal_js_1.default(borrowed1).mul(assetsData[debtAsset1.symbol].price).toString(),
|
|
718
|
+
isBorrowed: new decimal_js_1.default(borrowed1).gt(0),
|
|
719
|
+
};
|
|
720
|
+
const usedAssets = [
|
|
721
|
+
[collAsset.symbol, collUsedAsset],
|
|
722
|
+
[debtAsset0.symbol, debtUsedAsset0],
|
|
723
|
+
[debtAsset1.symbol, debtUsedAsset1],
|
|
724
|
+
]
|
|
725
|
+
.reduce((acc, [symbol, partialData]) => {
|
|
726
|
+
acc[symbol] = (0, fluidHelpers_1.mergeUsedAssets)(acc[symbol], partialData);
|
|
727
|
+
return acc;
|
|
728
|
+
}, {});
|
|
729
|
+
return Object.assign(Object.assign(Object.assign({}, payload), { usedAssets,
|
|
730
|
+
borrowShares }), (0, fluidHelpers_1.getFluidAggregatedData)({
|
|
731
|
+
usedAssets,
|
|
732
|
+
assetsData,
|
|
733
|
+
marketData,
|
|
734
|
+
}, '', borrowShares));
|
|
735
|
+
};
|
|
736
|
+
const parseT4UserData = (userPositionData, vaultData) => {
|
|
737
|
+
const { assetsData, marketData, } = vaultData;
|
|
738
|
+
const payload = Object.assign(Object.assign({ owner: userPositionData.owner, vaultId: marketData.vaultId }, exports.EMPTY_FLUID_DATA), { lastUpdated: Date.now() });
|
|
739
|
+
const collAsset0 = (0, tokens_1.getAssetInfo)(marketData.collAsset0);
|
|
740
|
+
const collAsset1 = (0, tokens_1.getAssetInfo)(marketData.collAsset1);
|
|
741
|
+
const debtAsset0 = (0, tokens_1.getAssetInfo)(marketData.debtAsset0);
|
|
742
|
+
const debtAsset1 = (0, tokens_1.getAssetInfo)(marketData.debtAsset1);
|
|
743
|
+
const supplyShares = (0, utils_1.getEthAmountForDecimals)(userPositionData.supply, 18); // this is actual token supply
|
|
744
|
+
const borrowShares = (0, utils_1.getEthAmountForDecimals)(userPositionData.borrow, 18); // this is actual token borrow
|
|
745
|
+
const supplied0 = new decimal_js_1.default(supplyShares).mul(assetsData[collAsset0.symbol].tokenPerSupplyShare).toString();
|
|
746
|
+
const supplied1 = new decimal_js_1.default(supplyShares).mul(assetsData[collAsset1.symbol].tokenPerSupplyShare).toString();
|
|
747
|
+
const borrowed0 = new decimal_js_1.default(borrowShares).mul(assetsData[debtAsset0.symbol].tokenPerBorrowShare).toString();
|
|
748
|
+
const borrowed1 = new decimal_js_1.default(borrowShares).mul(assetsData[debtAsset1.symbol].tokenPerBorrowShare).toString();
|
|
749
|
+
const collUsedAsset0 = {
|
|
750
|
+
symbol: collAsset0.symbol,
|
|
751
|
+
collateral: true,
|
|
752
|
+
supplied: supplied0,
|
|
753
|
+
suppliedUsd: new decimal_js_1.default(supplied0).mul(assetsData[collAsset0.symbol].price).toString(),
|
|
754
|
+
isSupplied: new decimal_js_1.default(supplied0).gt(0),
|
|
755
|
+
};
|
|
756
|
+
const collUsedAsset1 = {
|
|
757
|
+
symbol: collAsset1.symbol,
|
|
758
|
+
collateral: true,
|
|
759
|
+
supplied: supplied1,
|
|
760
|
+
suppliedUsd: new decimal_js_1.default(supplied1).mul(assetsData[collAsset1.symbol].price).toString(),
|
|
761
|
+
isSupplied: new decimal_js_1.default(supplied1).gt(0),
|
|
762
|
+
};
|
|
763
|
+
const debtUsedAsset0 = {
|
|
764
|
+
symbol: debtAsset0.symbol,
|
|
765
|
+
collateral: false,
|
|
766
|
+
borrowed: borrowed0,
|
|
767
|
+
borrowedUsd: new decimal_js_1.default(borrowed0).mul(assetsData[debtAsset0.symbol].price).toString(),
|
|
768
|
+
isBorrowed: new decimal_js_1.default(borrowed0).gt(0),
|
|
769
|
+
};
|
|
770
|
+
const debtUsedAsset1 = {
|
|
771
|
+
symbol: debtAsset1.symbol,
|
|
772
|
+
collateral: false,
|
|
773
|
+
borrowed: borrowed1,
|
|
774
|
+
borrowedUsd: new decimal_js_1.default(borrowed1).mul(assetsData[debtAsset1.symbol].price).toString(),
|
|
775
|
+
isBorrowed: new decimal_js_1.default(borrowed1).gt(0),
|
|
776
|
+
};
|
|
777
|
+
const usedAssets = [
|
|
778
|
+
[collAsset0.symbol, collUsedAsset0],
|
|
779
|
+
[collAsset1.symbol, collUsedAsset1],
|
|
780
|
+
[debtAsset0.symbol, debtUsedAsset0],
|
|
781
|
+
[debtAsset1.symbol, debtUsedAsset1],
|
|
782
|
+
]
|
|
783
|
+
.reduce((acc, [symbol, partialData]) => {
|
|
784
|
+
acc[symbol] = (0, fluidHelpers_1.mergeUsedAssets)(acc[symbol], partialData);
|
|
785
|
+
return acc;
|
|
786
|
+
}, {});
|
|
787
|
+
return Object.assign(Object.assign(Object.assign({}, payload), { usedAssets,
|
|
788
|
+
supplyShares,
|
|
789
|
+
borrowShares }), (0, fluidHelpers_1.getFluidAggregatedData)({
|
|
790
|
+
usedAssets,
|
|
791
|
+
assetsData,
|
|
792
|
+
marketData,
|
|
793
|
+
}, supplyShares, borrowShares));
|
|
794
|
+
};
|
|
795
|
+
const parseUserData = (userPositionData, vaultData) => {
|
|
796
|
+
const vaultType = vaultData.marketData.vaultType;
|
|
797
|
+
switch (vaultType) {
|
|
798
|
+
case types_1.FluidVaultType.T1:
|
|
799
|
+
return parseT1UserData(userPositionData, vaultData);
|
|
800
|
+
case types_1.FluidVaultType.T2:
|
|
801
|
+
return parseT2UserData(userPositionData, vaultData);
|
|
802
|
+
case types_1.FluidVaultType.T3:
|
|
803
|
+
return parseT3UserData(userPositionData, vaultData);
|
|
804
|
+
case types_1.FluidVaultType.T4:
|
|
805
|
+
return parseT4UserData(userPositionData, vaultData);
|
|
806
|
+
default:
|
|
807
|
+
throw new Error(`Unknown vault type: ${vaultType}`);
|
|
808
|
+
}
|
|
809
|
+
};
|
|
187
810
|
const getFluidMarketData = (web3, network, market, mainnetWeb3) => __awaiter(void 0, void 0, void 0, function* () {
|
|
188
811
|
const view = (0, contracts_1.FluidViewContract)(web3, network);
|
|
189
812
|
const data = yield view.methods.getVaultData(market.marketAddress).call();
|