@mihalex/farms-sdk-tests
Version:
40 lines • 2.27 kB
JavaScript
;
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