git.delta.rocks / unique-network / refs/commits / 90fcef986d5a

difftreelog

source

node/cli/src/chain_spec.rs6.7 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 || testnet_genesis(68			// Sudo account69			get_account_id_from_seed::<sr25519::Public>("Alice"),70			vec![71				get_from_seed::<AuraId>("Alice"),72				get_from_seed::<AuraId>("Bob"),73			],74			// Pre-funded accounts75			vec![76				get_account_id_from_seed::<sr25519::Public>("Alice"),77				get_account_id_from_seed::<sr25519::Public>("Bob"),78			],79			id,80		),81		// Bootnodes82		vec![],83		// Telemetry84		None,85		// Protocol ID86		None,87		// Properties88		Some(properties),89		// Extensions90		Extensions {91			relay_chain: "rococo-dev".into(),92			para_id: id.into(),93		},94	)95}9697pub fn local_testnet_config(id: ParaId) -> ChainSpec {98	ChainSpec::from_genesis(99		// Name100		"Local Testnet",101		// ID102		"local_testnet",103		ChainType::Local,104		move || testnet_genesis(105			// Sudo account106			get_account_id_from_seed::<sr25519::Public>("Alice"),107			vec![108				get_from_seed::<AuraId>("Alice"),109				get_from_seed::<AuraId>("Bob"),110			],111			// Pre-funded accounts112			vec![113				get_account_id_from_seed::<sr25519::Public>("Alice"),114				get_account_id_from_seed::<sr25519::Public>("Bob"),115				get_account_id_from_seed::<sr25519::Public>("Charlie"),116				get_account_id_from_seed::<sr25519::Public>("Dave"),117				get_account_id_from_seed::<sr25519::Public>("Eve"),118				get_account_id_from_seed::<sr25519::Public>("Ferdie"),119				get_account_id_from_seed::<sr25519::Public>("Alice//stash"),120				get_account_id_from_seed::<sr25519::Public>("Bob//stash"),121				get_account_id_from_seed::<sr25519::Public>("Charlie//stash"),122				get_account_id_from_seed::<sr25519::Public>("Dave//stash"),123				get_account_id_from_seed::<sr25519::Public>("Eve//stash"),124				get_account_id_from_seed::<sr25519::Public>("Ferdie//stash"),125			],126			id,127		),128		// Bootnodes129		vec![],130		// Telemetry131		None,132		// Protocol ID133		None,134		// Properties135		None,136		// Extensions137		Extensions {138			relay_chain: "rococo-local".into(),139			para_id: id.into(),140		},141	)142}143144fn testnet_genesis(145    root_key: AccountId,146	initial_authorities: Vec<AuraId>,147    endowed_accounts: Vec<AccountId>,148	id: ParaId,149) -> GenesisConfig {150151	let vested_accounts = vec![152		get_account_id_from_seed::<sr25519::Public>("Bob"),153	];154155    GenesisConfig {156		system: nft_runtime::SystemConfig {157			code: nft_runtime::WASM_BINARY158				.expect("WASM binary was not build, please build it!")159				.to_vec(),160			changes_trie_config: Default::default(),161		},162        pallet_balances: BalancesConfig {163            balances: endowed_accounts164                .iter()165                .cloned()166                .map(|k| (k, 1 << 70))167                .collect(),168        },169		pallet_treasury: Default::default(),170		pallet_sudo: SudoConfig { key: root_key },171		pallet_vesting: VestingConfig {172            vesting: vested_accounts173                .iter()174                .cloned()175                .map(|k| (k, 1000, 100, 1 << 98))176                .collect(),177        },178        pallet_nft: NftConfig {179            collection_id: vec![(180                1,181                Collection {182                    owner: get_account_id_from_seed::<sr25519::Public>("Alice"),183                    mode: CollectionMode::NFT,184                    access: AccessMode::Normal,185                    decimal_points: 0,186                    name: vec![],187                    description: vec![],188                    token_prefix: vec![],189                    mint_mode: false,190					offchain_schema: vec![],191					schema_version: SchemaVersion::default(),192                    sponsorship: SponsorshipState::Confirmed(get_account_id_from_seed::<sr25519::Public>("Alice")),193                    const_on_chain_schema: vec![],194					variable_on_chain_schema: vec![],195					limits: CollectionLimits::default()196                },197            )],198            nft_item_id: vec![],199            fungible_item_id: vec![],200            refungible_item_id: vec![],201            chain_limit: ChainLimits {202                collection_numbers_limit: 100000,203                account_token_ownership_limit: 1000000,204                collections_admins_limit: 5,205                custom_data_limit: 2048,206                nft_sponsor_transfer_timeout: 15,207                fungible_sponsor_transfer_timeout: 15,208				refungible_sponsor_transfer_timeout: 15,209				offchain_schema_limit: 1024,210				variable_on_chain_schema_limit: 1024,211				const_on_chain_schema_limit: 1024,212            },213        },214		parachain_info: nft_runtime::ParachainInfoConfig { parachain_id: id },215		pallet_aura: nft_runtime::AuraConfig {216			authorities: initial_authorities,217		},218		cumulus_pallet_aura_ext: Default::default(),219		pallet_evm: EVMConfig {220			accounts: BTreeMap::new(),221		},222		pallet_ethereum: EthereumConfig {},223    }224}