PHP WebShell
Текущая директория: /opt/BitGoJS/node_modules/@polkadot/api-derive/cjs/session
Просмотр файла: progress.js
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.sessionProgress = exports.eraProgress = exports.eraLength = void 0;
exports.progress = progress;
const rxjs_1 = require("rxjs");
const util_1 = require("@polkadot/util");
const index_js_1 = require("../util/index.js");
function withProgressField(field) {
return (instanceId, api) => (0, index_js_1.memo)(instanceId, () => api.derive.session.progress().pipe((0, rxjs_1.map)((info) => info[field])));
}
function createDerive(api, info, [currentSlot, epochIndex, epochOrGenesisStartSlot, activeEraStartSessionIndex]) {
const epochStartSlot = epochIndex.mul(info.sessionLength).iadd(epochOrGenesisStartSlot);
const sessionProgress = currentSlot.sub(epochStartSlot);
const eraProgress = info.currentIndex.sub(activeEraStartSessionIndex).imul(info.sessionLength).iadd(sessionProgress);
return (0, util_1.objectSpread)({
eraProgress: api.registry.createType('BlockNumber', eraProgress),
sessionProgress: api.registry.createType('BlockNumber', sessionProgress)
}, info);
}
function queryAura(api) {
return api.derive.session.info().pipe((0, rxjs_1.map)((info) => (0, util_1.objectSpread)({
eraProgress: api.registry.createType('BlockNumber'),
sessionProgress: api.registry.createType('BlockNumber')
}, info)));
}
function queryBabe(api) {
return api.derive.session.info().pipe((0, rxjs_1.switchMap)((info) => (0, rxjs_1.combineLatest)([
(0, rxjs_1.of)(info),
// we may have no staking, but have babe (permissioned)
api.query.staking?.erasStartSessionIndex
? api.queryMulti([
api.query.babe.currentSlot,
api.query.babe.epochIndex,
api.query.babe.genesisSlot,
[api.query.staking.erasStartSessionIndex, info.activeEra]
])
: api.queryMulti([
api.query.babe.currentSlot,
api.query.babe.epochIndex,
api.query.babe.genesisSlot
])
])), (0, rxjs_1.map)(([info, [currentSlot, epochIndex, genesisSlot, optStartIndex]]) => [
info, [currentSlot, epochIndex, genesisSlot, optStartIndex && optStartIndex.isSome ? optStartIndex.unwrap() : api.registry.createType('SessionIndex', 1)]
]));
}
/**
* @description Retrieves all the session and era query and calculates specific values on it as the length of the session and eras
*/
function progress(instanceId, api) {
return (0, index_js_1.memo)(instanceId, () => api.query.babe
? queryBabe(api).pipe((0, rxjs_1.map)(([info, slots]) => createDerive(api, info, slots)))
: queryAura(api));
}
exports.eraLength = withProgressField('eraLength');
exports.eraProgress = withProgressField('eraProgress');
exports.sessionProgress = withProgressField('sessionProgress');
Выполнить команду
Для локальной разработки. Не используйте в интернете!