1use sp_core::{Pair, Public, sr25519};2use nft_runtime::{3 AccountId, AuraConfig, BalancesConfig, GenesisConfig, GrandpaConfig,4 SudoConfig, SystemConfig, WASM_BINARY, Signature5};6use sp_consensus_aura::sr25519::AuthorityId as AuraId;7use sp_finality_grandpa::AuthorityId as GrandpaId;8use sp_runtime::traits::{Verify, IdentifyAccount};9use sc_service::ChainType;10use nft_runtime::{ContractsConfig, ContractsSchedule};111213141516pub type ChainSpec = sc_service::GenericChainSpec<GenesisConfig>;171819pub fn get_from_seed<TPublic: Public>(seed: &str) -> <TPublic::Pair as Pair>::Public {20 TPublic::Pair::from_string(&format!("//{}", seed), None)21 .expect("static values are valid; qed")22 .public()23}2425type AccountPublic = <Signature as Verify>::Signer;262728pub fn get_account_id_from_seed<TPublic: Public>(seed: &str) -> AccountId where29 AccountPublic: From<<TPublic::Pair as Pair>::Public>30{31 AccountPublic::from(get_from_seed::<TPublic>(seed)).into_account()32}333435pub fn authority_keys_from_seed(s: &str) -> (AuraId, GrandpaId) {36 (37 get_from_seed::<AuraId>(s),38 get_from_seed::<GrandpaId>(s),39 )40}4142pub fn development_config() -> ChainSpec {43 ChainSpec::from_genesis(44 "Development",45 "dev",46 ChainType::Development,47 || testnet_genesis(48 vec![49 authority_keys_from_seed("Alice"),50 ],51 get_account_id_from_seed::<sr25519::Public>("Alice"),52 vec![53 get_account_id_from_seed::<sr25519::Public>("Alice"),54 get_account_id_from_seed::<sr25519::Public>("Bob"),55 get_account_id_from_seed::<sr25519::Public>("Alice//stash"),56 get_account_id_from_seed::<sr25519::Public>("Bob//stash"),57 ],58 true,59 ),60 vec![],61 None,62 None,63 None,64 None,65 )66}6768pub fn local_testnet_config() -> ChainSpec {69 ChainSpec::from_genesis(70 "Local Testnet",71 "local_testnet",72 ChainType::Local,73 || testnet_genesis(74 vec![75 authority_keys_from_seed("Alice"),76 authority_keys_from_seed("Bob"),77 ],78 get_account_id_from_seed::<sr25519::Public>("Alice"),79 vec![80 get_account_id_from_seed::<sr25519::Public>("Alice"),81 get_account_id_from_seed::<sr25519::Public>("Bob"),82 get_account_id_from_seed::<sr25519::Public>("Charlie"),83 get_account_id_from_seed::<sr25519::Public>("Dave"),84 get_account_id_from_seed::<sr25519::Public>("Eve"),85 get_account_id_from_seed::<sr25519::Public>("Ferdie"),86 get_account_id_from_seed::<sr25519::Public>("Alice//stash"),87 get_account_id_from_seed::<sr25519::Public>("Bob//stash"),88 get_account_id_from_seed::<sr25519::Public>("Charlie//stash"),89 get_account_id_from_seed::<sr25519::Public>("Dave//stash"),90 get_account_id_from_seed::<sr25519::Public>("Eve//stash"),91 get_account_id_from_seed::<sr25519::Public>("Ferdie//stash"),92 ],93 true,94 ),95 vec![],96 None,97 None,98 None,99 None,100 )101}102103fn testnet_genesis(initial_authorities: Vec<(AuraId, GrandpaId)>,104 root_key: AccountId,105 endowed_accounts: Vec<AccountId>,106 _enable_println: bool107 ) -> GenesisConfig {108 GenesisConfig {109 system: Some(SystemConfig {110 code: WASM_BINARY.to_vec(),111 changes_trie_config: Default::default(),112 }),113 balances: Some(BalancesConfig {114 balances: endowed_accounts.iter().cloned().map(|k|(k, 1 << 60)).collect(),115 }),116 aura: Some(AuraConfig {117 authorities: initial_authorities.iter().map(|x| (x.0.clone())).collect(),118 }),119 grandpa: Some(GrandpaConfig {120 authorities: initial_authorities.iter().map(|x| (x.1.clone(), 1)).collect(),121 }),122 sudo: Some(SudoConfig {123 key: root_key,124 }),125 contracts: Some(ContractsConfig {126 gas_price: 1_000,127 current_schedule: ContractsSchedule {128 129 ..Default::default()130 },131 }),132 }133}