UNPKG

lisk-framework

Version:

Lisk blockchain application platform

46 lines 2.11 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.SidechainCCSidechainTerminatedCommand = void 0; const base_interoperability_cc_commands_1 = require("../../base_interoperability_cc_commands"); const constants_1 = require("../../constants"); const schemas_1 = require("../../schemas"); const utils_1 = require("../../utils"); const terminated_state_1 = require("../../stores/terminated_state"); class SidechainCCSidechainTerminatedCommand extends base_interoperability_cc_commands_1.BaseInteroperabilityCCCommand { constructor() { super(...arguments); this.schema = schemas_1.sidechainTerminatedCCMParamsSchema; } get name() { return constants_1.CROSS_CHAIN_COMMAND_SIDECHAIN_TERMINATED; } async verify(ctx) { if (ctx.ccm.status !== 0) { throw new Error('Sidechain terminated message must have status OK.'); } if (!ctx.ccm.sendingChainID.equals((0, utils_1.getMainchainID)(ctx.chainID))) { throw new Error('Sidechain terminated message must be sent from the mainchain.'); } } async execute(context) { const { chainID, stateRoot } = context.params; const terminatedStateSubstore = this.stores.get(terminated_state_1.TerminatedStateStore); const terminatedStateAccountExists = await terminatedStateSubstore.has(context, chainID); if (terminatedStateAccountExists) { const terminatedStateAccount = await terminatedStateSubstore.get(context, chainID); if (terminatedStateAccount.initialized) { return; } await terminatedStateSubstore.set(context, chainID, { stateRoot, mainchainStateRoot: constants_1.EMPTY_HASH, initialized: true, }); } else { await this.internalMethods.createTerminatedStateAccount(context, chainID, stateRoot); } } } exports.SidechainCCSidechainTerminatedCommand = SidechainCCSidechainTerminatedCommand; //# sourceMappingURL=sidechain_terminated.js.map