git.delta.rocks / unique-network / refs/commits / 7ca598f7f6b8

difftreelog

fix use ChainSpecBuilder

Daniel Shiposha2024-05-27parent: #078678e.patch.diff
in: master

8 files changed

modifiedCargo.lockdiffbeforeafterboth
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -6380,6 +6380,7 @@
  "sp-block-builder",
  "sp-consensus-aura",
  "sp-core",
+ "sp-genesis-builder",
  "sp-inherents",
  "sp-io",
  "sp-offchain",
@@ -10261,6 +10262,7 @@
  "sp-block-builder",
  "sp-consensus-aura",
  "sp-core",
+ "sp-genesis-builder",
  "sp-inherents",
  "sp-io",
  "sp-offchain",
@@ -15134,6 +15136,7 @@
  "sp-block-builder",
  "sp-consensus-aura",
  "sp-core",
+ "sp-genesis-builder",
  "sp-inherents",
  "sp-io",
  "sp-offchain",
modifiedCargo.tomldiffbeforeafterboth
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -181,6 +181,7 @@
 sp-trie = { default-features = false, version = "32.0.0" }
 sp-version = { default-features = false, version = "32.0.0" }
 sp-weights = { default-features = false, version = "30.0.0" }
+sp-genesis-builder = { default-features = false, version = "0.10.0" }
 staging-parachain-info = { default-features = false, version = "0.10.0" }
 staging-xcm = { default-features = false, version = "10.0.0" }
 staging-xcm-builder = { default-features = false, version = "10.0.0" }
@@ -217,4 +218,5 @@
 log = { version = "0.4.20", default-features = false }
 num_enum = { version = "0.7.0", default-features = false }
 serde = { default-features = false, features = ['derive'], version = "1.0.188" }
+serde_json = "1"
 smallvec = "1.11.1"
