@scallop-io/sui-scallop-sdk 1.4.15-rc.1 → 1.4.15-rc.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.mjs CHANGED
@@ -1122,7 +1122,7 @@ var TEST_ADDRESSES = {
1122
1122
  };
1123
1123
 
1124
1124
  // src/constants/tokenBucket.ts
1125
- var DEFAULT_TOKENS_PER_INTERVAL = 50;
1125
+ var DEFAULT_TOKENS_PER_INTERVAL = 10;
1126
1126
  var DEFAULT_INTERVAL_IN_MS = 250;
1127
1127
 
1128
1128
  // src/constants/vesca.ts
@@ -1792,10 +1792,16 @@ function withIndexerFallback(method) {
1792
1792
  var parseObjectAs = (object) => {
1793
1793
  if (!(object && object.content && "fields" in object.content))
1794
1794
  throw new Error(`Failed to parse object`);
1795
- const value = object.content.fields.value;
1796
- if (typeof value === "object" && "fields" in value)
1797
- return object.content.fields.value.fields;
1798
- return value;
1795
+ const fields = object.content.fields;
1796
+ if (typeof fields === "object" && "value" in fields) {
1797
+ const value = fields.value;
1798
+ if (typeof value === "object" && "fields" in value)
1799
+ return value.fields;
1800
+ return value;
1801
+ } else if (typeof fields === "object") {
1802
+ return fields;
1803
+ }
1804
+ return fields;
1799
1805
  };
1800
1806
 
1801
1807
  // src/models/scallopCache.ts
@@ -4560,12 +4566,80 @@ var getSCoinSwapRate = async (query, fromSCoin, toSCoin, underlyingCoinPrice) =>
4560
4566
 
4561
4567
  // src/queries/spoolQuery.ts
4562
4568
  import { normalizeStructTag as normalizeStructTag5 } from "@mysten/sui/utils";
4569
+ var queryRequiredSpoolObjects = async (query, stakePoolCoinNames) => {
4570
+ const tasks = stakePoolCoinNames.map((t, idx) => ({
4571
+ poolCoinName: stakePoolCoinNames[idx],
4572
+ spool: POOL_ADDRESSES[t]?.spool,
4573
+ spoolReward: POOL_ADDRESSES[t]?.spoolReward,
4574
+ sCoinTreasury: POOL_ADDRESSES[t]?.sCoinTreasury
4575
+ }));
4576
+ const [spoolObjects, spoolRewardObjects, sCoinTreasuryObjects] = await Promise.all([
4577
+ queryMultipleObjects(
4578
+ query.cache,
4579
+ tasks.map((task) => task.spool).filter((t) => !!t)
4580
+ ),
4581
+ queryMultipleObjects(
4582
+ query.cache,
4583
+ tasks.map((task) => task.spoolReward).filter((t) => !!t)
4584
+ ),
4585
+ queryMultipleObjects(
4586
+ query.cache,
4587
+ tasks.map((task) => task.sCoinTreasury).filter((t) => !!t)
4588
+ )
4589
+ ]);
4590
+ const mapObjects = (tasks2, fetchedObjects) => {
4591
+ const resultMap = {};
4592
+ let fetchedIndex = 0;
4593
+ for (const task of tasks2) {
4594
+ const key = task[Object.keys(task)[1]];
4595
+ if (key) {
4596
+ resultMap[task.poolCoinName] = fetchedObjects[fetchedIndex];
4597
+ fetchedIndex++;
4598
+ }
4599
+ }
4600
+ return resultMap;
4601
+ };
4602
+ const spoolMap = mapObjects(tasks, spoolObjects);
4603
+ const spoolRewardMap = mapObjects(tasks, spoolRewardObjects);
4604
+ const sCoinTreasuryMap = mapObjects(tasks, sCoinTreasuryObjects);
4605
+ return stakePoolCoinNames.reduce(
4606
+ (acc, name) => {
4607
+ acc[name] = {
4608
+ spool: spoolMap[name],
4609
+ spoolReward: spoolRewardMap[name],
4610
+ sCoinTreasury: sCoinTreasuryMap[name]
4611
+ };
4612
+ return acc;
4613
+ },
4614
+ {}
4615
+ );
4616
+ };
4617
+ var parseSpoolObjects = ({
4618
+ spool,
4619
+ spoolReward
4620
+ }) => {
4621
+ const _spool = parseObjectAs(spool);
4622
+ const _spoolReward = parseObjectAs(spoolReward);
4623
+ return {
4624
+ stakeType: _spool.stake_type,
4625
+ maxDistributedPoint: _spool.max_distributed_point,
4626
+ distributedPoint: _spool.distributed_point,
4627
+ distributedPointPerPeriod: _spool.distributed_point_per_period,
4628
+ pointDistributionTime: _spool.point_distribution_time,
4629
+ maxStake: _spool.max_stakes,
4630
+ stakes: _spool.stakes,
4631
+ index: _spool.index,
4632
+ createdAt: _spool.created_at,
4633
+ lastUpdate: _spool.last_update,
4634
+ ..._spoolReward
4635
+ };
4636
+ };
4563
4637
  var getSpools = async (query, stakeMarketCoinNames = [...SUPPORT_SPOOLS], indexer = false, marketPools, coinPrices) => {
4564
4638
  const stakeCoinNames = stakeMarketCoinNames.map(
4565
4639
  (stakeMarketCoinName) => query.utils.parseCoinName(stakeMarketCoinName)
4566
4640
  );
4567
- coinPrices = coinPrices ?? await query.utils.getCoinPrices() ?? {};
4568
4641
  marketPools = marketPools ?? (await query.getMarketPools(stakeCoinNames, { indexer })).pools;
4642
+ coinPrices = coinPrices ?? await query.getAllCoinPrices({ marketPools }) ?? {};
4569
4643
  if (!marketPools)
4570
4644
  throw new Error(`Fail to fetch marketPools for ${stakeCoinNames}`);
4571
4645
  const spools = {};
@@ -4580,126 +4654,93 @@ var getSpools = async (query, stakeMarketCoinNames = [...SUPPORT_SPOOLS], indexe
4580
4654
  const rewardCoinName = query.utils.getSpoolRewardCoinName(
4581
4655
  spool.marketCoinName
4582
4656
  );
4583
- const marketPool = marketPools[coinName];
4584
4657
  spool.coinPrice = coinPrices[coinName] ?? spool.coinPrice;
4585
- spool.marketCoinPrice = coinPrices[coinName] ? (coinPrices[coinName] ?? 0) * (marketPool ? marketPool.conversionRate : 0) : spool.marketCoinPrice;
4658
+ spool.marketCoinPrice = coinPrices[spool.marketCoinName] ?? spool.marketCoinPrice;
4586
4659
  spool.rewardCoinPrice = coinPrices[rewardCoinName] ?? spool.rewardCoinPrice;
4587
4660
  spools[spool.marketCoinName] = spool;
4588
4661
  };
4589
4662
  Object.values(spoolsIndexer).forEach(updateSpools);
4590
4663
  return spools;
4591
4664
  }
4592
- for (const stakeMarketCoinName of stakeMarketCoinNames) {
4593
- const stakeCoinName = query.utils.parseCoinName(stakeMarketCoinName);
4594
- const spool = await getSpool(
4595
- query,
4596
- stakeMarketCoinName,
4597
- indexer,
4598
- marketPools[stakeCoinName],
4599
- coinPrices
4600
- );
4601
- if (spool) {
4602
- spools[stakeMarketCoinName] = spool;
4603
- }
4604
- }
4665
+ const requiredObjects = await queryRequiredSpoolObjects(
4666
+ query,
4667
+ stakeCoinNames
4668
+ );
4669
+ await Promise.allSettled(
4670
+ stakeMarketCoinNames.map(async (stakeMarketCoinName, idx) => {
4671
+ try {
4672
+ const stakeCoinName = stakeCoinNames[idx];
4673
+ const spool = await getSpool(
4674
+ query,
4675
+ stakeMarketCoinName,
4676
+ indexer,
4677
+ coinPrices,
4678
+ requiredObjects[stakeCoinName]
4679
+ );
4680
+ if (spool) {
4681
+ spools[stakeMarketCoinName] = spool;
4682
+ }
4683
+ } catch (e) {
4684
+ console.error(e);
4685
+ }
4686
+ })
4687
+ );
4605
4688
  return spools;
4606
4689
  };
