@exromany/lido-csm-sdk
Version:
[](https://github.com/lidofinance/lido-csm-sdk/blob/main/LICENSE.txt) [](h
72 lines • 3.06 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getValidatorsRewards = exports.getValidatorsRewardsV2 = exports.getValidatorsRewardsV1 = void 0;
const lido_ethereum_sdk_1 = require("@lidofinance/lido-ethereum-sdk");
const parse_report_js_1 = require("./parse-report.js");
const DEFAULT_REWARD_SHARE = 1;
const getBaseFields = (report) => ({
blockNumber: report.blockstamp.block_number,
refSlot: report.blockstamp.ref_slot,
frame: report.frame,
});
const getValidatorsRewardsV1 = (nodeOperatorId, report) => {
const operator = report.operators[`${nodeOperatorId}`];
if (!operator)
return [];
const threshold = report.threshold;
const totalDistributed = BigInt(operator.distributed.toString());
const validators = Object.entries(operator.validators).map(([validatorIndex, { perf, slashed }]) => {
const performance = perf.assigned > 0 ? perf.included / perf.assigned : 0;
return {
validatorIndex: validatorIndex,
slashed,
performance,
isEligible: !slashed && performance >= threshold && performance > 0,
};
});
const eligibleCount = validators.filter((v) => v.isEligible).length;
const rewardPerValidator = eligibleCount > 0 ? totalDistributed / BigInt(eligibleCount) : 0n;
return validators.map((v, indexInReport) => ({
...getBaseFields(report),
indexInReport,
validatorIndex: v.validatorIndex,
performance: v.performance,
slashed: v.slashed,
threshold,
receivedShares: v.isEligible ? rewardPerValidator : 0n,
rewardShare: DEFAULT_REWARD_SHARE,
}));
};
exports.getValidatorsRewardsV1 = getValidatorsRewardsV1;
const getValidatorsRewardsV2 = (nodeOperatorId, report) => {
const operator = report.operators[`${nodeOperatorId}`];
if (!operator)
return [];
return Object.entries(operator.validators).map(([validatorIndex, validatorData], indexInReport) => ({
...getBaseFields(report),
indexInReport,
validatorIndex: validatorIndex,
performance: validatorData.performance,
threshold: validatorData.threshold,
slashed: validatorData.slashed,
receivedShares: validatorData.distributed_rewards,
rewardShare: validatorData.rewards_share,
}));
};
exports.getValidatorsRewardsV2 = getValidatorsRewardsV2;
const getValidatorsRewards = (nodeOperatorId, report) => {
if ((0, parse_report_js_1.isRewardsReportV1)(report)) {
return (0, exports.getValidatorsRewardsV1)(nodeOperatorId, report);
}
else if ((0, parse_report_js_1.isRewardsReportV2)(report)) {
return (0, exports.getValidatorsRewardsV2)(nodeOperatorId, report);
}
else {
throw new lido_ethereum_sdk_1.SDKError({
code: lido_ethereum_sdk_1.ERROR_CODE.NOT_SUPPORTED,
message: 'Unknown rewards report version',
});
}
};
exports.getValidatorsRewards = getValidatorsRewards;
//# sourceMappingURL=get-validators-rewards.js.map