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;1011use nft_runtime::{ContractsConfig, ContractsSchedule};121314151617pub type ChainSpec = sc_service::GenericChainSpec<GenesisConfig>;181920pub fn get_from_seed<TPublic: Public>(seed: &str) -> <TPublic::Pair as Pair>::Public {21 TPublic::Pair::from_string(&format!("//{}", seed), None)22 .expect("static values are valid; qed")23 .public()24}2526type AccountPublic = <Signature as Verify>::Signer;272829pub fn get_account_id_from_seed<TPublic: Public>(seed: &str) -> AccountId where30 AccountPublic: From<<TPublic::Pair as Pair>::Public>31{32 AccountPublic::from(get_from_seed::<TPublic>(seed)).into_account()33}343536pub fn authority_keys_from_seed(s: &str) -> (AuraId, GrandpaId) {37 (38 get_from_seed::<AuraId>(s),39 get_from_seed::<GrandpaId>(s),40 )41}4243pub fn development_config() -> ChainSpec {44 ChainSpec::from_genesis(45 "Development",46 "dev",47 ChainType::Development,48 || testnet_genesis(49 vec![50 authority_keys_from_seed("Alice"),51 ],52 get_account_id_from_seed::<sr25519::Public>("Alice"),53 vec![54 get_account_id_from_seed::<sr25519::Public>("Alice"),55 get_account_id_from_seed::<sr25519::Public>("Bob"),56 get_account_id_from_seed::<sr25519::Public>("Alice//stash"),57 get_account_id_from_seed::<sr25519::Public>("Bob//stash"),58 ],59 true,60 ),61 vec![],62 None,63 None,64 None,65 None,66 )67}6869pub fn local_testnet_config() -> ChainSpec {70 ChainSpec::from_genesis(71 "Local Testnet",72 "local_testnet",73 ChainType::Local,74 || testnet_genesis(75 vec![76 authority_keys_from_seed("Alice"),77 authority_keys_from_seed("Bob"),78 ],79 get_account_id_from_seed::<sr25519::Public>("Alice"),80 vec![81 get_account_id_from_seed::<sr25519::Public>("Alice"),82 get_account_id_from_seed::<sr25519::Public>("Bob"),83 get_account_id_from_seed::<sr25519::Public>("Charlie"),84 get_account_id_from_seed::<sr25519::Public>("Dave"),85 get_account_id_from_seed::<sr25519::Public>("Eve"),86 get_account_id_from_seed::<sr25519::Public>("Ferdie"),87 get_account_id_from_seed::<sr25519::Public>("Alice//stash"),88 get_account_id_from_seed::<sr25519::Public>("Bob//stash"),89 get_account_id_from_seed::<sr25519::Public>("Charlie//stash"),90 get_account_id_from_seed::<sr25519::Public>("Dave//stash"),91 get_account_id_from_seed::<sr25519::Public>("Eve//stash"),92 get_account_id_from_seed::<sr25519::Public>("Ferdie//stash"),93 ],94 true,95 ),96 vec![],97 None,98 None,99 None,100 None,101 )102}103104fn testnet_genesis(initial_authorities: Vec<(AuraId, GrandpaId)>,105 root_key: AccountId,106 endowed_accounts: Vec<AccountId>,107 _enable_println: bool) -> 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 contracts: Some(ContractsConfig {117 current_schedule: ContractsSchedule {118 119 ..Default::default()120 },121 }),122 aura: Some(AuraConfig {123 authorities: initial_authorities.iter().map(|x| (x.0.clone())).collect(),124 }),125 grandpa: Some(GrandpaConfig {126 authorities: initial_authorities.iter().map(|x| (x.1.clone(), 1)).collect(),127 }),128 sudo: Some(SudoConfig {129 key: root_key,130 }),131 }132}