@defisaver/positions-sdk 0.0.201-fluid-dev → 0.0.201-fluid-dev-1

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.
Files changed (40) hide show
  1. package/cjs/config/contracts.d.ts +5 -5
  2. package/cjs/config/contracts.js +2 -2
  3. package/cjs/fluid/index.d.ts +1 -0
  4. package/cjs/fluid/index.js +65 -12
  5. package/cjs/markets/fluid/index.d.ts +2 -0
  6. package/cjs/markets/fluid/index.js +345 -1
  7. package/cjs/markets/index.d.ts +1 -1
  8. package/cjs/markets/index.js +3 -1
  9. package/cjs/morphoBlue/index.js +1 -2
  10. package/cjs/multicall/index.d.ts +1 -0
  11. package/cjs/multicall/index.js +8 -1
  12. package/cjs/services/utils.d.ts +1 -0
  13. package/cjs/services/utils.js +3 -1
  14. package/cjs/types/contracts/generated/FluidView.d.ts +0 -42
  15. package/cjs/types/fluid.d.ts +11 -0
  16. package/esm/config/contracts.d.ts +5 -5
  17. package/esm/config/contracts.js +2 -2
  18. package/esm/fluid/index.d.ts +1 -0
  19. package/esm/fluid/index.js +65 -13
  20. package/esm/markets/fluid/index.d.ts +2 -0
  21. package/esm/markets/fluid/index.js +343 -1
  22. package/esm/markets/index.d.ts +1 -1
  23. package/esm/markets/index.js +1 -1
  24. package/esm/morphoBlue/index.js +1 -2
  25. package/esm/multicall/index.d.ts +1 -0
  26. package/esm/multicall/index.js +6 -0
  27. package/esm/services/utils.d.ts +1 -0
  28. package/esm/services/utils.js +1 -0
  29. package/esm/types/contracts/generated/FluidView.d.ts +0 -42
  30. package/esm/types/fluid.d.ts +11 -0
  31. package/package.json +5 -3
  32. package/src/config/contracts.js +2 -2
  33. package/src/fluid/index.ts +69 -12
  34. package/src/markets/fluid/index.ts +347 -2
  35. package/src/markets/index.ts +1 -1
  36. package/src/morphoBlue/index.ts +1 -3
  37. package/src/multicall/index.ts +10 -1
  38. package/src/services/utils.ts +3 -1
  39. package/src/types/contracts/generated/FluidView.ts +0 -82
  40. package/src/types/fluid.ts +11 -0
@@ -6,4 +6,4 @@ export { MorphoBlueMarkets, findMorphoBlueMarket } from './morphoBlue';
6
6
  export { LlamaLendMarkets } from './llamaLend';
7
7
  export { LiquityV2Markets } from './liquityV2';
8
8
  export { EulerV2Markets } from './euler';
9
- export { FluidMarkets } from './fluid';
9
+ export { FluidMarkets, getFluidVersionsDataForNetwork, getFluidMarketInfoById } from './fluid';
@@ -6,4 +6,4 @@ export { MorphoBlueMarkets, findMorphoBlueMarket } from './morphoBlue';
6
6
  export { LlamaLendMarkets } from './llamaLend';
7
7
  export { LiquityV2Markets } from './liquityV2';
8
8
  export { EulerV2Markets } from './euler';
9
- export { FluidMarkets } from './fluid';
9
+ export { FluidMarkets, getFluidVersionsDataForNetwork, getFluidMarketInfoById } from './fluid';
@@ -13,10 +13,9 @@ import { NetworkNumber, } from '../types/common';
13
13
  import { DFSFeedRegistryContract, FeedRegistryContract, MorphoBlueViewContract } from '../contracts';
14
14
  import { USD_QUOTE, WAD } from '../constants';
15
15
  import { getStakingApy, STAKING_ASSETS } from '../staking';
16
- import { wethToEth } from '../services/utils';
16
+ import { isMainnetNetwork, wethToEth } from '../services/utils';
17
17
  import { getBorrowRate, getMorphoBlueAggregatedPositionData, getRewardsForMarket, getSupplyRate, } from '../helpers/morphoBlueHelpers';
18
18
  import { getChainlinkAssetAddress } from '../services/priceService';
19
- const isMainnetNetwork = (network) => network === NetworkNumber.Eth;
20
19
  export function getMorphoBlueMarketData(web3, network, selectedMarket, mainnetWeb3) {
21
20
  return __awaiter(this, void 0, void 0, function* () {
22
21
  const { loanToken, collateralToken, oracle, irm, lltv, oracleType, } = selectedMarket;
@@ -1,3 +1,4 @@
1
1
  import Web3 from 'web3';
2
2
  import { NetworkNumber } from '../types/common';
3
3
  export declare const multicall: (calls: any[], web3: Web3, network?: NetworkNumber, blockNumber?: 'latest' | number) => Promise<any[]>;
4
+ export declare const chunkAndMulticall: (calls: any[], chunkSize: number, blockNumber: number | "latest" | undefined, web3: Web3, network?: NetworkNumber) => Promise<any[]>;
@@ -7,6 +7,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
7
7
  step((generator = generator.apply(thisArg, _arguments || [])).next());
8
8
  });
9
9
  };
10
+ import { chunk } from 'lodash';
10
11
  import { UniMulticallContract } from '../contracts';
11
12
  import { NetworkNumber } from '../types/common';
12
13
  export const multicall = (calls, web3, network = NetworkNumber.Eth, blockNumber = 'latest') => __awaiter(void 0, void 0, void 0, function* () {
@@ -25,3 +26,8 @@ export const multicall = (calls, web3, network = NetworkNumber.Eth, blockNumber
25
26
  });
26
27
  return formattedResult;
27
28
  });