4607
- var getSpool = async (query, marketCoinName, indexer = false, marketPool, coinPrices) => {
4690
+ var getSpool = async (query, marketCoinName, indexer = false, coinPrices, requiredObjects) => {
4608
4691
  const coinName = query.utils.parseCoinName(marketCoinName);
4609
- marketPool = marketPool || await query.getMarketPool(coinName, { indexer });
4610
- if (!marketPool) {
4611
- throw new Error(`Failed to fetch marketPool for ${marketCoinName}`);
4612
- }
4613
- const poolId = query.address.get(`spool.pools.${marketCoinName}.id`);
4614
- const rewardPoolId = query.address.get(
4615
- `spool.pools.${marketCoinName}.rewardPoolId`
4616
- );
4617
- let spool = void 0;
4618
- coinPrices = coinPrices || await query.utils.getCoinPrices();
4692
+ coinPrices = coinPrices || await query.getAllCoinPrices();
4619
4693
  if (indexer) {
4620
4694
  const spoolIndexer = await query.indexer.getSpool(marketCoinName);
4621
4695
  const coinName2 = query.utils.parseCoinName(marketCoinName);
4622
4696
  const rewardCoinName2 = query.utils.getSpoolRewardCoinName(marketCoinName);
4623
- spoolIndexer.coinPrice = coinPrices?.[coinName2] || spoolIndexer.coinPrice;
4624
- spoolIndexer.marketCoinPrice = (coinPrices?.[coinName2] ?? 0) * (marketPool ? marketPool.conversionRate : 0) || spoolIndexer.marketCoinPrice;
4625
- spoolIndexer.rewardCoinPrice = coinPrices?.[rewardCoinName2] || spoolIndexer.rewardCoinPrice;
4697
+ spoolIndexer.coinPrice = coinPrices?.[coinName2] ?? spoolIndexer.coinPrice;
4698
+ spoolIndexer.marketCoinPrice = coinPrices?.[marketCoinName] ?? spoolIndexer.marketCoinPrice;
4699
+ spoolIndexer.rewardCoinPrice = coinPrices?.[rewardCoinName2] ?? spoolIndexer.rewardCoinPrice;
4626
4700
  return spoolIndexer;
4627
4701
  }
4628
- const spoolObjectResponse = await query.cache.queryGetObjects(
4629
- [poolId, rewardPoolId],
4630
- {
4631
- showContent: true
4632
- }
4633
- );
4634
- if (!(spoolObjectResponse[0] && spoolObjectResponse[1])) {
4635
- throw new Error("Fail to fetch spoolObjectResponse!");
4636
- }
4702
+ requiredObjects ?? (requiredObjects = (await queryRequiredSpoolObjects(query, [coinName]))[coinName]);
4637
4703
  const rewardCoinName = query.utils.getSpoolRewardCoinName(marketCoinName);
4638
4704
  coinPrices = coinPrices || await query.utils.getCoinPrices();
4639
- const spoolObject = spoolObjectResponse[0];
4640
- const rewardPoolObject = spoolObjectResponse[1];
4641
- if (spoolObject.content && "fields" in spoolObject.content) {
4642
- const spoolFields = spoolObject.content.fields;
4643
- const parsedSpoolData = parseOriginSpoolData({
4644
- stakeType: spoolFields.stake_type,
4645
- maxDistributedPoint: spoolFields.max_distributed_point,
4646
- distributedPoint: spoolFields.distributed_point,
4647
- distributedPointPerPeriod: spoolFields.distributed_point_per_period,
4648
- pointDistributionTime: spoolFields.point_distribution_time,
4649
- maxStake: spoolFields.max_stakes,
4650
- stakes: spoolFields.stakes,
4651
- index: spoolFields.index,
4652
- createdAt: spoolFields.created_at,
4653
- lastUpdate: spoolFields.last_update
4654
- });
4655
- const marketCoinPrice = (coinPrices?.[coinName] ?? 0) * marketPool.conversionRate;
4656
- const marketCoinDecimal = query.utils.getCoinDecimal(marketCoinName);
4657
- const calculatedSpoolData = calculateSpoolData(
4658
- parsedSpoolData,
4659
- marketCoinPrice,
4660
- marketCoinDecimal
4661
- );
4662
- if (rewardPoolObject.content && "fields" in rewardPoolObject.content) {
4663
- const rewardPoolFields = rewardPoolObject.content.fields;
4664
- const parsedSpoolRewardPoolData = parseOriginSpoolRewardPoolData({
4665
- claimed_rewards: rewardPoolFields.claimed_rewards,
4666
- exchange_rate_numerator: rewardPoolFields.exchange_rate_numerator,
4667
- exchange_rate_denominator: rewardPoolFields.exchange_rate_denominator,
4668
- rewards: rewardPoolFields.rewards,
4669
- spool_id: rewardPoolFields.spool_id
4670
- });
4671
- const rewardCoinPrice = coinPrices?.[rewardCoinName] ?? 0;
4672
- const rewardCoinDecimal = query.utils.getCoinDecimal(rewardCoinName);
4673
- const calculatedRewardPoolData = calculateSpoolRewardPoolData(
4674
- parsedSpoolData,
4675
- parsedSpoolRewardPoolData,
4676
- calculatedSpoolData,
4677
- rewardCoinPrice,
4678
- rewardCoinDecimal
4679
- );
4680
- spool = {
4681
- marketCoinName,
4682
- symbol: query.utils.parseSymbol(marketCoinName),
4683
- coinType: query.utils.parseCoinType(coinName),
4684
- marketCoinType: query.utils.parseMarketCoinType(coinName),
4685
- rewardCoinType: isMarketCoin(rewardCoinName) ? query.utils.parseMarketCoinType(rewardCoinName) : query.utils.parseCoinType(rewardCoinName),
4686
- sCoinType: marketPool.sCoinType,
4687
- coinDecimal: query.utils.getCoinDecimal(coinName),
4688
- rewardCoinDecimal: query.utils.getCoinDecimal(rewardCoinName),
4689
- coinPrice: coinPrices?.[coinName] ?? 0,
4690
- marketCoinPrice,
4691
- rewardCoinPrice,
4692
- maxPoint: parsedSpoolData.maxPoint,
4693
- distributedPoint: parsedSpoolData.distributedPoint,
4694
- maxStake: parsedSpoolData.maxStake,
4695
- ...calculatedSpoolData,
4696
- exchangeRateNumerator: parsedSpoolRewardPoolData.exchangeRateNumerator,
4697
- exchangeRateDenominator: parsedSpoolRewardPoolData.exchangeRateDenominator,
4698
- ...calculatedRewardPoolData
4699
- };
4700
- }
4701
- }
4702
- return spool;
4705
+ const parsedSpoolObjects = parseSpoolObjects(requiredObjects);
4706
+ const parsedSpoolData = parseOriginSpoolData(parsedSpoolObjects);
4707
+ const marketCoinPrice = coinPrices?.[marketCoinName] ?? 0;
4708
+ const marketCoinDecimal = query.utils.getCoinDecimal(marketCoinName);
4709
+ const calculatedSpoolData = calculateSpoolData(
4710
+ parsedSpoolData,
4711
+ marketCoinPrice,
4712
+ marketCoinDecimal
4713
+ );
4714
+ const parsedSpoolRewardPoolData = parseOriginSpoolRewardPoolData(parsedSpoolObjects);
4715
+ const rewardCoinPrice = coinPrices?.[rewardCoinName] ?? 0;
4716
+ const rewardCoinDecimal = query.utils.getCoinDecimal(rewardCoinName);
4717
+ const calculatedRewardPoolData = calculateSpoolRewardPoolData(
4718
+ parsedSpoolData,
4719
+ parsedSpoolRewardPoolData,
4720
+ calculatedSpoolData,
4721
+ rewardCoinPrice,
4722
+ rewardCoinDecimal
4723
+ );
4724
+ return {
4725
+ marketCoinName,
4726
+ symbol: query.utils.parseSymbol(marketCoinName),
4727
+ coinType: query.utils.parseCoinType(coinName),
4728
+ marketCoinType: query.utils.parseMarketCoinType(coinName),
4729
+ rewardCoinType: isMarketCoin(rewardCoinName) ? query.utils.parseMarketCoinType(rewardCoinName) : query.utils.parseCoinType(rewardCoinName),
4730
+ sCoinType: query.utils.parseSCoinType(marketCoinName),
4731
+ coinDecimal: query.utils.getCoinDecimal(coinName),
4732
+ rewardCoinDecimal: query.utils.getCoinDecimal(rewardCoinName),
4733
+ coinPrice: coinPrices?.[coinName] ?? 0,
4734
+ marketCoinPrice,
4735
+ rewardCoinPrice,
4736
+ maxPoint: parsedSpoolData.maxPoint,
4737
+ distributedPoint: parsedSpoolData.distributedPoint,
4738
+ maxStake: parsedSpoolData.maxStake,
4739
+ ...calculatedSpoolData,
4740
+ exchangeRateNumerator: parsedSpoolRewardPoolData.exchangeRateNumerator,
4741
+ exchangeRateDenominator: parsedSpoolRewardPoolData.exchangeRateDenominator,
4742
+ ...calculatedRewardPoolData
4743
+ };
4703
4744
  };
4704
4745
  var getStakeAccounts = async ({
4705
4746
  utils
@@ -5120,6 +5161,10 @@ var getAllAddresses = async (query) => {
5120
5161
  // @ts-ignore
5121
5162
  `spool.pools.s${coinName}.rewardPoolId`
5122
5163
  );
5164
+ const sCoinTreasury = query.address.get(
5165
+ // @ts-ignore
5166
+ `scoin.coins.s${coinName}.treasury`
5167
+ );
5123
5168
  results[coinName] = {
5124
5169
  lendingPoolAddress: addresses[0],
5125
5170
  collateralPoolAddress: addresses[1],
@@ -5131,7 +5176,8 @@ var getAllAddresses = async (query) => {
5131
5176
  borrowLimitKey: addresses[7],
5132
5177
  isolatedAssetKey: addresses[8],
5133
5178
  spool,
5134
- spoolReward: rewardPool
5179
+ spoolReward: rewardPool,
5180
+ sCoinTreasury
5135
5181
  };
5136
5182
  await new Promise((resolve) => setTimeout(resolve, 200));
5137
5183
  })
@@ -7652,13 +7698,8 @@ var ScallopQuery = class {
7652
7698
  * @return Spool data.
7653
7699
  */
7654
7700
  async getSpool(stakeMarketCoinName, args) {
7655
- return await getSpool(
7656
- this,
7657
- stakeMarketCoinName,
7658
- args?.indexer,
7659
- args?.marketPool,
7660
- args?.coinPrices
7661
- );
7701
+ const spools = await this.getSpools(void 0, args);
7702
+ return spools[stakeMarketCoinName];
7662
7703
  }
7663
7704
  /**
7664
7705
  * Get stake accounts data for all stake pools (spools).
@@ -8987,9 +9028,11 @@ export {
8987
9028
  ScallopQuery,
8988
9029
  ScallopUtils,
8989
9030
  TEST_ADDRESSES,
9031
+ TokenBucket,
8990
9032
  UNLOCK_ROUND_DURATION,
8991
9033
  USE_TEST_ADDRESS,
8992
9034
  assetCoins,
9035
+ callWithRateLimit,
8993
9036
  coinDecimals,
8994
9037
  coinIds,
8995
9038
  marketCoins,