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

difftreelog

Use default runtime in the local testnet

Daniel Shiposha2022-03-30parent: #cc7c742.patch.diff
in: master

4 files changed

modifiednode/cli/src/chain_spec.rsdiffbeforeafterboth
before · node/cli/src/chain_spec.rs
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;2627use unique_runtime_common::types::*;2829/// The `ChainSpec` parameterized for the unique runtime.30#[cfg(feature = "unique-runtime")]31pub type UniqueChainSpec = sc_service::GenericChainSpec<unique_runtime::GenesisConfig, Extensions>;3233/// The `ChainSpec` parameterized for the quartz runtime.34#[cfg(feature = "quartz-runtime")]35pub type QuartzChainSpec = sc_service::GenericChainSpec<quartz_runtime::GenesisConfig, Extensions>;3637/// The `ChainSpec` parameterized for the opal runtime.38pub type OpalChainSpec = sc_service::GenericChainSpec<opal_runtime::GenesisConfig, Extensions>;3940pub enum RuntimeId {41	#[cfg(feature = "unique-runtime")]42	Unique,4344	#[cfg(feature = "quartz-runtime")]45	Quartz,4647	Opal,48	Unknown(String),49}5051pub trait RuntimeIdentification {52	fn runtime_id(&self) -> RuntimeId;53}5455impl RuntimeIdentification for Box<dyn sc_service::ChainSpec> {56	fn runtime_id(&self) -> RuntimeId {57		#[cfg(feature = "unique-runtime")]58		if self.id().starts_with("unique") {59			return RuntimeId::Unique;60		}6162		#[cfg(feature = "quartz-runtime")]63		if self.id().starts_with("quartz") {64			return RuntimeId::Quartz;65		}6667		if self.id().starts_with("opal") || self.id() == "dev" || self.id() == "local_testnet" {68			return RuntimeId::Opal;69		}7071		RuntimeId::Unknown(self.id().into())72	}73}7475pub enum ServiceId {76	Prod,77	Dev,78}7980pub trait ServiceIdentification {81	fn service_id(&self) -> ServiceId;82}8384impl ServiceIdentification for Box<dyn sc_service::ChainSpec> {85	fn service_id(&self) -> ServiceId {86		if self.id().ends_with("dev") {87			ServiceId::Dev88		} else {89			ServiceId::Prod90		}91	}92}9394/// Helper function to generate a crypto pair from seed95pub fn get_from_seed<TPublic: Public>(seed: &str) -> <TPublic::Pair as Pair>::Public {96	TPublic::Pair::from_string(&format!("//{}", seed), None)97		.expect("static values are valid; qed")98		.public()99}100101/// The extensions for the [`ChainSpec`].102#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, ChainSpecGroup, ChainSpecExtension)]103#[serde(deny_unknown_fields)]104pub struct Extensions {105	/// The relay chain of the Parachain.106	pub relay_chain: String,107	/// The id of the Parachain.108	pub para_id: u32,109}110111impl Extensions {112	/// Try to get the extension from the given `ChainSpec`.113	pub fn try_get(chain_spec: &dyn sc_service::ChainSpec) -> Option<&Self> {114		sc_chain_spec::get_extension(chain_spec.extensions())115	}116}117118type AccountPublic = <Signature as Verify>::Signer;119120/// Helper function to generate an account ID from seed121pub fn get_account_id_from_seed<TPublic: Public>(seed: &str) -> AccountId122where123	AccountPublic: From<<TPublic::Pair as Pair>::Public>,124{125	AccountPublic::from(get_from_seed::<TPublic>(seed)).into_account()126}127128pub fn development_config() -> OpalChainSpec {129	let mut properties = Map::new();130	properties.insert("tokenSymbol".into(), "OPL".into());131	properties.insert("tokenDecimals".into(), 18.into());132	properties.insert("ss58Format".into(), 42.into());133134	OpalChainSpec::from_genesis(135		// Name136		"OPAL by UNIQUE",137		// ID138		"opal_dev",139		ChainType::Local,140		move || {141			testnet_genesis(142				// Sudo account143				get_account_id_from_seed::<sr25519::Public>("Alice"),144				vec![145					get_from_seed::<AuraId>("Alice"),146					get_from_seed::<AuraId>("Bob"),147				],148				// Pre-funded accounts149				vec![150					get_account_id_from_seed::<sr25519::Public>("Alice"),151					get_account_id_from_seed::<sr25519::Public>("Bob"),152				],153				1000.into(),154			)155		},156		// Bootnodes157		vec![],158		// Telemetry159		None,160		// Protocol ID161		None,162		None,163		// Properties164		Some(properties),165		// Extensions166		Extensions {167			relay_chain: "rococo-dev".into(),168			para_id: 1000,169		},170	)171}172173pub fn local_testnet_rococo_config() -> OpalChainSpec {174	let mut properties = Map::new();175	properties.insert("tokenSymbol".into(), "OPL".into());176	properties.insert("tokenDecimals".into(), 18.into());177	properties.insert("ss58Format".into(), 42.into());178179	OpalChainSpec::from_genesis(180		// Name181		"OPAL by UNIQUE",182		// ID183		"opal_local",184		ChainType::Local,185		move || {186			testnet_genesis(187				// Sudo account188				get_account_id_from_seed::<sr25519::Public>("Alice"),189				vec![190					get_from_seed::<AuraId>("Alice"),191					get_from_seed::<AuraId>("Bob"),192				],193				// Pre-funded accounts194				vec![195					get_account_id_from_seed::<sr25519::Public>("Alice"),196					get_account_id_from_seed::<sr25519::Public>("Bob"),197					get_account_id_from_seed::<sr25519::Public>("Charlie"),198					get_account_id_from_seed::<sr25519::Public>("Dave"),199					get_account_id_from_seed::<sr25519::Public>("Eve"),200					get_account_id_from_seed::<sr25519::Public>("Ferdie"),201					get_account_id_from_seed::<sr25519::Public>("Alice//stash"),202					get_account_id_from_seed::<sr25519::Public>("Bob//stash"),203					get_account_id_from_seed::<sr25519::Public>("Charlie//stash"),204					get_account_id_from_seed::<sr25519::Public>("Dave//stash"),205					get_account_id_from_seed::<sr25519::Public>("Eve//stash"),206					get_account_id_from_seed::<sr25519::Public>("Ferdie//stash"),207				],208				1000.into(),209			)210		},211		// Bootnodes212		vec![],213		// Telemetry214		None,215		// Protocol ID216		None,217		None,218		// Properties219		Some(properties),220		// Extensions221		Extensions {222			relay_chain: "rococo-local".into(),223			para_id: 1000,224		},225	)226}227228fn testnet_genesis(229	root_key: AccountId,230	initial_authorities: Vec<AuraId>,231	endowed_accounts: Vec<AccountId>,232	id: ParaId,233) -> opal_runtime::GenesisConfig {234	use opal_runtime::*;235236	GenesisConfig {237		system: SystemConfig {238			code: WASM_BINARY239				.expect("WASM binary was not build, please build it!")240				.to_vec(),241		},242		balances: BalancesConfig {243			balances: endowed_accounts244				.iter()245				.cloned()246				// 1e13 UNQ247				.map(|k| (k, 1 << 100))248				.collect(),249		},250		treasury: Default::default(),251		sudo: SudoConfig {252			key: Some(root_key),253		},254		vesting: VestingConfig { vesting: vec![] },255		parachain_info: ParachainInfoConfig { parachain_id: id },256		parachain_system: Default::default(),257		aura: AuraConfig {258			authorities: initial_authorities,259		},260		aura_ext: Default::default(),261		evm: EVMConfig {262			accounts: BTreeMap::new(),263		},264		ethereum: EthereumConfig {},265	}266}
after · node/cli/src/chain_spec.rs
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 sc_chain_spec::{ChainSpecExtension, ChainSpecGroup};18use sc_service::ChainType;19use sp_core::{sr25519, Pair, Public};20use sp_runtime::traits::{IdentifyAccount, Verify};21use std::collections::BTreeMap;2223use serde::{Deserialize, Serialize};24use serde_json::map::Map;2526use unique_runtime_common::types::*;2728#[cfg(feature = "unique-runtime")]29use unique_runtime as default_runtime;3031#[cfg(all(not(feature = "unique-runtime"), feature = "quartz-runtime"))]32use quartz_runtime as default_runtime;3334#[cfg(all(not(feature = "unique-runtime"), not(feature = "quartz-runtime")))]35use opal_runtime as default_runtime;3637/// The `ChainSpec` parameterized for the unique runtime.38#[cfg(feature = "unique-runtime")]39pub type UniqueChainSpec = sc_service::GenericChainSpec<unique_runtime::GenesisConfig, Extensions>;4041/// The `ChainSpec` parameterized for the quartz runtime.42#[cfg(feature = "quartz-runtime")]43pub type QuartzChainSpec = sc_service::GenericChainSpec<quartz_runtime::GenesisConfig, Extensions>;4445/// The `ChainSpec` parameterized for the opal runtime.46pub type OpalChainSpec = sc_service::GenericChainSpec<opal_runtime::GenesisConfig, Extensions>;4748#[cfg(feature = "unique-runtime")]49pub type DefaultChainSpec = UniqueChainSpec;5051#[cfg(all(not(feature = "unique-runtime"), feature = "quartz-runtime"))]52pub type DefaultChainSpec = QuartzChainSpec;5354#[cfg(all(not(feature = "unique-runtime"), not(feature = "quartz-runtime")))]55pub type DefaultChainSpec = OpalChainSpec;5657pub enum RuntimeId {58	#[cfg(feature = "unique-runtime")]59	Unique,6061	#[cfg(feature = "quartz-runtime")]62	Quartz,6364	Opal,65	Unknown(String),66}6768pub trait RuntimeIdentification {69	fn runtime_id(&self) -> RuntimeId;70}7172impl RuntimeIdentification for Box<dyn sc_service::ChainSpec> {73	fn runtime_id(&self) -> RuntimeId {74		#[cfg(feature = "unique-runtime")]75		if self.id().starts_with("unique") {76			return RuntimeId::Unique;77		}7879		#[cfg(feature = "quartz-runtime")]80		if self.id().starts_with("quartz") {81			return RuntimeId::Quartz;82		}8384		if self.id().starts_with("opal") || self.id() == "dev" || self.id() == "local_testnet" {85			return RuntimeId::Opal;86		}8788		RuntimeId::Unknown(self.id().into())89	}90}9192pub enum ServiceId {93	Prod,94	Dev,95}9697pub trait ServiceIdentification {98	fn service_id(&self) -> ServiceId;99}100101impl ServiceIdentification for Box<dyn sc_service::ChainSpec> {102	fn service_id(&self) -> ServiceId {103		if self.id().ends_with("dev") {104			ServiceId::Dev105		} else {106			ServiceId::Prod107		}108	}109}110111/// Helper function to generate a crypto pair from seed112pub fn get_from_seed<TPublic: Public>(seed: &str) -> <TPublic::Pair as Pair>::Public {113	TPublic::Pair::from_string(&format!("//{}", seed), None)114		.expect("static values are valid; qed")115		.public()116}117118/// The extensions for the [`ChainSpec`].119#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, ChainSpecGroup, ChainSpecExtension)]120#[serde(deny_unknown_fields)]121pub struct Extensions {122	/// The relay chain of the Parachain.123	pub relay_chain: String,124	/// The id of the Parachain.125	pub para_id: u32,126}127128impl Extensions {129	/// Try to get the extension from the given `ChainSpec`.130	pub fn try_get(chain_spec: &dyn sc_service::ChainSpec) -> Option<&Self> {131		sc_chain_spec::get_extension(chain_spec.extensions())132	}133}134135type AccountPublic = <Signature as Verify>::Signer;136137/// Helper function to generate an account ID from seed138pub fn get_account_id_from_seed<TPublic: Public>(seed: &str) -> AccountId139where140	AccountPublic: From<<TPublic::Pair as Pair>::Public>,141{142	AccountPublic::from(get_from_seed::<TPublic>(seed)).into_account()143}144145macro_rules! testnet_genesis {146	(147		$runtime:path,148		$root_key:expr,149		$initial_authorities:expr,150		$endowed_accounts:expr,151		$id:expr152	) => {{153		use $runtime::*;154155		GenesisConfig {156			system: SystemConfig {157				code: WASM_BINARY158					.expect("WASM binary was not build, please build it!")159					.to_vec(),160			},161			balances: BalancesConfig {162				balances: $endowed_accounts163					.iter()164					.cloned()165					// 1e13 UNQ166					.map(|k| (k, 1 << 100))167					.collect(),168			},169			treasury: Default::default(),170			sudo: SudoConfig {171				key: Some($root_key),172			},173			vesting: VestingConfig { vesting: vec![] },174			parachain_info: ParachainInfoConfig { parachain_id: $id.into() },175			parachain_system: Default::default(),176			aura: AuraConfig {177				authorities: $initial_authorities,178			},179			aura_ext: Default::default(),180			evm: EVMConfig {181				accounts: BTreeMap::new(),182			},183			ethereum: EthereumConfig {},184		}185	}};186}187188pub fn development_config() -> OpalChainSpec {189	let mut properties = Map::new();190	properties.insert("tokenSymbol".into(), opal_runtime::TOKEN_SYMBOL.into());191	properties.insert("tokenDecimals".into(), 18.into());192	properties.insert("ss58Format".into(), opal_runtime::SS58Prefix::get().into());193194	OpalChainSpec::from_genesis(195		// Name196		"OPAL by UNIQUE",197		// ID198		"opal_dev",199		ChainType::Local,200		move || {201			testnet_genesis!(202				opal_runtime,203204				// Sudo account205				get_account_id_from_seed::<sr25519::Public>("Alice"),206				vec![207					get_from_seed::<AuraId>("Alice"),208					get_from_seed::<AuraId>("Bob"),209				],210				// Pre-funded accounts211				vec![212					get_account_id_from_seed::<sr25519::Public>("Alice"),213					get_account_id_from_seed::<sr25519::Public>("Bob"),214				],215				1000216			)217		},218		// Bootnodes219		vec![],220		// Telemetry221		None,222		// Protocol ID223		None,224		None,225		// Properties226		Some(properties),227		// Extensions228		Extensions {229			relay_chain: "rococo-dev".into(),230			para_id: 1000,231		},232	)233}234235pub fn local_testnet_rococo_config() -> DefaultChainSpec {236	let mut properties = Map::new();237	properties.insert("tokenSymbol".into(), default_runtime::TOKEN_SYMBOL.into());238	properties.insert("tokenDecimals".into(), 18.into());239	properties.insert("ss58Format".into(), default_runtime::SS58Prefix::get().into());240241	DefaultChainSpec::from_genesis(242		// Name243		format!(244			"{}{}",245			default_runtime::RUNTIME_NAME.to_uppercase(),246			if cfg!(feature = "unique-runtime") { "" } else { " by UNIQUE" }247		).as_str(),248		// ID249		format!("{}_local", default_runtime::RUNTIME_NAME).as_str(),250		ChainType::Local,251		move || {252			testnet_genesis!(253				default_runtime,254255				// Sudo account256				get_account_id_from_seed::<sr25519::Public>("Alice"),257				vec![258					get_from_seed::<AuraId>("Alice"),259					get_from_seed::<AuraId>("Bob"),260				],261				// Pre-funded accounts262				vec![263					get_account_id_from_seed::<sr25519::Public>("Alice"),264					get_account_id_from_seed::<sr25519::Public>("Bob"),265					get_account_id_from_seed::<sr25519::Public>("Charlie"),266					get_account_id_from_seed::<sr25519::Public>("Dave"),267					get_account_id_from_seed::<sr25519::Public>("Eve"),268					get_account_id_from_seed::<sr25519::Public>("Ferdie"),269					get_account_id_from_seed::<sr25519::Public>("Alice//stash"),270					get_account_id_from_seed::<sr25519::Public>("Bob//stash"),271					get_account_id_from_seed::<sr25519::Public>("Charlie//stash"),272					get_account_id_from_seed::<sr25519::Public>("Dave//stash"),273					get_account_id_from_seed::<sr25519::Public>("Eve//stash"),274					get_account_id_from_seed::<sr25519::Public>("Ferdie//stash"),275				],276				1000277			)278		},279		// Bootnodes280		vec![],281		// Telemetry282		None,283		// Protocol ID284		None,285		None,286		// Properties287		Some(properties),288		// Extensions289		Extensions {290			relay_chain: "rococo-local".into(),291			para_id: 1000,292		},293	)294}
modifiedruntime/opal/src/lib.rsdiffbeforeafterboth
--- a/runtime/opal/src/lib.rs
+++ b/runtime/opal/src/lib.rs
@@ -115,6 +115,7 @@
 use unique_runtime_common::{impl_common_runtime_apis, types::*, constants::*};
 
 pub const RUNTIME_NAME: &str = "opal";
+pub const TOKEN_SYMBOL: &str = "OPL";
 
 type CrossAccountId = pallet_common::account::BasicCrossAccountId<Runtime>;
 
modifiedruntime/quartz/src/lib.rsdiffbeforeafterboth
--- a/runtime/quartz/src/lib.rs
+++ b/runtime/quartz/src/lib.rs
@@ -115,6 +115,7 @@
 use unique_runtime_common::{impl_common_runtime_apis, types::*, constants::*};
 
 pub const RUNTIME_NAME: &str = "quartz";
+pub const TOKEN_SYMBOL: &str = "QTZ";
 
 type CrossAccountId = pallet_common::account::BasicCrossAccountId<Runtime>;
 
modifiedruntime/unique/src/lib.rsdiffbeforeafterboth
--- a/runtime/unique/src/lib.rs
+++ b/runtime/unique/src/lib.rs
@@ -114,6 +114,7 @@
 use unique_runtime_common::{impl_common_runtime_apis, types::*, constants::*};
 
 pub const RUNTIME_NAME: &str = "unique";
+pub const TOKEN_SYMBOL: &str = "UNQ";
 
 type CrossAccountId = pallet_common::account::BasicCrossAccountId<Runtime>;