29
+ export const chunkAndMulticall = (calls, chunkSize, blockNumber = 'latest', web3, network = NetworkNumber.Eth) => __awaiter(void 0, void 0, void 0, function* () {
30
+ const chunkedCalls = chunk(calls, chunkSize);
31
+ const results = yield Promise.all(chunkedCalls.map((cnk) => multicall(cnk, web3, network, blockNumber)));
32
+ return results.flat(1);
33
+ });
@@ -22,3 +22,4 @@ export declare const mapRange: (input: number | string, minInput: number | strin
22
22
  export declare const isEnabledOnBitmap: (bitmap: number, assetId: number) => bigint;
23
23
  export declare const MAXUINT: string;
24
24
  export declare const isMaxuint: (amount: string) => boolean;
25
+ export declare const isMainnetNetwork: (network: NetworkNumber) => boolean;
@@ -35,3 +35,4 @@ export const mapRange = (input, minInput, maxInput, minOutput, maxOutput) => {
35
35
  export const isEnabledOnBitmap = (bitmap, assetId) => (BigInt(bitmap) >> BigInt(assetId)) & BigInt(1);
36
36
  export const MAXUINT = '115792089237316195423570985008687907853269984665640564039457584007913129639935';
37
37
  export const isMaxuint = (amount) => compareAddresses(MAXUINT, amount);
38
+ export const isMainnetNetwork = (network) => network === NetworkNumber.Eth;
@@ -100,10 +100,6 @@ export declare namespace FluidView {
100
100
  number | string | BN,
101
101
  number | string | BN,
102
102
  number | string | BN,
103
- number | string | BN,
104
- number | string | BN,
105
- number | string | BN,
106
- number | string | BN,
107
103
  number | string | BN
108
104
  ] | {
109
105
  vault: string;
@@ -128,10 +124,6 @@ export declare namespace FluidView {
128
124
  oracle: string;
129
125
  oraclePriceOperate: number | string | BN;
130
126
  oraclePriceLiquidate: number | string | BN;
131
- priceOfSupplyToken0InUSD: number | string | BN;
132
- priceOfSupplyToken1InUSD: number | string | BN;
133
- priceOfBorrowToken0InUSD: number | string | BN;
134
- priceOfBorrowToken1InUSD: number | string | BN;
135
127
  vaultSupplyExchangePrice: number | string | BN;
136
128
  vaultBorrowExchangePrice: number | string | BN;
137
129
  supplyRateVault: number | string | BN;
@@ -203,10 +195,6 @@ export declare namespace FluidView {
203
195
  string,
204
196
  string,
205
197
  string,
206
- string,
207
- string,
208
- string,
209
- string,
210
198
  string
211
199
  ];
212
200
  type VaultDataStructOutputStruct = {
@@ -232,10 +220,6 @@ export declare namespace FluidView {
232
220
  oracle: string;
233
221
  oraclePriceOperate: string;
234
222
  oraclePriceLiquidate: string;
235
- priceOfSupplyToken0InUSD: string;
236
- priceOfSupplyToken1InUSD: string;
237
- priceOfBorrowToken0InUSD: string;
238
- priceOfBorrowToken1InUSD: string;
239
223
  vaultSupplyExchangePrice: string;
240
224
  vaultBorrowExchangePrice: string;
241
225
  supplyRateVault: string;
@@ -267,14 +251,6 @@ export interface FluidView extends BaseContract {
267
251
  constructor(jsonInterface: any[], address?: string, options?: ContractOptions): FluidView;
268
252
  clone(): FluidView;
269
253
  methods: {
270
- feedRegistry(): NonPayableTransactionObject<string>;
271
- getAaveTokenPriceInETH(_tokenAddr: string): NonPayableTransactionObject<string>;
272
- getAaveTokenPriceInUSD(_tokenAddr: string): NonPayableTransactionObject<string>;
273
- getAaveV3TokenPriceInETH(_tokenAddr: string): NonPayableTransactionObject<string>;
274
- getAaveV3TokenPriceInUSD(_tokenAddr: string): NonPayableTransactionObject<string>;
275
- getAddrForChainlinkOracle(_inputTokenAddr: string): NonPayableTransactionObject<string>;
276
- getChainlinkPriceInETH(_inputTokenAddr: string): NonPayableTransactionObject<string>;
277
- getChainlinkPriceInUSD(_inputTokenAddr: string, _useFallback: boolean): NonPayableTransactionObject<string>;
278
254
  getPositionByNftId(_nftId: number | string | BN): NonPayableTransactionObject<[
279
255
  FluidView.UserPositionStructOutput,
280
256
  FluidView.VaultDataStructOutput
@@ -282,23 +258,7 @@ export interface FluidView extends BaseContract {
282
258
  position: FluidView.UserPositionStructOutput;
283
259
  vault: FluidView.VaultDataStructOutput;
284
260
  }>;
285
- getPriceInETH(_inputTokenAddr: string): NonPayableTransactionObject<string>;
286
- getPriceInUSD(_inputTokenAddr: string): NonPayableTransactionObject<string>;
287
261
  getRatio(_nftId: number | string | BN): NonPayableTransactionObject<string>;
288
- "getRoundInfo(address,uint80,address)"(_inputTokenAddr: string, _roundId: number | string | BN, aggregator: string): NonPayableTransactionObject<[
289
- string,
290
- string
291
- ] & {
292
- updateTimestamp: string;
293
- }>;
294
- "getRoundInfo(address,uint80)"(_inputTokenAddr: string, _roundId: number | string | BN): NonPayableTransactionObject<[
295
- string,
296
- string
297
- ] & {
298
- updateTimestamp: string;
299
- }>;
300
- getSparkTokenPriceInETH(_tokenAddr: string): NonPayableTransactionObject<string>;
301
- getSparkTokenPriceInUSD(_tokenAddr: string): NonPayableTransactionObject<string>;
302
262
  getUserNftIds(_user: string): NonPayableTransactionObject<string[]>;
303
263
  getUserPositions(_user: string): NonPayableTransactionObject<[
304
264
  FluidView.UserPositionStructOutput[],
@@ -309,8 +269,6 @@ export interface FluidView extends BaseContract {
309
269
  }>;
310
270
  getVaultAddresses(_ids: number | string | BN[], _fetchAll: boolean): NonPayableTransactionObject<string[]>;
311
271
  getVaultData(_vault: string): NonPayableTransactionObject<FluidView.VaultDataStructOutput>;
312
- getWBtcPrice(_btcPrice: number | string | BN): NonPayableTransactionObject<string>;
313
- getWStEthPrice(_stEthPrice: number | string | BN): NonPayableTransactionObject<string>;
314
272
  };
315
273
  events: {
316
274
  allEvents(options?: EventOptions, cb?: Callback<EventLog>): EventEmitter;
@@ -11,6 +11,10 @@ export interface FluidMarketInfo {
11
11
  hasSmartDebt: boolean;
12
12
  collateralAsset: string;
13
13
  debtAsset: string;
14
+ ethBased?: boolean;
15
+ btcBased?: boolean;
16
+ wstETHBased?: boolean;
17
+ type: FluidVaultType;
14
18
  }
15
19
  export declare enum FluidMainnetVersion {
16
20
  ETH_USDC_1 = "ETH_USDC_1",
@@ -158,17 +162,22 @@ export interface InnerFluidMarketData {
158
162
  isSmartDebt: boolean;
159
163
  marketAddress: string;
160
164
  vaultType: FluidVaultType;
165
+ vaultValue?: FluidVersions;
161
166
  oracle: string;
162
167
  liquidationPenaltyPercent: string;
163
168
  collFactor: string;
164
169
  liquidationRatio: string;
170
+ liqFactor: string;
171
+ minRatio: string;
165
172
  collAsset0: string;
166
173
  collAsset1?: string;
167
174
  debtAsset0: string;
168
175
  debtAsset1?: string;
169
176
  totalPositions: string;
170
177
  totalSupplyVault: string;
178
+ totalSupplyVaultUsd: string;
171
179
  totalBorrowVault: string;
180
+ totalBorrowVaultUsd: string;
172
181
  withdrawalLimit: string;
173
182
  withdrawableUntilLimit: string;
174
183
  withdrawable: string;
@@ -179,6 +188,8 @@ export interface InnerFluidMarketData {
179
188
  maxBorrowLimit: string;
180
189
  baseBorrowLimit: string;
181
190
  minimumBorrowing: string;
191
+ supplyRate: string;
192
+ borrowRate: string;
182
193
  }
183
194
  export interface FluidMarketData {
184
195
  assetsData: FluidAssetsData;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@defisaver/positions-sdk",
3
- "version": "0.0.201-fluid-dev",
3
+ "version": "0.0.201-fluid-dev-1",
4
4
  "description": "",
5
5
  "main": "./cjs/index.js",
6
6
  "module": "./esm/index.js",
@@ -23,10 +23,12 @@
23
23
  "author": "",
24
24
  "license": "ISC",
25
25
  "dependencies": {
26
- "@defisaver/tokens": "^1.5.54",
26
+ "@types/lodash": "^4.17.15",
27
+ "@defisaver/tokens": "^1.5.55",
27
28
  "@ethersproject/bignumber": "^5.7.0",
28
29
  "@morpho-org/morpho-aave-v3-sdk": "^1.5.3",
29
- "decimal.js": "^10.4.3"
30
+ "decimal.js": "^10.4.3",
31
+ "lodash": "^4.17.21"
30
32
  },
31
33
  "devDependencies": {
32
34
  "@defisaver/eslint-config": "^1.0.1",
@@ -1107,9 +1107,9 @@ module.exports = {
1107
1107
  }
1108
1108
  },
1109
1109
  "FluidView": {
1110
- "abi": [{"inputs":[],"name":"feedRegistry","outputs":[{"internalType":"contract IFeedRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddr","type":"address"}],"name":"getAaveTokenPriceInETH","outputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddr","type":"address"}],"name":"getAaveTokenPriceInUSD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddr","type":"address"}],"name":"getAaveV3TokenPriceInETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddr","type":"address"}],"name":"getAaveV3TokenPriceInUSD","outputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_inputTokenAddr","type":"address"}],"name":"getAddrForChainlinkOracle","outputs":[{"internalType":"address","name":"tokenAddrForChainlinkUsage","type":"address"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_inputTokenAddr","type":"address"}],"name":"getChainlinkPriceInETH","outputs":[{"internalType":"int256","name":"chainlinkPriceInETH","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_inputTokenAddr","type":"address"},{"internalType":"bool","name":"_useFallback","type":"bool"}],"name":"getChainlinkPriceInUSD","outputs":[{"internalType":"int256","name":"chainlinkPriceInUSD","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_nftId","type":"uint256"}],"name":"getPositionByNftId","outputs":[{"components":[{"internalType":"uint256","name":"nftId","type":"uint256"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"bool","name":"isLiquidated","type":"bool"},{"internalType":"bool","name":"isSupplyPosition","type":"bool"},{"internalType":"uint256","name":"supply","type":"uint256"},{"internalType":"uint256","name":"borrow","type":"uint256"},{"internalType":"uint256","name":"ratio","type":"uint256"},{"internalType":"int256","name":"tick","type":"int256"},{"internalType":"uint256","name":"tickId","type":"uint256"}],"internalType":"struct FluidView.UserPosition","name":"position","type":"tuple"},{"components":[{"internalType":"address","name":"vault","type":"address"},{"internalType":"uint256","name":"vaultId","type":"uint256"},{"internalType":"uint256","name":"vaultType","type":"uint256"},{"internalType":"bool","name":"isSmartColl","type":"bool"},{"internalType":"bool","name":"isSmartDebt","type":"bool"},{"internalType":"address","name":"supplyToken0","type":"address"},{"internalType":"address","name":"supplyToken1","type":"address"},{"internalType":"address","name":"borrowToken0","type":"address"},{"internalType":"address","name":"borrowToken1","type":"address"},{"internalType":"uint256","name":"supplyToken0Decimals","type":"uint256"},{"internalType":"uint256","name":"supplyToken1Decimals","type":"uint256"},{"internalType":"uint256","name":"borrowToken0Decimals","type":"uint256"},{"internalType":"uint256","name":"borrowToken1Decimals","type":"uint256"},{"internalType":"uint16","name":"collateralFactor","type":"uint16"},{"internalType":"uint16","name":"liquidationThreshold","type":"uint16"},{"internalType":"uint16","name":"liquidationMaxLimit","type":"uint16"},{"internalType":"uint16","name":"withdrawalGap","type":"uint16"},{"internalType":"uint16","name":"liquidationPenalty","type":"uint16"},{"internalType":"uint16","name":"borrowFee","type":"uint16"},{"internalType":"address","name":"oracle","type":"address"},{"internalType":"uint256","name":"oraclePriceOperate","type":"uint256"},{"internalType":"uint256","name":"oraclePriceLiquidate","type":"uint256"},{"internalType":"uint256","name":"priceOfSupplyToken0InUSD","type":"uint256"},{"internalType":"uint256","name":"priceOfSupplyToken1InUSD","type":"uint256"},{"internalType":"uint256","name":"priceOfBorrowToken0InUSD","type":"uint256"},{"internalType":"uint256","name":"priceOfBorrowToken1InUSD","type":"uint256"},{"internalType":"uint256","name":"vaultSupplyExchangePrice","type":"uint256"},{"internalType":"uint256","name":"vaultBorrowExchangePrice","type":"uint256"},{"internalType":"int256","name":"supplyRateVault","type":"int256"},{"internalType":"int256","name":"borrowRateVault","type":"int256"},{"internalType":"int256","name":"rewardsOrFeeRateSupply","type":"int256"},{"internalType":"int256","name":"rewardsOrFeeRateBorrow","type":"int256"},{"internalType":"uint256","name":"totalPositions","type":"uint256"},{"internalType":"uint256","name":"totalSupplyVault","type":"uint256"},{"internalType":"uint256","name":"totalBorrowVault","type":"uint256"},{"internalType":"uint256","name":"withdrawalLimit","type":"uint256"},{"internalType":"uint256","name":"withdrawableUntilLimit","type":"uint256"},{"internalType":"uint256","name":"withdrawable","type":"uint256"},{"internalType":"uint256","name":"baseWithdrawalLimit","type":"uint256"},{"internalType":"uint256","name":"withdrawExpandPercent","type":"uint256"},{"internalType":"uint256","name":"withdrawExpandDuration","type":"uint256"},{"internalType":"uint256","name":"borrowLimit","type":"uint256"},{"internalType":"uint256","name":"borrowableUntilLimit","type":"uint256"},{"internalType":"uint256","name":"borrowable","type":"uint256"},{"internalType":"uint256","name":"borrowLimitUtilization","type":"uint256"},{"internalType":"uint256","name":"maxBorrowLimit","type":"uint256"},{"internalType":"uint256","name":"borrowExpandPercent","type":"uint256"},{"internalType":"uint256","name":"borrowExpandDuration","type":"uint256"},{"internalType":"uint256","name":"baseBorrowLimit","type":"uint256"},{"internalType":"uint256","name":"minimumBorrowing","type":"uint256"}],"internalType":"struct FluidView.VaultData","name":"vault","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_inputTokenAddr","type":"address"}],"name":"getPriceInETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_inputTokenAddr","type":"address"}],"name":"getPriceInUSD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_nftId","type":"uint256"}],"name":"getRatio","outputs":[{"internalType":"uint256","name":"ratio","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_inputTokenAddr","type":"address"},{"internalType":"uint80","name":"_roundId","type":"uint80"},{"internalType":"contract IAggregatorV3","name":"aggregator","type":"address"}],"name":"getRoundInfo","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"updateTimestamp","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_inputTokenAddr","type":"address"},{"internalType":"uint80","name":"_roundId","type":"uint80"}],"name":"getRoundInfo","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"updateTimestamp","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddr","type":"address"}],"name":"getSparkTokenPriceInETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddr","type":"address"}],"name":"getSparkTokenPriceInUSD","outputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"getUserNftIds","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"getUserPositions","outputs":[{"components":[{"internalType":"uint256","name":"nftId","type":"uint256"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"bool","name":"isLiquidated","type":"bool"},{"internalType":"bool","name":"isSupplyPosition","type":"bool"},{"internalType":"uint256","name":"supply","type":"uint256"},{"internalType":"uint256","name":"borrow","type":"uint256"},{"internalType":"uint256","name":"ratio","type":"uint256"},{"internalType":"int256","name":"tick","type":"int256"},{"internalType":"uint256","name":"tickId","type":"uint256"}],"internalType":"struct FluidView.UserPosition[]","name":"positions","type":"tuple[]"},{"components":[{"internalType":"address","name":"vault","type":"address"},{"internalType":"uint256","name":"vaultId","type":"uint256"},{"internalType":"uint256","name":"vaultType","type":"uint256"},{"internalType":"bool","name":"isSmartColl","type":"bool"},{"internalType":"bool","name":"isSmartDebt","type":"bool"},{"internalType":"address","name":"supplyToken0","type":"address"},{"internalType":"address","name":"supplyToken1","type":"address"},{"internalType":"address","name":"borrowToken0","type":"address"},{"internalType":"address","name":"borrowToken1","type":"address"},{"internalType":"uint256","name":"supplyToken0Decimals","type":"uint256"},{"internalType":"uint256","name":"supplyToken1Decimals","type":"uint256"},{"internalType":"uint256","name":"borrowToken0Decimals","type":"uint256"},{"internalType":"uint256","name":"borrowToken1Decimals","type":"uint256"},{"internalType":"uint16","name":"collateralFactor","type":"uint16"},{"internalType":"uint16","name":"liquidationThreshold","type":"uint16"},{"internalType":"uint16","name":"liquidationMaxLimit","type":"uint16"},{"internalType":"uint16","name":"withdrawalGap","type":"uint16"},{"internalType":"uint16","name":"liquidationPenalty","type":"uint16"},{"internalType":"uint16","name":"borrowFee","type":"uint16"},{"internalType":"address","name":"oracle","type":"address"},{"internalType":"uint256","name":"oraclePriceOperate","type":"uint256"},{"internalType":"uint256","name":"oraclePriceLiquidate","type":"uint256"},{"internalType":"uint256","name":"priceOfSupplyToken0InUSD","type":"uint256"},{"internalType":"uint256","name":"priceOfSupplyToken1InUSD","type":"uint256"},{"internalType":"uint256","name":"priceOfBorrowToken0InUSD","type":"uint256"},{"internalType":"uint256","name":"priceOfBorrowToken1InUSD","type":"uint256"},{"internalType":"uint256","name":"vaultSupplyExchangePrice","type":"uint256"},{"internalType":"uint256","name":"vaultBorrowExchangePrice","type":"uint256"},{"internalType":"int256","name":"supplyRateVault","type":"int256"},{"internalType":"int256","name":"borrowRateVault","type":"int256"},{"internalType":"int256","name":"rewardsOrFeeRateSupply","type":"int256"},{"internalType":"int256","name":"rewardsOrFeeRateBorrow","type":"int256"},{"internalType":"uint256","name":"totalPositions","type":"uint256"},{"internalType":"uint256","name":"totalSupplyVault","type":"uint256"},{"internalType":"uint256","name":"totalBorrowVault","type":"uint256"},{"internalType":"uint256","name":"withdrawalLimit","type":"uint256"},{"internalType":"uint256","name":"withdrawableUntilLimit","type":"uint256"},{"internalType":"uint256","name":"withdrawable","type":"uint256"},{"internalType":"uint256","name":"baseWithdrawalLimit","type":"uint256"},{"internalType":"uint256","name":"withdrawExpandPercent","type":"uint256"},{"internalType":"uint256","name":"withdrawExpandDuration","type":"uint256"},{"internalType":"uint256","name":"borrowLimit","type":"uint256"},{"internalType":"uint256","name":"borrowableUntilLimit","type":"uint256"},{"internalType":"uint256","name":"borrowable","type":"uint256"},{"internalType":"uint256","name":"borrowLimitUtilization","type":"uint256"},{"internalType":"uint256","name":"maxBorrowLimit","type":"uint256"},{"internalType":"uint256","name":"borrowExpandPercent","type":"uint256"},{"internalType":"uint256","name":"borrowExpandDuration","type":"uint256"},{"internalType":"uint256","name":"baseBorrowLimit","type":"uint256"},{"internalType":"uint256","name":"minimumBorrowing","type":"uint256"}],"internalType":"struct FluidView.VaultData[]","name":"vaults","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"internalType":"bool","name":"_fetchAll","type":"bool"}],"name":"getVaultAddresses","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"}],"name":"getVaultData","outputs":[{"components":[{"internalType":"address","name":"vault","type":"address"},{"internalType":"uint256","name":"vaultId","type":"uint256"},{"internalType":"uint256","name":"vaultType","type":"uint256"},{"internalType":"bool","name":"isSmartColl","type":"bool"},{"internalType":"bool","name":"isSmartDebt","type":"bool"},{"internalType":"address","name":"supplyToken0","type":"address"},{"internalType":"address","name":"supplyToken1","type":"address"},{"internalType":"address","name":"borrowToken0","type":"address"},{"internalType":"address","name":"borrowToken1","type":"address"},{"internalType":"uint256","name":"supplyToken0Decimals","type":"uint256"},{"internalType":"uint256","name":"supplyToken1Decimals","type":"uint256"},{"internalType":"uint256","name":"borrowToken0Decimals","type":"uint256"},{"internalType":"uint256","name":"borrowToken1Decimals","type":"uint256"},{"internalType":"uint16","name":"collateralFactor","type":"uint16"},{"internalType":"uint16","name":"liquidationThreshold","type":"uint16"},{"internalType":"uint16","name":"liquidationMaxLimit","type":"uint16"},{"internalType":"uint16","name":"withdrawalGap","type":"uint16"},{"internalType":"uint16","name":"liquidationPenalty","type":"uint16"},{"internalType":"uint16","name":"borrowFee","type":"uint16"},{"internalType":"address","name":"oracle","type":"address"},{"internalType":"uint256","name":"oraclePriceOperate","type":"uint256"},{"internalType":"uint256","name":"oraclePriceLiquidate","type":"uint256"},{"internalType":"uint256","name":"priceOfSupplyToken0InUSD","type":"uint256"},{"internalType":"uint256","name":"priceOfSupplyToken1InUSD","type":"uint256"},{"internalType":"uint256","name":"priceOfBorrowToken0InUSD","type":"uint256"},{"internalType":"uint256","name":"priceOfBorrowToken1InUSD","type":"uint256"},{"internalType":"uint256","name":"vaultSupplyExchangePrice","type":"uint256"},{"internalType":"uint256","name":"vaultBorrowExchangePrice","type":"uint256"},{"internalType":"int256","name":"supplyRateVault","type":"int256"},{"internalType":"int256","name":"borrowRateVault","type":"int256"},{"internalType":"int256","name":"rewardsOrFeeRateSupply","type":"int256"},{"internalType":"int256","name":"rewardsOrFeeRateBorrow","type":"int256"},{"internalType":"uint256","name":"totalPositions","type":"uint256"},{"internalType":"uint256","name":"totalSupplyVault","type":"uint256"},{"internalType":"uint256","name":"totalBorrowVault","type":"uint256"},{"internalType":"uint256","name":"withdrawalLimit","type":"uint256"},{"internalType":"uint256","name":"withdrawableUntilLimit","type":"uint256"},{"internalType":"uint256","name":"withdrawable","type":"uint256"},{"internalType":"uint256","name":"baseWithdrawalLimit","type":"uint256"},{"internalType":"uint256","name":"withdrawExpandPercent","type":"uint256"},{"internalType":"uint256","name":"withdrawExpandDuration","type":"uint256"},{"internalType":"uint256","name":"borrowLimit","type":"uint256"},{"internalType":"uint256","name":"borrowableUntilLimit","type":"uint256"},{"internalType":"uint256","name":"borrowable","type":"uint256"},{"internalType":"uint256","name":"borrowLimitUtilization","type":"uint256"},{"internalType":"uint256","name":"maxBorrowLimit","type":"uint256"},{"internalType":"uint256","name":"borrowExpandPercent","type":"uint256"},{"internalType":"uint256","name":"borrowExpandDuration","type":"uint256"},{"internalType":"uint256","name":"baseBorrowLimit","type":"uint256"},{"internalType":"uint256","name":"minimumBorrowing","type":"uint256"}],"internalType":"struct FluidView.VaultData","name":"vaultData","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"int256","name":"_btcPrice","type":"int256"}],"name":"getWBtcPrice","outputs":[{"internalType":"int256","name":"wBtcPrice","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"int256","name":"_stEthPrice","type":"int256"}],"name":"getWStEthPrice","outputs":[{"internalType":"int256","name":"wStEthPrice","type":"int256"}],"stateMutability":"view","type":"function"}],
1110
+ "abi": [{"inputs":[{"internalType":"uint256","name":"_nftId","type":"uint256"}],"name":"getPositionByNftId","outputs":[{"components":[{"internalType":"uint256","name":"nftId","type":"uint256"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"bool","name":"isLiquidated","type":"bool"},{"internalType":"bool","name":"isSupplyPosition","type":"bool"},{"internalType":"uint256","name":"supply","type":"uint256"},{"internalType":"uint256","name":"borrow","type":"uint256"},{"internalType":"uint256","name":"ratio","type":"uint256"},{"internalType":"int256","name":"tick","type":"int256"},{"internalType":"uint256","name":"tickId","type":"uint256"}],"internalType":"struct FluidView.UserPosition","name":"position","type":"tuple"},{"components":[{"internalType":"address","name":"vault","type":"address"},{"internalType":"uint256","name":"vaultId","type":"uint256"},{"internalType":"uint256","name":"vaultType","type":"uint256"},{"internalType":"bool","name":"isSmartColl","type":"bool"},{"internalType":"bool","name":"isSmartDebt","type":"bool"},{"internalType":"address","name":"supplyToken0","type":"address"},{"internalType":"address","name":"supplyToken1","type":"address"},{"internalType":"address","name":"borrowToken0","type":"address"},{"internalType":"address","name":"borrowToken1","type":"address"},{"internalType":"uint256","name":"supplyToken0Decimals","type":"uint256"},{"internalType":"uint256","name":"supplyToken1Decimals","type":"uint256"},{"internalType":"uint256","name":"borrowToken0Decimals","type":"uint256"},{"internalType":"uint256","name":"borrowToken1Decimals","type":"uint256"},{"internalType":"uint16","name":"collateralFactor","type":"uint16"},{"internalType":"uint16","name":"liquidationThreshold","type":"uint16"},{"internalType":"uint16","name":"liquidationMaxLimit","type":"uint16"},{"internalType":"uint16","name":"withdrawalGap","type":"uint16"},{"internalType":"uint16","name":"liquidationPenalty","type":"uint16"},{"internalType":"uint16","name":"borrowFee","type":"uint16"},{"internalType":"address","name":"oracle","type":"address"},{"internalType":"uint256","name":"oraclePriceOperate","type":"uint256"},{"internalType":"uint256","name":"oraclePriceLiquidate","type":"uint256"},{"internalType":"uint256","name":"vaultSupplyExchangePrice","type":"uint256"},{"internalType":"uint256","name":"vaultBorrowExchangePrice","type":"uint256"},{"internalType":"int256","name":"supplyRateVault","type":"int256"},{"internalType":"int256","name":"borrowRateVault","type":"int256"},{"internalType":"int256","name":"rewardsOrFeeRateSupply","type":"int256"},{"internalType":"int256","name":"rewardsOrFeeRateBorrow","type":"int256"},{"internalType":"uint256","name":"totalPositions","type":"uint256"},{"internalType":"uint256","name":"totalSupplyVault","type":"uint256"},{"internalType":"uint256","name":"totalBorrowVault","type":"uint256"},{"internalType":"uint256","name":"withdrawalLimit","type":"uint256"},{"internalType":"uint256","name":"withdrawableUntilLimit","type":"uint256"},{"internalType":"uint256","name":"withdrawable","type":"uint256"},{"internalType":"uint256","name":"baseWithdrawalLimit","type":"uint256"},{"internalType":"uint256","name":"withdrawExpandPercent","type":"uint256"},{"internalType":"uint256","name":"withdrawExpandDuration","type":"uint256"},{"internalType":"uint256","name":"borrowLimit","type":"uint256"},{"internalType":"uint256","name":"borrowableUntilLimit","type":"uint256"},{"internalType":"uint256","name":"borrowable","type":"uint256"},{"internalType":"uint256","name":"borrowLimitUtilization","type":"uint256"},{"internalType":"uint256","name":"maxBorrowLimit","type":"uint256"},{"internalType":"uint256","name":"borrowExpandPercent","type":"uint256"},{"internalType":"uint256","name":"borrowExpandDuration","type":"uint256"},{"internalType":"uint256","name":"baseBorrowLimit","type":"uint256"},{"internalType":"uint256","name":"minimumBorrowing","type":"uint256"}],"internalType":"struct FluidView.VaultData","name":"vault","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_nftId","type":"uint256"}],"name":"getRatio","outputs":[{"internalType":"uint256","name":"ratio","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"getUserNftIds","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"getUserPositions","outputs":[{"components":[{"internalType":"uint256","name":"nftId","type":"uint256"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"bool","name":"isLiquidated","type":"bool"},{"internalType":"bool","name":"isSupplyPosition","type":"bool"},{"internalType":"uint256","name":"supply","type":"uint256"},{"internalType":"uint256","name":"borrow","type":"uint256"},{"internalType":"uint256","name":"ratio","type":"uint256"},{"internalType":"int256","name":"tick","type":"int256"},{"internalType":"uint256","name":"tickId","type":"uint256"}],"internalType":"struct FluidView.UserPosition[]","name":"positions","type":"tuple[]"},{"components":[{"internalType":"address","name":"vault","type":"address"},{"internalType":"uint256","name":"vaultId","type":"uint256"},{"internalType":"uint256","name":"vaultType","type":"uint256"},{"internalType":"bool","name":"isSmartColl","type":"bool"},{"internalType":"bool","name":"isSmartDebt","type":"bool"},{"internalType":"address","name":"supplyToken0","type":"address"},{"internalType":"address","name":"supplyToken1","type":"address"},{"internalType":"address","name":"borrowToken0","type":"address"},{"internalType":"address","name":"borrowToken1","type":"address"},{"internalType":"uint256","name":"supplyToken0Decimals","type":"uint256"},{"internalType":"uint256","name":"supplyToken1Decimals","type":"uint256"},{"internalType":"uint256","name":"borrowToken0Decimals","type":"uint256"},{"internalType":"uint256","name":"borrowToken1Decimals","type":"uint256"},{"internalType":"uint16","name":"collateralFactor","type":"uint16"},{"internalType":"uint16","name":"liquidationThreshold","type":"uint16"},{"internalType":"uint16","name":"liquidationMaxLimit","type":"uint16"},{"internalType":"uint16","name":"withdrawalGap","type":"uint16"},{"internalType":"uint16","name":"liquidationPenalty","type":"uint16"},{"internalType":"uint16","name":"borrowFee","type":"uint16"},{"internalType":"address","name":"oracle","type":"address"},{"internalType":"uint256","name":"oraclePriceOperate","type":"uint256"},{"internalType":"uint256","name":"oraclePriceLiquidate","type":"uint256"},{"internalType":"uint256","name":"vaultSupplyExchangePrice","type":"uint256"},{"internalType":"uint256","name":"vaultBorrowExchangePrice","type":"uint256"},{"internalType":"int256","name":"supplyRateVault","type":"int256"},{"internalType":"int256","name":"borrowRateVault","type":"int256"},{"internalType":"int256","name":"rewardsOrFeeRateSupply","type":"int256"},{"internalType":"int256","name":"rewardsOrFeeRateBorrow","type":"int256"},{"internalType":"uint256","name":"totalPositions","type":"uint256"},{"internalType":"uint256","name":"totalSupplyVault","type":"uint256"},{"internalType":"uint256","name":"totalBorrowVault","type":"uint256"},{"internalType":"uint256","name":"withdrawalLimit","type":"uint256"},{"internalType":"uint256","name":"withdrawableUntilLimit","type":"uint256"},{"internalType":"uint256","name":"withdrawable","type":"uint256"},{"internalType":"uint256","name":"baseWithdrawalLimit","type":"uint256"},{"internalType":"uint256","name":"withdrawExpandPercent","type":"uint256"},{"internalType":"uint256","name":"withdrawExpandDuration","type":"uint256"},{"internalType":"uint256","name":"borrowLimit","type":"uint256"},{"internalType":"uint256","name":"borrowableUntilLimit","type":"uint256"},{"internalType":"uint256","name":"borrowable","type":"uint256"},{"internalType":"uint256","name":"borrowLimitUtilization","type":"uint256"},{"internalType":"uint256","name":"maxBorrowLimit","type":"uint256"},{"internalType":"uint256","name":"borrowExpandPercent","type":"uint256"},{"internalType":"uint256","name":"borrowExpandDuration","type":"uint256"},{"internalType":"uint256","name":"baseBorrowLimit","type":"uint256"},{"internalType":"uint256","name":"minimumBorrowing","type":"uint256"}],"internalType":"struct FluidView.VaultData[]","name":"vaults","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"internalType":"bool","name":"_fetchAll","type":"bool"}],"name":"getVaultAddresses","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"}],"name":"getVaultData","outputs":[{"components":[{"internalType":"address","name":"vault","type":"address"},{"internalType":"uint256","name":"vaultId","type":"uint256"},{"internalType":"uint256","name":"vaultType","type":"uint256"},{"internalType":"bool","name":"isSmartColl","type":"bool"},{"internalType":"bool","name":"isSmartDebt","type":"bool"},{"internalType":"address","name":"supplyToken0","type":"address"},{"internalType":"address","name":"supplyToken1","type":"address"},{"internalType":"address","name":"borrowToken0","type":"address"},{"internalType":"address","name":"borrowToken1","type":"address"},{"internalType":"uint256","name":"supplyToken0Decimals","type":"uint256"},{"internalType":"uint256","name":"supplyToken1Decimals","type":"uint256"},{"internalType":"uint256","name":"borrowToken0Decimals","type":"uint256"},{"internalType":"uint256","name":"borrowToken1Decimals","type":"uint256"},{"internalType":"uint16","name":"collateralFactor","type":"uint16"},{"internalType":"uint16","name":"liquidationThreshold","type":"uint16"},{"internalType":"uint16","name":"liquidationMaxLimit","type":"uint16"},{"internalType":"uint16","name":"withdrawalGap","type":"uint16"},{"internalType":"uint16","name":"liquidationPenalty","type":"uint16"},{"internalType":"uint16","name":"borrowFee","type":"uint16"},{"internalType":"address","name":"oracle","type":"address"},{"internalType":"uint256","name":"oraclePriceOperate","type":"uint256"},{"internalType":"uint256","name":"oraclePriceLiquidate","type":"uint256"},{"internalType":"uint256","name":"vaultSupplyExchangePrice","type":"uint256"},{"internalType":"uint256","name":"vaultBorrowExchangePrice","type":"uint256"},{"internalType":"int256","name":"supplyRateVault","type":"int256"},{"internalType":"int256","name":"borrowRateVault","type":"int256"},{"internalType":"int256","name":"rewardsOrFeeRateSupply","type":"int256"},{"internalType":"int256","name":"rewardsOrFeeRateBorrow","type":"int256"},{"internalType":"uint256","name":"totalPositions","type":"uint256"},{"internalType":"uint256","name":"totalSupplyVault","type":"uint256"},{"internalType":"uint256","name":"totalBorrowVault","type":"uint256"},{"internalType":"uint256","name":"withdrawalLimit","type":"uint256"},{"internalType":"uint256","name":"withdrawableUntilLimit","type":"uint256"},{"internalType":"uint256","name":"withdrawable","type":"uint256"},{"internalType":"uint256","name":"baseWithdrawalLimit","type":"uint256"},{"internalType":"uint256","name":"withdrawExpandPercent","type":"uint256"},{"internalType":"uint256","name":"withdrawExpandDuration","type":"uint256"},{"internalType":"uint256","name":"borrowLimit","type":"uint256"},{"internalType":"uint256","name":"borrowableUntilLimit","type":"uint256"},{"internalType":"uint256","name":"borrowable","type":"uint256"},{"internalType":"uint256","name":"borrowLimitUtilization","type":"uint256"},{"internalType":"uint256","name":"maxBorrowLimit","type":"uint256"},{"internalType":"uint256","name":"borrowExpandPercent","type":"uint256"},{"internalType":"uint256","name":"borrowExpandDuration","type":"uint256"},{"internalType":"uint256","name":"baseBorrowLimit","type":"uint256"},{"internalType":"uint256","name":"minimumBorrowing","type":"uint256"}],"internalType":"struct FluidView.VaultData","name":"vaultData","type":"tuple"}],"stateMutability":"view","type":"function"}],
1111
1111
  "networks": {
1112
- "1": { "address": "0xBAc6dc3edB72Bc705Ab4e31F2a2151Fe06550D9B" }
1112
+ "1": { "address": "0x72B2A658d2009fF3c3e133d3a042fFE705808aC5" }
1113
1113
  }
1114
1114
  }
1115
1115
  }
@@ -12,10 +12,14 @@ import {
12
12
  FluidVaultData,
13
13
  FluidVaultType, InnerFluidMarketData,
14
14
  } from '../types';
15
- import { FluidViewContract } from '../contracts';
16
- import { getEthAmountForDecimals } from '../services/utils';
15
+ import { DFSFeedRegistryContract, FeedRegistryContract, FluidViewContract } from '../contracts';
16
+ import { getEthAmountForDecimals, isMainnetNetwork } from '../services/utils';
17
17
  import { getFluidAggregatedData } from '../helpers/fluidHelpers';
18
18
  import { FluidView } from '../types/contracts/generated';
19
+ import { chunkAndMulticall } from '../multicall';
20
+ import { getFluidMarketInfoById, getFluidVersionsDataForNetwork } from '../markets/fluid';
21
+ import { USD_QUOTE } from '../constants';
22
+ import { getChainlinkAssetAddress, getWstETHPrice } from '../services/priceService';
19
23
 
20
24
  export const EMPTY_USED_ASSET = {
21
25
  isSupplied: false,
@@ -38,41 +42,75 @@ const parseVaultType = (vaultType: number) => {
38
42
  }
39
43
  };
40
44
 
41
- const parseMarketData = (data: FluidView.VaultDataStructOutputStruct) => {
45
+ const parseMarketData = async (web3: Web3, data: FluidView.VaultDataStructOutputStruct, network: NetworkNumber) => {
42
46
  const collAsset = getAssetInfoByAddress(data.supplyToken0);
43
47
  const debtAsset = getAssetInfoByAddress(data.borrowToken0);
44
48
 
49
+ const supplyRate = new Dec(data.supplyRateVault).div(100).toString();
50
+ const borrowRate = new Dec(data.borrowRateVault).div(100).toString();
51
+
52
+ const oracleScaleFactor = new Dec(27).add(debtAsset.decimals).sub(collAsset.decimals).toString();
53
+ const oracleScale = new Dec(10).pow(oracleScaleFactor).toString();
54
+ const oraclePrice = new Dec(data.oraclePriceOperate).div(oracleScale).toString();
55
+
56
+ const isTokenUSDA = debtAsset.symbol === 'USDA';
57
+ const isMainnet = isMainnetNetwork(network);
58
+ const loanTokenFeedAddress = getChainlinkAssetAddress(debtAsset.symbol, network);
59
+
60
+ let loanTokenPrice;
61
+ if (debtAsset.symbol === 'wstETH') {
62
+ // need to handle wstETH for l2s inside getWstETHPrice
63
+ loanTokenPrice = await getWstETHPrice(web3);
64
+ } else if (isMainnet) {
65
+ const feedRegistryContract = FeedRegistryContract(web3, NetworkNumber.Eth);
66
+ loanTokenPrice = isTokenUSDA ? '100000000' : await feedRegistryContract.methods.latestAnswer(loanTokenFeedAddress, USD_QUOTE).call();
67
+ } else {
68
+ // Currently only base network is supported
69
+ const feedRegistryContract = DFSFeedRegistryContract(web3, network);
70
+ const roundPriceData = isTokenUSDA ? { answer: '100000000' } : await feedRegistryContract.methods.latestRoundData(loanTokenFeedAddress, USD_QUOTE).call();
71
+ loanTokenPrice = roundPriceData.answer;
72
+ }
73
+
74
+ const debtPriceParsed = new Dec(loanTokenPrice).div(1e8).toString();
75
+
45
76
  const collAssetData: FluidAssetData = {
46
77
  symbol: collAsset.symbol,
47
78
  address: collAsset.address,
48
- price: getEthAmountForDecimals(data.priceOfSupplyToken0InUSD, 8),
79
+ price: new Dec(debtPriceParsed).mul(oraclePrice).toString(),
49
80
  totalSupply: data.totalSupplyVault,
50
81
  totalBorrow: data.totalBorrowVault,
51
82
  canBeSupplied: true,
52
83
  canBeBorrowed: false,
53
- supplyRate: new Dec(data.supplyRateVault).div(100).toString(),
84
+ supplyRate,
54
85
  borrowRate: '0',
55
86
  };
56
87
 
57
88
  const debtAssetData: FluidAssetData = {
58
89
  symbol: debtAsset.symbol,
59
90
  address: debtAsset.address,
60
- price: getEthAmountForDecimals(data.priceOfBorrowToken0InUSD, 8),
91
+ price: debtPriceParsed,
61
92
  totalSupply: data.totalSupplyVault,
62
93
  totalBorrow: data.totalBorrowVault,
63
94
  canBeSupplied: false,
64
95
  canBeBorrowed: true,
65
96
  supplyRate: '0',
66
- borrowRate: new Dec(data.borrowRateVault).div(100).toString(),
97
+ borrowRate,
67
98
  };
68
99
 
69
100
  const assetsData = {
70
101
  [collAsset.symbol]: collAssetData,
71
102
  [debtAsset.symbol]: debtAssetData,
72
103
  };
104
+ const marketInfo = getFluidMarketInfoById(+data.vaultId, network);
105
+ const totalSupplyVault = getEthAmountForDecimals(data.totalSupplyVault, collAsset.decimals);
106
+ const totalBorrowVault = getEthAmountForDecimals(data.totalBorrowVault, debtAsset.decimals);
107
+
108
+ const liqRatio = new Dec(data.liquidationThreshold).div(100).toString();
109
+ const liqFactor = new Dec(data.liquidationThreshold).div(10_000).toString();
73
110
 
74
111
  const marketData = {
75
112
  vaultId: +data.vaultId,
113
+ vaultValue: marketInfo?.value,
76
114
  isSmartColl: data.isSmartColl,
77
115
  isSmartDebt: data.isSmartDebt,
78
116
  marketAddress: data.vault,
@@ -80,12 +118,16 @@ const parseMarketData = (data: FluidView.VaultDataStructOutputStruct) => {
80
118
  oracle: data.oracle,
81
119
  liquidationPenaltyPercent: new Dec(data.liquidationPenalty).div(100).toString(),
82
120
  collFactor: new Dec(data.collateralFactor).div(10000).toString(), // we want actual factor, not in %, so we divide by 10000 instead of 100
83
- liquidationRatio: new Dec(data.liquidationThreshold).div(100).toString(),
121
+ liquidationRatio: liqRatio,
122
+ liqFactor,
123
+ minRatio: new Dec(1).div(liqFactor).mul(100).toString(),
84
124
  collAsset0: collAsset.symbol,
85
125
  debtAsset0: debtAsset.symbol,
86
126
  totalPositions: data.totalPositions,
87
- totalSupplyVault: getEthAmountForDecimals(data.totalSupplyVault, collAsset.decimals),
88
- totalBorrowVault: getEthAmountForDecimals(data.totalBorrowVault, debtAsset.decimals),
127
+ totalSupplyVault,
128
+ totalBorrowVault,
129
+ totalSupplyVaultUsd: new Dec(totalSupplyVault).mul(collAssetData.price).toString(),
130
+ totalBorrowVaultUsd: new Dec(totalSupplyVault).mul(debtAssetData.price).toString(),
89
131
  withdrawalLimit: getEthAmountForDecimals(data.withdrawalLimit, collAsset.decimals),
90
132
  withdrawableUntilLimit: getEthAmountForDecimals(data.withdrawableUntilLimit, collAsset.decimals),
91
133
  withdrawable: getEthAmountForDecimals(data.withdrawable, collAsset.decimals),
@@ -96,6 +138,8 @@ const parseMarketData = (data: FluidView.VaultDataStructOutputStruct) => {
96
138
  maxBorrowLimit: getEthAmountForDecimals(data.maxBorrowLimit, debtAsset.decimals),
97
139
  baseBorrowLimit: getEthAmountForDecimals(data.baseBorrowLimit, debtAsset.decimals),
98
140
  minimumBorrowing: getEthAmountForDecimals(data.minimumBorrowing, debtAsset.decimals),
141
+ borrowRate,
142
+ supplyRate,
99
143
  };
100
144
 
101
145
  return {
@@ -177,7 +221,7 @@ export const getFluidMarketData = async (web3: Web3, network: NetworkNumber, mar
177
221
 
178
222
  const data = await view.methods.getVaultData(market.marketAddress).call();
179
223
 
180
- return parseMarketData(data);
224
+ return parseMarketData(web3, data, network);
181
225
  };
182
226
 
183
227
  export const getFluidVaultIdsForUser = async (web3: Web3,
@@ -210,11 +254,24 @@ export const getFluidPosition = async (
210
254
  export const getFluidPositionWithMarket = async (web3: Web3, network: NetworkNumber, vaultId: string) => {
211
255
  const view = FluidViewContract(web3, network);
212
256
  const data = await view.methods.getPositionByNftId(vaultId).call();
213
- const marketData = parseMarketData(data.vault);
257
+ const marketData = await parseMarketData(web3, data.vault, network);
214
258
  const userData = parseUserData(data.position, marketData);
215
259
 
216
260
  return {
217
261
  userData,
218
262
  marketData,
219
263
  };
264
+ };
265
+
266
+ export const getAllFluidMarketDataChunked = async (network: NetworkNumber, web3: Web3) => {
267
+ const versions = getFluidVersionsDataForNetwork(network);
268
+ const view = FluidViewContract(web3, network);
269
+ const calls = versions.map((version) => ({
270
+ target: view.options.address,
271
+ abiItem: view.options.jsonInterface.find((item) => item.name === 'getVaultData'),
272
+ params: [version.marketAddress],
273
+ }));
274
+
275
+ const data = await chunkAndMulticall(calls, 10, 'latest', web3, network);
276
+ return Promise.all(data.map(async (item, i) => parseMarketData(web3, item.vaultData, network)));
220
277
  };