diff --git a/docs/src/network-definition-spec.md b/docs/src/network-definition-spec.md index ce1a141aa..dcdcf9b60 100644 --- a/docs/src/network-definition-spec.md +++ b/docs/src/network-definition-spec.md @@ -70,8 +70,8 @@ The network config can be provided both in `json` or `toml` format and each sect - `parachains` Array of `parachain` definition objects - `*id`: (Number) The id to assign to this parachain. Must be unique. - - `add_to_genesis`: (Boolean) flag to add parachain to genesis or register in runtime. - - `cumulus_based`: (Boolean) flag to use `cumulus` command generation; Set to `true` by default. + - `add_to_genesis`: (Boolean, default true) flag to add parachain to genesis or register in runtime. + - `cumulus_based`: (Boolean, default true) flag to use `cumulus` command generation. - `genesis_wasm_path`: (String) Path to the wasm file to use. - `genesis_wasm_generator`: (String) Command to generate the wasm file. - `genesis_state_path`: (String) Path to the state file to use. @@ -98,6 +98,9 @@ The network config can be provided both in `json` or `toml` format and each sect - name: (String) name of the `env` var. - value: (String| number) Value of the env var. + - `onboard_as_parachain`: (Boolean, default true) flag to specify whether the para should be onboarded as a parachain or stay a parathread + - `register_para`: (Boolean, default true) flag to specify whether the para should be registered. The `add_to_genesis` flag **must** be set to false for this flag to have any effect. + ## `hrmp_channels`: (Array of objects) - `sender`: (Number) parachain Id. diff --git a/flake-module.nix b/flake-module.nix index 95ac2f825..214f3292e 100644 --- a/flake-module.nix +++ b/flake-module.nix @@ -17,7 +17,7 @@ default = pkgs.buildNpmPackage rec { # root hash (hash of hashes of each dependnecies) # this should be updated on each dependency change (use `prefetch-npm-deps` to get new hash) - npmDepsHash = "sha256-hsQ7Z0/wU8FPNWeR68N9NnbvW95Ux1gHwk+MoTQYBRE="; + npmDepsHash = "sha256-lA8xOKnzthgscr0pMmQ6KcZjYxNdOK5lfZ301PZ29Xg="; pname = "zombienet"; name = pname; diff --git a/javascript/packages/orchestrator/src/configGenerator.ts b/javascript/packages/orchestrator/src/configGenerator.ts index 52b0c4f21..dc1e7b84e 100644 --- a/javascript/packages/orchestrator/src/configGenerator.ts +++ b/javascript/packages/orchestrator/src/configGenerator.ts @@ -364,6 +364,10 @@ export async function generateNetworkSpec( parachain.register_para === undefined ? true : parachain.register_para, // register by default + onboardAsParachain: + parachain.onboard_as_parachain !== undefined + ? parachain.onboard_as_parachain + : true, // onboard by default collators, }; diff --git a/javascript/packages/orchestrator/src/jsapi-helpers/index.ts b/javascript/packages/orchestrator/src/jsapi-helpers/index.ts index 70fd33b42..a849a24d8 100644 --- a/javascript/packages/orchestrator/src/jsapi-helpers/index.ts +++ b/javascript/packages/orchestrator/src/jsapi-helpers/index.ts @@ -2,6 +2,7 @@ import { ApiPromise, WsProvider } from "@polkadot/api"; import { Keyring } from "@polkadot/keyring"; import { cryptoWaitReady } from "@polkadot/util-crypto"; import { readDataFile } from "@zombienet/utils"; +import { RegisterParachainOptions } from "../types"; import { chainCustomSectionUpgrade, chainUpgradeFromLocalFile, @@ -18,14 +19,15 @@ async function connect(apiUrl: string, types?: any): Promise { return api; } -async function registerParachain( - id: number, - wasmPath: string, - statePath: string, - apiUrl: string, - seed: string = "//Alice", +async function registerParachain({ + id, + wasmPath, + statePath, + apiUrl, + onboardAsParachain, + seed = "//Alice", finalization = false, -) { +}: RegisterParachainOptions) { return new Promise(async (resolve, reject) => { await cryptoWaitReady(); @@ -42,7 +44,7 @@ async function registerParachain( const parachainGenesisArgs = { genesis_head: genesis_state, validation_code: wasm_data, - parachain: true, + parachain: onboardAsParachain, }; const genesis = api.createType("ParaGenesisArgs", parachainGenesisArgs); diff --git a/javascript/packages/orchestrator/src/orchestrator.ts b/javascript/packages/orchestrator/src/orchestrator.ts index d4291dd9b..d0a56c480 100644 --- a/javascript/packages/orchestrator/src/orchestrator.ts +++ b/javascript/packages/orchestrator/src/orchestrator.ts @@ -703,12 +703,14 @@ export async function start( for (const parachain of networkSpec.parachains) { if (!parachain.addToGenesis && parachain.registerPara) { // register parachain on a running network - await registerParachain( - parachain.id, - `${tmpDir.path}/${parachain.name}/${GENESIS_WASM_FILENAME}`, - `${tmpDir.path}/${parachain.name}/${GENESIS_STATE_FILENAME}`, - network.relay[0].wsUri, - ); + const basePath = `${tmpDir.path}/${parachain.name}`; + await registerParachain({ + id: parachain.id, + wasmPath: `${basePath}/${GENESIS_WASM_FILENAME}`, + statePath: `${basePath}/${GENESIS_STATE_FILENAME}`, + apiUrl: network.relay[0].wsUri, + onboardAsParachain: parachain.onboardAsParachain, + }); } if (parachain.cumulusBased) { diff --git a/javascript/packages/orchestrator/src/types.ts b/javascript/packages/orchestrator/src/types.ts index c18320fec..68e6163c7 100644 --- a/javascript/packages/orchestrator/src/types.ts +++ b/javascript/packages/orchestrator/src/types.ts @@ -96,6 +96,7 @@ export interface ParachainConfig { chain?: string; add_to_genesis?: boolean; register_para?: boolean; + onboard_as_parachain?: boolean; balance?: number; genesis_wasm_path?: string; genesis_wasm_generator?: string; @@ -203,6 +204,7 @@ export interface Parachain { para: PARA; addToGenesis: boolean; registerPara: boolean; + onboardAsParachain: boolean; cumulusBased: boolean; genesisWasmPath?: string; genesisWasmGenerator?: string; @@ -315,3 +317,13 @@ export interface FnArgs { after?: number; seconds?: number; } + +export interface RegisterParachainOptions { + id: number; + wasmPath: string; + statePath: string; + apiUrl: string; + onboardAsParachain: boolean; + seed?: string; + finalization?: boolean; +}