@scallop-io/sui-scallop-sdk 0.46.63 → 0.46.65

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.
@@ -1,5 +1,5 @@
1
1
  import type { ScallopAddress, ScallopQuery, ScallopUtils } from '../models';
2
- import type { SupportBorrowIncentiveCoins } from '../types';
2
+ import type { SupportBorrowIncentiveCoins, BorrowIncentivePool } from '../types';
3
3
  /**
4
4
  * Query borrow incentive pools data.
5
5
  *
@@ -9,14 +9,14 @@ import type { SupportBorrowIncentiveCoins } from '../types';
9
9
  * @return Borrow incentive pools data.
10
10
  */
11
11
  export declare const queryBorrowIncentivePools: (query: ScallopQuery, borrowIncentiveCoinNames?: SupportBorrowIncentiveCoins[], indexer?: boolean) => Promise<{
12
- eth?: import("../types").BorrowIncentivePool | undefined;
13
- usdc?: import("../types").BorrowIncentivePool | undefined;
14
- usdt?: import("../types").BorrowIncentivePool | undefined;
15
- sui?: import("../types").BorrowIncentivePool | undefined;
16
- afsui?: import("../types").BorrowIncentivePool | undefined;
17
- hasui?: import("../types").BorrowIncentivePool | undefined;
18
- vsui?: import("../types").BorrowIncentivePool | undefined;
19
- sca?: import("../types").BorrowIncentivePool | undefined;
12
+ eth?: BorrowIncentivePool | undefined;
13
+ usdc?: BorrowIncentivePool | undefined;
14
+ usdt?: BorrowIncentivePool | undefined;
15
+ sui?: BorrowIncentivePool | undefined;
16
+ afsui?: BorrowIncentivePool | undefined;
17
+ hasui?: BorrowIncentivePool | undefined;
18
+ vsui?: BorrowIncentivePool | undefined;
19
+ sca?: BorrowIncentivePool | undefined;
20
20
  }>;
21
21
  /**
22
22
  * Query borrow incentive accounts data.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@scallop-io/sui-scallop-sdk",
3
- "version": "0.46.63",
3
+ "version": "0.46.65",
4
4
  "description": "Typescript sdk for interacting with Scallop contract on SUI",
5
5
  "keywords": [
6
6
  "sui",
@@ -38,8 +38,9 @@
38
38
  "src"
39
39
  ],
40
40
  "dependencies": {
41
+ "@graphql-typed-document-node/core": "^3.2.0",
41
42
  "@mysten/bcs": "^0.8.1",
42
- "@mysten/sui.js": "^0.52.0",
43
+ "@mysten/sui.js": "^0.54.1",
43
44
  "@noble/curves": "^1.2.0",
44
45
  "@noble/hashes": "^1.3.2",
45
46
  "@pythnetwork/price-service-client": "^1.8.2",
@@ -50,6 +51,8 @@
50
51
  "axios": "^1.6.0",
51
52
  "bech32": "^2.0.0",
52
53
  "bignumber.js": "^9.1.2",
54
+ "gql.tada": "^1.8.10",
55
+ "graphql": "^16.9.0",
53
56
  "superstruct": "^1.0.3",
54
57
  "tweetnacl": "^1.0.3",
55
58
  "zod": "^3.23.8"
@@ -76,7 +79,7 @@
76
79
  "vitest": "^0.34.6"
77
80
  },
78
81
  "peerDependencies": {
79
- "@mysten/sui.js": "0.52.0",
82
+ "@mysten/sui.js": "0.54.1",
80
83
  "@scallop-io/sui-kit": "0.52.0",
81
84
  "bn.js": "^5.2.1"
82
85
  },
@@ -18,6 +18,7 @@ import type {
18
18
  SupportBorrowIncentiveRewardCoins,
19
19
  BorrowIncentivePoolPoints,
20
20
  OptionalKeys,
21
+ BorrowIncentivePool,
21
22
  } from '../types';
22
23
  import BigNumber from 'bignumber.js';
23
24
 
@@ -31,13 +32,11 @@ import BigNumber from 'bignumber.js';
31
32
  */
