@scallop-io/sui-scallop-sdk 1.3.2-alpha.3 → 1.3.3-alpha.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.
@@ -4,7 +4,6 @@ import {
4
4
  PROTOCOL_OBJECT_ID,
5
5
  SUPPORT_COLLATERALS,
6
6
  BORROW_FEE_PROTOCOL_ID,
7
- USE_TEST_ADDRESS,
8
7
  FlashLoanFeeObjectMap,
9
8
  } from '../constants';
10
9
  import {
@@ -39,6 +38,7 @@ import {
39
38
  import BigNumber from 'bignumber.js';
40
39
  import { getSupplyLimit } from './supplyLimit';
41
40
  import { isIsolatedAsset } from './isolatedAsset';
41
+ // import { isIsolatedAsset } from './isolatedAsset';
42
42
 
43
43
  /**
44
44
  * Query market data.
@@ -89,7 +89,7 @@ export const queryMarket = async (
89
89
  const args = [marketId];
90
90
 
91
91
  const queryResult = await query.cache.queryInspectTxn({ queryTarget, args });
92
- const marketData = queryResult?.events[0].parsedJson as
92
+ const marketData = queryResult?.events[0]?.parsedJson as
93
93
  | MarketQueryInterface
94
94
  | undefined;
95
95
 
@@ -157,6 +157,7 @@ export const queryMarket = async (
157
157
  marketCoinSupplyAmount: parsedMarketPoolData.marketCoinSupplyAmount,
158
158
  minBorrowAmount: parsedMarketPoolData.minBorrowAmount,
159
159
  isIsolated: await isIsolatedAsset(query.utils, poolCoinName),
160
+ // isIsolated: false,
160
161
  maxSupplyCoin,
161
162
  ...calculatedMarketPoolData,
162
163
  };
@@ -203,6 +204,7 @@ export const queryMarket = async (
203
204
  liquidationPanelty: parsedMarketCollateralData.liquidationPanelty,
204
205
  liquidationReserveFactor:
205
206
  parsedMarketCollateralData.liquidationReserveFactor,
207
+ isIsolated: await isIsolatedAsset(query.utils, collateralCoinName),
206
208
  ...calculatedMarketCollateralData,
207
209
  };
208
210
  }
@@ -292,122 +294,129 @@ export const getMarketPool = async (
292
294
  indexer: boolean = false,
293
295
  marketObject?: SuiObjectData | null,
294
296
  coinPrice?: number
295
- ) => {
296
- let marketPool: MarketPool | undefined;
297
- let balanceSheet: BalanceSheet | undefined;
298
- let borrowIndex: BorrowIndex | undefined;
299
- let interestModel: InterestModel | undefined;
300
- let borrowFeeRate: { value: string } | undefined;
301
-
302
- coinPrice =
303
- coinPrice ||
304
- (await query.utils.getCoinPrices([poolCoinName]))?.[poolCoinName];
305
-
306
- if (indexer) {
307
- const marketPoolIndexer = await query.indexer.getMarketPool(poolCoinName);
308
- marketPoolIndexer.coinPrice = coinPrice || marketPoolIndexer.coinPrice;
309
- marketPoolIndexer.coinWrappedType = query.utils.getCoinWrappedType(
310
- marketPoolIndexer.coinName
311
- );
312
-
313
- return marketPoolIndexer;
314
- }
297
+ ): Promise<MarketPool | undefined> => {
298
+ try {
299
+ coinPrice =
300
+ coinPrice ||
301
+ (await query.utils.getCoinPrices([poolCoinName]))?.[poolCoinName];
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
+ );
315
309
 
316
- const marketId = query.address.get('core.market');
317
- marketObject =
318
- marketObject ||
319
- (
320
- await query.cache.queryGetObject(marketId, {
321
- showContent: true,
322
- })
323
- )?.data;
310
+ return marketPoolIndexer;
311
+ }
324
312
 
325
- if (marketObject) {
326
- if (marketObject.content && 'fields' in marketObject.content) {
327
- const fields = marketObject.content.fields as any;
328
- const coinType = query.utils.parseCoinType(poolCoinName);
329
- // Get balance sheet.
330
- const balanceSheetParentId =
331
- fields.vault.fields.balance_sheets.fields.table.fields.id.id;
332
- const balanceSheetDynamicFieldObjectResponse =
333
- await query.cache.queryGetDynamicFieldObject({
334
- parentId: balanceSheetParentId,
335
- name: {
336
- type: '0x1::type_name::TypeName',
337
- value: {
338
- name: coinType.substring(2),
339
- },
313
+ const marketId = query.address.get('core.market');
314
+ marketObject =
315
+ marketObject ||
316
+ (
317
+ await query.cache.queryGetObject(marketId, {
318
+ showContent: true,
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),
340
337
  },
341
- });
342
- if (!balanceSheetDynamicFieldObjectResponse) return undefined;
338
+ },
339
+ });
343
340
 
344
- const balanceSheetDynamicFieldObject =
345
- balanceSheetDynamicFieldObjectResponse.data;
346
- if (
341
+ const balanceSheetDynamicFieldObject =
342
+ balanceSheetDynamicFieldObjectResponse?.data;
343
+
344
+ if (
345
+ !(
347
346
  balanceSheetDynamicFieldObject &&
348
347
  balanceSheetDynamicFieldObject.content &&
349
348
  'fields' in balanceSheetDynamicFieldObject.content
350
- ) {
351
- const dynamicFields = balanceSheetDynamicFieldObject.content
352
- .fields as any;
353
- balanceSheet = dynamicFields.value.fields;
354
- }
355
-
356
- // Get borrow index.
357
- const borrowIndexParentId =
358
- fields.borrow_dynamics.fields.table.fields.id.id;
359
- const borrowIndexDynamicFieldObjectResponse =
360
- await query.cache.queryGetDynamicFieldObject({
361
- parentId: borrowIndexParentId,
362
- name: {
363
- type: '0x1::type_name::TypeName',
364
- value: {
365
- name: coinType.substring(2),
366
- },
349
+ )
350
+ )
351
+ throw new Error(
352
+ `Failed to fetch balanceSheetDynamicFieldObject for ${poolCoinName}: ${balanceSheetDynamicFieldObjectResponse?.error?.code.toString()}`
353
+ );
354
+ const balanceSheet: BalanceSheet = (
355
+ balanceSheetDynamicFieldObject.content.fields as any
356
+ ).value.fields;
357
+
358
+ // Get borrow index.
359
+ const borrowIndexParentId =
360
+ fields.borrow_dynamics.fields.table.fields.id.id;
361
+ const borrowIndexDynamicFieldObjectResponse =
362
+ await query.cache.queryGetDynamicFieldObject({
363
+ parentId: borrowIndexParentId,
364
+ name: {
365
+ type: '0x1::type_name::TypeName',
366
+ value: {
367
+ name: coinType.substring(2),
367
368
  },
368
- });
369
- if (!borrowIndexDynamicFieldObjectResponse) return undefined;
369
+ },
370
+ });
370
371
 
371
- const borrowIndexDynamicFieldObject =
372
- borrowIndexDynamicFieldObjectResponse.data;
373
- if (
372
+ const borrowIndexDynamicFieldObject =
373
+ borrowIndexDynamicFieldObjectResponse?.data;
374
+ if (
375
+ !(
374
376
  borrowIndexDynamicFieldObject &&
375
377
  borrowIndexDynamicFieldObject.content &&
376
378
  'fields' in borrowIndexDynamicFieldObject.content
377
- ) {
378
- const dynamicFields = borrowIndexDynamicFieldObject.content
379
- .fields as any;
380
- borrowIndex = dynamicFields.value.fields;
381
- }
382
-
383
- // Get interest models.
384
- const interestModelParentId =
385
- fields.interest_models.fields.table.fields.id.id;
386
- const interestModelDynamicFieldObjectResponse =
387
- await query.cache.queryGetDynamicFieldObject({
388
- parentId: interestModelParentId,
389
- name: {
390
- type: '0x1::type_name::TypeName',
391
- value: {
392
- name: coinType.substring(2),
393
- },
379
+ )
380
+ )
381
+ throw new Error(
382
+ `Failed to fetch borrowIndexDynamicFieldObject for ${poolCoinName}`
383
+ );
384
+ const borrowIndex: BorrowIndex = (
385
+ borrowIndexDynamicFieldObject.content.fields as any
386
+ ).value.fields;
387
+
388
+ // Get interest models.
389
+ const interestModelParentId =
390
+ fields.interest_models.fields.table.fields.id.id;
391
+ const interestModelDynamicFieldObjectResponse =
392
+ await query.cache.queryGetDynamicFieldObject({
393
+ parentId: interestModelParentId,
394
+ name: {
395
+ type: '0x1::type_name::TypeName',
396
+ value: {
397
+ name: coinType.substring(2),
394
398
  },
395
- });
399
+ },
400
+ });
396
401
 
397
- if (!interestModelDynamicFieldObjectResponse) return undefined;
398
- const interestModelDynamicFieldObject =
399
- interestModelDynamicFieldObjectResponse.data;
400
- if (
402
+ const interestModelDynamicFieldObject =
403
+ interestModelDynamicFieldObjectResponse?.data;
404
+ if (
405
+ !(
401
406
  interestModelDynamicFieldObject &&
402
407
  interestModelDynamicFieldObject.content &&
403
408
  'fields' in interestModelDynamicFieldObject.content
404
- ) {
405
- const dynamicFields = interestModelDynamicFieldObject.content
406
- .fields as any;
407
- interestModel = dynamicFields.value.fields;
408
- }
409
+ )
410
+ )
411
+ throw new Error(
412
+ `Failed to fetch interestModelDynamicFieldObject for ${poolCoinName}: ${interestModelDynamicFieldObject}`
413
+ );
414
+ const interestModel: InterestModel = (
415
+ interestModelDynamicFieldObject.content.fields as any
416
+ ).value.fields;
409
417
 
410
- // Get borrow fee.
418
+ // Get borrow fee.
419
+ const getBorrowFee = async () => {
411
420
  const borrowFeeDynamicFieldObjectResponse =
412
421
  await query.cache.queryGetDynamicFieldObject({
413
422
  parentId: marketId,
@@ -421,26 +430,19 @@ export const getMarketPool = async (
421
430
  },
422
431
  });
423
432
 
424
- if (!borrowFeeDynamicFieldObjectResponse) return undefined;
425
433
  const borrowFeeDynamicFieldObject =
426
- borrowFeeDynamicFieldObjectResponse.data;
434
+ borrowFeeDynamicFieldObjectResponse?.data;
427
435
  if (
428
- borrowFeeDynamicFieldObject &&
429
- borrowFeeDynamicFieldObject.content &&
430
- 'fields' in borrowFeeDynamicFieldObject.content
431
- ) {
432
- const dynamicFields = borrowFeeDynamicFieldObject.content.fields as any;
433
- borrowFeeRate = dynamicFields.value.fields;
434
- }
435
- }
436
- }
436
+ !(
437
+ borrowFeeDynamicFieldObject &&
438
+ borrowFeeDynamicFieldObject.content &&
439
+ 'fields' in borrowFeeDynamicFieldObject.content
440
+ )
441
+ )
442
+ return { value: '0' };
443
+ return (borrowFeeDynamicFieldObject.content.fields as any).value.fields;
444
+ };
437
445
 
438
- if (
439
- balanceSheet &&
440
- borrowIndex &&
441
- interestModel &&
442
- (USE_TEST_ADDRESS || borrowFeeRate)
443
- ) {
444
446
  const parsedMarketPoolData = parseOriginMarketPoolData({
445
447
  type: interestModel.type.fields,
446
448
  maxBorrowRate: interestModel.max_borrow_rate.fields,
@@ -454,7 +456,7 @@ export const getMarketPool = async (
454
456
  reserve: balanceSheet.revenue,
455
457
  reserveFactor: interestModel.revenue_factor.fields,
456
458
  borrowWeight: interestModel.borrow_weight.fields,
457
- borrowFeeRate: borrowFeeRate || { value: '0' },
459
+ borrowFeeRate: await getBorrowFee(),
458
460
  baseBorrowRatePerSec: interestModel.base_borrow_rate_per_sec.fields,
459
461
  borrowRateOnHighKink: interestModel.borrow_rate_on_high_kink.fields,
460
462
  borrowRateOnMidKink: interestModel.borrow_rate_on_mid_kink.fields,
@@ -475,7 +477,7 @@ export const getMarketPool = async (
475
477
  .shiftedBy(-coinDecimal)
476
478
  .toNumber();
477
479
 
478
- marketPool = {
480
+ return {
479
481
  coinName: poolCoinName,
480
482
  symbol: query.utils.parseSymbol(poolCoinName),
481
483
  coinType: query.utils.parseCoinType(poolCoinName),
@@ -495,11 +497,12 @@ export const getMarketPool = async (
495
497
  minBorrowAmount: parsedMarketPoolData.minBorrowAmount,
496
498
  maxSupplyCoin,
497
499
  isIsolated: await isIsolatedAsset(query.utils, poolCoinName),
500
+ // isIsolated: false,
498
501
  ...calculatedMarketPoolData,
499
502
  };
503
+ } catch (e) {
504
+ console.error(e);
500
505
  }
501
-
502
- return marketPool;
503
506
  };
504
507
 
505
508
  /**
@@ -577,7 +580,7 @@ export const getMarketCollateral = async (
577
580
  indexer: boolean = false,
578
581
  marketObject?: SuiObjectData | null,
579
582
  coinPrice?: number
580
- ) => {
583
+ ): Promise<MarketCollateral | undefined> => {
581
584
  coinPrice =
582
585
  coinPrice ||
583
586
  (await query.utils.getCoinPrices([collateralCoinName]))?.[
@@ -596,9 +599,9 @@ export const getMarketCollateral = async (
596
599
  return marketCollateralIndexer;
597
600
  }
598
601
 
599
- let marketCollateral: MarketCollateral | undefined;
600
- let riskModel: RiskModel | undefined;
601
- let collateralStat: CollateralStat | undefined;
602
+ // let marketCollateral: MarketCollateral | undefined;
603
+ // let riskModel: RiskModel | undefined;
604
+ // let collateralStat: CollateralStat | undefined;
602
605
 
603
606
  const marketId = query.address.get('core.market');
604
607
  marketObject =
@@ -609,101 +612,106 @@ export const getMarketCollateral = async (
609
612
  })
610
613
  )?.data;
611
614
 
612
- if (marketObject) {
613
- if (marketObject.content && 'fields' in marketObject.content) {
614
- const fields = marketObject.content.fields as any;
615
- const coinType = query.utils.parseCoinType(collateralCoinName);
616
-
617
- // Get risk model.
618
- const riskModelParentId = fields.risk_models.fields.table.fields.id.id;
619
- const riskModelDynamicFieldObjectResponse =
620
- await query.cache.queryGetDynamicFieldObject({
621
- parentId: riskModelParentId,
622
- name: {
623
- type: '0x1::type_name::TypeName',
624
- value: {
625
- name: coinType.substring(2),
626
- },
627
- },
628
- });
629
-
630
- if (!riskModelDynamicFieldObjectResponse) return undefined;
631
- const riskModelDynamicFieldObject =
632
- riskModelDynamicFieldObjectResponse.data;
633
- if (
634
- riskModelDynamicFieldObject &&
635
- riskModelDynamicFieldObject.content &&
636
- 'fields' in riskModelDynamicFieldObject.content
637
- ) {
638
- const dynamicFields = riskModelDynamicFieldObject.content.fields as any;
639
- riskModel = dynamicFields.value.fields;
640
- }
641
-
642
- // Get collateral stat.
643
- const collateralStatParentId =
644
- fields.collateral_stats.fields.table.fields.id.id;
645
- const collateralStatDynamicFieldObjectResponse =
646
- await query.cache.queryGetDynamicFieldObject({
647
- parentId: collateralStatParentId,
648
- name: {
649
- type: '0x1::type_name::TypeName',
650
- value: {
651
- name: coinType.substring(2),
652
- },
653
- },
654
- });
615
+ if (!(marketObject && marketObject.content?.dataType === 'moveObject'))
616
+ throw new Error(`Failed to fetch marketObject`);
617
+
618
+ const fields = marketObject.content.fields as any;
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
+ });
655
633
 
656
- if (!collateralStatDynamicFieldObjectResponse) return undefined;
657
- const collateralStatDynamicFieldObject =
658
- collateralStatDynamicFieldObjectResponse.data;
659
- if (
660
- collateralStatDynamicFieldObject &&
661
- collateralStatDynamicFieldObject.content &&
662
- 'fields' in collateralStatDynamicFieldObject.content
663
- ) {
664
- const dynamicFields = collateralStatDynamicFieldObject.content
665
- .fields as any;
666
- collateralStat = dynamicFields.value.fields;
667
- }
668
- }
669
- }
634
+ const riskModelDynamicFieldObject = riskModelDynamicFieldObjectResponse?.data;
635
+ if (
636
+ !(
637
+ riskModelDynamicFieldObject &&
638
+ riskModelDynamicFieldObject.content &&
639
+ 'fields' in riskModelDynamicFieldObject.content
640
+ )
641
+ )
642
+ throw new Error(
643
+ `Failed to ftech riskModelDynamicFieldObject for ${riskModelDynamicFieldObjectResponse?.error?.code.toString()}: `
644
+ );
670
645
 
671
- if (riskModel && collateralStat) {
672
- const parsedMarketCollateralData = parseOriginMarketCollateralData({
673
- type: riskModel.type.fields,
674
- collateralFactor: riskModel.collateral_factor.fields,
675
- liquidationFactor: riskModel.liquidation_factor.fields,
676
- liquidationDiscount: riskModel.liquidation_discount.fields,
677
- liquidationPanelty: riskModel.liquidation_penalty.fields,
678
- liquidationReserveFactor: riskModel.liquidation_revenue_factor.fields,
679
- maxCollateralAmount: riskModel.max_collateral_amount,
680
- totalCollateralAmount: collateralStat.amount,
646
+ const riskModel: RiskModel = (
647
+ riskModelDynamicFieldObject.content.fields as any
648
+ ).value.fields;
649
+
650
+ // Get collateral stat.
651
+ const collateralStatParentId =
652
+ fields.collateral_stats.fields.table.fields.id.id;
653
+ const collateralStatDynamicFieldObjectResponse =
654
+ await query.cache.queryGetDynamicFieldObject({
655
+ parentId: collateralStatParentId,
656
+ name: {
657
+ type: '0x1::type_name::TypeName',
658
+ value: {
659
+ name: coinType.substring(2),
660
+ },
661
+ },
681
662
  });
682
663
 
683
- const calculatedMarketCollateralData = calculateMarketCollateralData(
684
- query.utils,
685
- parsedMarketCollateralData
664
+ const collateralStatDynamicFieldObject =
665
+ collateralStatDynamicFieldObjectResponse?.data;
666
+
667
+ if (
668
+ !(
669
+ collateralStatDynamicFieldObject &&
670
+ collateralStatDynamicFieldObject.content &&
671
+ 'fields' in collateralStatDynamicFieldObject.content
672
+ )
673
+ )
674
+ throw new Error(
675
+ `Failed to fetch collateralStatDynamicFieldObject for ${collateralCoinName}: ${collateralStatDynamicFieldObjectResponse?.error?.code.toString()}`
686
676
  );
687
677
 
688
- marketCollateral = {
689
- coinName: collateralCoinName,
690
- symbol: query.utils.parseSymbol(collateralCoinName),
691
- coinType: query.utils.parseCoinType(collateralCoinName),
692
- marketCoinType: query.utils.parseMarketCoinType(collateralCoinName),
693
- coinWrappedType: query.utils.getCoinWrappedType(collateralCoinName),
694
- coinDecimal: query.utils.getCoinDecimal(collateralCoinName),
695
- coinPrice: coinPrice ?? 0,
696
- collateralFactor: parsedMarketCollateralData.collateralFactor,
697
- liquidationFactor: parsedMarketCollateralData.liquidationFactor,
698
- liquidationDiscount: parsedMarketCollateralData.liquidationDiscount,
699
- liquidationPanelty: parsedMarketCollateralData.liquidationPanelty,
700
- liquidationReserveFactor:
701
- parsedMarketCollateralData.liquidationReserveFactor,
702
- ...calculatedMarketCollateralData,
703
- };
704
- }
678
+ const collateralStat: CollateralStat = (
679
+ collateralStatDynamicFieldObject.content.fields as any
680
+ ).value.fields;
681
+
682
+ const parsedMarketCollateralData = parseOriginMarketCollateralData({
683
+ type: riskModel.type.fields,
684
+ collateralFactor: riskModel.collateral_factor.fields,
685
+ liquidationFactor: riskModel.liquidation_factor.fields,
686
+ liquidationDiscount: riskModel.liquidation_discount.fields,
687
+ liquidationPanelty: riskModel.liquidation_penalty.fields,
688
+ liquidationReserveFactor: riskModel.liquidation_revenue_factor.fields,
689
+ maxCollateralAmount: riskModel.max_collateral_amount,
690
+ totalCollateralAmount: collateralStat.amount,
691
+ });
705
692
 
706
- return marketCollateral;
693
+ const calculatedMarketCollateralData = calculateMarketCollateralData(
694
+ query.utils,
695
+ parsedMarketCollateralData
696
+ );
697
+
698
+ return {
699
+ coinName: collateralCoinName,
700
+ symbol: query.utils.parseSymbol(collateralCoinName),
701
+ coinType: query.utils.parseCoinType(collateralCoinName),
702
+ marketCoinType: query.utils.parseMarketCoinType(collateralCoinName),
703
+ coinWrappedType: query.utils.getCoinWrappedType(collateralCoinName),
704
+ coinDecimal: query.utils.getCoinDecimal(collateralCoinName),
705
+ coinPrice: coinPrice ?? 0,
706
+ collateralFactor: parsedMarketCollateralData.collateralFactor,
707
+ liquidationFactor: parsedMarketCollateralData.liquidationFactor,
708
+ liquidationDiscount: parsedMarketCollateralData.liquidationDiscount,
709
+ liquidationPanelty: parsedMarketCollateralData.liquidationPanelty,
710
+ liquidationReserveFactor:
711
+ parsedMarketCollateralData.liquidationReserveFactor,
712
+ isIsolated: await isIsolatedAsset(query.utils, collateralCoinName),
713
+ ...calculatedMarketCollateralData,
714
+ };
707
715
  };
708
716
 
709
717
  /**
@@ -18,9 +18,6 @@ const isolatedAssetZod = zod.object({
18
18
  }),
19
19
  });
20
20
 
21
- const ISOLATED_ASSET_KEY =
22
- '0x6e641f0dca8aedab3101d047e96439178f16301bf0b57fe8745086ff1195eb3e::market_dynamic_keys::IsolatedAssetKey';
23
-
24
21
  /**
25
22
  * Return list of isolated assets coin types
26
23
  * @param utils ScallopUtils
@@ -31,6 +28,8 @@ export const getIsolatedAssets = async (
31
28
  ): Promise<string[]> => {
32
29
  try {
33
30
  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`;
34
33
  const isolatedAssets: string[] = [];
35
34
  if (!marketObject) return isolatedAssets;
36
35
 
@@ -83,7 +82,8 @@ export const isIsolatedAsset = async (
83
82
  ): Promise<boolean> => {
84
83
  try {
85
84
  const marketObject = utils.address.get('core.market');
86
-
85
+ const protocolObject = utils.address.get('core.packages.protocol.id');
86
+ const ISOLATED_ASSET_KEY = `${protocolObject}::market_dynamic_keys::IsolatedAssetKey`;
87
87
  // check if the coin type is in the list
88
88
  const cachedData = utils.address.cache.queryClient.getQueryData<string[]>([
89
89
  'getDynamicFields',
@@ -10,7 +10,6 @@ export const queryVeScaKeyIdFromReferralBindings = async (
10
10
  refereeAddress: string
11
11
  ): Promise<string | null> => {
12
12
  const referralBindingTableId = address.get('referral.bindingTableId');
13
-
14
13
  const referralBindResponse = await address.cache.queryGetDynamicFieldObject({
15
14
  parentId: referralBindingTableId,
16
15
  name: {
@@ -33,7 +33,7 @@ export const getSCoinTotalSupply = async (
33
33
  typeArgs,
34
34
  });
35
35
  const results = queryResults?.results;
36
- if (results && results[0].returnValues) {
36
+ if (results && results[0]?.returnValues) {
37
37
  const value = Uint8Array.from(results[0].returnValues[0][0]);
38
38
  const type = results[0].returnValues[0][1]; // should be u64
39
39
  assert(type === 'u64', 'Result type is not u64');