UNPKG

@saberhq/snapshots

Version:

The TypeScript SDK for the Saber Voting Escrow Snapshot system.

56 lines 1.95 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.calculateErasForPeriod = exports.calculateEraStart = exports.calculatePeriodStart = exports.calculateEra = exports.SECONDS_PER_ERA = void 0; const tslib_1 = require("tslib"); const tiny_invariant_1 = tslib_1.__importDefault(require("tiny-invariant")); const constants_1 = require("./constants"); /** * Number of seconds in an era. */ exports.SECONDS_PER_ERA = constants_1.PERIOD_SECONDS * constants_1.ERA_NUM_PERIODS; /** * Calculates the era that the given {@link Date} is in. * @param date * @returns */ const calculateEra = (date) => { return Math.floor((Math.floor(date.getTime() / 1000) - constants_1.COMMON_ERA_UNIX_TS) / exports.SECONDS_PER_ERA); }; exports.calculateEra = calculateEra; /** * Calculates the start date of a period. * @param era * @param period * @returns */ const calculatePeriodStart = (era, period) => { return new Date((constants_1.COMMON_ERA_UNIX_TS + era * exports.SECONDS_PER_ERA + period * constants_1.PERIOD_SECONDS) * 1000); }; exports.calculatePeriodStart = calculatePeriodStart; /** * Calculates the start date of an era. * @param era * @returns */ const calculateEraStart = (era) => (0, exports.calculatePeriodStart)(era, 0); exports.calculateEraStart = calculateEraStart; /** * Returns the eras included in a given period. * * This is useful for figuring out what histories must be fetched. * * @param start * @param end * @returns */ const calculateErasForPeriod = (start, end) => { const currentEra = (0, exports.calculateEra)(start); const lastEra = (0, exports.calculateEra)(end); (0, tiny_invariant_1.default)(lastEra >= currentEra, "Last era must be greater than current era."); return Array(lastEra - currentEra + 1) .fill(null) .map((_, i) => currentEra + i); }; exports.calculateErasForPeriod = calculateErasForPeriod; //# sourceMappingURL=math.js.map