@harmoniclabs/buildooor
Version:
Cardano transaction builder in typescript
86 lines (85 loc) • 3.09 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getTxIntervalData = exports.slotToPOSIX = exports.POSIXToSlot = void 0;
var plutus_data_1 = require("@harmoniclabs/plutus-data");
var GenesisInfos_1 = require("../TxBuilder/GenesisInfos.js");
var ints_1 = require("../utils/ints.js");
/**
*
* @param POSIX POSIX time in milliseconds
* @param sysStartPOSIX blockchain start POSIX time in milliseconds
* @param slotLenMs milliseconds per slot
* @returns
*/
function POSIXToSlot(unixTime, gInfos) {
var timePassed = unixTime - gInfos.systemStartPosixMs;
var slotsPassed = Math.floor(timePassed / gInfos.slotLengthMs);
return slotsPassed + gInfos.startSlotNo;
}
exports.POSIXToSlot = POSIXToSlot;
/**
*
* @param slotN number of the slot
* @param sysStartPOSIX blockchain start POSIX time in milliseconds
* @param slotLenMs milliseconds per slot
* @returns
*/
function slotToPOSIX(slot, gInfos) {
var msAfterBegin = (slot - gInfos.startSlotNo) * gInfos.slotLengthMs;
return gInfos.systemStartPosixMs + msAfterBegin;
}
exports.slotToPOSIX = slotToPOSIX;
function getTxIntervalData(startSlot, ttlSlot, geneisInfos) {
geneisInfos = geneisInfos ? (0, GenesisInfos_1.normalizedGenesisInfos)(geneisInfos) : undefined;
var lowerBoundData = undefined;
if (startSlot === undefined) {
lowerBoundData = new plutus_data_1.DataConstr(0, []); // PNegInf
}
else {
if (!(0, GenesisInfos_1.isNormalizedGenesisInfos)(geneisInfos)) {
throw new Error("missing genesis infos requried to translate slot number to posix");
}
lowerBoundData = new plutus_data_1.DataConstr(// PExtended
1, // PFinite
[
new plutus_data_1.DataI(slotToPOSIX((0, ints_1.unsafeForceUInt)(startSlot), geneisInfos))
]);
}
var endSlot = ttlSlot;
var upperBoundData = undefined;
if (endSlot === undefined) {
upperBoundData = new plutus_data_1.DataConstr(2, []); // PPosInf
}
else {
if (!(0, GenesisInfos_1.isNormalizedGenesisInfos)(geneisInfos)) {
throw new Error("missing genesis infos requried to translate slot number to posix");
}
upperBoundData = new plutus_data_1.DataConstr(// PExtended
1, // PFinite
[
new plutus_data_1.DataI(slotToPOSIX((0, ints_1.unsafeForceUInt)(endSlot), geneisInfos))
]);
}
return new plutus_data_1.DataConstr(0, // PPosixTimeRange (PInterval) only constructor
[
// from
new plutus_data_1.DataConstr(// PBound
0, // only constructor
[
// bound
lowerBoundData,
// inclusive
new plutus_data_1.DataConstr(0, []) // PDataBool; True
]),
// to
new plutus_data_1.DataConstr(// PBound
0, // only constructor
[
// bound
upperBoundData,
// inclusive
new plutus_data_1.DataConstr(0, []) // PDataBool; True
]),
]);
}
exports.getTxIntervalData = getTxIntervalData;