@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.
- package/cjs/config/contracts.d.ts +5 -5
- package/cjs/config/contracts.js +2 -2
- package/cjs/fluid/index.d.ts +1 -0
- package/cjs/fluid/index.js +65 -12
- package/cjs/markets/fluid/index.d.ts +2 -0
- package/cjs/markets/fluid/index.js +345 -1
- package/cjs/markets/index.d.ts +1 -1
- package/cjs/markets/index.js +3 -1
- package/cjs/morphoBlue/index.js +1 -2
- package/cjs/multicall/index.d.ts +1 -0
- package/cjs/multicall/index.js +8 -1
- package/cjs/services/utils.d.ts +1 -0
- package/cjs/services/utils.js +3 -1
- package/cjs/types/contracts/generated/FluidView.d.ts +0 -42
- package/cjs/types/fluid.d.ts +11 -0
- package/esm/config/contracts.d.ts +5 -5
- package/esm/config/contracts.js +2 -2
- package/esm/fluid/index.d.ts +1 -0
- package/esm/fluid/index.js +65 -13
- package/esm/markets/fluid/index.d.ts +2 -0
- package/esm/markets/fluid/index.js +343 -1
- package/esm/markets/index.d.ts +1 -1
- package/esm/markets/index.js +1 -1
- package/esm/morphoBlue/index.js +1 -2
- package/esm/multicall/index.d.ts +1 -0
- package/esm/multicall/index.js +6 -0
- package/esm/services/utils.d.ts +1 -0
- package/esm/services/utils.js +1 -0
- package/esm/types/contracts/generated/FluidView.d.ts +0 -42
- package/esm/types/fluid.d.ts +11 -0
- package/package.json +5 -3
- package/src/config/contracts.js +2 -2
- package/src/fluid/index.ts +69 -12
- package/src/markets/fluid/index.ts +347 -2
- package/src/markets/index.ts +1 -1
- package/src/morphoBlue/index.ts +1 -3
- package/src/multicall/index.ts +10 -1
- package/src/services/utils.ts +3 -1
- package/src/types/contracts/generated/FluidView.ts +0 -82
- package/src/types/fluid.ts +11 -0
package/esm/markets/index.d.ts
CHANGED
|
@@ -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';
|
package/esm/markets/index.js
CHANGED
|
@@ -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';
|
package/esm/morphoBlue/index.js
CHANGED
|
@@ -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;
|
package/esm/multicall/index.d.ts
CHANGED
|
@@ -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[]>;
|
package/esm/multicall/index.js
CHANGED
|
@@ -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
|
+
});
|
package/esm/services/utils.d.ts
CHANGED
|
@@ -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;
|
package/esm/services/utils.js
CHANGED
|
@@ -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;
|
package/esm/types/fluid.d.ts
CHANGED
|
@@ -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
|
-
"@
|
|
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",
|
package/src/config/contracts.js
CHANGED
|
@@ -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": "
|
|
1112
|
+
"1": { "address": "0x72B2A658d2009fF3c3e133d3a042fFE705808aC5" }
|
|
1113
1113
|
}
|
|
1114
1114
|
}
|
|
1115
1115
|
}
|
package/src/fluid/index.ts
CHANGED
|
@@ -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:
|
|
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
|
|
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:
|
|
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
|
|
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:
|
|
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
|
|
88
|
-
totalBorrowVault
|
|
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
|
};
|