@typus/typus-sdk 1.4.10 → 1.4.11

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.
@@ -67,3 +67,4 @@ export interface DiscountPoolData {
67
67
  inventory: number;
68
68
  }
69
69
  export declare function getMintHistory(provider: SuiClient, NFT_PACKAGE: string, vrf_input: any): Promise<import("@mysten/sui.js/client").PaginatedEvents | undefined>;
70
+ export declare function calculateLevelReward(totalRewards: number, levelShares: number[], numOfHolders: number[]): number[];
@@ -73,6 +73,7 @@ exports.getLevelExp = getLevelExp;
73
73
  exports.getTableTails = getTableTails;
74
74
  exports.getDiscountPool = getDiscountPool;
75
75
  exports.getMintHistory = getMintHistory;
76
+ exports.calculateLevelReward = calculateLevelReward;
76
77
  function getPool(provider, pool) {
77
78
  return __awaiter(this, void 0, void 0, function () {
78
79
  var res, fields, poolData;
@@ -564,3 +565,67 @@ function getMintHistory(provider, NFT_PACKAGE, vrf_input) {
564
565
  });
565
566
  });
566
567
  }
568
+ function calculateLevelReward(totalRewards, levelShares, numOfHolders) {
569
+ // Step 1: Calculate original level rewards (per holder)
570
+ var totalShares = levelShares.reduce(function (acc, share) { return acc + share; }, 0);
571
+ var originalRewardPerHolder = levelShares.map(function (levelShare, index) {
572
+ var num = numOfHolders[index];
573
+ var levelRewardPerHolder = num > 0 ? (totalRewards * levelShare) / totalShares / num : 0;
574
+ return Math.floor(levelRewardPerHolder);
575
+ });
576
+ var originalLevelRewards = originalRewardPerHolder.map(function (reward, index) { return reward * numOfHolders[index]; });
577
+ var distributedRewards = originalLevelRewards.reduce(function (acc, reward) { return acc + reward; }, 0);
578
+ var emptyLevelRewards = totalRewards - distributedRewards;
579
+ // Step 2: Distribute rewards from empty levels
580
+ var reversedOriginalRewardPerHolder = originalRewardPerHolder.slice().reverse();
581
+ var reversedNumOfHolders = numOfHolders.slice().reverse();
582
+ var reversedScaledRewardPerHolder = [];
583
+ if (emptyLevelRewards > 0) {
584
+ var undistributedRewards_1 = emptyLevelRewards;
585
+ var uncalculatedDistributedRewards_1 = distributedRewards;
586
+ reversedScaledRewardPerHolder = reversedOriginalRewardPerHolder.map(function (rewardPerHolder, index) {
587
+ var num = reversedNumOfHolders[index];
588
+ var scaledRewardPerHolder = num > 0
589
+ ? uncalculatedDistributedRewards_1 > 0
590
+ ? (rewardPerHolder * (uncalculatedDistributedRewards_1 + undistributedRewards_1)) / uncalculatedDistributedRewards_1
591
+ : rewardPerHolder
592
+ : 0;
593
+ undistributedRewards_1 -= (scaledRewardPerHolder - rewardPerHolder) * num;
594
+ uncalculatedDistributedRewards_1 -= rewardPerHolder * num;
595
+ return Math.floor(scaledRewardPerHolder);
596
+ });
597
+ }
598
+ else {
599
+ reversedScaledRewardPerHolder = reversedOriginalRewardPerHolder.slice();
600
+ }
601
+ // Step 3: Capped level reward
602
+ var reversedCappedRewardPerHolder = [reversedOriginalRewardPerHolder[0]];
603
+ var tempHighLevelReward = 0;
604
+ reversedScaledRewardPerHolder.forEach(function (highLevelReward, index) {
605
+ var lowLevelReward = reversedScaledRewardPerHolder[index + 1] || 0;
606
+ tempHighLevelReward =
607
+ highLevelReward > 0
608
+ ? tempHighLevelReward > 0
609
+ ? Math.min(highLevelReward, tempHighLevelReward)
610
+ : highLevelReward
611
+ : tempHighLevelReward;
612
+ reversedCappedRewardPerHolder.push(tempHighLevelReward > 0 ? Math.min(lowLevelReward, tempHighLevelReward) : lowLevelReward);
613
+ });
614
+ reversedCappedRewardPerHolder.pop();
615
+ var cappedRewardPerHolder = reversedCappedRewardPerHolder.slice().reverse();
616
+ // Step 4: Distribute capped reward from Step 3 into each level
617
+ var distributedRewardsStep4 = reversedCappedRewardPerHolder.reduce(function (acc, reward, index) { return acc + reward * reversedNumOfHolders[index]; }, 0);
618
+ var undistributedRewardsStep4 = totalRewards - distributedRewardsStep4;
619
+ var uncalculatedDistributedRewardsStep4 = distributedRewardsStep4;
620
+ var levelReward = cappedRewardPerHolder.map(function (rewardPerHolder, index) {
621
+ var num = reversedNumOfHolders[index];
622
+ var scaledRewardPerHolder = uncalculatedDistributedRewardsStep4 > 0
623
+ ? (rewardPerHolder * (uncalculatedDistributedRewardsStep4 + undistributedRewardsStep4)) /
624
+ uncalculatedDistributedRewardsStep4
625
+ : rewardPerHolder;
626
+ undistributedRewardsStep4 -= (scaledRewardPerHolder - rewardPerHolder) * num;
627
+ uncalculatedDistributedRewardsStep4 -= rewardPerHolder * num;
628
+ return Math.floor(scaledRewardPerHolder);
629
+ });
630
+ return levelReward;
631
+ }
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@typus/typus-sdk",
3
3
  "author": "Typus",
4
4
  "description": "typus sdk",
5
- "version": "1.4.10",
5
+ "version": "1.4.11",
6
6
  "dependencies": {
7
7
  "@mysten/bcs": "^0.11.1",
8
8
  "@mysten/kiosk": "0.8.10",