@saberhq/snapshots
Version:
The TypeScript SDK for the Saber Voting Escrow Snapshot system.
56 lines • 1.95 kB
JavaScript
;
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