git.delta.rocks / unique-network / refs/commits / ddce88dfeeb4

difftreelog

source

node/cli/src/chain_spec.rs7.1 KiBsourcehistory
1// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.2// This file is part of Unique Network.34// Unique Network is free software: you can redistribute it and/or modify5// it under the terms of the GNU General Public License as published by6// the Free Software Foundation, either version 3 of the License, or7// (at your option) any later version.89// Unique Network is distributed in the hope that it will be useful,10// but WITHOUT ANY WARRANTY; without even the implied warranty of11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the12// GNU General Public License for more details.1314// You should have received a copy of the GNU General Public License15// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.1617use cumulus_primitives_core::ParaId;18use sc_chain_spec::{ChainSpecExtension, ChainSpecGroup};19use sc_service::ChainType;20use sp_core::{sr25519, Pair, Public};21use sp_runtime::traits::{IdentifyAccount, Verify};22use std::collections::BTreeMap;2324use serde::{Deserialize, Serialize};25use serde_json::map::Map;2627#[cfg(feature = "unique-runtime")]28use unique_runtime as runtime;2930#[cfg(feature = "quartz-runtime")]31use quartz_runtime as runtime;3233#[cfg(feature = "opal-runtime")]34use opal_runtime as runtime;3536use runtime::{*, opaque::*};3738/// Specialized `ChainSpec`. This is a specialization of the general Substrate ChainSpec type.39pub type ChainSpec = sc_service::GenericChainSpec<runtime::GenesisConfig, Extensions>;4041/// Helper function to generate a crypto pair from seed42pub fn get_from_seed<TPublic: Public>(seed: &str) -> <TPublic::Pair as Pair>::Public {43	TPublic::Pair::from_string(&format!("//{}", seed), None)44		.expect("static values are valid; qed")45		.public()46}4748/// The extensions for the [`ChainSpec`].49#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, ChainSpecGroup, ChainSpecExtension)]50#[serde(deny_unknown_fields)]51pub struct Extensions {52	/// The relay chain of the Parachain.53	pub relay_chain: String,54	/// The id of the Parachain.55	pub para_id: u32,56}5758impl Extensions {59	/// Try to get the extension from the given `ChainSpec`.60	pub fn try_get(chain_spec: &dyn sc_service::ChainSpec) -> Option<&Self> {61		sc_chain_spec::get_extension(chain_spec.extensions())62	}63}6465type AccountPublic = <Signature as Verify>::Signer;6667/// Helper function to generate an account ID from seed68pub fn get_account_id_from_seed<TPublic: Public>(seed: &str) -> AccountId69where70	AccountPublic: From<<TPublic::Pair as Pair>::Public>,71{72	AccountPublic::from(get_from_seed::<TPublic>(seed)).into_account()73}7475pub fn development_config() -> ChainSpec {76	let mut properties = Map::new();77	properties.insert("tokenSymbol".into(), "OPL".into());78	properties.insert("tokenDecimals".into(), 15.into());79	properties.insert("ss58Format".into(), 42.into());8081	ChainSpec::from_genesis(82		// Name83		"Development",84		// ID85		"dev",86		ChainType::Local,87		move || {88			testnet_genesis(89				// Sudo account90				get_account_id_from_seed::<sr25519::Public>("Alice"),91				vec![92					get_from_seed::<AuraId>("Alice"),93					get_from_seed::<AuraId>("Bob"),94				],95				// Pre-funded accounts96				vec![97					get_account_id_from_seed::<sr25519::Public>("Alice"),98					get_account_id_from_seed::<sr25519::Public>("Bob"),99				],100				1000.into(),101			)102		},103		// Bootnodes104		vec![],105		// Telemetry106		None,107		// Protocol ID108		None,109		None,110		// Properties111		Some(properties),112		// Extensions113		Extensions {114			relay_chain: "rococo-dev".into(),115			para_id: 1000,116		},117	)118}119120pub fn local_testnet_rococo_config() -> ChainSpec {121	ChainSpec::from_genesis(122		// Name123		"Local Testnet",124		// ID125		"local_testnet",126		ChainType::Local,127		move || {128			testnet_genesis(129				// Sudo account130				get_account_id_from_seed::<sr25519::Public>("Alice"),131				vec![132					get_from_seed::<AuraId>("Alice"),133					get_from_seed::<AuraId>("Bob"),134				],135				// Pre-funded accounts136				vec![137					get_account_id_from_seed::<sr25519::Public>("Alice"),138					get_account_id_from_seed::<sr25519::Public>("Bob"),139					get_account_id_from_seed::<sr25519::Public>("Charlie"),140					get_account_id_from_seed::<sr25519::Public>("Dave"),141					get_account_id_from_seed::<sr25519::Public>("Eve"),142					get_account_id_from_seed::<sr25519::Public>("Ferdie"),143					get_account_id_from_seed::<sr25519::Public>("Alice//stash"),144					get_account_id_from_seed::<sr25519::Public>("Bob//stash"),145					get_account_id_from_seed::<sr25519::Public>("Charlie//stash"),146					get_account_id_from_seed::<sr25519::Public>("Dave//stash"),147					get_account_id_from_seed::<sr25519::Public>("Eve//stash"),148					get_account_id_from_seed::<sr25519::Public>("Ferdie//stash"),149				],150				1000.into(),151			)152		},153		// Bootnodes154		vec![],155		// Telemetry156		None,157		// Protocol ID158		None,159		None,160		// Properties161		None,162		// Extensions163		Extensions {164			relay_chain: "rococo-local".into(),165			para_id: 1000,166		},167	)168}169170pub fn local_testnet_westend_config() -> ChainSpec {171	ChainSpec::from_genesis(172		// Name173		"Local Testnet",174		// ID175		"local_testnet",176		ChainType::Local,177		move || {178			testnet_genesis(179				// Sudo account180				get_account_id_from_seed::<sr25519::Public>("Alice"),181				vec![182					get_from_seed::<AuraId>("Alice"),183					get_from_seed::<AuraId>("Bob"),184					get_from_seed::<AuraId>("Charlie"),185					get_from_seed::<AuraId>("Dave"),186					get_from_seed::<AuraId>("Eve"),187				],188				// Pre-funded accounts189				vec![190					get_account_id_from_seed::<sr25519::Public>("Alice"),191					get_account_id_from_seed::<sr25519::Public>("Bob"),192					get_account_id_from_seed::<sr25519::Public>("Charlie"),193					get_account_id_from_seed::<sr25519::Public>("Dave"),194					get_account_id_from_seed::<sr25519::Public>("Eve"),195					get_account_id_from_seed::<sr25519::Public>("Ferdie"),196					get_account_id_from_seed::<sr25519::Public>("Alice//stash"),197					get_account_id_from_seed::<sr25519::Public>("Bob//stash"),198					get_account_id_from_seed::<sr25519::Public>("Charlie//stash"),199					get_account_id_from_seed::<sr25519::Public>("Dave//stash"),200					get_account_id_from_seed::<sr25519::Public>("Eve//stash"),201					get_account_id_from_seed::<sr25519::Public>("Ferdie//stash"),202				],203				1000.into(),204			)205		},206		// Bootnodes207		vec![],208		// Telemetry209		None,210		// Protocol ID211		None,212		None,213		// Properties214		None,215		// Extensions216		Extensions {217			relay_chain: "westend-local".into(),218			para_id: 1000,219		},220	)221}222223fn testnet_genesis(224	root_key: AccountId,225	initial_authorities: Vec<AuraId>,226	endowed_accounts: Vec<AccountId>,227	id: ParaId,228) -> GenesisConfig {229	GenesisConfig {230		system: runtime::SystemConfig {231			code: runtime::WASM_BINARY232				.expect("WASM binary was not build, please build it!")233				.to_vec(),234		},235		balances: BalancesConfig {236			balances: endowed_accounts237				.iter()238				.cloned()239				// 1e13 UNQ240				.map(|k| (k, 1 << 100))241				.collect(),242		},243		treasury: Default::default(),244		sudo: SudoConfig {245			key: Some(root_key),246		},247		vesting: VestingConfig { vesting: vec![] },248		parachain_info: runtime::ParachainInfoConfig { parachain_id: id },249		parachain_system: Default::default(),250		aura: runtime::AuraConfig {251			authorities: initial_authorities,252		},253		aura_ext: Default::default(),254		evm: EVMConfig {255			accounts: BTreeMap::new(),256		},257		ethereum: EthereumConfig {},258	}259}