git.delta.rocks / unique-network / refs/commits / 9ebd2fc6196e

difftreelog

source

node/cli/src/chain_spec.rs6.9 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 unique_runtime::*;19use sc_chain_spec::{ChainSpecExtension, ChainSpecGroup};20use sc_service::ChainType;21use sp_core::{sr25519, Pair, Public};22use sp_runtime::traits::{IdentifyAccount, Verify};23use std::collections::BTreeMap;2425use serde::{Deserialize, Serialize};26use serde_json::map::Map;2728/// Specialized `ChainSpec`. This is a specialization of the general Substrate ChainSpec type.29pub type ChainSpec = sc_service::GenericChainSpec<unique_runtime::GenesisConfig, Extensions>;3031/// Helper function to generate a crypto pair from seed32pub fn get_from_seed<TPublic: Public>(seed: &str) -> <TPublic::Pair as Pair>::Public {33	TPublic::Pair::from_string(&format!("//{}", seed), None)34		.expect("static values are valid; qed")35		.public()36}3738/// The extensions for the [`ChainSpec`].39#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, ChainSpecGroup, ChainSpecExtension)]40#[serde(deny_unknown_fields)]41pub struct Extensions {42	/// The relay chain of the Parachain.43	pub relay_chain: String,44	/// The id of the Parachain.45	pub para_id: u32,46}4748impl Extensions {49	/// Try to get the extension from the given `ChainSpec`.50	pub fn try_get(chain_spec: &dyn sc_service::ChainSpec) -> Option<&Self> {51		sc_chain_spec::get_extension(chain_spec.extensions())52	}53}5455type AccountPublic = <Signature as Verify>::Signer;5657/// Helper function to generate an account ID from seed58pub fn get_account_id_from_seed<TPublic: Public>(seed: &str) -> AccountId59where60	AccountPublic: From<<TPublic::Pair as Pair>::Public>,61{62	AccountPublic::from(get_from_seed::<TPublic>(seed)).into_account()63}6465pub fn development_config() -> ChainSpec {66	let mut properties = Map::new();67	properties.insert("tokenSymbol".into(), "OPL".into());68	properties.insert("tokenDecimals".into(), 15.into());69	properties.insert("ss58Format".into(), 42.into());7071	ChainSpec::from_genesis(72		// Name73		"Development",74		// ID75		"dev",76		ChainType::Local,77		move || {78			testnet_genesis(79				// Sudo account80				get_account_id_from_seed::<sr25519::Public>("Alice"),81				vec![82					get_from_seed::<AuraId>("Alice"),83					get_from_seed::<AuraId>("Bob"),84				],85				// Pre-funded accounts86				vec![87					get_account_id_from_seed::<sr25519::Public>("Alice"),88					get_account_id_from_seed::<sr25519::Public>("Bob"),89				],90				1000.into(),91			)92		},93		// Bootnodes94		vec![],95		// Telemetry96		None,97		// Protocol ID98		None,99		None,100		// Properties101		Some(properties),102		// Extensions103		Extensions {104			relay_chain: "rococo-dev".into(),105			para_id: 1000,106		},107	)108}109110pub fn local_testnet_rococo_config() -> ChainSpec {111	ChainSpec::from_genesis(112		// Name113		"Local Testnet",114		// ID115		"local_testnet",116		ChainType::Local,117		move || {118			testnet_genesis(119				// Sudo account120				get_account_id_from_seed::<sr25519::Public>("Alice"),121				vec![122					get_from_seed::<AuraId>("Alice"),123					get_from_seed::<AuraId>("Bob"),124				],125				// Pre-funded accounts126				vec![127					get_account_id_from_seed::<sr25519::Public>("Alice"),128					get_account_id_from_seed::<sr25519::Public>("Bob"),129					get_account_id_from_seed::<sr25519::Public>("Charlie"),130					get_account_id_from_seed::<sr25519::Public>("Dave"),131					get_account_id_from_seed::<sr25519::Public>("Eve"),132					get_account_id_from_seed::<sr25519::Public>("Ferdie"),133					get_account_id_from_seed::<sr25519::Public>("Alice//stash"),134					get_account_id_from_seed::<sr25519::Public>("Bob//stash"),135					get_account_id_from_seed::<sr25519::Public>("Charlie//stash"),136					get_account_id_from_seed::<sr25519::Public>("Dave//stash"),137					get_account_id_from_seed::<sr25519::Public>("Eve//stash"),138					get_account_id_from_seed::<sr25519::Public>("Ferdie//stash"),139				],140				1000.into(),141			)142		},143		// Bootnodes144		vec![],145		// Telemetry146		None,147		// Protocol ID148		None,149		None,150		// Properties151		None,152		// Extensions153		Extensions {154			relay_chain: "rococo-local".into(),155			para_id: 1000,156		},157	)158}159160pub fn local_testnet_westend_config() -> ChainSpec {161	ChainSpec::from_genesis(162		// Name163		"Local Testnet",164		// ID165		"local_testnet",166		ChainType::Local,167		move || {168			testnet_genesis(169				// Sudo account170				get_account_id_from_seed::<sr25519::Public>("Alice"),171				vec![172					get_from_seed::<AuraId>("Alice"),173					get_from_seed::<AuraId>("Bob"),174					get_from_seed::<AuraId>("Charlie"),175					get_from_seed::<AuraId>("Dave"),176					get_from_seed::<AuraId>("Eve"),177				],178				// Pre-funded accounts179				vec![180					get_account_id_from_seed::<sr25519::Public>("Alice"),181					get_account_id_from_seed::<sr25519::Public>("Bob"),182					get_account_id_from_seed::<sr25519::Public>("Charlie"),183					get_account_id_from_seed::<sr25519::Public>("Dave"),184					get_account_id_from_seed::<sr25519::Public>("Eve"),185					get_account_id_from_seed::<sr25519::Public>("Ferdie"),186					get_account_id_from_seed::<sr25519::Public>("Alice//stash"),187					get_account_id_from_seed::<sr25519::Public>("Bob//stash"),188					get_account_id_from_seed::<sr25519::Public>("Charlie//stash"),189					get_account_id_from_seed::<sr25519::Public>("Dave//stash"),190					get_account_id_from_seed::<sr25519::Public>("Eve//stash"),191					get_account_id_from_seed::<sr25519::Public>("Ferdie//stash"),192				],193				1000.into(),194			)195		},196		// Bootnodes197		vec![],198		// Telemetry199		None,200		// Protocol ID201		None,202		None,203		// Properties204		None,205		// Extensions206		Extensions {207			relay_chain: "westend-local".into(),208			para_id: 1000,209		},210	)211}212213fn testnet_genesis(214	root_key: AccountId,215	initial_authorities: Vec<AuraId>,216	endowed_accounts: Vec<AccountId>,217	id: ParaId,218) -> GenesisConfig {219	GenesisConfig {220		system: unique_runtime::SystemConfig {221			code: unique_runtime::WASM_BINARY222				.expect("WASM binary was not build, please build it!")223				.to_vec(),224		},225		balances: BalancesConfig {226			balances: endowed_accounts227				.iter()228				.cloned()229				// 1e13 UNQ230				.map(|k| (k, 1 << 100))231				.collect(),232		},233		treasury: Default::default(),234		sudo: SudoConfig {235			key: Some(root_key),236		},237		vesting: VestingConfig { vesting: vec![] },238		parachain_info: unique_runtime::ParachainInfoConfig { parachain_id: id },239		parachain_system: Default::default(),240		aura: unique_runtime::AuraConfig {241			authorities: initial_authorities,242		},243		aura_ext: Default::default(),244		evm: EVMConfig {245			accounts: BTreeMap::new(),246		},247		ethereum: EthereumConfig {},248	}249}