UNPKG

lisk-framework

Version:

Lisk blockchain application platform

64 lines 2.78 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.BaseSynchronizer = void 0; const lisk_chain_1 = require("@liskhq/lisk-chain"); const lisk_validator_1 = require("@liskhq/lisk-validator"); const lisk_codec_1 = require("@liskhq/lisk-codec"); const errors_1 = require("./errors"); const schema_1 = require("../schema"); const constants_1 = require("../constants"); class BaseSynchronizer { constructor(logger, chain, network) { this._stop = false; this._logger = logger; this._chain = chain; this._network = network; } stop() { this._stop = true; } async _getLastBlockFromNetwork(peerId) { const { data } = (await this._network.requestFromPeer({ procedure: constants_1.NETWORK_RPC_GET_LAST_BLOCK, peerId, })); if (!(data === null || data === void 0 ? void 0 : data.length)) { throw new errors_1.ApplyPenaltyAndRestartError(peerId, 'Peer did not provide its last block'); } return lisk_chain_1.Block.fromBytes(data); } async _getHighestCommonBlockFromNetwork(peerId, ids) { const blockIds = lisk_codec_1.codec.encode(schema_1.getHighestCommonBlockRequestSchema, { ids }); const { data } = (await this._network.requestFromPeer({ procedure: constants_1.NETWORK_RPC_GET_HIGHEST_COMMON_BLOCK, peerId, data: blockIds, })); const decodedResp = lisk_codec_1.codec.decode(schema_1.getHighestCommonBlockResponseSchema, data); if (!decodedResp.id.length) { return undefined; } try { lisk_validator_1.validator.validate(schema_1.getHighestCommonBlockResponseSchema, decodedResp); } catch { throw new errors_1.ApplyPenaltyAndAbortError(peerId, 'Invalid common block response format'); } return this._chain.dataAccess.getBlockHeaderByID(decodedResp.id); } async _getBlocksFromNetwork(peerId, fromID) { const blockId = lisk_codec_1.codec.encode(schema_1.getBlocksFromIdRequestSchema, { blockId: fromID }); const { data } = (await this._network.requestFromPeer({ procedure: constants_1.NETWORK_RPC_GET_BLOCKS_FROM_ID, data: blockId, peerId, })); if (!(data === null || data === void 0 ? void 0 : data.length)) { throw new Error(`Peer ${peerId} did not respond with block`); } const decodedData = lisk_codec_1.codec.decode(schema_1.getBlocksFromIdResponseSchema, data); return decodedData.blocks.map(block => lisk_chain_1.Block.fromBytes(block)); } } exports.BaseSynchronizer = BaseSynchronizer; //# sourceMappingURL=base_synchronizer.js.map