git.delta.rocks / unique-network / refs/commits / 78924d5e6628

difftreelog

source

node/src/chain_spec.rs6.8 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 nft_runtime::*;78use cumulus_primitives_core::ParaId;9use parachain_runtime::{AccountId, Signature};10use sc_chain_spec::{ChainSpecExtension, ChainSpecGroup};11use sc_service::ChainType;12use sp_core::{sr25519, Pair, Public};13use sp_finality_grandpa::AuthorityId as GrandpaId;14use sp_runtime::traits::{IdentifyAccount, Verify};1516use serde::{Deserialize, Serialize};17use serde_json::map::Map;1819/// Specialized `ChainSpec`. This is a specialization of the general Substrate ChainSpec type.20pub type ChainSpec = sc_service::GenericChainSpec<GenesisConfig>;2122/// Helper function to generate a crypto pair from seed23pub fn get_from_seed<TPublic: Public>(seed: &str) -> <TPublic::Pair as Pair>::Public {24    TPublic::Pair::from_string(&format!("//{}", seed), None)25        .expect("static values are valid; qed")26        .public()27}2829type AccountPublic = <Signature as Verify>::Signer;3031/// Helper function to generate an account ID from seed32pub fn get_account_id_from_seed<TPublic: Public>(seed: &str) -> AccountId33where34    AccountPublic: From<<TPublic::Pair as Pair>::Public>,35{36    AccountPublic::from(get_from_seed::<TPublic>(seed)).into_account()37}3839/// Helper function to generate an authority key for Aura40pub fn authority_keys_from_seed(s: &str) -> (AuraId, GrandpaId) {41    (get_from_seed::<AuraId>(s), get_from_seed::<GrandpaId>(s))42}4344pub fn development_config(id: ParaId) -> ChainSpec {45	let wasm_binary = WASM_BINARY.ok_or("Development wasm binary not available".to_string())?;4647	let mut properties = Map::new();48	properties.insert("tokenSymbol".into(), "UniqueTest".into());49	properties.insert("tokenDecimals".into(), 15.into());50	properties.insert("ss58Format".into(), 42.into()); // Generic Substrate wildcard (SS58 checksum preimage)5152	ChainSpec::from_genesis(53		// Name54		"Development",55		// ID56		"dev",57		ChainType::Local,58		move || testnet_genesis(59			wasm_binary,60			// Initial PoA authorities61			vec![62				authority_keys_from_seed("Alice"),63			],64			// Sudo account65			get_account_id_from_seed::<sr25519::Public>("Alice"),66			// Pre-funded accounts67			vec![68				get_account_id_from_seed::<sr25519::Public>("Alice"),69				get_account_id_from_seed::<sr25519::Public>("Bob"),70				get_account_id_from_seed::<sr25519::Public>("Alice//stash"),71				get_account_id_from_seed::<sr25519::Public>("Bob//stash"),72			],73			true,74		),75		// Bootnodes76		vec![],77		// Telemetry78		None,79		// Protocol ID80		None,81		// Properties82		Some(properties),83		// Extensions84		Extensions {85			relay_chain: "rococo-dev".into(),86			para_id: id.into(),87		},88	)89}9091pub fn local_testnet_config(id: ParaId) -> ChainSpec {92	let wasm_binary = WASM_BINARY.ok_or("Development wasm binary not available".to_string())?;9394	Ok(ChainSpec::from_genesis(95		// Name96		"Local Testnet",97		// ID98		"local_testnet",99		ChainType::Local,100		move || testnet_genesis(101			wasm_binary,102			// Initial PoA authorities103			vec![104				authority_keys_from_seed("Alice"),105				authority_keys_from_seed("Bob"),106			],107			// Sudo account108			get_account_id_from_seed::<sr25519::Public>("Alice"),109			// Pre-funded accounts110			vec![111				get_account_id_from_seed::<sr25519::Public>("Alice"),112				get_account_id_from_seed::<sr25519::Public>("Bob"),113				get_account_id_from_seed::<sr25519::Public>("Charlie"),114				get_account_id_from_seed::<sr25519::Public>("Dave"),115				get_account_id_from_seed::<sr25519::Public>("Eve"),116				get_account_id_from_seed::<sr25519::Public>("Ferdie"),117				get_account_id_from_seed::<sr25519::Public>("Alice//stash"),118				get_account_id_from_seed::<sr25519::Public>("Bob//stash"),119				get_account_id_from_seed::<sr25519::Public>("Charlie//stash"),120				get_account_id_from_seed::<sr25519::Public>("Dave//stash"),121				get_account_id_from_seed::<sr25519::Public>("Eve//stash"),122				get_account_id_from_seed::<sr25519::Public>("Ferdie//stash"),123			],124			true,125		),126		// Bootnodes127		vec![],128		// Telemetry129		None,130		// Protocol ID131		None,132		// Properties133		None,134		// Extensions135		Extensions {136			relay_chain: "rococo-local".into(),137			para_id: id.into(),138		},139	))140}141142fn testnet_genesis(143    wasm_binary: &[u8],144    initial_authorities: Vec<(AuraId, GrandpaId)>,145    root_key: AccountId,146    endowed_accounts: Vec<AccountId>,147    enable_println: bool,148) -> GenesisConfig {149150	let vested_accounts = vec![151		get_account_id_from_seed::<sr25519::Public>("Bob"),152	];153154    GenesisConfig {155        system: Some(SystemConfig {156            code: wasm_binary.to_vec(),157            changes_trie_config: Default::default(),158        }),159        pallet_balances: Some(BalancesConfig {160            balances: endowed_accounts161                .iter()162                .cloned()163                .map(|k| (k, 1 << 100))164                .collect(),165        }),166		pallet_treasury: Some(Default::default()),167		pallet_sudo: Some(SudoConfig { key: root_key }),168		pallet_vesting: Some(VestingConfig {169            vesting: vested_accounts170                .iter()171                .cloned()172                .map(|k| (k, 1000, 100, 1 << 98))173                .collect(),174        }),175        pallet_nft: Some(NftConfig {176            collection_id: vec![(177                1,178                Collection {179                    owner: get_account_id_from_seed::<sr25519::Public>("Alice"),180                    mode: CollectionMode::NFT,181                    access: AccessMode::Normal,182                    decimal_points: 0,183                    name: vec![],184                    description: vec![],185                    token_prefix: vec![],186                    mint_mode: false,187					offchain_schema: vec![],188					schema_version: SchemaVersion::default(),189                    sponsorship: SponsorshipState::Confirmed(get_account_id_from_seed::<sr25519::Public>("Alice")),190                    const_on_chain_schema: vec![],191					variable_on_chain_schema: vec![],192					limits: CollectionLimits::default()193                },194            )],195            nft_item_id: vec![],196            fungible_item_id: vec![],197            refungible_item_id: vec![],198            chain_limit: ChainLimits {199                collection_numbers_limit: 100000,200                account_token_ownership_limit: 1000000,201                collections_admins_limit: 5,202                custom_data_limit: 2048,203                nft_sponsor_transfer_timeout: 15,204                fungible_sponsor_transfer_timeout: 15,205				refungible_sponsor_transfer_timeout: 15,206				offchain_schema_limit: 1024,207				variable_on_chain_schema_limit: 1024,208				const_on_chain_schema_limit: 1024,209            },210        }),211        pallet_contracts: Some(ContractsConfig {212            current_schedule: ContractsSchedule {213                enable_println,214                ..Default::default()215            },216        }),217		parachain_info: parachain_runtime::ParachainInfoConfig { parachain_id: id },218    }219}