UNPKG

@lodestar/types

Version:

Typescript types required for lodestar

54 lines 1.93 kB
import { FAR_FUTURE_EPOCH } from "@lodestar/params"; /** * Get the status of the validator * based on conditions outlined in https://hackmd.io/ofFJ5gOmQpu1jjHilHbdQQ */ export function getValidatorStatus(validator, currentEpoch) { // pending if (validator.activationEpoch > currentEpoch) { if (validator.activationEligibilityEpoch === FAR_FUTURE_EPOCH) { return "pending_initialized"; } if (validator.activationEligibilityEpoch < FAR_FUTURE_EPOCH) { return "pending_queued"; } } // active if (validator.activationEpoch <= currentEpoch && currentEpoch < validator.exitEpoch) { if (validator.exitEpoch === FAR_FUTURE_EPOCH) { return "active_ongoing"; } if (validator.exitEpoch < FAR_FUTURE_EPOCH) { return validator.slashed ? "active_slashed" : "active_exiting"; } } // exited if (validator.exitEpoch <= currentEpoch && currentEpoch < validator.withdrawableEpoch) { return validator.slashed ? "exited_slashed" : "exited_unslashed"; } // withdrawal if (validator.withdrawableEpoch <= currentEpoch) { return validator.effectiveBalance !== 0 ? "withdrawal_possible" : "withdrawal_done"; } throw new Error("ValidatorStatus unknown"); } export function mapToGeneralStatus(subStatus) { switch (subStatus) { case "active_ongoing": case "active_exiting": case "active_slashed": return "active"; case "pending_initialized": case "pending_queued": return "pending"; case "exited_slashed": case "exited_unslashed": return "exited"; case "withdrawal_possible": case "withdrawal_done": return "withdrawal"; default: throw new Error(`Unknown substatus: ${subStatus}`); } } //# sourceMappingURL=validatorStatus.js.map