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.18 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.computeStatuses = void 0; const index_js_1 = require("../common/index.js"); const index_js_2 = require("../common/utils/index.js"); const isWithdrawn = (ctx) => ctx.keyIndex < ctx.info.totalWithdrawnKeys; const isDeposited = (ctx) => ctx.keyIndex < ctx.info.totalDepositedKeys; const isVetted = (ctx) => ctx.keyIndex < ctx.info.totalVettedKeys; const getUnvettedStatus = (ctx) => { if (isVetted(ctx)) return null; if (ctx.duplicates?.includes(ctx.pubkey)) return index_js_1.KEY_STATUS.DUPLICATED; if (ctx.prefilled?.status) return index_js_1.KEY_STATUS.DUPLICATED; if (ctx.keyIndex === ctx.info.totalVettedKeys) return index_js_1.KEY_STATUS.INVALID; return index_js_1.KEY_STATUS.UNCHECKED; }; const getVettedStatus = (ctx) => { if (isDeposited(ctx)) return null; if (ctx.info.enqueuedCount < ctx.info.depositableValidatorsCount) { return index_js_1.KEY_STATUS.NON_QUEUED; } return index_js_1.KEY_STATUS.DEPOSITABLE; }; const getDepositedStatus = (ctx) => { if (isWithdrawn(ctx) || ctx.withdrawalSubmitted?.includes(ctx.pubkey)) { return index_js_1.KEY_STATUS.WITHDRAWN; } if (ctx.prefilled?.status) return ctx.prefilled.status; return ctx.hasCLStatuses ? index_js_1.KEY_STATUS.ACTIVATION_PENDING : index_js_1.KEY_STATUS.ACTIVE; }; const getLifecycleStatus = (ctx) => getUnvettedStatus(ctx) ?? getVettedStatus(ctx) ?? getDepositedStatus(ctx); const checkSlashed = (ctx) => isDeposited(ctx) && !!ctx.prefilled?.slashed; const checkWithStrikes = (ctx) => isDeposited(ctx) && ctx.hasStrikes; const checkEjectable = (ctx) => isDeposited(ctx) && ((ctx.prefilled?.status === index_js_1.KEY_STATUS.ACTIVE && ctx.prefilled.activationEpoch < ctx.ejectableEpoch) || !ctx.hasCLStatuses); const checkExitRequested = (ctx) => isDeposited(ctx) && ctx.requestedToExit.some((key) => (0, index_js_2.compareLowercase)(ctx.pubkey, key)); const checkUnbonded = (ctx) => ctx.unboundCount > 0 && ctx.info.totalAddedKeys - ctx.keyIndex < ctx.unboundCount; const computeStatuses = (ctx) => { const statuses = []; const lifecycle = getLifecycleStatus(ctx); statuses.push(lifecycle); const isSlashed = checkSlashed(ctx); if (isSlashed) statuses.push(index_js_1.KEY_STATUS.SLASHED); const canHaveAdditionalStatuses = ![ index_js_1.KEY_STATUS.WITHDRAWN, index_js_1.KEY_STATUS.WITHDRAWAL_PENDING, index_js_1.KEY_STATUS.EXITING, ].includes(lifecycle); if (canHaveAdditionalStatuses) { if (!isSlashed && checkExitRequested(ctx)) statuses.push(index_js_1.KEY_STATUS.EXIT_REQUESTED); if (!isSlashed && checkEjectable(ctx)) statuses.push(index_js_1.KEY_STATUS.EJECTABLE); if (checkWithStrikes(ctx)) statuses.push(index_js_1.KEY_STATUS.WITH_STRIKES); if (checkUnbonded(ctx)) statuses.push(index_js_1.KEY_STATUS.UNBONDED); } return statuses; }; exports.computeStatuses = computeStatuses; //# sourceMappingURL=compute-statuses.js.map