@mutopad/connex-framework
Version:
A library implements VeChain Connex interface
85 lines • 6.61 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.newHeadTracker = void 0;
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
const checkpointInterval = 180;
function newHeadTracker(driver) {
let head = Object.assign({}, driver.head);
let finalized = driver.genesis.id;
let resolvers = [];
void (() => __awaiter(this, void 0, void 0, function* () {
for (;;) {
try {
const newHead = yield driver.pollHead();
if (newHead.id !== head.id && newHead.number >= head.number) {
if (head.number === 0 || (newHead.number + 1) % checkpointInterval === 0) {
try {
const finalizedBlk = yield driver.getBlock('finalized');
if (finalizedBlk && finalizedBlk.id != finalized) {
finalized = finalizedBlk.id;
}
}
catch (_a) {
void 0;
}
}
head = Object.assign({}, newHead);
const resolversCopy = resolvers;
resolvers = [];
resolversCopy.forEach(r => r(newHead));
}
else {
yield new Promise(resolve => setTimeout(resolve, 1 * 1000));
}
}
catch (_b) {
// rejection from driver.getHead means driver closed
break;
}
}
}))();
const genesisTs = driver.genesis.timestamp;
return {
get head() { return head; },
get progress() {
const nowTsMs = Date.now();
const headTsMs = head.timestamp * 1000;
if (nowTsMs - headTsMs < 30 * 1000) {
return 1;
}
const genesisTsMs = genesisTs * 1000;
const p = (headTsMs - genesisTsMs) / (nowTsMs - genesisTsMs);
return p < 0 ? NaN : p;
},
get finalized() { return finalized; },
ticker: () => {
let lastHeadId = head.id;
return {
next: () => {
return new Promise(resolve => {
if (lastHeadId !== head.id) {
return resolve(Object.assign({}, head));
}
resolvers.push(newHead => {
resolve(Object.assign({}, newHead));
});
}).then(h => {
lastHeadId = h.id;
return h;
});
}
};
}
};
}
exports.newHeadTracker = newHeadTracker;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhZC10cmFja2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2hlYWQtdHJhY2tlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSw2RUFBNkU7QUFDN0UsTUFBTSxrQkFBa0IsR0FBRyxHQUFHLENBQUE7QUFFOUIsU0FBZ0IsY0FBYyxDQUFDLE1BQXFCO0lBQ2hELElBQUksSUFBSSxxQkFBUSxNQUFNLENBQUMsSUFBSSxDQUFFLENBQUE7SUFDN0IsSUFBSSxTQUFTLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUE7SUFDakMsSUFBSSxTQUFTLEdBQXNELEVBQUUsQ0FBQztJQUV0RSxLQUFLLENBQUMsR0FBUyxFQUFFO1FBQ2IsU0FBVTtZQUNOLElBQUk7Z0JBQ0EsTUFBTSxPQUFPLEdBQUcsTUFBTSxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUE7Z0JBQ3ZDLElBQUksT0FBTyxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxJQUFJLE9BQU8sQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtvQkFDekQsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsa0JBQWtCLEtBQUssQ0FBQyxFQUFFO3dCQUN0RSxJQUFJOzRCQUNBLE1BQU0sWUFBWSxHQUFHLE1BQU0sTUFBTSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQTs0QkFDdkQsSUFBSSxZQUFZLElBQUksWUFBWSxDQUFDLEVBQUUsSUFBSSxTQUFTLEVBQUU7Z0NBQzlDLFNBQVMsR0FBRyxZQUFZLENBQUMsRUFBRSxDQUFBOzZCQUM5Qjt5QkFDSjt3QkFBQyxXQUFNOzRCQUFFLEtBQUssQ0FBQyxDQUFBO3lCQUFFO3FCQUNyQjtvQkFDRCxJQUFJLHFCQUFRLE9BQU8sQ0FBRSxDQUFBO29CQUNyQixNQUFNLGFBQWEsR0FBRyxTQUFTLENBQUE7b0JBQy9CLFNBQVMsR0FBRyxFQUFFLENBQUE7b0JBQ2QsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFBO2lCQUN6QztxQkFBTTtvQkFDSCxNQUFNLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQTtpQkFDOUQ7YUFDSjtZQUFDLFdBQU07Z0JBQ0osb0RBQW9EO2dCQUNwRCxNQUFLO2FBQ1I7U0FDSjtJQUNMLENBQUMsQ0FBQSxDQUFDLEVBQUUsQ0FBQTtJQUVKLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFBO0lBRTFDLE9BQU87UUFDSCxJQUFJLElBQUksS0FBSyxPQUFPLElBQUksQ0FBQSxDQUFDLENBQUM7UUFDMUIsSUFBSSxRQUFRO1lBQ1IsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFBO1lBQzFCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFBO1lBQ3RDLElBQUksT0FBTyxHQUFHLFFBQVEsR0FBRyxFQUFFLEdBQUcsSUFBSSxFQUFFO2dCQUNoQyxPQUFPLENBQUMsQ0FBQTthQUNYO1lBQ0QsTUFBTSxXQUFXLEdBQUcsU0FBUyxHQUFHLElBQUksQ0FBQTtZQUNwQyxNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLE9BQU8sR0FBRyxXQUFXLENBQUMsQ0FBQTtZQUM1RCxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQzFCLENBQUM7UUFDRCxJQUFJLFNBQVMsS0FBSyxPQUFPLFNBQVMsQ0FBQSxDQUFDLENBQUM7UUFDcEMsTUFBTSxFQUFFLEdBQUcsRUFBRTtZQUNULElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUE7WUFDeEIsT0FBTztnQkFDSCxJQUFJLEVBQUUsR0FBRyxFQUFFO29CQUNQLE9BQU8sSUFBSSxPQUFPLENBQTZCLE9BQU8sQ0FBQyxFQUFFO3dCQUNyRCxJQUFJLFVBQVUsS0FBSyxJQUFJLENBQUMsRUFBRSxFQUFFOzRCQUN4QixPQUFPLE9BQU8sbUJBQU0sSUFBSSxFQUFHLENBQUE7eUJBQzlCO3dCQUNELFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUU7NEJBQ3JCLE9BQU8sbUJBQU0sT0FBTyxFQUFHLENBQUE7d0JBQzNCLENBQUMsQ0FBQyxDQUFBO29CQUNOLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRTt3QkFDUixVQUFVLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQTt3QkFDakIsT0FBTyxDQUFDLENBQUE7b0JBQ1osQ0FBQyxDQUFDLENBQUE7Z0JBQ04sQ0FBQzthQUNKLENBQUE7UUFDTCxDQUFDO0tBQ0osQ0FBQTtBQUNMLENBQUM7QUFsRUQsd0NBa0VDIn0=