UNPKG

@exromany/lido-csm-sdk

Version:

[![GitHub license](https://img.shields.io/github/license/lidofinance/lido-csm-sdk?color=limegreen)](https://github.com/lidofinance/lido-csm-sdk/blob/main/LICENSE.txt) [![Version npm](https://img.shields.io/npm/v/@lidofinance/lido-csm-sdk?label=version)](h

72 lines 3.06 kB
"use strict"; 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