git.delta.rocks / unique-network / refs/commits / 7791279df554

difftreelog

source

node/cli/src/chain_spec.rs5.9 KiBsourcehistory
1//2// This file is subject to the terms and conditions defined in3// file 'LICENSE', which is part of this source code package.4//56use cumulus_primitives_core::ParaId;7use nft_runtime::*;8use nft_data_structs::*;9use sc_chain_spec::{ChainSpecExtension, ChainSpecGroup};10use sc_service::ChainType;11use sp_core::{sr25519, Pair, Public};12use sp_runtime::traits::{IdentifyAccount, Verify};13use std::collections::BTreeMap;1415use serde::{Deserialize, Serialize};16use serde_json::map::Map;1718/// Specialized `ChainSpec`. This is a specialization of the general Substrate ChainSpec type.19pub type ChainSpec = sc_service::GenericChainSpec<nft_runtime::GenesisConfig, Extensions>;2021/// Helper function to generate a crypto pair from seed22pub fn get_from_seed<TPublic: Public>(seed: &str) -> <TPublic::Pair as Pair>::Public {23	TPublic::Pair::from_string(&format!("//{}", seed), None)24		.expect("static values are valid; qed")25		.public()26}2728/// The extensions for the [`ChainSpec`].29#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, ChainSpecGroup, ChainSpecExtension)]30#[serde(deny_unknown_fields)]31pub struct Extensions {32	/// The relay chain of the Parachain.33	pub relay_chain: String,34	/// The id of the Parachain.35	pub para_id: u32,36}3738impl Extensions {39	/// Try to get the extension from the given `ChainSpec`.40	pub fn try_get(chain_spec: &dyn sc_service::ChainSpec) -> Option<&Self> {41		sc_chain_spec::get_extension(chain_spec.extensions())42	}43}4445type AccountPublic = <Signature as Verify>::Signer;4647/// Helper function to generate an account ID from seed48pub fn get_account_id_from_seed<TPublic: Public>(seed: &str) -> AccountId49where50	AccountPublic: From<<TPublic::Pair as Pair>::Public>,51{52	AccountPublic::from(get_from_seed::<TPublic>(seed)).into_account()53}5455pub fn development_config(id: ParaId) -> ChainSpec {56	let mut properties = Map::new();57	properties.insert("tokenSymbol".into(), "testUNQ".into());58	properties.insert("tokenDecimals".into(), 15.into());59	properties.insert("ss58Format".into(), 42.into()); // Generic Substrate wildcard (SS58 checksum preimage)6061	ChainSpec::from_genesis(62		// Name63		"Development",64		// ID65		"dev",66		ChainType::Local,67		move || {68			testnet_genesis(69				// Sudo account70				get_account_id_from_seed::<sr25519::Public>("Alice"),71				vec![72					get_from_seed::<AuraId>("Alice"),73					get_from_seed::<AuraId>("Bob"),74				],75				// Pre-funded accounts76				vec![77					get_account_id_from_seed::<sr25519::Public>("Alice"),78					get_account_id_from_seed::<sr25519::Public>("Bob"),79				],80				id,81			)82		},83		// Bootnodes84		vec![],85		// Telemetry86		None,87		// Protocol ID88		None,89		// Properties90		Some(properties),91		// Extensions92		Extensions {93			relay_chain: "rococo-dev".into(),94			para_id: id.into(),95		},96	)97}9899pub fn local_testnet_config(id: ParaId) -> ChainSpec {100	ChainSpec::from_genesis(101		// Name102		"Local Testnet",103		// ID104		"local_testnet",105		ChainType::Local,106		move || {107			testnet_genesis(108				// Sudo account109				get_account_id_from_seed::<sr25519::Public>("Alice"),110				vec![111					get_from_seed::<AuraId>("Alice"),112					get_from_seed::<AuraId>("Bob"),113				],114				// Pre-funded accounts115				vec![116					get_account_id_from_seed::<sr25519::Public>("Alice"),117					get_account_id_from_seed::<sr25519::Public>("Bob"),118					get_account_id_from_seed::<sr25519::Public>("Charlie"),119					get_account_id_from_seed::<sr25519::Public>("Dave"),120					get_account_id_from_seed::<sr25519::Public>("Eve"),121					get_account_id_from_seed::<sr25519::Public>("Ferdie"),122					get_account_id_from_seed::<sr25519::Public>("Alice//stash"),123					get_account_id_from_seed::<sr25519::Public>("Bob//stash"),124					get_account_id_from_seed::<sr25519::Public>("Charlie//stash"),125					get_account_id_from_seed::<sr25519::Public>("Dave//stash"),126					get_account_id_from_seed::<sr25519::Public>("Eve//stash"),127					get_account_id_from_seed::<sr25519::Public>("Ferdie//stash"),128				],129				id,130			)131		},132		// Bootnodes133		vec![],134		// Telemetry135		None,136		// Protocol ID137		None,138		// Properties139		None,140		// Extensions141		Extensions {142			relay_chain: "rococo-local".into(),143			para_id: id.into(),144		},145	)146}147148fn testnet_genesis(149	root_key: AccountId,150	initial_authorities: Vec<AuraId>,151	endowed_accounts: Vec<AccountId>,152	id: ParaId,153) -> GenesisConfig {154	let vested_accounts = vec![get_account_id_from_seed::<sr25519::Public>("Bob")];155156	GenesisConfig {157		system: nft_runtime::SystemConfig {158			code: nft_runtime::WASM_BINARY159				.expect("WASM binary was not build, please build it!")160				.to_vec(),161			changes_trie_config: Default::default(),162		},163		balances: BalancesConfig {164			balances: endowed_accounts165				.iter()166				.cloned()167				.map(|k| (k, 1 << 70))168				.collect(),169		},170		treasury: Default::default(),171		sudo: SudoConfig { key: root_key },172		vesting: VestingConfig {173			vesting: vested_accounts174				.iter()175				.cloned()176				.map(|k| (k, 1000, 100, 1 << 98))177				.collect(),178		},179		nft: NftConfig {180			collection_id: vec![(181				1,182				Collection {183					owner: get_account_id_from_seed::<sr25519::Public>("Alice"),184					mode: CollectionMode::NFT,185					access: AccessMode::Normal,186					decimal_points: 0,187					name: vec![],188					description: vec![],189					token_prefix: vec![],190					mint_mode: false,191					offchain_schema: vec![],192					schema_version: SchemaVersion::default(),193					sponsorship: SponsorshipState::Confirmed(get_account_id_from_seed::<194						sr25519::Public,195					>("Alice")),196					const_on_chain_schema: vec![],197					variable_on_chain_schema: vec![],198					limits: CollectionLimits::default(),199					meta_update_permission: MetaUpdatePermission::ItemOwner,200					transfers_enabled: true,201				},202			)],203			nft_item_id: vec![],204			fungible_item_id: vec![],205			refungible_item_id: vec![],206		},207		parachain_info: nft_runtime::ParachainInfoConfig { parachain_id: id },208		aura: nft_runtime::AuraConfig {209			authorities: initial_authorities,210		},211		aura_ext: Default::default(),212		evm: EVMConfig {213			accounts: BTreeMap::new(),214		},215		ethereum: EthereumConfig {},216	}217}