1use nft_runtime::{2 AccountId, AuraConfig, BalancesConfig, GenesisConfig, GrandpaConfig, Signature, SudoConfig,3 SystemConfig, WASM_BINARY,4};5use nft_runtime::{ContractsConfig, ContractsSchedule};6use sc_service::ChainType;7use sp_consensus_aura::sr25519::AuthorityId as AuraId;8use sp_core::{sr25519, Pair, Public};9use sp_finality_grandpa::AuthorityId as GrandpaId;10use sp_runtime::traits::{IdentifyAccount, Verify};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) -> AccountId29where30 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 (get_from_seed::<AuraId>(s), get_from_seed::<GrandpaId>(s))38}3940pub fn development_config() -> ChainSpec {41 ChainSpec::from_genesis(42 "Development",43 "dev",44 ChainType::Development,45 || {46 testnet_genesis(47 vec![authority_keys_from_seed("Alice")],48 get_account_id_from_seed::<sr25519::Public>("Alice"),49 vec![50 get_account_id_from_seed::<sr25519::Public>("Alice"),51 get_account_id_from_seed::<sr25519::Public>("Bob"),52 get_account_id_from_seed::<sr25519::Public>("Alice//stash"),53 get_account_id_from_seed::<sr25519::Public>("Bob//stash"),54 ],55 true,56 )57 },58 vec![],59 None,60 None,61 None,62 None,63 )64}6566pub fn local_testnet_config() -> ChainSpec {67 ChainSpec::from_genesis(68 "Local Testnet",69 "local_testnet",70 ChainType::Local,71 || {72 testnet_genesis(73 vec![74 authority_keys_from_seed("Alice"),75 authority_keys_from_seed("Bob"),76 ],77 get_account_id_from_seed::<sr25519::Public>("Alice"),78 vec![79 get_account_id_from_seed::<sr25519::Public>("Alice"),80 get_account_id_from_seed::<sr25519::Public>("Bob"),81 get_account_id_from_seed::<sr25519::Public>("Charlie"),82 get_account_id_from_seed::<sr25519::Public>("Dave"),83 get_account_id_from_seed::<sr25519::Public>("Eve"),84 get_account_id_from_seed::<sr25519::Public>("Ferdie"),85 get_account_id_from_seed::<sr25519::Public>("Alice//stash"),86 get_account_id_from_seed::<sr25519::Public>("Bob//stash"),87 get_account_id_from_seed::<sr25519::Public>("Charlie//stash"),88 get_account_id_from_seed::<sr25519::Public>("Dave//stash"),89 get_account_id_from_seed::<sr25519::Public>("Eve//stash"),90 get_account_id_from_seed::<sr25519::Public>("Ferdie//stash"),91 ],92 true,93 )94 },95 vec![],96 None,97 None,98 None,99 None,100 )101}102103fn testnet_genesis(104 initial_authorities: Vec<(AuraId, GrandpaId)>,105 root_key: AccountId,106 endowed_accounts: Vec<AccountId>,107 _enable_println: bool,108) -> GenesisConfig {109 GenesisConfig {110 system: Some(SystemConfig {111 code: WASM_BINARY.to_vec(),112 changes_trie_config: Default::default(),113 }),114 balances: Some(BalancesConfig {115 balances: endowed_accounts116 .iter()117 .cloned()118 .map(|k| (k, 1 << 60))119 .collect(),120 }),121 aura: Some(AuraConfig {122 authorities: initial_authorities.iter().map(|x| (x.0.clone())).collect(),123 }),124 grandpa: Some(GrandpaConfig {125 authorities: initial_authorities126 .iter()127 .map(|x| (x.1.clone(), 1))128 .collect(),129 }),130 sudo: Some(SudoConfig { key: root_key }),131 contracts: Some(ContractsConfig {132 current_schedule: ContractsSchedule {133 134 ..Default::default()135 },136 }),137 }138}