@typus/typus-sdk 1.1.40 → 1.1.41
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.
|
@@ -48,4 +48,5 @@ export interface ProfitSharing {
|
|
|
48
48
|
total: string;
|
|
49
49
|
}
|
|
50
50
|
export declare function getProfitSharing(provider: SuiClient, diceProfitSharing: string): Promise<ProfitSharing>;
|
|
51
|
+
export declare function calculateLevelReward(totalRewards: number, levelShares: number[], numOfHolders: number[]): number[];
|
|
51
52
|
export {};
|
|
@@ -36,7 +36,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
36
36
|
}
|
|
37
37
|
};
|
|
38
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
-
exports.getProfitSharing = exports.getHistory = exports.getPlaygrounds = void 0;
|
|
39
|
+
exports.calculateLevelReward = exports.getProfitSharing = exports.getHistory = exports.getPlaygrounds = void 0;
|
|
40
40
|
var token_1 = require("../token");
|
|
41
41
|
function getPlaygrounds(provider, diceRegistry) {
|
|
42
42
|
return __awaiter(this, void 0, void 0, function () {
|
|
@@ -168,3 +168,65 @@ function getProfitSharing(provider, diceProfitSharing) {
|
|
|
168
168
|
});
|
|
169
169
|
}
|
|
170
170
|
exports.getProfitSharing = getProfitSharing;
|
|
171
|
+
function calculateLevelReward(totalRewards, levelShares, numOfHolders) {
|
|
172
|
+
// Step 1: Calculate original level rewards (per holder)
|
|
173
|
+
var totalShares = levelShares.reduce(function (acc, share) { return acc + share; }, 0);
|
|
174
|
+
var originalRewardPerHolder = levelShares.map(function (levelShare, index) {
|
|
175
|
+
var num = numOfHolders[index];
|
|
176
|
+
var levelRewardPerHolder = num > 0 ? (totalRewards * levelShare) / totalShares / num : 0;
|
|
177
|
+
return Math.floor(levelRewardPerHolder);
|
|
178
|
+
});
|
|
179
|
+
var originalLevelRewards = originalRewardPerHolder.map(function (reward, index) { return reward * numOfHolders[index]; });
|
|
180
|
+
var distributedRewards = originalLevelRewards.reduce(function (acc, reward) { return acc + reward; }, 0);
|
|
181
|
+
var emptyLevelRewards = totalRewards - distributedRewards;
|
|
182
|
+
// console.log("Step 1 - ", originalLevelRewards);
|
|
183
|
+
// Step 2: Distribute rewards from empty levels
|
|
184
|
+
var scaledRewardPerHolder;
|
|
185
|
+
if (emptyLevelRewards > 0) {
|
|
186
|
+
var undistributedRewards_1 = emptyLevelRewards;
|
|
187
|
+
var uncalculatedDistributedRewards_1 = distributedRewards;
|
|
188
|
+
scaledRewardPerHolder = originalRewardPerHolder.map(function (rewardPerHolder, index) {
|
|
189
|
+
var num = numOfHolders[index];
|
|
190
|
+
var scaledRewardPerHolder = num > 0
|
|
191
|
+
? uncalculatedDistributedRewards_1 > 0
|
|
192
|
+
? (rewardPerHolder * (uncalculatedDistributedRewards_1 + undistributedRewards_1)) / uncalculatedDistributedRewards_1
|
|
193
|
+
: rewardPerHolder
|
|
194
|
+
: 0;
|
|
195
|
+
undistributedRewards_1 -= (scaledRewardPerHolder - rewardPerHolder) * num;
|
|
196
|
+
uncalculatedDistributedRewards_1 -= rewardPerHolder * num;
|
|
197
|
+
return Math.floor(scaledRewardPerHolder);
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
else {
|
|
201
|
+
scaledRewardPerHolder = originalRewardPerHolder.slice();
|
|
202
|
+
}
|
|
203
|
+
// console.log("Step 2 - ", scaledRewardPerHolder);
|
|
204
|
+
// Step 3: Capped level reward
|
|
205
|
+
var cappedRewardPerHolder = [];
|
|
206
|
+
var tempHighLevelReward = 0;
|
|
207
|
+
scaledRewardPerHolder.forEach(function (lowLevelReward, index) {
|
|
208
|
+
var highLevelReward = scaledRewardPerHolder[index + 1] || 0;
|
|
209
|
+
if (highLevelReward > 0) {
|
|
210
|
+
tempHighLevelReward = highLevelReward;
|
|
211
|
+
}
|
|
212
|
+
cappedRewardPerHolder.push(Math.min(lowLevelReward, tempHighLevelReward));
|
|
213
|
+
});
|
|
214
|
+
// console.log("Step 3 - ", cappedRewardPerHolder);
|
|
215
|
+
// Step 4: Distribute capped reward from Step 3 into each level
|
|
216
|
+
var distributedRewardsStep4 = cappedRewardPerHolder.reduce(function (acc, reward, index) { return acc + reward * numOfHolders[index]; }, 0);
|
|
217
|
+
var undistributedRewardsStep4 = totalRewards - distributedRewardsStep4;
|
|
218
|
+
var uncalculatedDistributedRewardsStep4 = distributedRewardsStep4;
|
|
219
|
+
var levelReward = cappedRewardPerHolder.map(function (rewardPerHolder, index) {
|
|
220
|
+
var num = numOfHolders[index];
|
|
221
|
+
var scaledRewardPerHolder = uncalculatedDistributedRewardsStep4 > 0
|
|
222
|
+
? (rewardPerHolder * (uncalculatedDistributedRewardsStep4 + undistributedRewardsStep4)) /
|
|
223
|
+
uncalculatedDistributedRewardsStep4
|
|
224
|
+
: rewardPerHolder;
|
|
225
|
+
undistributedRewardsStep4 -= (scaledRewardPerHolder - rewardPerHolder) * num;
|
|
226
|
+
uncalculatedDistributedRewardsStep4 -= rewardPerHolder * num;
|
|
227
|
+
return Math.floor(scaledRewardPerHolder);
|
|
228
|
+
});
|
|
229
|
+
// console.log("Step 4 - ", levelReward);
|
|
230
|
+
return levelReward;
|
|
231
|
+
}
|
|
232
|
+
exports.calculateLevelReward = calculateLevelReward;
|