UNPKG

@mihalex/farms-sdk-tests

Version:
40 lines 2.27 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.calculateCurrentRewardPerToken = exports.calculatePendingRewards = void 0; const decimal_js_1 = __importDefault(require("decimal.js")); const utils_1 = require("./utils"); function calculatePendingRewards(farmState, userState, rewardIndex, ts) { const newRewardPerToken = calculateRewardPerStake(farmState, ts, rewardIndex); const newRewardTally = new decimal_js_1.default(userState.activeStakeScaled.toString()).mul(newRewardPerToken); const newReward = newRewardTally.sub(new decimal_js_1.default(userState.rewardsTallyScaled[rewardIndex].toString())); return new decimal_js_1.default(userState.rewardsIssuedUnclaimed[rewardIndex].toString()).add(newReward.div(utils_1.WAD)); } exports.calculatePendingRewards = calculatePendingRewards; function calculateCurrentRewardPerToken(farm, rewardIndex, currentTimeUnit) { const rewardCurve = farm.rewardInfos[rewardIndex].rewardScheduleCurve; let index = 0; for (let i = 0; i < rewardCurve.points.length; i++) { if (new decimal_js_1.default(rewardCurve.points[i].tsStart.toString()).lte(currentTimeUnit)) { index = i; } else { break; } } return rewardCurve.points[index].rewardPerTimeUnit.toNumber(); } exports.calculateCurrentRewardPerToken = calculateCurrentRewardPerToken; function calculateRewardPerStake(farmState, ts, rewardIndex) { const rewardInfo = farmState.rewardInfos[rewardIndex]; const tsDiff = ts.sub(new decimal_js_1.default(rewardInfo.lastIssuanceTs.toString())); let rps = calculateCurrentRewardPerToken(farmState, rewardIndex, ts); const newRewards = decimal_js_1.default.min(tsDiff.mul(new decimal_js_1.default(rps)), new decimal_js_1.default(rewardInfo.rewardsAvailable.toString())); const rewardPerToken = new decimal_js_1.default(rewardInfo.rewardPerShareScaled.toString()).add(newRewards .mul(utils_1.WAD) .div(new decimal_js_1.default(farmState.totalActiveStakeScaled.toString()))); return rewardPerToken; } //# sourceMappingURL=mathUtils.js.map