@scallop-io/sui-scallop-sdk 1.3.3-alpha.2 → 1.3.3
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/constants/index.d.ts +0 -1
- package/dist/constants/queryKeys.d.ts +1 -2
- package/dist/index.js +1011 -1022
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1011 -1021
- package/dist/index.mjs.map +1 -1
- package/dist/models/scallopIndexer.d.ts +6 -0
- package/dist/models/scallopPrice.d.ts +0 -0
- package/dist/models/scallopQuery.d.ts +6 -0
- package/dist/queries/vescaQuery.d.ts +2 -2
- package/dist/types/query/core.d.ts +0 -1
- package/dist/types/query/portfolio.d.ts +1 -1
- package/dist/types/query/spool.d.ts +1 -0
- package/dist/types/query/vesca.d.ts +1 -1
- package/package.json +1 -1
- package/src/builders/borrowIncentiveBuilder.ts +3 -2
- package/src/constants/enum.ts +4 -11
- package/src/constants/index.ts +0 -1
- package/src/constants/queryKeys.ts +2 -2
- package/src/constants/testAddress.ts +35 -76
- package/src/models/scallopBuilder.ts +3 -2
- package/src/models/scallopClient.ts +3 -3
- package/src/models/scallopIndexer.ts +9 -0
- package/src/models/scallopPrice.ts +0 -0
- package/src/models/scallopQuery.ts +12 -4
- package/src/models/scallopUtils.ts +28 -39
- package/src/queries/coreQuery.ts +225 -230
- package/src/queries/isolatedAsset.ts +4 -4
- package/src/queries/portfolioQuery.ts +10 -6
- package/src/queries/referralQuery.ts +1 -0
- package/src/queries/spoolQuery.ts +2 -1
- package/src/queries/vescaQuery.ts +4 -6
- package/src/types/query/core.ts +0 -1
- package/src/types/query/portfolio.ts +1 -0
- package/src/types/query/spool.ts +1 -0
- package/src/types/query/vesca.ts +1 -1
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 {
|
|
@@ -37,7 +38,6 @@ import {
|
|
|
37
38
|
} from '../types';
|
|
38
39
|
import BigNumber from 'bignumber.js';
|
|
39
40
|
import { getSupplyLimit } from './supplyLimit';
|
|
40
|
-
import { isIsolatedAsset } from './isolatedAsset';
|
|
41
41
|
// import { isIsolatedAsset } from './isolatedAsset';
|
|
42
42
|
|
|
43
43
|
/**
|
|
@@ -156,8 +156,8 @@ export const queryMarket = async (
|
|
|
156
156
|
borrowFee: parsedMarketPoolData.borrowFee,
|
|
157
157
|
marketCoinSupplyAmount: parsedMarketPoolData.marketCoinSupplyAmount,
|
|
158
158
|
minBorrowAmount: parsedMarketPoolData.minBorrowAmount,
|
|
159
|
-
isIsolated: await isIsolatedAsset(query.utils, poolCoinName),
|
|
160
|
-
|
|
159
|
+
// isIsolated: await isIsolatedAsset(query.utils, poolCoinName),
|
|
160
|
+
isIsolated: false,
|
|
161
161
|
maxSupplyCoin,
|
|
162
162
|
...calculatedMarketPoolData,
|
|
163
163
|
};
|
|
@@ -204,7 +204,6 @@ export const queryMarket = async (
|
|
|
204
204
|
liquidationPanelty: parsedMarketCollateralData.liquidationPanelty,
|
|
205
205
|
liquidationReserveFactor:
|
|
206
206
|
parsedMarketCollateralData.liquidationReserveFactor,
|
|
207
|
-
isIsolated: await isIsolatedAsset(query.utils, collateralCoinName),
|
|
208
207
|
...calculatedMarketCollateralData,
|
|
209
208
|
};
|
|
210
209
|
}
|
|
@@ -294,129 +293,122 @@ export const getMarketPool = async (
|
|
|
294
293
|
indexer: boolean = false,
|
|
295
294
|
marketObject?: SuiObjectData | null,
|
|
296
295
|
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
|
-
);
|
|
296
|
+
) => {
|
|
297
|
+
let marketPool: MarketPool | undefined;
|
|
298
|
+
let balanceSheet: BalanceSheet | undefined;
|
|
299
|
+
let borrowIndex: BorrowIndex | undefined;
|
|
300
|
+
let interestModel: InterestModel | undefined;
|
|
301
|
+
let borrowFeeRate: { value: string } | undefined;
|
|
309
302
|
|
|
310
|
-
|
|
311
|
-
|
|
303
|
+
coinPrice =
|
|
304
|
+
coinPrice ||
|
|
305
|
+
(await query.utils.getCoinPrices([poolCoinName]))?.[poolCoinName];
|
|
312
306
|
|
|
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
|
-
});
|
|
307
|
+
if (indexer) {
|
|
308
|
+
const marketPoolIndexer = await query.indexer.getMarketPool(poolCoinName);
|
|
309
|
+
marketPoolIndexer.coinPrice = coinPrice || marketPoolIndexer.coinPrice;
|
|
310
|
+
marketPoolIndexer.coinWrappedType = query.utils.getCoinWrappedType(
|
|
311
|
+
marketPoolIndexer.coinName
|
|
312
|
+
);
|
|
340
313
|
|
|
341
|
-
|
|
342
|
-
|
|
314
|
+
return marketPoolIndexer;
|
|
315
|
+
}
|
|
343
316
|
|
|
344
|
-
|
|
345
|
-
|
|
317
|
+
const marketId = query.address.get('core.market');
|
|
318
|
+
marketObject =
|
|
319
|
+
marketObject ||
|
|
320
|
+
(
|
|
321
|
+
await query.cache.queryGetObject(marketId, {
|
|
322
|
+
showContent: true,
|
|
323
|
+
})
|
|
324
|
+
)?.data;
|
|
325
|
+
|
|
326
|
+
if (marketObject) {
|
|
327
|
+
if (marketObject.content && 'fields' in marketObject.content) {
|
|
328
|
+
const fields = marketObject.content.fields as any;
|
|
329
|
+
const coinType = query.utils.parseCoinType(poolCoinName);
|
|
330
|
+
// Get balance sheet.
|
|
331
|
+
const balanceSheetParentId =
|
|
332
|
+
fields.vault.fields.balance_sheets.fields.table.fields.id.id;
|
|
333
|
+
const balanceSheetDynamicFieldObjectResponse =
|
|
334
|
+
await query.cache.queryGetDynamicFieldObject({
|
|
335
|
+
parentId: balanceSheetParentId,
|
|
336
|
+
name: {
|
|
337
|
+
type: '0x1::type_name::TypeName',
|
|
338
|
+
value: {
|
|
339
|
+
name: coinType.substring(2),
|
|
340
|
+
},
|
|
341
|
+
},
|
|
342
|
+
});
|
|
343
|
+
if (!balanceSheetDynamicFieldObjectResponse) return undefined;
|
|
344
|
+
|
|
345
|
+
const balanceSheetDynamicFieldObject =
|
|
346
|
+
balanceSheetDynamicFieldObjectResponse.data;
|
|
347
|
+
if (
|
|
346
348
|
balanceSheetDynamicFieldObject &&
|
|
347
349
|
balanceSheetDynamicFieldObject.content &&
|
|
348
350
|
'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),
|
|
351
|
+
) {
|
|
352
|
+
const dynamicFields = balanceSheetDynamicFieldObject.content
|
|
353
|
+
.fields as any;
|
|
354
|
+
balanceSheet = dynamicFields.value.fields;
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
// Get borrow index.
|
|
358
|
+
const borrowIndexParentId =
|
|
359
|
+
fields.borrow_dynamics.fields.table.fields.id.id;
|
|
360
|
+
const borrowIndexDynamicFieldObjectResponse =
|
|
361
|
+
await query.cache.queryGetDynamicFieldObject({
|
|
362
|
+
parentId: borrowIndexParentId,
|
|
363
|
+
name: {
|
|
364
|
+
type: '0x1::type_name::TypeName',
|
|
365
|
+
value: {
|
|
366
|
+
name: coinType.substring(2),
|
|
367
|
+
},
|
|
368
368
|
},
|
|
369
|
-
}
|
|
370
|
-
|
|
369
|
+
});
|
|
370
|
+
if (!borrowIndexDynamicFieldObjectResponse) return undefined;
|
|
371
371
|
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
!(
|
|
372
|
+
const borrowIndexDynamicFieldObject =
|
|
373
|
+
borrowIndexDynamicFieldObjectResponse.data;
|
|
374
|
+
if (
|
|
376
375
|
borrowIndexDynamicFieldObject &&
|
|
377
376
|
borrowIndexDynamicFieldObject.content &&
|
|
378
377
|
'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),
|
|
378
|
+
) {
|
|
379
|
+
const dynamicFields = borrowIndexDynamicFieldObject.content
|
|
380
|
+
.fields as any;
|
|
381
|
+
borrowIndex = dynamicFields.value.fields;
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
// Get interest models.
|
|
385
|
+
const interestModelParentId =
|
|
386
|
+
fields.interest_models.fields.table.fields.id.id;
|
|
387
|
+
const interestModelDynamicFieldObjectResponse =
|
|
388
|
+
await query.cache.queryGetDynamicFieldObject({
|
|
389
|
+
parentId: interestModelParentId,
|
|
390
|
+
name: {
|
|
391
|
+
type: '0x1::type_name::TypeName',
|
|
392
|
+
value: {
|
|
393
|
+
name: coinType.substring(2),
|
|
394
|
+
},
|
|
398
395
|
},
|
|
399
|
-
}
|
|
400
|
-
});
|
|
396
|
+
});
|
|
401
397
|
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
398
|
+
if (!interestModelDynamicFieldObjectResponse) return undefined;
|
|
399
|
+
const interestModelDynamicFieldObject =
|
|
400
|
+
interestModelDynamicFieldObjectResponse.data;
|
|
401
|
+
if (
|
|
406
402
|
interestModelDynamicFieldObject &&
|
|
407
403
|
interestModelDynamicFieldObject.content &&
|
|
408
404
|
'fields' in interestModelDynamicFieldObject.content
|
|
409
|
-
)
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
const interestModel: InterestModel = (
|
|
415
|
-
interestModelDynamicFieldObject.content.fields as any
|
|
416
|
-
).value.fields;
|
|
405
|
+
) {
|
|
406
|
+
const dynamicFields = interestModelDynamicFieldObject.content
|
|
407
|
+
.fields as any;
|
|
408
|
+
interestModel = dynamicFields.value.fields;
|
|
409
|
+
}
|
|
417
410
|
|
|
418
|
-
|
|
419
|
-
const getBorrowFee = async () => {
|
|
411
|
+
// Get borrow fee.
|
|
420
412
|
const borrowFeeDynamicFieldObjectResponse =
|
|
421
413
|
await query.cache.queryGetDynamicFieldObject({
|
|
422
414
|
parentId: marketId,
|
|
@@ -430,19 +422,26 @@ export const getMarketPool = async (
|
|
|
430
422
|
},
|
|
431
423
|
});
|
|
432
424
|
|
|
425
|
+
if (!borrowFeeDynamicFieldObjectResponse) return undefined;
|
|
433
426
|
const borrowFeeDynamicFieldObject =
|
|
434
|
-
borrowFeeDynamicFieldObjectResponse
|
|
427
|
+
borrowFeeDynamicFieldObjectResponse.data;
|
|
435
428
|
if (
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
429
|
+
borrowFeeDynamicFieldObject &&
|
|
430
|
+
borrowFeeDynamicFieldObject.content &&
|
|
431
|
+
'fields' in borrowFeeDynamicFieldObject.content
|
|
432
|
+
) {
|
|
433
|
+
const dynamicFields = borrowFeeDynamicFieldObject.content.fields as any;
|
|
434
|
+
borrowFeeRate = dynamicFields.value.fields;
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
}
|
|
445
438
|
|
|
439
|
+
if (
|
|
440
|
+
balanceSheet &&
|
|
441
|
+
borrowIndex &&
|
|
442
|
+
interestModel &&
|
|
443
|
+
(USE_TEST_ADDRESS || borrowFeeRate)
|
|
444
|
+
) {
|
|
446
445
|
const parsedMarketPoolData = parseOriginMarketPoolData({
|
|
447
446
|
type: interestModel.type.fields,
|
|
448
447
|
maxBorrowRate: interestModel.max_borrow_rate.fields,
|
|
@@ -456,7 +455,7 @@ export const getMarketPool = async (
|
|
|
456
455
|
reserve: balanceSheet.revenue,
|
|
457
456
|
reserveFactor: interestModel.revenue_factor.fields,
|
|
458
457
|
borrowWeight: interestModel.borrow_weight.fields,
|
|
459
|
-
borrowFeeRate:
|
|
458
|
+
borrowFeeRate: borrowFeeRate || { value: '0' },
|
|
460
459
|
baseBorrowRatePerSec: interestModel.base_borrow_rate_per_sec.fields,
|
|
461
460
|
borrowRateOnHighKink: interestModel.borrow_rate_on_high_kink.fields,
|
|
462
461
|
borrowRateOnMidKink: interestModel.borrow_rate_on_mid_kink.fields,
|
|
@@ -477,7 +476,7 @@ export const getMarketPool = async (
|
|
|
477
476
|
.shiftedBy(-coinDecimal)
|
|
478
477
|
.toNumber();
|
|
479
478
|
|
|
480
|
-
|
|
479
|
+
marketPool = {
|
|
481
480
|
coinName: poolCoinName,
|
|
482
481
|
symbol: query.utils.parseSymbol(poolCoinName),
|
|
483
482
|
coinType: query.utils.parseCoinType(poolCoinName),
|
|
@@ -496,13 +495,13 @@ export const getMarketPool = async (
|
|
|
496
495
|
marketCoinSupplyAmount: parsedMarketPoolData.marketCoinSupplyAmount,
|
|
497
496
|
minBorrowAmount: parsedMarketPoolData.minBorrowAmount,
|
|
498
497
|
maxSupplyCoin,
|
|
499
|
-
isIsolated: await isIsolatedAsset(query.utils, poolCoinName),
|
|
500
|
-
|
|
498
|
+
// isIsolated: await isIsolatedAsset(query.utils, poolCoinName),
|
|
499
|
+
isIsolated: false,
|
|
501
500
|
...calculatedMarketPoolData,
|
|
502
501
|
};
|
|
503
|
-
} catch (e) {
|
|
504
|
-
console.error(e);
|
|
505
502
|
}
|
|
503
|
+
|
|
504
|
+
return marketPool;
|
|
506
505
|
};
|
|
507
506
|
|
|
508
507
|
/**
|
|
@@ -580,7 +579,7 @@ export const getMarketCollateral = async (
|
|
|
580
579
|
indexer: boolean = false,
|
|
581
580
|
marketObject?: SuiObjectData | null,
|
|
582
581
|
coinPrice?: number
|
|
583
|
-
)
|
|
582
|
+
) => {
|
|
584
583
|
coinPrice =
|
|
585
584
|
coinPrice ||
|
|
586
585
|
(await query.utils.getCoinPrices([collateralCoinName]))?.[
|
|
@@ -599,9 +598,9 @@ export const getMarketCollateral = async (
|
|
|
599
598
|
return marketCollateralIndexer;
|
|
600
599
|
}
|
|
601
600
|
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
601
|
+
let marketCollateral: MarketCollateral | undefined;
|
|
602
|
+
let riskModel: RiskModel | undefined;
|
|
603
|
+
let collateralStat: CollateralStat | undefined;
|
|
605
604
|
|
|
606
605
|
const marketId = query.address.get('core.market');
|
|
607
606
|
marketObject =
|
|
@@ -612,106 +611,101 @@ export const getMarketCollateral = async (
|
|
|
612
611
|
})
|
|
613
612
|
)?.data;
|
|
614
613
|
|
|
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
|
-
});
|
|
614
|
+
if (marketObject) {
|
|
615
|
+
if (marketObject.content && 'fields' in marketObject.content) {
|
|
616
|
+
const fields = marketObject.content.fields as any;
|
|
617
|
+
const coinType = query.utils.parseCoinType(collateralCoinName);
|
|
633
618
|
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
619
|
+
// Get risk model.
|
|
620
|
+
const riskModelParentId = fields.risk_models.fields.table.fields.id.id;
|
|
621
|
+
const riskModelDynamicFieldObjectResponse =
|
|
622
|
+
await query.cache.queryGetDynamicFieldObject({
|
|
623
|
+
parentId: riskModelParentId,
|
|
624
|
+
name: {
|
|
625
|
+
type: '0x1::type_name::TypeName',
|
|
626
|
+
value: {
|
|
627
|
+
name: coinType.substring(2),
|
|
628
|
+
},
|
|
629
|
+
},
|
|
630
|
+
});
|
|
645
631
|
|
|
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
|
-
});
|
|
632
|
+
if (!riskModelDynamicFieldObjectResponse) return undefined;
|
|
633
|
+
const riskModelDynamicFieldObject =
|
|
634
|
+
riskModelDynamicFieldObjectResponse.data;
|
|
635
|
+
if (
|
|
636
|
+
riskModelDynamicFieldObject &&
|
|
637
|
+
riskModelDynamicFieldObject.content &&
|
|
638
|
+
'fields' in riskModelDynamicFieldObject.content
|
|
639
|
+
) {
|
|
640
|
+
const dynamicFields = riskModelDynamicFieldObject.content.fields as any;
|
|
641
|
+
riskModel = dynamicFields.value.fields;
|
|
642
|
+
}
|
|
663
643
|
|
|
664
|
-
|
|
665
|
-
|
|
644
|
+
// Get collateral stat.
|
|
645
|
+
const collateralStatParentId =
|
|
646
|
+
fields.collateral_stats.fields.table.fields.id.id;
|
|
647
|
+
const collateralStatDynamicFieldObjectResponse =
|
|
648
|
+
await query.cache.queryGetDynamicFieldObject({
|
|
649
|
+
parentId: collateralStatParentId,
|
|
650
|
+
name: {
|
|
651
|
+
type: '0x1::type_name::TypeName',
|
|
652
|
+
value: {
|
|
653
|
+
name: coinType.substring(2),
|
|
654
|
+
},
|
|
655
|
+
},
|
|
656
|
+
});
|
|
666
657
|
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
658
|
+
if (!collateralStatDynamicFieldObjectResponse) return undefined;
|
|
659
|
+
const collateralStatDynamicFieldObject =
|
|
660
|
+
collateralStatDynamicFieldObjectResponse.data;
|
|
661
|
+
if (
|
|
662
|
+
collateralStatDynamicFieldObject &&
|
|
663
|
+
collateralStatDynamicFieldObject.content &&
|
|
664
|
+
'fields' in collateralStatDynamicFieldObject.content
|
|
665
|
+
) {
|
|
666
|
+
const dynamicFields = collateralStatDynamicFieldObject.content
|
|
667
|
+
.fields as any;
|
|
668
|
+
collateralStat = dynamicFields.value.fields;
|
|
669
|
+
}
|
|
670
|
+
}
|
|
671
|
+
}
|
|
677
672
|
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
maxCollateralAmount: riskModel.max_collateral_amount,
|
|
690
|
-
totalCollateralAmount: collateralStat.amount,
|
|
691
|
-
});
|
|
673
|
+
if (riskModel && collateralStat) {
|
|
674
|
+
const parsedMarketCollateralData = parseOriginMarketCollateralData({
|
|
675
|
+
type: riskModel.type.fields,
|
|
676
|
+
collateralFactor: riskModel.collateral_factor.fields,
|
|
677
|
+
liquidationFactor: riskModel.liquidation_factor.fields,
|
|
678
|
+
liquidationDiscount: riskModel.liquidation_discount.fields,
|
|
679
|
+
liquidationPanelty: riskModel.liquidation_penalty.fields,
|
|
680
|
+
liquidationReserveFactor: riskModel.liquidation_revenue_factor.fields,
|
|
681
|
+
maxCollateralAmount: riskModel.max_collateral_amount,
|
|
682
|
+
totalCollateralAmount: collateralStat.amount,
|
|
683
|
+
});
|
|
692
684
|
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
685
|
+
const calculatedMarketCollateralData = calculateMarketCollateralData(
|
|
686
|
+
query.utils,
|
|
687
|
+
parsedMarketCollateralData
|
|
688
|
+
);
|
|
697
689
|
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
}
|
|
690
|
+
marketCollateral = {
|
|
691
|
+
coinName: collateralCoinName,
|
|
692
|
+
symbol: query.utils.parseSymbol(collateralCoinName),
|
|
693
|
+
coinType: query.utils.parseCoinType(collateralCoinName),
|
|
694
|
+
marketCoinType: query.utils.parseMarketCoinType(collateralCoinName),
|
|
695
|
+
coinWrappedType: query.utils.getCoinWrappedType(collateralCoinName),
|
|
696
|
+
coinDecimal: query.utils.getCoinDecimal(collateralCoinName),
|
|
697
|
+
coinPrice: coinPrice ?? 0,
|
|
698
|
+
collateralFactor: parsedMarketCollateralData.collateralFactor,
|
|
699
|
+
liquidationFactor: parsedMarketCollateralData.liquidationFactor,
|
|
700
|
+
liquidationDiscount: parsedMarketCollateralData.liquidationDiscount,
|
|
701
|
+
liquidationPanelty: parsedMarketCollateralData.liquidationPanelty,
|
|
702
|
+
liquidationReserveFactor:
|
|
703
|
+
parsedMarketCollateralData.liquidationReserveFactor,
|
|
704
|
+
...calculatedMarketCollateralData,
|
|
705
|
+
};
|
|
706
|
+
}
|
|
707
|
+
|
|
708
|
+
return marketCollateral;
|
|
715
709
|
};
|
|
716
710
|
|
|
717
711
|
/**
|
|
@@ -741,6 +735,9 @@ export const getObligations = async (
|
|
|
741
735
|
filter: {
|
|
742
736
|
StructType: `${protocolObjectId}::obligation::ObligationKey`,
|
|
743
737
|
},
|
|
738
|
+
options: {
|
|
739
|
+
showContent: true,
|
|
740
|
+
},
|
|
744
741
|
cursor: nextCursor,
|
|
745
742
|
limit: 10,
|
|
746
743
|
});
|
|
@@ -759,17 +756,15 @@ export const getObligations = async (
|
|
|
759
756
|
}
|
|
760
757
|
} while (hasNextPage);
|
|
761
758
|
|
|
762
|
-
const
|
|
763
|
-
.map((ref: any) => ref?.data?.objectId)
|
|
764
|
-
.filter((id: any) => id !== undefined);
|
|
765
|
-
const keyObjects = await address.cache.queryGetObjects(keyObjectIds);
|
|
759
|
+
const keyObjects = keyObjectsResponse.filter((ref) => !!ref.data);
|
|
766
760
|
|
|
767
761
|
const obligations: Obligation[] = [];
|
|
768
762
|
await Promise.allSettled(
|
|
769
|
-
keyObjects.map(async (
|
|
770
|
-
const keyId =
|
|
771
|
-
|
|
772
|
-
|
|
763
|
+
keyObjects.map(async ({ data }) => {
|
|
764
|
+
const keyId = data?.objectId;
|
|
765
|
+
const content = data?.content;
|
|
766
|
+
if (keyId && content && 'fields' in content) {
|
|
767
|
+
const fields = content.fields as any;
|
|
773
768
|
const obligationId = String(fields.ownership.fields.of);
|
|
774
769
|
const locked = await getObligationLocked(address.cache, obligationId);
|
|
775
770
|
obligations.push({ id: obligationId, keyId, locked });
|
|
@@ -18,6 +18,9 @@ const isolatedAssetZod = zod.object({
|
|
|
18
18
|
}),
|
|
19
19
|
});
|
|
20
20
|
|
|
21
|
+
const ISOLATED_ASSET_KEY =
|
|
22
|
+
'0x6e641f0dca8aedab3101d047e96439178f16301bf0b57fe8745086ff1195eb3e::market_dynamic_keys::IsolatedAssetKey';
|
|
23
|
+
|
|
21
24
|
/**
|
|
22
25
|
* Return list of isolated assets coin types
|
|
23
26
|
* @param utils ScallopUtils
|
|
@@ -28,8 +31,6 @@ export const getIsolatedAssets = async (
|
|
|
28
31
|
): Promise<string[]> => {
|
|
29
32
|
try {
|
|
30
33
|
const marketObject = address.get('core.market');
|
|
31
|
-
const protocolObject = address.get('core.packages.protocol.id');
|
|
32
|
-
const ISOLATED_ASSET_KEY = `${protocolObject}::market_dynamic_keys::IsolatedAssetKey`;
|
|
33
34
|
const isolatedAssets: string[] = [];
|
|
34
35
|
if (!marketObject) return isolatedAssets;
|
|
35
36
|
|
|
@@ -82,8 +83,7 @@ export const isIsolatedAsset = async (
|
|
|
82
83
|
): Promise<boolean> => {
|
|
83
84
|
try {
|
|
84
85
|
const marketObject = utils.address.get('core.market');
|
|
85
|
-
|
|
86
|
-
const ISOLATED_ASSET_KEY = `${protocolObject}::market_dynamic_keys::IsolatedAssetKey`;
|
|
86
|
+
|
|
87
87
|
// check if the coin type is in the list
|
|
88
88
|
const cachedData = utils.address.cache.queryClient.getQueryData<string[]>([
|
|
89
89
|
'getDynamicFields',
|
|
@@ -239,6 +239,7 @@ export const getLending = async (
|
|
|
239
239
|
symbol: query.utils.parseSymbol(poolCoinName),
|
|
240
240
|
coinType: query.utils.parseCoinType(poolCoinName),
|
|
241
241
|
marketCoinType: query.utils.parseMarketCoinType(poolCoinName),
|
|
242
|
+
sCoinType: marketPool?.sCoinType ?? '',
|
|
242
243
|
coinDecimal: coinDecimal,
|
|
243
244
|
coinPrice: coinPrice ?? 0,
|
|
244
245
|
conversionRate: marketPool?.conversionRate ?? 1,
|
|
@@ -329,8 +330,12 @@ export const getObligationAccount = async (
|
|
|
329
330
|
coinAmounts?: CoinAmounts
|
|
330
331
|
) => {
|
|
331
332
|
market = market || (await query.queryMarket(indexer));
|
|
332
|
-
const
|
|
333
|
-
...new Set([
|
|
333
|
+
const collateralAssetCoinNames: SupportCollateralCoins[] = [
|
|
334
|
+
...new Set([
|
|
335
|
+
...Object.values(market.collaterals).map(
|
|
336
|
+
(collateral) => collateral.coinName
|
|
337
|
+
),
|
|
338
|
+
]),
|
|
334
339
|
];
|
|
335
340
|
const obligationQuery = await query.queryObligation(obligationId);
|
|
336
341
|
const borrowIncentivePools = await query.getBorrowIncentivePools(
|
|
@@ -340,12 +345,11 @@ export const getObligationAccount = async (
|
|
|
340
345
|
const borrowIncentiveAccounts =
|
|
341
346
|
await query.getBorrowIncentiveAccounts(obligationId);
|
|
342
347
|
coinPrices =
|
|
343
|
-
coinPrices || (await query.utils.getCoinPrices(
|
|
348
|
+
coinPrices || (await query.utils.getCoinPrices(collateralAssetCoinNames));
|
|
344
349
|
coinAmounts =
|
|
345
350
|
coinAmounts ||
|
|
346
|
-
(await query.getCoinAmounts(
|
|
351
|
+
(await query.getCoinAmounts(collateralAssetCoinNames, ownerAddress));
|
|
347
352
|
|
|
348
|
-
console.log(coinPrices);
|
|
349
353
|
const collaterals: ObligationAccount['collaterals'] = {};
|
|
350
354
|
const debts: ObligationAccount['debts'] = {};
|
|
351
355
|
const borrowIncentives: ObligationAccount['borrowIncentives'] = {};
|
|
@@ -358,7 +362,7 @@ export const getObligationAccount = async (
|
|
|
358
362
|
let totalBorrowedValue = BigNumber(0);
|
|
359
363
|
let totalBorrowedValueWithWeight = BigNumber(0);
|
|
360
364
|
|
|
361
|
-
for (const assetCoinName of
|
|
365
|
+
for (const assetCoinName of collateralAssetCoinNames) {
|
|
362
366
|
const collateral = obligationQuery?.collaterals.find((collateral) => {
|
|
363
367
|
const collateralCoinName =
|
|
364
368
|
query.utils.parseCoinNameFromType<SupportCollateralCoins>(
|
|
@@ -10,6 +10,7 @@ export const queryVeScaKeyIdFromReferralBindings = async (
|
|
|
10
10
|
refereeAddress: string
|
|
11
11
|
): Promise<string | null> => {
|
|
12
12
|
const referralBindingTableId = address.get('referral.bindingTableId');
|
|
13
|
+
|
|
13
14
|
const referralBindResponse = await address.cache.queryGetDynamicFieldObject({
|
|
14
15
|
parentId: referralBindingTableId,
|
|
15
16
|
name: {
|