modifiednode/cli/src/chain_spec.rsdiffbeforeafterboth
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 default_runtime::WASM_BINARY;18#[cfg(all(not(feature = "unique-runtime"), not(feature = "quartz-runtime")))]19pub use opal_runtime as default_runtime;20#[cfg(all(not(feature = "unique-runtime"), feature = "quartz-runtime"))]21pub use quartz_runtime as default_runtime;22use sc_chain_spec::{ChainSpecExtension, ChainSpecGroup};23use sc_service::ChainType;24use serde::{Deserialize, Serialize};25use serde_json::{json, map::Map};26use sp_core::{sr25519, Pair, Public};27use sp_runtime::traits::{IdentifyAccount, Verify};28#[cfg(feature = "unique-runtime")]29pub use unique_runtime as default_runtime;30use up_common::types::opaque::*;3132/// The `ChainSpec` parameterized for the unique runtime.33#[cfg(feature = "unique-runtime")]34pub type UniqueChainSpec =35	sc_service::GenericChainSpec<unique_runtime::RuntimeGenesisConfig, Extensions>;3637/// The `ChainSpec` parameterized for the quartz runtime.38#[cfg(feature = "quartz-runtime")]39pub type QuartzChainSpec =40	sc_service::GenericChainSpec<quartz_runtime::RuntimeGenesisConfig, Extensions>;4142/// The `ChainSpec` parameterized for the opal runtime.43pub type OpalChainSpec =44	sc_service::GenericChainSpec<opal_runtime::RuntimeGenesisConfig, Extensions>;4546#[cfg(feature = "unique-runtime")]47pub type DefaultChainSpec = UniqueChainSpec;4849#[cfg(all(not(feature = "unique-runtime"), feature = "quartz-runtime"))]50pub type DefaultChainSpec = QuartzChainSpec;5152#[cfg(all(not(feature = "unique-runtime"), not(feature = "quartz-runtime")))]53pub type DefaultChainSpec = OpalChainSpec;5455#[cfg(not(feature = "unique-runtime"))]56/// PARA_ID for Opal/Sapphire/Quartz57const PARA_ID: u32 = 2095;5859#[cfg(feature = "unique-runtime")]60/// PARA_ID for Unique61const PARA_ID: u32 = 2037;6263pub trait RuntimeIdentification {64	fn runtime_id(&self) -> RuntimeId;65}6667impl RuntimeIdentification for Box<dyn sc_service::ChainSpec> {68	fn runtime_id(&self) -> RuntimeId {69		#[cfg(feature = "unique-runtime")]70		if self.id().starts_with("unique") || self.id().starts_with("unq") {71			return RuntimeId::Unique;72		}7374		#[cfg(feature = "quartz-runtime")]75		if self.id().starts_with("quartz")76			|| self.id().starts_with("qtz")77			|| self.id().starts_with("sapphire")78		{79			return RuntimeId::Quartz;80		}8182		if self.id().starts_with("opal") || self.id() == "dev" || self.id() == "local_testnet" {83			return RuntimeId::Opal;84		}8586		RuntimeId::Unknown(self.id().into())87	}88}8990pub enum ServiceId {91	Prod,92	Dev,93}9495pub trait ServiceIdentification {96	fn service_id(&self) -> ServiceId;97}9899impl ServiceIdentification for Box<dyn sc_service::ChainSpec> {100	fn service_id(&self) -> ServiceId {101		if self.id().ends_with("dev") {102			ServiceId::Dev103		} else {104			ServiceId::Prod105		}106	}107}108109/// Helper function to generate a crypto pair from seed110pub fn get_from_seed<TPublic: Public>(seed: &str) -> <TPublic::Pair as Pair>::Public {111	TPublic::Pair::from_string(&format!("//{seed}"), None)112		.expect("static values are valid; qed")113		.public()114}115116/// The extensions for the [`DefaultChainSpec`].117#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, ChainSpecGroup, ChainSpecExtension)]118#[serde(deny_unknown_fields)]119pub struct Extensions {120	/// The relay chain of the Parachain.121	pub relay_chain: String,122	/// The id of the Parachain.123	pub para_id: u32,124}125126impl Extensions {127	/// Try to get the extension from the given `ChainSpec`.128	pub fn try_get(chain_spec: &dyn sc_service::ChainSpec) -> Option<&Self> {129		sc_chain_spec::get_extension(chain_spec.extensions())130	}131}132133type AccountPublic = <Signature as Verify>::Signer;134135/// Helper function to generate an account ID from seed136pub fn get_account_id_from_seed<TPublic: Public>(seed: &str) -> AccountId137where138	AccountPublic: From<<TPublic::Pair as Pair>::Public>,139{140	AccountPublic::from(get_from_seed::<TPublic>(seed)).into_account()141}142143pub fn test_config(chain_id: &str, relay_chain: &str) -> DefaultChainSpec {144	DefaultChainSpec::builder(145		WASM_BINARY.expect("WASM binary was not build, please build it!"),146		Extensions {147			relay_chain: relay_chain.into(),148			para_id: PARA_ID,149		},150	)151	.with_id(&format!(152		"{}_{}",153		default_runtime::VERSION.spec_name,154		chain_id155	))156	.with_name(&format!(157		"{}{}",158		default_runtime::VERSION.spec_name.to_uppercase(),159		if cfg!(feature = "unique-runtime") {160			""161		} else {162			" by UNIQUE"163		}164	))165	.with_properties(chain_properties())166	.with_chain_type(ChainType::Development)167	.with_genesis_config_patch(genesis_patch())168	.build()169}170171fn genesis_patch() -> serde_json::Value {172	use default_runtime::*;173174	let invulnerables = ["Alice", "Bob"];175176	#[allow(unused_mut)]177	let mut patch = json!({178		"parachainInfo": {179			"parachainId": PARA_ID,180		},181182		"aura": {183			"authorities": invulnerables.into_iter()184				.map(|name| get_from_seed::<AuraId>(name))185				.collect::<Vec<_>>(),186		},187188		"session": {189			"keys": invulnerables.into_iter()190				.map(|name| {191					let account = get_account_id_from_seed::<sr25519::Public>(name);192					let aura = get_from_seed::<AuraId>(name);193194					(195						/*   account id: */ account.clone(),196						/* validator id: */ account,197						/* session keys: */ SessionKeys { aura },198					)199				})200				.collect::<Vec<_>>()201		},202203		"sudo": {204			"key": get_account_id_from_seed::<sr25519::Public>("Alice"),205		},206207		"balances": {208			"balances": &[209				get_account_id_from_seed::<sr25519::Public>("Alice"),210				get_account_id_from_seed::<sr25519::Public>("Bob"),211				get_account_id_from_seed::<sr25519::Public>("Charlie"),212				get_account_id_from_seed::<sr25519::Public>("Dave"),213				get_account_id_from_seed::<sr25519::Public>("Eve"),214				get_account_id_from_seed::<sr25519::Public>("Ferdie"),215				get_account_id_from_seed::<sr25519::Public>("Alice//stash"),216				get_account_id_from_seed::<sr25519::Public>("Bob//stash"),217				get_account_id_from_seed::<sr25519::Public>("Charlie//stash"),218				get_account_id_from_seed::<sr25519::Public>("Dave//stash"),219				get_account_id_from_seed::<sr25519::Public>("Eve//stash"),220				get_account_id_from_seed::<sr25519::Public>("Ferdie//stash"),221			].into_iter()222			.map(|k| (k, /* ~1.2e+12 UNQ */ 1u128 << 100))223			.collect::<Vec<_>>(),224		},225	});226227	#[cfg(feature = "unique-runtime")]228	{229		patch230			.as_object_mut()231			.expect("the genesis patch is always an object; qed")232			.remove("session");233	}234235	patch236}237238fn chain_properties() -> sc_chain_spec::Properties {239	let mut properties = Map::new();240	properties.insert("tokenSymbol".into(), default_runtime::TOKEN_SYMBOL.into());241	properties.insert("tokenDecimals".into(), default_runtime::DECIMALS.into());242	properties.insert(243		"ss58Format".into(),244		default_runtime::SS58Prefix::get().into(),245	);246247	properties248}
modifiednode/cli/src/command.rsdiffbeforeafterboth
--- a/node/cli/src/command.rs
+++ b/node/cli/src/command.rs
@@ -49,9 +49,7 @@
 use crate::{
 	chain_spec::{self, RuntimeIdentification, ServiceId, ServiceIdentification},
 	cli::{Cli, RelayChainCli, Subcommand},
-	service::{
-		new_partial, start_dev_node, start_node, OpalRuntimeExecutor, ParachainHostFunctions,
-	},
+	service::{new_partial, start_dev_node, start_node, OpalRuntimeExecutor},
 };
 
 macro_rules! no_runtime_err {
@@ -65,8 +63,8 @@
 
 fn load_spec(id: &str) -> std::result::Result<Box<dyn sc_service::ChainSpec>, String> {
 	Ok(match id {
-		"dev" => Box::new(chain_spec::development_config()),
-		"" | "local" => Box::new(chain_spec::local_testnet_config()),
+		"dev" => Box::new(chain_spec::test_config("dev", "rococo-dev")),
+		"" | "local" => Box::new(chain_spec::test_config("local", "westend-local")),
 		path => {
 			let path = std::path::PathBuf::from(path);
 			#[allow(clippy::redundant_clone)]
@@ -352,6 +350,8 @@
 			use frame_benchmarking_cli::{BenchmarkCmd, SUBSTRATE_REFERENCE_HARDWARE};
 			use polkadot_cli::Block;
 
+			use crate::service::ParachainHostFunctions;
+
 			type Header = <Block as sp_runtime::traits::Block>::Header;
 			type Hasher = <Header as sp_runtime::traits::Header>::Hashing;
 
@@ -403,7 +403,7 @@
 			use std::{future::Future, pin::Pin};
 
 			use polkadot_cli::Block;
-			use sc_executor::{sp_wasm_interface::ExtendedHostFunctions, NativeExecutionDispatch};
+			use sc_executor::NativeExecutionDispatch;
 			use try_runtime_cli::block_building_info::timestamp_with_aura_info;
 
 			let runner = cli.create_runner(cmd)?;
modifiedruntime/common/runtime_apis.rsdiffbeforeafterboth
--- a/runtime/common/runtime_apis.rs
+++ b/runtime/common/runtime_apis.rs
@@ -43,6 +43,7 @@
 			ApplyExtrinsicResult, DispatchError, ExtrinsicInclusionMode,
 		};
 		use frame_support::{
+			genesis_builder_helper::{build_config, create_default_config},
 			pallet_prelude::Weight,
 			traits::OnFinalize,
 		};
@@ -710,6 +711,16 @@
 					)
 				}
 			}
+
+			impl sp_genesis_builder::GenesisBuilder<Block> for Runtime {
+				fn create_default_config() -> Vec<u8> {
+					create_default_config::<RuntimeGenesisConfig>()
+				}
+
+				fn build_config(config: Vec<u8>) -> sp_genesis_builder::Result {
+					build_config::<RuntimeGenesisConfig>(config)
+				}
+			}
 		}
 	}
 }
