// Copyright (C) Parity Technologies (UK) Ltd. and Dijital Kurdistan Tech Institute // This file is part of Pezcumulus. // Pezcumulus is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // Pezcumulus is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License // along with Pezcumulus. If not, see . #![allow(missing_docs)] use pezcumulus_client_service::TeyrchainHostFunctions; use pezcumulus_primitives_core::ParaId; use pezcumulus_test_runtime::AccountId; use pezsc_chain_spec::GenesisConfigBuilderRuntimeCaller; use pezsc_service::{ChainType, GenericChainSpec}; use serde_json::json; /// Get the chain spec for a specific teyrchain ID. /// The given accounts are initialized with funds in addition /// to the default known accounts. pub fn get_chain_spec_with_extra_endowed( id: Option, extra_endowed_accounts: Vec, code: &[u8], ) -> GenericChainSpec { let runtime_caller = GenesisConfigBuilderRuntimeCaller::::new(code); let mut development_preset = runtime_caller .get_named_preset(Some(&pezsp_genesis_builder::LOCAL_TESTNET_RUNTIME_PRESET.to_string())) .expect("development preset is available on test runtime; qed"); // Extract existing balances let existing_balances = development_preset .get("balances") .and_then(|b| b.get("balances")) .and_then(|b| b.as_array()) .cloned() .unwrap_or_default(); // Create new balances by combining existing and extra accounts let mut all_balances = existing_balances; all_balances.extend(extra_endowed_accounts.into_iter().map(|a| json!([a, 1u64 << 60]))); let mut patch_json = json!({ "balances": { "balances": all_balances, }, }); if let Some(id) = id { // Merge teyrchain ID if given, otherwise use the one from the preset. pezsc_chain_spec::json_merge( &mut patch_json, json!({ "teyrchainInfo": { "teyrchainId": id, }, }), ); }; pezsc_chain_spec::json_merge(&mut development_preset, patch_json.into()); GenericChainSpec::builder(code, None) .with_name("Local Testnet") .with_id(pezsp_genesis_builder::LOCAL_TESTNET_RUNTIME_PRESET) .with_chain_type(ChainType::Local) .with_genesis_config_patch(development_preset) .build() } /// Get the chain spec for a specific teyrchain ID. pub fn get_chain_spec(id: Option) -> GenericChainSpec { get_chain_spec_with_extra_endowed( id, Default::default(), pezcumulus_test_runtime::WASM_BINARY.expect("WASM binary was not built, please build it!"), ) } /// Get the chain spec for a specific teyrchain ID. pub fn get_elastic_scaling_chain_spec(id: Option) -> GenericChainSpec { get_chain_spec_with_extra_endowed( id, Default::default(), pezcumulus_test_runtime::elastic_scaling::WASM_BINARY .expect("WASM binary was not built, please build it!"), ) } pub fn get_relay_parent_offset_chain_spec(id: Option) -> GenericChainSpec { get_chain_spec_with_extra_endowed( id, Default::default(), pezcumulus_test_runtime::relay_parent_offset::WASM_BINARY .expect("WASM binary was not built, please build it!"), ) } /// Get the chain spec for a specific teyrchain ID. pub fn get_elastic_scaling_500ms_chain_spec(id: Option) -> GenericChainSpec { get_chain_spec_with_extra_endowed( id, Default::default(), pezcumulus_test_runtime::elastic_scaling_500ms::WASM_BINARY .expect("WASM binary was not built, please build it!"), ) } /// Get the chain spec for a specific teyrchain ID. pub fn get_elastic_scaling_mvp_chain_spec(id: Option) -> GenericChainSpec { get_chain_spec_with_extra_endowed( id, Default::default(), pezcumulus_test_runtime::elastic_scaling_mvp::WASM_BINARY .expect("WASM binary was not built, please build it!"), ) } pub fn get_elastic_scaling_multi_block_slot_chain_spec(id: Option) -> GenericChainSpec { get_chain_spec_with_extra_endowed( id, Default::default(), pezcumulus_test_runtime::elastic_scaling_multi_block_slot::WASM_BINARY .expect("WASM binary was not built, please build it!"), ) } pub fn get_sync_backing_chain_spec(id: Option) -> GenericChainSpec { get_chain_spec_with_extra_endowed( id, Default::default(), pezcumulus_test_runtime::sync_backing::WASM_BINARY .expect("WASM binary was not built, please build it!"), ) } pub fn get_async_backing_chain_spec(id: Option) -> GenericChainSpec { get_chain_spec_with_extra_endowed( id, Default::default(), pezcumulus_test_runtime::async_backing::WASM_BINARY .expect("WASM binary was not built, please build it!"), ) }