123456use 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;171819pub type ChainSpec = sc_service::GenericChainSpec<nft_runtime::GenesisConfig, Extensions>;202122pub 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}272829#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, ChainSpecGroup, ChainSpecExtension)]30#[serde(deny_unknown_fields)]31pub struct Extensions {32 33 pub relay_chain: String,34 35 pub para_id: u32,36}3738impl Extensions {39 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;464748pub 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()); 6061 ChainSpec::from_genesis(62 63 "Development",64 65 "dev",66 ChainType::Local,67 move || {68 testnet_genesis(69 70 get_account_id_from_seed::<sr25519::Public>("Alice"),71 vec![72 get_from_seed::<AuraId>("Alice"),73 get_from_seed::<AuraId>("Bob"),74 ],75 76 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 84 vec![],85 86 None,87 88 None,89 90 Some(properties),91 92 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 102 "Local Testnet",103 104 "local_testnet",105 ChainType::Local,106 move || {107 testnet_genesis(108 109 get_account_id_from_seed::<sr25519::Public>("Alice"),110 vec![111 get_from_seed::<AuraId>("Alice"),112 get_from_seed::<AuraId>("Bob"),113 ],114 115 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 133 vec![],134 135 None,136 137 None,138 139 None,140 141 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 GenesisConfig {155 system: nft_runtime::SystemConfig {156 code: nft_runtime::WASM_BINARY157 .expect("WASM binary was not build, please build it!")158 .to_vec(),159 changes_trie_config: Default::default(),160 },161 balances: BalancesConfig {162 balances: endowed_accounts163 .iter()164 .cloned()165 .map(|k| (k, 1 << 70))166 .collect(),167 },168 treasury: Default::default(),169 sudo: SudoConfig { key: root_key },170 vesting: VestingConfig { vesting: vec![] },171 nft: NftConfig {172 collection_id: vec![(173 1,174 Collection {175 owner: get_account_id_from_seed::<sr25519::Public>("Alice"),176 mode: CollectionMode::NFT,177 access: AccessMode::Normal,178 decimal_points: 0,179 name: vec![],180 description: vec![],181 token_prefix: vec![],182 mint_mode: false,183 offchain_schema: vec![],184 schema_version: SchemaVersion::default(),185 sponsorship: SponsorshipState::Confirmed(get_account_id_from_seed::<186 sr25519::Public,187 >("Alice")),188 const_on_chain_schema: vec![],189 variable_on_chain_schema: vec![],190 limits: CollectionLimits::default(),191 meta_update_permission: MetaUpdatePermission::ItemOwner,192 transfers_enabled: true,193 },194 )],195 nft_item_id: vec![],196 fungible_item_id: vec![],197 refungible_item_id: vec![],198 },199 parachain_info: nft_runtime::ParachainInfoConfig { parachain_id: id },200 aura: nft_runtime::AuraConfig {201 authorities: initial_authorities,202 },203 aura_ext: Default::default(),204 evm: EVMConfig {205 accounts: BTreeMap::new(),206 },207 ethereum: EthereumConfig {},208 }209}