@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/constants/poolAddress.d.ts +1 -0
- package/dist/constants/tokenBucket.d.ts +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +161 -116
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +159 -116
- package/dist/index.mjs.map +1 -1
- package/dist/models/scallopQuery.d.ts +1 -0
- package/dist/queries/poolAddressesQuery.d.ts +1 -0
- package/dist/queries/spoolQuery.d.ts +6 -2
- package/dist/test.d.ts +1 -0
- package/dist/types/query/spool.d.ts +20 -0
- package/dist/utils/index.d.ts +1 -0
- package/package.json +1 -1
- package/src/constants/poolAddress.ts +1 -0
- package/src/constants/tokenBucket.ts +1 -1
- package/src/index.ts +1 -0
- package/src/models/scallopQuery.ts +2 -9
- package/src/queries/poolAddressesQuery.ts +8 -2
- package/src/queries/spoolQuery.ts +186 -121
- package/src/test.ts +17 -0
- package/src/types/query/spool.ts +21 -0
- package/src/utils/core.ts +11 -4
- package/src/utils/index.ts +1 -0
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 =
|
|
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
|
|
1796
|
-
if (typeof
|
|
1797
|
-
|
|
1798
|
-
|
|
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[
|
|
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
|
-
|
|
4593
|
-
|
|
4594
|
-
|
|
4595
|
-
|
|
4596
|
-
|
|
4597
|
-
|
|
4598
|
-
|
|
4599
|
-
|
|
4600
|
-
|
|
4601
|
-
|
|
4602
|
-
|
|
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,
|
|
4690
|
+
var getSpool = async (query, marketCoinName, indexer = false, coinPrices, requiredObjects) => {
|
|
4608
4691
|
const coinName = query.utils.parseCoinName(marketCoinName);
|
|
4609
|
-
|
|
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]
|
|
4624
|
-
spoolIndexer.marketCoinPrice =
|
|
4625
|
-
spoolIndexer.rewardCoinPrice = coinPrices?.[rewardCoinName2]
|
|
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
|
-
|
|
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
|
|
4640
|
-
const
|
|
4641
|
-
|
|
4642
|
-
|
|
4643
|
-
|
|
4644
|
-
|
|
4645
|
-
|
|
4646
|
-
|
|
4647
|
-
|
|
4648
|
-
|
|
4649
|
-
|
|
4650
|
-
|
|
4651
|
-
|
|
4652
|
-
|
|
4653
|
-
|
|
4654
|
-
|
|
4655
|
-
|
|
4656
|
-
|
|
4657
|
-
|
|
4658
|
-
|
|
4659
|
-
|
|
4660
|
-
|
|
4661
|
-
)
|
|
4662
|
-
|
|
4663
|
-
|
|
4664
|
-
|
|
4665
|
-
|
|
4666
|
-
|
|
4667
|
-
|
|
4668
|
-
|
|
4669
|
-
|
|
4670
|
-
|
|
4671
|
-
|
|
4672
|
-
|
|
4673
|
-
|
|
4674
|
-
|
|
4675
|
-
|
|
4676
|
-
|
|
4677
|
-
|
|
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
|
-
|
|
7656
|
-
|
|
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,
|