@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
|
+
}
|
|
@@ -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("
|
|
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: [
|
|
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:
|