@scallop-io/sui-scallop-sdk 1.3.4-alpha.1 → 1.3.4-alpha.2
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/dist/index.js +550 -544
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +549 -544
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
- package/src/builders/loyaltyProgramBuilder.ts +1 -1
- package/src/constants/common.ts +0 -1
- package/src/constants/enum.ts +12 -11
- package/src/constants/index.ts +0 -1
- package/src/constants/queryKeys.ts +1 -5
- package/src/constants/rpc.ts +16 -0
- package/src/constants/testAddress.ts +35 -76
- package/src/constants/tokenBucket.ts +1 -1
- package/src/models/scallop.ts +3 -2
- package/src/models/scallopAddress.ts +2 -2
- package/src/models/scallopBuilder.ts +7 -5
- package/src/models/scallopCache.ts +1 -1
- package/src/models/scallopClient.ts +27 -26
- package/src/models/scallopQuery.ts +61 -19
- package/src/models/scallopUtils.ts +74 -109
- package/src/models/suiKit.ts +11 -0
- package/src/queries/borrowIncentiveQuery.ts +6 -13
- package/src/queries/coreQuery.ts +245 -236
- package/src/queries/isolatedAsset.ts +4 -4
- package/src/queries/loyaltyProgramQuery.ts +1 -1
- package/src/queries/portfolioQuery.ts +58 -34
- package/src/queries/referralQuery.ts +1 -0
- package/src/queries/spoolQuery.ts +17 -17
- package/src/types/query/core.ts +0 -1
- package/src/utils/tokenBucket.ts +2 -1
- package/dist/builders/borrowIncentiveBuilder.d.ts +0 -12
- package/dist/builders/coreBuilder.d.ts +0 -12
- package/dist/builders/index.d.ts +0 -12
- package/dist/builders/loyaltyProgramBuilder.d.ts +0 -12
- package/dist/builders/oracle.d.ts +0 -14
- package/dist/builders/referralBuilder.d.ts +0 -12
- package/dist/builders/sCoinBuilder.d.ts +0 -4
- package/dist/builders/spoolBuilder.d.ts +0 -12
- package/dist/builders/vescaBuilder.d.ts +0 -25
- package/dist/constants/cache.d.ts +0 -14
- package/dist/constants/coinGecko.d.ts +0 -2
- package/dist/constants/common.d.ts +0 -20
- package/dist/constants/enum.d.ts +0 -13
- package/dist/constants/flashloan.d.ts +0 -2
- package/dist/constants/index.d.ts +0 -12
- package/dist/constants/poolAddress.d.ts +0 -5
- package/dist/constants/pyth.d.ts +0 -5
- package/dist/constants/queryKeys.d.ts +0 -59
- package/dist/constants/testAddress.d.ts +0 -2
- package/dist/constants/tokenBucket.d.ts +0 -2
- package/dist/constants/vesca.d.ts +0 -5
- package/dist/index.d.ts +0 -3
- package/dist/models/index.d.ts +0 -8
- package/dist/models/scallop.d.ts +0 -74
- package/dist/models/scallopAddress.d.ts +0 -150
- package/dist/models/scallopBuilder.d.ts +0 -89
- package/dist/models/scallopCache.d.ts +0 -74
- package/dist/models/scallopClient.d.ts +0 -321
- package/dist/models/scallopIndexer.d.ts +0 -89
- package/dist/models/scallopQuery.d.ts +0 -474
- package/dist/models/scallopUtils.d.ts +0 -222
- package/dist/queries/borrowIncentiveQuery.d.ts +0 -61
- package/dist/queries/coreQuery.d.ts +0 -167
- package/dist/queries/index.d.ts +0 -8
- package/dist/queries/isolatedAsset.d.ts +0 -14
- package/dist/queries/loyaltyProgramQuery.d.ts +0 -10
- package/dist/queries/portfolioQuery.d.ts +0 -73
- package/dist/queries/priceQuery.d.ts +0 -16
- package/dist/queries/referralQuery.d.ts +0 -7
- package/dist/queries/sCoinQuery.d.ts +0 -41
- package/dist/queries/spoolQuery.d.ts +0 -70
- package/dist/queries/supplyLimit.d.ts +0 -9
- package/dist/queries/vescaQuery.d.ts +0 -36
- package/dist/types/address.d.ts +0 -107
- package/dist/types/builder/borrowIncentive.d.ts +0 -35
- package/dist/types/builder/core.d.ts +0 -56
- package/dist/types/builder/index.d.ts +0 -24
- package/dist/types/builder/loyaltyProgram.d.ts +0 -23
- package/dist/types/builder/referral.d.ts +0 -30
- package/dist/types/builder/sCoin.d.ts +0 -37
- package/dist/types/builder/spool.d.ts +0 -29
- package/dist/types/builder/vesca.d.ts +0 -51
- package/dist/types/constant/common.d.ts +0 -24
- package/dist/types/constant/enum.d.ts +0 -48
- package/dist/types/constant/index.d.ts +0 -2
- package/dist/types/index.d.ts +0 -6
- package/dist/types/model.d.ts +0 -54
- package/dist/types/query/borrowIncentive.d.ts +0 -124
- package/dist/types/query/core.d.ts +0 -362
- package/dist/types/query/index.d.ts +0 -7
- package/dist/types/query/loyaltyProgram.d.ts +0 -5
- package/dist/types/query/portfolio.d.ts +0 -115
- package/dist/types/query/sCoin.d.ts +0 -1
- package/dist/types/query/spool.d.ts +0 -122
- package/dist/types/query/vesca.d.ts +0 -26
- package/dist/types/utils.d.ts +0 -21
- package/dist/utils/builder.d.ts +0 -15
- package/dist/utils/index.d.ts +0 -5
- package/dist/utils/indexer.d.ts +0 -17
- package/dist/utils/query.d.ts +0 -62
- package/dist/utils/tokenBucket.d.ts +0 -11
- package/dist/utils/util.d.ts +0 -26
package/src/queries/coreQuery.ts
CHANGED
|
@@ -4,6 +4,7 @@ import {
|
|
|
4
4
|
PROTOCOL_OBJECT_ID,
|
|
5
5
|
SUPPORT_COLLATERALS,
|
|
6
6
|
BORROW_FEE_PROTOCOL_ID,
|
|
7
|
+
USE_TEST_ADDRESS,
|
|
7
8
|
FlashLoanFeeObjectMap,
|
|
8
9
|
} from '../constants';
|
|
9
10
|
import {
|
|
@@ -34,10 +35,10 @@ import {
|
|
|
34
35
|
CollateralStat,
|
|
35
36
|
SupportMarketCoins,
|
|
36
37
|
OptionalKeys,
|
|
38
|
+
CoinPrices,
|
|
37
39
|
} from '../types';
|
|
38
40
|
import BigNumber from 'bignumber.js';
|
|
39
41
|
import { getSupplyLimit } from './supplyLimit';
|
|
40
|
-
import { isIsolatedAsset } from './isolatedAsset';
|
|
41
42
|
// import { isIsolatedAsset } from './isolatedAsset';
|
|
42
43
|
|
|
43
44
|
/**
|
|
@@ -52,9 +53,10 @@ import { isIsolatedAsset } from './isolatedAsset';
|
|
|
52
53
|
*/
|
|
53
54
|
export const queryMarket = async (
|
|
54
55
|
query: ScallopQuery,
|
|
55
|
-
indexer: boolean = false
|
|
56
|
+
indexer: boolean = false,
|
|
57
|
+
coinPrices?: CoinPrices
|
|
56
58
|
) => {
|
|
57
|
-
|
|
59
|
+
coinPrices = coinPrices ?? (await query.utils.getCoinPrices()) ?? {};
|
|
58
60
|
|
|
59
61
|
const pools: MarketPools = {};
|
|
60
62
|
const collaterals: MarketCollaterals = {};
|
|
@@ -63,13 +65,13 @@ export const queryMarket = async (
|
|
|
63
65
|
const marketIndexer = await query.indexer.getMarket();
|
|
64
66
|
|
|
65
67
|
const updatePools = (item: MarketPool) => {
|
|
66
|
-
item.coinPrice = coinPrices[item.coinName]
|
|
68
|
+
item.coinPrice = coinPrices[item.coinName] ?? item.coinPrice;
|
|
67
69
|
item.coinWrappedType = query.utils.getCoinWrappedType(item.coinName);
|
|
68
70
|
pools[item.coinName] = item;
|
|
69
71
|
};
|
|
70
72
|
|
|
71
73
|
const updateCollaterals = (item: MarketCollateral) => {
|
|
72
|
-
item.coinPrice = coinPrices[item.coinName]
|
|
74
|
+
item.coinPrice = coinPrices[item.coinName] ?? item.coinPrice;
|
|
73
75
|
item.coinWrappedType = query.utils.getCoinWrappedType(item.coinName);
|
|
74
76
|
collaterals[item.coinName] = item;
|
|
75
77
|
};
|
|
@@ -156,8 +158,8 @@ export const queryMarket = async (
|
|
|
156
158
|
borrowFee: parsedMarketPoolData.borrowFee,
|
|
157
159
|
marketCoinSupplyAmount: parsedMarketPoolData.marketCoinSupplyAmount,
|
|
158
160
|
minBorrowAmount: parsedMarketPoolData.minBorrowAmount,
|
|
159
|
-
isIsolated: await isIsolatedAsset(query.utils, poolCoinName),
|
|
160
|
-
|
|
161
|
+
// isIsolated: await isIsolatedAsset(query.utils, poolCoinName),
|
|
162
|
+
isIsolated: false,
|
|
161
163
|
maxSupplyCoin,
|
|
162
164
|
...calculatedMarketPoolData,
|
|
163
165
|
};
|
|
@@ -204,7 +206,6 @@ export const queryMarket = async (
|
|
|
204
206
|
liquidationPanelty: parsedMarketCollateralData.liquidationPanelty,
|
|
205
207
|
liquidationReserveFactor:
|
|
206
208
|
parsedMarketCollateralData.liquidationReserveFactor,
|
|
207
|
-
isIsolated: await isIsolatedAsset(query.utils, collateralCoinName),
|
|
208
209
|
...calculatedMarketCollateralData,
|
|
209
210
|
};
|
|
210
211
|
}
|
|
@@ -231,13 +232,14 @@ export const queryMarket = async (
|
|
|
231
232
|
export const getMarketPools = async (
|
|
232
233
|
query: ScallopQuery,
|
|
233
234
|
poolCoinNames: SupportPoolCoins[] = [...SUPPORT_POOLS],
|
|
234
|
-
indexer: boolean = false
|
|
235
|
+
indexer: boolean = false,
|
|
236
|
+
coinPrices?: CoinPrices
|
|
235
237
|
) => {
|
|
236
238
|
const marketId = query.address.get('core.market');
|
|
237
239
|
const marketObjectResponse = await query.cache.queryGetObject(marketId, {
|
|
238
240
|
showContent: true,
|
|
239
241
|
});
|
|
240
|
-
|
|
242
|
+
coinPrices = (await query.utils.getCoinPrices(poolCoinNames)) ?? {};
|
|
241
243
|
|
|
242
244
|
const marketPools: MarketPools = {};
|
|
243
245
|
|
|
@@ -247,7 +249,7 @@ export const getMarketPools = async (
|
|
|
247
249
|
const updateMarketPool = (marketPool: MarketPool) => {
|
|
248
250
|
if (!poolCoinNames.includes(marketPool.coinName)) return;
|
|
249
251
|
marketPool.coinPrice =
|
|
250
|
-
coinPrices[marketPool.coinName]
|
|
252
|
+
coinPrices[marketPool.coinName] ?? marketPool.coinPrice;
|
|
251
253
|
marketPool.coinWrappedType = query.utils.getCoinWrappedType(
|
|
252
254
|
marketPool.coinName
|
|
253
255
|
);
|
|
@@ -294,129 +296,131 @@ export const getMarketPool = async (
|
|
|
294
296
|
indexer: boolean = false,
|
|
295
297
|
marketObject?: SuiObjectData | null,
|
|
296
298
|
coinPrice?: number
|
|
297
|
-
)
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
if (indexer) {
|
|
304
|
-
const marketPoolIndexer = await query.indexer.getMarketPool(poolCoinName);
|
|
305
|
-
marketPoolIndexer.coinPrice = coinPrice || marketPoolIndexer.coinPrice;
|
|
306
|
-
marketPoolIndexer.coinWrappedType = query.utils.getCoinWrappedType(
|
|
307
|
-
marketPoolIndexer.coinName
|
|
308
|
-
);
|
|
299
|
+
) => {
|
|
300
|
+
let marketPool: MarketPool | undefined;
|
|
301
|
+
let balanceSheet: BalanceSheet | undefined;
|
|
302
|
+
let borrowIndex: BorrowIndex | undefined;
|
|
303
|
+
let interestModel: InterestModel | undefined;
|
|
304
|
+
let borrowFeeRate: { value: string } | undefined;
|
|
309
305
|
|
|
310
|
-
|
|
311
|
-
|
|
306
|
+
coinPrice =
|
|
307
|
+
coinPrice ??
|
|
308
|
+
(await query.utils.getCoinPrices([poolCoinName]))?.[poolCoinName];
|
|
312
309
|
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
})
|
|
320
|
-
)?.data;
|
|
321
|
-
|
|
322
|
-
if (!(marketObject && marketObject.content?.dataType === 'moveObject'))
|
|
323
|
-
throw new Error(`Failed to fetch marketObject`);
|
|
324
|
-
|
|
325
|
-
const fields = marketObject.content.fields as any;
|
|
326
|
-
const coinType = query.utils.parseCoinType(poolCoinName);
|
|
327
|
-
// Get balance sheet.
|
|
328
|
-
const balanceSheetParentId =
|
|
329
|
-
fields.vault.fields.balance_sheets.fields.table.fields.id.id;
|
|
330
|
-
const balanceSheetDynamicFieldObjectResponse =
|
|
331
|
-
await query.cache.queryGetDynamicFieldObject({
|
|
332
|
-
parentId: balanceSheetParentId,
|
|
333
|
-
name: {
|
|
334
|
-
type: '0x1::type_name::TypeName',
|
|
335
|
-
value: {
|
|
336
|
-
name: coinType.substring(2),
|
|
337
|
-
},
|
|
338
|
-
},
|
|
339
|
-
});
|
|
310
|
+
if (indexer) {
|
|
311
|
+
const marketPoolIndexer = await query.indexer.getMarketPool(poolCoinName);
|
|
312
|
+
marketPoolIndexer.coinPrice = coinPrice ?? marketPoolIndexer.coinPrice;
|
|
313
|
+
marketPoolIndexer.coinWrappedType = query.utils.getCoinWrappedType(
|
|
314
|
+
marketPoolIndexer.coinName
|
|
315
|
+
);
|
|
340
316
|
|
|
341
|
-
|
|
342
|
-
|
|
317
|
+
return marketPoolIndexer;
|
|
318
|
+
}
|
|
343
319
|
|
|
344
|
-
|
|
345
|
-
|
|
320
|
+
const marketId = query.address.get('core.market');
|
|
321
|
+
marketObject =
|
|
322
|
+
marketObject ??
|
|
323
|
+
(
|
|
324
|
+
await query.cache.queryGetObject(marketId, {
|
|
325
|
+
showContent: true,
|
|
326
|
+
})
|
|
327
|
+
)?.data;
|
|
328
|
+
|
|
329
|
+
if (marketObject) {
|
|
330
|
+
if (marketObject.content && 'fields' in marketObject.content) {
|
|
331
|
+
const fields = marketObject.content.fields as any;
|
|
332
|
+
const coinType = query.utils.parseCoinType(poolCoinName);
|
|
333
|
+
// Get balance sheet.
|
|
334
|
+
const balanceSheetParentId =
|
|
335
|
+
fields.vault.fields.balance_sheets.fields.table.fields.id.id;
|
|
336
|
+
const balanceSheetDynamicFieldObjectResponse =
|
|
337
|
+
await query.cache.queryGetDynamicFieldObject({
|
|
338
|
+
parentId: balanceSheetParentId,
|
|
339
|
+
name: {
|
|
340
|
+
type: '0x1::type_name::TypeName',
|
|
341
|
+
value: {
|
|
342
|
+
name: coinType.substring(2),
|
|
343
|
+
},
|
|
344
|
+
},
|
|
345
|
+
});
|
|
346
|
+
if (!balanceSheetDynamicFieldObjectResponse)
|
|
347
|
+
throw new Error(
|
|
348
|
+
`Failed to fetch balanceSheetDynamicFieldObjectResponse for ${poolCoinName}`
|
|
349
|
+
);
|
|
350
|
+
|
|
351
|
+
const balanceSheetDynamicFieldObject =
|
|
352
|
+
balanceSheetDynamicFieldObjectResponse.data;
|
|
353
|
+
if (
|
|
346
354
|
balanceSheetDynamicFieldObject &&
|
|
347
355
|
balanceSheetDynamicFieldObject.content &&
|
|
348
356
|
'fields' in balanceSheetDynamicFieldObject.content
|
|
349
|
-
)
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
value: {
|
|
367
|
-
name: coinType.substring(2),
|
|
357
|
+
) {
|
|
358
|
+
const dynamicFields = balanceSheetDynamicFieldObject.content
|
|
359
|
+
.fields as any;
|
|
360
|
+
balanceSheet = dynamicFields.value.fields;
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
// Get borrow index.
|
|
364
|
+
const borrowIndexParentId =
|
|
365
|
+
fields.borrow_dynamics.fields.table.fields.id.id;
|
|
366
|
+
const borrowIndexDynamicFieldObjectResponse =
|
|
367
|
+
await query.cache.queryGetDynamicFieldObject({
|
|
368
|
+
parentId: borrowIndexParentId,
|
|
369
|
+
name: {
|
|
370
|
+
type: '0x1::type_name::TypeName',
|
|
371
|
+
value: {
|
|
372
|
+
name: coinType.substring(2),
|
|
373
|
+
},
|
|
368
374
|
},
|
|
369
|
-
}
|
|
370
|
-
|
|
375
|
+
});
|
|
376
|
+
if (!borrowIndexDynamicFieldObjectResponse)
|
|
377
|
+
throw new Error(
|
|
378
|
+
`Failed to fetch borrowIndexDynamicFieldObjectResponse for ${poolCoinName}`
|
|
379
|
+
);
|
|
371
380
|
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
!(
|
|
381
|
+
const borrowIndexDynamicFieldObject =
|
|
382
|
+
borrowIndexDynamicFieldObjectResponse.data;
|
|
383
|
+
if (
|
|
376
384
|
borrowIndexDynamicFieldObject &&
|
|
377
385
|
borrowIndexDynamicFieldObject.content &&
|
|
378
386
|
'fields' in borrowIndexDynamicFieldObject.content
|
|
379
|
-
)
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
value: {
|
|
397
|
-
name: coinType.substring(2),
|
|
387
|
+
) {
|
|
388
|
+
const dynamicFields = borrowIndexDynamicFieldObject.content
|
|
389
|
+
.fields as any;
|
|
390
|
+
borrowIndex = dynamicFields.value.fields;
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
// Get interest models.
|
|
394
|
+
const interestModelParentId =
|
|
395
|
+
fields.interest_models.fields.table.fields.id.id;
|
|
396
|
+
const interestModelDynamicFieldObjectResponse =
|
|
397
|
+
await query.cache.queryGetDynamicFieldObject({
|
|
398
|
+
parentId: interestModelParentId,
|
|
399
|
+
name: {
|
|
400
|
+
type: '0x1::type_name::TypeName',
|
|
401
|
+
value: {
|
|
402
|
+
name: coinType.substring(2),
|
|
403
|
+
},
|
|
398
404
|
},
|
|
399
|
-
}
|
|
400
|
-
});
|
|
405
|
+
});
|
|
401
406
|
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
407
|
+
if (!interestModelDynamicFieldObjectResponse)
|
|
408
|
+
throw new Error(
|
|
409
|
+
`Failed to fetch interestModelDynamicFieldObjectResponse for ${poolCoinName}`
|
|
410
|
+
);
|
|
411
|
+
const interestModelDynamicFieldObject =
|
|
412
|
+
interestModelDynamicFieldObjectResponse.data;
|
|
413
|
+
if (
|
|
406
414
|
interestModelDynamicFieldObject &&
|
|
407
415
|
interestModelDynamicFieldObject.content &&
|
|
408
416
|
'fields' in interestModelDynamicFieldObject.content
|
|
409
|
-
)
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
const interestModel: InterestModel = (
|
|
415
|
-
interestModelDynamicFieldObject.content.fields as any
|
|
416
|
-
).value.fields;
|
|
417
|
+
) {
|
|
418
|
+
const dynamicFields = interestModelDynamicFieldObject.content
|
|
419
|
+
.fields as any;
|
|
420
|
+
interestModel = dynamicFields.value.fields;
|
|
421
|
+
}
|
|
417
422
|
|
|
418
|
-
|
|
419
|
-
const getBorrowFee = async () => {
|
|
423
|
+
// Get borrow fee.
|
|
420
424
|
const borrowFeeDynamicFieldObjectResponse =
|
|
421
425
|
await query.cache.queryGetDynamicFieldObject({
|
|
422
426
|
parentId: marketId,
|
|
@@ -430,19 +434,29 @@ export const getMarketPool = async (
|
|
|
430
434
|
},
|
|
431
435
|
});
|
|
432
436
|
|
|
437
|
+
if (!borrowFeeDynamicFieldObjectResponse)
|
|
438
|
+
throw new Error(
|
|
439
|
+
`Failed to fetch borrowFeeDynamicFieldObjectResponse for ${poolCoinName}`
|
|
440
|
+
);
|
|
433
441
|
const borrowFeeDynamicFieldObject =
|
|
434
|
-
borrowFeeDynamicFieldObjectResponse
|
|
442
|
+
borrowFeeDynamicFieldObjectResponse.data;
|
|
435
443
|
if (
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
444
|
+
borrowFeeDynamicFieldObject &&
|
|
445
|
+
borrowFeeDynamicFieldObject.content &&
|
|
446
|
+
'fields' in borrowFeeDynamicFieldObject.content
|
|
447
|
+
) {
|
|
448
|
+
const dynamicFields = borrowFeeDynamicFieldObject.content.fields as any;
|
|
449
|
+
borrowFeeRate = dynamicFields.value.fields;
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
}
|
|
445
453
|
|
|
454
|
+
if (
|
|
455
|
+
balanceSheet &&
|
|
456
|
+
borrowIndex &&
|
|
457
|
+
interestModel &&
|
|
458
|
+
(USE_TEST_ADDRESS || borrowFeeRate)
|
|
459
|
+
) {
|
|
446
460
|
const parsedMarketPoolData = parseOriginMarketPoolData({
|
|
447
461
|
type: interestModel.type.fields,
|
|
448
462
|
maxBorrowRate: interestModel.max_borrow_rate.fields,
|
|
@@ -456,7 +470,7 @@ export const getMarketPool = async (
|
|
|
456
470
|
reserve: balanceSheet.revenue,
|
|
457
471
|
reserveFactor: interestModel.revenue_factor.fields,
|
|
458
472
|
borrowWeight: interestModel.borrow_weight.fields,
|
|
459
|
-
borrowFeeRate:
|
|
473
|
+
borrowFeeRate: borrowFeeRate ?? { value: '0' },
|
|
460
474
|
baseBorrowRatePerSec: interestModel.base_borrow_rate_per_sec.fields,
|
|
461
475
|
borrowRateOnHighKink: interestModel.borrow_rate_on_high_kink.fields,
|
|
462
476
|
borrowRateOnMidKink: interestModel.borrow_rate_on_mid_kink.fields,
|
|
@@ -477,7 +491,7 @@ export const getMarketPool = async (
|
|
|
477
491
|
.shiftedBy(-coinDecimal)
|
|
478
492
|
.toNumber();
|
|
479
493
|
|
|
480
|
-
|
|
494
|
+
marketPool = {
|
|
481
495
|
coinName: poolCoinName,
|
|
482
496
|
symbol: query.utils.parseSymbol(poolCoinName),
|
|
483
497
|
coinType: query.utils.parseCoinType(poolCoinName),
|
|
@@ -496,13 +510,13 @@ export const getMarketPool = async (
|
|
|
496
510
|
marketCoinSupplyAmount: parsedMarketPoolData.marketCoinSupplyAmount,
|
|
497
511
|
minBorrowAmount: parsedMarketPoolData.minBorrowAmount,
|
|
498
512
|
maxSupplyCoin,
|
|
499
|
-
isIsolated: await isIsolatedAsset(query.utils, poolCoinName),
|
|
500
|
-
|
|
513
|
+
// isIsolated: await isIsolatedAsset(query.utils, poolCoinName),
|
|
514
|
+
isIsolated: false,
|
|
501
515
|
...calculatedMarketPoolData,
|
|
502
516
|
};
|
|
503
|
-
} catch (e) {
|
|
504
|
-
console.error(e);
|
|
505
517
|
}
|
|
518
|
+
|
|
519
|
+
return marketPool;
|
|
506
520
|
};
|
|
507
521
|
|
|
508
522
|
/**
|
|
@@ -532,7 +546,7 @@ export const getMarketCollaterals = async (
|
|
|
532
546
|
const updateMarketCollateral = (marketCollateral: MarketCollateral) => {
|
|
533
547
|
if (!collateralCoinNames.includes(marketCollateral.coinName)) return;
|
|
534
548
|
marketCollateral.coinPrice =
|
|
535
|
-
coinPrices[marketCollateral.coinName]
|
|
549
|
+
coinPrices[marketCollateral.coinName] ?? marketCollateral.coinPrice;
|
|
536
550
|
marketCollateral.coinWrappedType = query.utils.getCoinWrappedType(
|
|
537
551
|
marketCollateral.coinName
|
|
538
552
|
);
|
|
@@ -580,7 +594,7 @@ export const getMarketCollateral = async (
|
|
|
580
594
|
indexer: boolean = false,
|
|
581
595
|
marketObject?: SuiObjectData | null,
|
|
582
596
|
coinPrice?: number
|
|
583
|
-
)
|
|
597
|
+
) => {
|
|
584
598
|
coinPrice =
|
|
585
599
|
coinPrice ||
|
|
586
600
|
(await query.utils.getCoinPrices([collateralCoinName]))?.[
|
|
@@ -591,7 +605,7 @@ export const getMarketCollateral = async (
|
|
|
591
605
|
const marketCollateralIndexer =
|
|
592
606
|
await query.indexer.getMarketCollateral(collateralCoinName);
|
|
593
607
|
marketCollateralIndexer.coinPrice =
|
|
594
|
-
coinPrice
|
|
608
|
+
coinPrice ?? marketCollateralIndexer.coinPrice;
|
|
595
609
|
marketCollateralIndexer.coinWrappedType = query.utils.getCoinWrappedType(
|
|
596
610
|
marketCollateralIndexer.coinName
|
|
597
611
|
);
|
|
@@ -599,9 +613,9 @@ export const getMarketCollateral = async (
|
|
|
599
613
|
return marketCollateralIndexer;
|
|
600
614
|
}
|
|
601
615
|
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
616
|
+
let marketCollateral: MarketCollateral | undefined;
|
|
617
|
+
let riskModel: RiskModel | undefined;
|
|
618
|
+
let collateralStat: CollateralStat | undefined;
|
|
605
619
|
|
|
606
620
|
const marketId = query.address.get('core.market');
|
|
607
621
|
marketObject =
|
|
@@ -612,106 +626,101 @@ export const getMarketCollateral = async (
|
|
|
612
626
|
})
|
|
613
627
|
)?.data;
|
|
614
628
|
|
|
615
|
-
if (
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
const coinType = query.utils.parseCoinType(collateralCoinName);
|
|
620
|
-
|
|
621
|
-
// Get risk model.
|
|
622
|
-
const riskModelParentId = fields.risk_models.fields.table.fields.id.id;
|
|
623
|
-
const riskModelDynamicFieldObjectResponse =
|
|
624
|
-
await query.cache.queryGetDynamicFieldObject({
|
|
625
|
-
parentId: riskModelParentId,
|
|
626
|
-
name: {
|
|
627
|
-
type: '0x1::type_name::TypeName',
|
|
628
|
-
value: {
|
|
629
|
-
name: coinType.substring(2),
|
|
630
|
-
},
|
|
631
|
-
},
|
|
632
|
-
});
|
|
629
|
+
if (marketObject) {
|
|
630
|
+
if (marketObject.content && 'fields' in marketObject.content) {
|
|
631
|
+
const fields = marketObject.content.fields as any;
|
|
632
|
+
const coinType = query.utils.parseCoinType(collateralCoinName);
|
|
633
633
|
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
634
|
+
// Get risk model.
|
|
635
|
+
const riskModelParentId = fields.risk_models.fields.table.fields.id.id;
|
|
636
|
+
const riskModelDynamicFieldObjectResponse =
|
|
637
|
+
await query.cache.queryGetDynamicFieldObject({
|
|
638
|
+
parentId: riskModelParentId,
|
|
639
|
+
name: {
|
|
640
|
+
type: '0x1::type_name::TypeName',
|
|
641
|
+
value: {
|
|
642
|
+
name: coinType.substring(2),
|
|
643
|
+
},
|
|
644
|
+
},
|
|
645
|
+
});
|
|
645
646
|
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
type: '0x1::type_name::TypeName',
|
|
658
|
-
value: {
|
|
659
|
-
name: coinType.substring(2),
|
|
660
|
-
},
|
|
661
|
-
},
|
|
662
|
-
});
|
|
647
|
+
if (!riskModelDynamicFieldObjectResponse) return undefined;
|
|
648
|
+
const riskModelDynamicFieldObject =
|
|
649
|
+
riskModelDynamicFieldObjectResponse.data;
|
|
650
|
+
if (
|
|
651
|
+
riskModelDynamicFieldObject &&
|
|
652
|
+
riskModelDynamicFieldObject.content &&
|
|
653
|
+
'fields' in riskModelDynamicFieldObject.content
|
|
654
|
+
) {
|
|
655
|
+
const dynamicFields = riskModelDynamicFieldObject.content.fields as any;
|
|
656
|
+
riskModel = dynamicFields.value.fields;
|
|
657
|
+
}
|
|
663
658
|
|
|
664
|
-
|
|
665
|
-
|
|
659
|
+
// Get collateral stat.
|
|
660
|
+
const collateralStatParentId =
|
|
661
|
+
fields.collateral_stats.fields.table.fields.id.id;
|
|
662
|
+
const collateralStatDynamicFieldObjectResponse =
|
|
663
|
+
await query.cache.queryGetDynamicFieldObject({
|
|
664
|
+
parentId: collateralStatParentId,
|
|
665
|
+
name: {
|
|
666
|
+
type: '0x1::type_name::TypeName',
|
|
667
|
+
value: {
|
|
668
|
+
name: coinType.substring(2),
|
|
669
|
+
},
|
|
670
|
+
},
|
|
671
|
+
});
|
|
666
672
|
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
673
|
+
if (!collateralStatDynamicFieldObjectResponse) return undefined;
|
|
674
|
+
const collateralStatDynamicFieldObject =
|
|
675
|
+
collateralStatDynamicFieldObjectResponse.data;
|
|
676
|
+
if (
|
|
677
|
+
collateralStatDynamicFieldObject &&
|
|
678
|
+
collateralStatDynamicFieldObject.content &&
|
|
679
|
+
'fields' in collateralStatDynamicFieldObject.content
|
|
680
|
+
) {
|
|
681
|
+
const dynamicFields = collateralStatDynamicFieldObject.content
|
|
682
|
+
.fields as any;
|
|
683
|
+
collateralStat = dynamicFields.value.fields;
|
|
684
|
+
}
|
|
685
|
+
}
|
|
686
|
+
}
|
|
677
687
|
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
maxCollateralAmount: riskModel.max_collateral_amount,
|
|
690
|
-
totalCollateralAmount: collateralStat.amount,
|
|
691
|
-
});
|
|
688
|
+
if (riskModel && collateralStat) {
|
|
689
|
+
const parsedMarketCollateralData = parseOriginMarketCollateralData({
|
|
690
|
+
type: riskModel.type.fields,
|
|
691
|
+
collateralFactor: riskModel.collateral_factor.fields,
|
|
692
|
+
liquidationFactor: riskModel.liquidation_factor.fields,
|
|
693
|
+
liquidationDiscount: riskModel.liquidation_discount.fields,
|
|
694
|
+
liquidationPanelty: riskModel.liquidation_penalty.fields,
|
|
695
|
+
liquidationReserveFactor: riskModel.liquidation_revenue_factor.fields,
|
|
696
|
+
maxCollateralAmount: riskModel.max_collateral_amount,
|
|
697
|
+
totalCollateralAmount: collateralStat.amount,
|
|
698
|
+
});
|
|
692
699
|
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
700
|
+
const calculatedMarketCollateralData = calculateMarketCollateralData(
|
|
701
|
+
query.utils,
|
|
702
|
+
parsedMarketCollateralData
|
|
703
|
+
);
|
|
697
704
|
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
}
|
|
705
|
+
marketCollateral = {
|
|
706
|
+
coinName: collateralCoinName,
|
|
707
|
+
symbol: query.utils.parseSymbol(collateralCoinName),
|
|
708
|
+
coinType: query.utils.parseCoinType(collateralCoinName),
|
|
709
|
+
marketCoinType: query.utils.parseMarketCoinType(collateralCoinName),
|
|
710
|
+
coinWrappedType: query.utils.getCoinWrappedType(collateralCoinName),
|
|
711
|
+
coinDecimal: query.utils.getCoinDecimal(collateralCoinName),
|
|
712
|
+
coinPrice: coinPrice ?? 0,
|
|
713
|
+
collateralFactor: parsedMarketCollateralData.collateralFactor,
|
|
714
|
+
liquidationFactor: parsedMarketCollateralData.liquidationFactor,
|
|
715
|
+
liquidationDiscount: parsedMarketCollateralData.liquidationDiscount,
|
|
716
|
+
liquidationPanelty: parsedMarketCollateralData.liquidationPanelty,
|
|
717
|
+
liquidationReserveFactor:
|
|
718
|
+
parsedMarketCollateralData.liquidationReserveFactor,
|
|
719
|
+
...calculatedMarketCollateralData,
|
|
720
|
+
};
|
|
721
|
+
}
|
|
722
|
+
|
|
723
|
+
return marketCollateral;
|
|
715
724
|
};
|
|
716
725
|
|
|
717
726
|
/**
|
|
@@ -730,7 +739,7 @@ export const getObligations = async (
|
|
|
730
739
|
ownerAddress: string
|
|
731
740
|
) => {
|
|
732
741
|
const owner = ownerAddress;
|
|
733
|
-
const protocolObjectId = address.get('core.object')
|
|
742
|
+
const protocolObjectId = address.get('core.object') ?? PROTOCOL_OBJECT_ID;
|
|
734
743
|
const keyObjectsResponse: SuiObjectResponse[] = [];
|
|
735
744
|
let hasNextPage = false;
|
|
736
745
|
let nextCursor: string | null | undefined = null;
|
|
@@ -860,7 +869,7 @@ export const getCoinAmounts = async (
|
|
|
860
869
|
assetCoinNames: SupportAssetCoins[] = [...SUPPORT_POOLS],
|
|
861
870
|
ownerAddress?: string
|
|
862
871
|
) => {
|
|
863
|
-
const owner = ownerAddress
|
|
872
|
+
const owner = ownerAddress ?? query.suiKit.currentAddress();
|
|
864
873
|
const assetCoins = {} as OptionalKeys<Record<SupportAssetCoins, number>>;
|
|
865
874
|
|
|
866
875
|
await Promise.allSettled(
|
|
@@ -886,7 +895,7 @@ export const getCoinAmount = async (
|
|
|
886
895
|
assetCoinName: SupportAssetCoins,
|
|
887
896
|
ownerAddress?: string
|
|
888
897
|
) => {
|
|
889
|
-
const owner = ownerAddress
|
|
898
|
+
const owner = ownerAddress ?? query.suiKit.currentAddress();
|
|
890
899
|
const coinType = query.utils.parseCoinType(assetCoinName);
|
|
891
900
|
const amount = await query.cache.queryGetCoinBalance({
|
|
892
901
|
owner,
|
|
@@ -913,7 +922,7 @@ export const getMarketCoinAmounts = async (
|
|
|
913
922
|
[...SUPPORT_POOLS].map((poolCoinName) =>
|
|
914
923
|
query.utils.parseMarketCoinName(poolCoinName)
|
|
915
924
|
);
|
|
916
|
-
const owner = ownerAddress
|
|
925
|
+
const owner = ownerAddress ?? query.suiKit.currentAddress();
|
|
917
926
|
const marketCoins = {} as OptionalKeys<Record<SupportMarketCoins, number>>;
|
|
918
927
|
|
|
919
928
|
await Promise.allSettled(
|
|
@@ -943,7 +952,7 @@ export const getMarketCoinAmount = async (
|
|
|
943
952
|
marketCoinName: SupportMarketCoins,
|
|
944
953
|
ownerAddress?: string
|
|
945
954
|
) => {
|
|
946
|
-
const owner = ownerAddress
|
|
955
|
+
const owner = ownerAddress ?? query.suiKit.currentAddress();
|
|
947
956
|
const marketCoinType = query.utils.parseMarketCoinType(marketCoinName);
|
|
948
957
|
const amount = await query.cache.queryGetCoinBalance({
|
|
949
958
|
owner,
|