UNPKG

@zombienet/orchestrator

Version:

ZombieNet aim to be a testing framework for substrate based blockchains, providing a simple cli tool that allow users to spawn and test ephemeral Substrate based networks

82 lines (81 loc) 4.96 kB
"use strict"; 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.validateRuntimeCode = exports.paraIsRegistered = exports.paraGetBlockHeight = exports.findPatternInSystemEventSubscription = exports.chainUpgradeFromUrl = exports.chainUpgradeFromLocalFile = exports.chainCustomSectionUpgrade = void 0; exports.connect = connect; exports.registerParachain = registerParachain; const api_1 = require("@polkadot/api"); const keyring_1 = require("@polkadot/keyring"); const util_crypto_1 = require("@polkadot/util-crypto"); const utils_1 = require("@zombienet/utils"); const chainUpgrade_1 = require("./chainUpgrade"); Object.defineProperty(exports, "chainCustomSectionUpgrade", { enumerable: true, get: function () { return chainUpgrade_1.chainCustomSectionUpgrade; } }); Object.defineProperty(exports, "chainUpgradeFromLocalFile", { enumerable: true, get: function () { return chainUpgrade_1.chainUpgradeFromLocalFile; } }); Object.defineProperty(exports, "chainUpgradeFromUrl", { enumerable: true, get: function () { return chainUpgrade_1.chainUpgradeFromUrl; } }); Object.defineProperty(exports, "validateRuntimeCode", { enumerable: true, get: function () { return chainUpgrade_1.validateRuntimeCode; } }); const events_1 = require("./events"); Object.defineProperty(exports, "findPatternInSystemEventSubscription", { enumerable: true, get: function () { return events_1.findPatternInSystemEventSubscription; } }); const parachain_1 = require("./parachain"); Object.defineProperty(exports, "paraGetBlockHeight", { enumerable: true, get: function () { return parachain_1.paraGetBlockHeight; } }); Object.defineProperty(exports, "paraIsRegistered", { enumerable: true, get: function () { return parachain_1.paraIsRegistered; } }); function connect(apiUrl, types) { return __awaiter(this, void 0, void 0, function* () { const provider = new api_1.WsProvider(apiUrl); const api = new api_1.ApiPromise({ provider, types }); yield api.isReady; return api; }); } function registerParachain(_a) { return __awaiter(this, arguments, void 0, function* ({ id, wasmPath, statePath, apiUrl, onboardAsParachain, seed = "//Alice", finalization = false, }) { return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () { yield (0, util_crypto_1.cryptoWaitReady)(); const keyring = new keyring_1.Keyring({ type: "sr25519" }); const sudo = keyring.addFromUri(seed); const api = yield connect(apiUrl); let nonce = (yield api.query.system.account(sudo.address)).nonce.toNumber(); const wasm_data = (0, utils_1.readDataFile)(wasmPath); const genesis_state = (0, utils_1.readDataFile)(statePath); const parachainGenesisArgs = { genesis_head: genesis_state, validation_code: wasm_data, parachain: onboardAsParachain, }; const genesis = api.createType("ParaGenesisArgs", parachainGenesisArgs); console.log(`Submitting extrinsic to register parachain ${id}. nonce: ${nonce}`); const unsub = yield api.tx.sudo .sudo(api.tx.parasSudoWrapper.sudoScheduleParaInitialize(id, genesis)) .signAndSend(sudo, { nonce: nonce, era: 0 }, (result) => { console.log(`Current status is ${result.status}`); if (result.status.isInBlock) { console.log(`Transaction included at blockhash ${result.status.asInBlock}`); if (finalization) { console.log("Waiting for finalization..."); } else { unsub(); return resolve(); } } else if (result.status.isFinalized) { console.log(`Transaction finalized at blockHash ${result.status.asFinalized}`); unsub(); return resolve(); } else if (result.isError) { console.log(`Transaction error`); reject(`Transaction error`); } }); nonce += 1; })); }); }