lisk-framework
Version:
Lisk blockchain application platform
46 lines • 2.11 kB
JavaScript
;
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