@typus/typus-sdk 1.4.10 → 1.4.12

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
+ }
@@ -1,5 +1,5 @@
1
1
  import { SuiClient } from "@mysten/sui.js/client";
2
- import { TypusConfig } from "src/utils";
2
+ import { TypusConfig } from "../utils";
3
3
  export interface Vault {
4
4
  id: string;
5
5
  depositToken: string;
@@ -40,7 +40,7 @@ exports.getVaultData = getVaultData;
40
40
  exports.getShareData = getShareData;
41
41
  var transactions_1 = require("@mysten/sui.js/transactions");
42
42
  var bcs_1 = require("@mysten/bcs");
43
- var utils_1 = require("src/utils");
43
+ var utils_1 = require("../utils");
44
44
  var SENDER = "0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
45
45
  function getVaultData(config, input) {
46
46
  return __awaiter(this, void 0, void 0, function () {
@@ -114,7 +114,11 @@ function getShareData(config, input) {
114
114
  transactionBlock.moveCall({
115
115
  target: "".concat(config.package.safu, "::view_function::get_share_data_bcs"),
116
116
  typeArguments: [],
117
- arguments: [transactionBlock.pure(config.registry.safu.safu), transactionBlock.pure(input.user), transactionBlock.pure(input.indexes)],
117
+ arguments: [
118
+ transactionBlock.pure(config.registry.safu.safu),
119
+ transactionBlock.pure(input.user),
120
+ transactionBlock.pure(input.indexes),
121
+ ],
118
122
  });
119
123
  return [4 /*yield*/, input.provider.devInspectTransactionBlock({ sender: SENDER, transactionBlock: transactionBlock })];
120
124
  case 1:
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.12",
6
6
  "dependencies": {
7
7
  "@mysten/bcs": "^0.11.1",
8
8
  "@mysten/kiosk": "0.8.10",