32
33
  export const queryBorrowIncentivePools = async (
33
34
  query: ScallopQuery,
34
- borrowIncentiveCoinNames?: SupportBorrowIncentiveCoins[],
35
+ borrowIncentiveCoinNames: SupportBorrowIncentiveCoins[] = [
36
+ ...SUPPORT_BORROW_INCENTIVE_POOLS,
37
+ ],
35
38
  indexer: boolean = false
36
39
  ) => {
37
- borrowIncentiveCoinNames = borrowIncentiveCoinNames || [
38
- ...SUPPORT_BORROW_INCENTIVE_POOLS,
39
- ];
40
-
41
40
  const borrowIncentivePools: BorrowIncentivePools = {};
42
41
 
43
42
  const coinPrices = await query.utils.getCoinPrices(
@@ -52,18 +51,17 @@ export const queryBorrowIncentivePools = async (
52
51
  if (indexer) {
53
52
  const borrowIncentivePoolsIndexer =
54
53
  await query.indexer.getBorrowIncentivePools();
55
- for (const borrowIncentivePool of Object.values(
56
- borrowIncentivePoolsIndexer
57
- )) {
58
- if (!borrowIncentiveCoinNames.includes(borrowIncentivePool.coinName))
59
- continue;
60
- borrowIncentivePool.coinPrice =
61
- coinPrices[borrowIncentivePool.coinName] ||
62
- borrowIncentivePool.coinPrice;
63
- // borrowIncentivePool.rewardCoinPrice =
64
- // coinPrices[rewardCoinName] || borrowIncentivePool.rewardCoinPrice;
65
- borrowIncentivePools[borrowIncentivePool.coinName] = borrowIncentivePool;
66
- }
54
+
55
+ const updateBorrowIncentivePool = (pool: BorrowIncentivePool) => {
56
+ if (!borrowIncentiveCoinNames.includes(pool.coinName)) return;
57
+ pool.coinPrice = coinPrices[pool.coinName] || pool.coinPrice;
58
+ borrowIncentivePools[pool.coinName] = pool;
59
+ };
60
+
61
+ Object.values(borrowIncentivePoolsIndexer).forEach(
62
+ updateBorrowIncentivePool
63
+ );
64
+
67
65
  return borrowIncentivePools;
68
66
  }
69
67
 
@@ -60,20 +60,25 @@ export const queryMarket = async (
60
60
 
61
61
  if (indexer) {
62
62
  const marketIndexer = await query.indexer.getMarket();
63
- for (const pool of Object.values(marketIndexer.pools)) {
64
- pool.coinPrice = coinPrices[pool.coinName] || pool.coinPrice;
65
- pool.coinWrappedType = query.utils.getCoinWrappedType(pool.coinName);
66
- }
67
- for (const collateral of Object.values(marketIndexer.collaterals)) {
68
- collateral.coinPrice =
69
- coinPrices[collateral.coinName] || collateral.coinPrice;
70
- collateral.coinWrappedType = query.utils.getCoinWrappedType(
71
- collateral.coinName
72
- );
73
- }
63
+
64
+ const updatePools = (item: MarketPool) => {
65
+ item.coinPrice = coinPrices[item.coinName] || item.coinPrice;
66
+ item.coinWrappedType = query.utils.getCoinWrappedType(item.coinName);
67
+ pools[item.coinName] = item;
68
+ };
69
+
70
+ const updateCollaterals = (item: MarketCollateral) => {
71
+ item.coinPrice = coinPrices[item.coinName] || item.coinPrice;
72
+ item.coinWrappedType = query.utils.getCoinWrappedType(item.coinName);
73
+ collaterals[item.coinName] = item;
74
+ };
75
+
76
+ Object.values(marketIndexer.pools).forEach(updatePools);
77
+ Object.values(marketIndexer.collaterals).forEach(updateCollaterals);
78
+
74
79
  return {
75
- pools: marketIndexer.pools,
76
- collaterals: marketIndexer.collaterals,
80
+ pools,
81
+ collaterals,
77
82
  };
78
83
  }
79
84
 
@@ -221,10 +226,9 @@ export const queryMarket = async (
221
226
  */
222
227
  export const getMarketPools = async (
223
228
  query: ScallopQuery,
224
- poolCoinNames?: SupportPoolCoins[],
229
+ poolCoinNames: SupportPoolCoins[] = [...SUPPORT_POOLS],
225
230
  indexer: boolean = false
226
231
  ) => {
227
- poolCoinNames = poolCoinNames || [...SUPPORT_POOLS];
228
232
  const marketId = query.address.get('core.market');
229
233
  const marketObjectResponse = await query.cache.queryGetObject(marketId, {
230
234
  showContent: true,
@@ -235,15 +239,18 @@ export const getMarketPools = async (
235
239
 
236
240
  if (indexer) {
237
241
  const marketPoolsIndexer = await query.indexer.getMarketPools();
238
- for (const marketPool of Object.values(marketPoolsIndexer)) {
239
- if (!poolCoinNames.includes(marketPool.coinName)) continue;
242
+
243
+ const updateMarketPool = (marketPool: MarketPool) => {
244
+ if (!poolCoinNames.includes(marketPool.coinName)) return;
240
245
  marketPool.coinPrice =
241
246
  coinPrices[marketPool.coinName] || marketPool.coinPrice;
242
247
  marketPool.coinWrappedType = query.utils.getCoinWrappedType(
243
248
  marketPool.coinName
244
249
  );
245
250
  marketPools[marketPool.coinName] = marketPool;
246
- }
251
+ };
252
+
253
+ Object.values(marketPoolsIndexer).forEach(updateMarketPool);
247
254
 
248
255
  return marketPools;
249
256
  }
@@ -290,6 +297,10 @@ export const getMarketPool = async (
290
297
  let interestModel: InterestModel | undefined;
291
298
  let borrowFeeRate: { value: string } | undefined;
292
299
 
300
+ coinPrice =
301
+ coinPrice ||
302
+ (await query.utils.getCoinPrices([poolCoinName]))?.[poolCoinName];
303
+
293
304
  if (indexer) {
294
305
  const marketPoolIndexer = await query.indexer.getMarketPool(poolCoinName);
295
306
  marketPoolIndexer.coinPrice = coinPrice || marketPoolIndexer.coinPrice;
@@ -309,10 +320,6 @@ export const getMarketPool = async (
309
320
  })
310
321
  )?.data;
311
322
 
312
- coinPrice =
313
- coinPrice ||
314
- (await query.utils.getCoinPrices([poolCoinName]))?.[poolCoinName];
315
-
316
323
  if (marketObject) {
317
324
  if (marketObject.content && 'fields' in marketObject.content) {
318
325
  const fields = marketObject.content.fields as any;
@@ -507,33 +514,31 @@ export const getMarketPool = async (
507
514
  */
508
515
  export const getMarketCollaterals = async (
509
516
  query: ScallopQuery,
510
- collateralCoinNames?: SupportCollateralCoins[],
517
+ collateralCoinNames: SupportCollateralCoins[] = [...SUPPORT_COLLATERALS],
511
518
  indexer: boolean = false
512
519
  ) => {
513
- collateralCoinNames = collateralCoinNames || [...SUPPORT_COLLATERALS];
514
520
  const marketId = query.address.get('core.market');
515
- const [marketObjectResponse, coinPrices] = await Promise.all([
516
- await query.cache.queryGetObject(marketId, {
517
- showContent: true,
518
- }),
519
- await query.utils.getCoinPrices(collateralCoinNames ?? []),
520
- ]);
521
+ const coinPrices = await query.utils.getCoinPrices(collateralCoinNames ?? []);
521
522
  const marketCollaterals: MarketCollaterals = {};
522
523
 
523
524
  if (indexer) {
524
525
  const marketCollateralsIndexer = await query.indexer.getMarketCollaterals();
525
- for (const marketCollateral of Object.values(marketCollateralsIndexer)) {
526
- if (!collateralCoinNames.includes(marketCollateral.coinName)) continue;
526
+ const updateMarketCollateral = (marketCollateral: MarketCollateral) => {
527
+ if (!collateralCoinNames.includes(marketCollateral.coinName)) return;
527
528
  marketCollateral.coinPrice =
528
529
  coinPrices[marketCollateral.coinName] || marketCollateral.coinPrice;
529
530
  marketCollateral.coinWrappedType = query.utils.getCoinWrappedType(
530
531
  marketCollateral.coinName
531
532
  );
532
533
  marketCollaterals[marketCollateral.coinName] = marketCollateral;
533
- }
534
+ };
535
+ Object.values(marketCollateralsIndexer).forEach(updateMarketCollateral);
534
536
  return marketCollaterals;
535
537
  }
536
538
 
539
+ const marketObjectResponse = await query.cache.queryGetObject(marketId, {
540
+ showContent: true,
541
+ });
537
542
  await Promise.allSettled(
538
543
  collateralCoinNames.map(async (collateralCoinName) => {
539
544
  const marketCollateral = await getMarketCollateral(
@@ -570,6 +575,12 @@ export const getMarketCollateral = async (
570
575
  marketObject?: SuiObjectData | null,
571
576
  coinPrice?: number
572
577
  ) => {
578
+ coinPrice =
579
+ coinPrice ||
580
+ (await query.utils.getCoinPrices([collateralCoinName]))?.[
581
+ collateralCoinName
582
+ ];
583
+
573
584
  if (indexer) {
574
585
  const marketCollateralIndexer =
575
586
  await query.indexer.getMarketCollateral(collateralCoinName);
@@ -595,12 +606,6 @@ export const getMarketCollateral = async (
595
606
  })
596
607
  )?.data;
597
608
 
598
- coinPrice =
599
- coinPrice ||
600
- (await query.utils.getCoinPrices([collateralCoinName]))?.[
601
- collateralCoinName
602
- ];
603
-
604
609
  if (marketObject) {
605
610
  if (marketObject.content && 'fields' in marketObject.content) {
606
611
  const fields = marketObject.content.fields as any;
@@ -31,10 +31,9 @@ import type {
31
31
  */
32
32
  export const getSpools = async (
33
33
  query: ScallopQuery,
34
- stakeMarketCoinNames?: SupportStakeMarketCoins[],
34
+ stakeMarketCoinNames: SupportStakeMarketCoins[] = [...SUPPORT_SPOOLS],
35
35
  indexer: boolean = false
36
36
  ) => {
37
- stakeMarketCoinNames = stakeMarketCoinNames || [...SUPPORT_SPOOLS];
38
37
  const stakeCoinNames = stakeMarketCoinNames.map((stakeMarketCoinName) =>
39
38
  query.utils.parseCoinName<SupportStakeCoins>(stakeMarketCoinName)
40
39
  );
@@ -52,8 +51,8 @@ export const getSpools = async (
52
51
 
53
52
  if (indexer) {
54
53
  const spoolsIndexer = await query.indexer.getSpools();
55
- for (const spool of Object.values(spoolsIndexer)) {
56
- if (!stakeMarketCoinNames.includes(spool.marketCoinName)) continue;
54
+ const updateSpools = (spool: Spool) => {
55
+ if (!stakeMarketCoinNames.includes(spool.marketCoinName)) return;
57
56
  const coinName = query.utils.parseCoinName<SupportStakeCoins>(
58
57
  spool.marketCoinName
59
58
  );
@@ -68,7 +67,8 @@ export const getSpools = async (
68
67
  spool.rewardCoinPrice =
69
68
  coinPrices[rewardCoinName] || spool.rewardCoinPrice;
70
69
  spools[spool.marketCoinName] = spool;
71
- }
70
+ };
71
+ Object.values(spoolsIndexer).forEach(updateSpools);
72
72
 
73
73
  return spools;
74
74
  }
@@ -116,6 +116,7 @@ export const getSpool = async (
116
116
  `spool.pools.${marketCoinName}.rewardPoolId`
117
117
  );
118
118
  let spool: Spool | undefined = undefined;
119
+ coinPrices = coinPrices || (await query.utils.getCoinPrices([coinName]));
119
120
 
120
121
  if (indexer) {
121
122
  const spoolIndexer = await query.indexer.getSpool(marketCoinName);