modifiedruntime/opal/Cargo.tomldiffbeforeafterboth
--- a/runtime/opal/Cargo.toml
+++ b/runtime/opal/Cargo.toml
@@ -146,6 +146,7 @@
 	'sp-storage/std',
 	'sp-transaction-pool/std',
 	'sp-version/std',
+	'sp-genesis-builder/std',
 	'staging-parachain-info/std',
 	'staging-xcm-builder/std',
 	'staging-xcm-executor/std',
@@ -295,6 +296,7 @@
 sp-storage = { workspace = true }
 sp-transaction-pool = { workspace = true }
 sp-version = { workspace = true }
+sp-genesis-builder = { workspace = true }
 staging-parachain-info = { workspace = true }
 staging-xcm = { workspace = true }
 staging-xcm-builder = { workspace = true }
modifiedruntime/quartz/Cargo.tomldiffbeforeafterboth
--- a/runtime/quartz/Cargo.toml
+++ b/runtime/quartz/Cargo.toml
@@ -145,6 +145,7 @@
 	'sp-std/std',
 	'sp-transaction-pool/std',
 	'sp-version/std',
+	'sp-genesis-builder/std',
 	'staging-parachain-info/std',
 	'staging-xcm-builder/std',
 	'staging-xcm-executor/std',
@@ -283,6 +284,7 @@
 sp-storage = { workspace = true }
 sp-transaction-pool = { workspace = true }
 sp-version = { workspace = true }
+sp-genesis-builder = { workspace = true }
 staging-parachain-info = { workspace = true }
 staging-xcm = { workspace = true }
 staging-xcm-builder = { workspace = true }
modifiedruntime/unique/Cargo.tomldiffbeforeafterboth
--- a/runtime/unique/Cargo.toml
+++ b/runtime/unique/Cargo.toml
@@ -143,6 +143,7 @@
 	'sp-std/std',
 	'sp-transaction-pool/std',
 	'sp-version/std',
+	'sp-genesis-builder/std',
 	'staging-parachain-info/std',
 	'staging-xcm-builder/std',
 	'staging-xcm-executor/std',
@@ -287,6 +288,7 @@
 sp-storage = { workspace = true }
 sp-transaction-pool = { workspace = true }
 sp-version = { workspace = true }
+sp-genesis-builder = { workspace = true }
 staging-parachain-info = { workspace = true }
 staging-xcm = { workspace = true }
 staging-xcm-builder = { workspace = true }