1234567891011121314151617use cumulus_primitives_core::ParaId;18use unique_runtime::*;19use sc_chain_spec::{ChainSpecExtension, ChainSpecGroup};20use sc_service::ChainType;21use sp_core::{sr25519, Pair, Public};22use sp_runtime::traits::{IdentifyAccount, Verify};23use std::collections::BTreeMap;2425use serde::{Deserialize, Serialize};26use serde_json::map::Map;272829pub type ChainSpec = sc_service::GenericChainSpec<unique_runtime::GenesisConfig, Extensions>;303132pub fn get_from_seed<TPublic: Public>(seed: &str) -> <TPublic::Pair as Pair>::Public {33 TPublic::Pair::from_string(&format!("//{}", seed), None)34 .expect("static values are valid; qed")35 .public()36}373839#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, ChainSpecGroup, ChainSpecExtension)]40#[serde(deny_unknown_fields)]41pub struct Extensions {42 43 pub relay_chain: String,44 45 pub para_id: u32,46}4748impl Extensions {49 50 pub fn try_get(chain_spec: &dyn sc_service::ChainSpec) -> Option<&Self> {51 sc_chain_spec::get_extension(chain_spec.extensions())52 }53}5455type AccountPublic = <Signature as Verify>::Signer;565758pub fn get_account_id_from_seed<TPublic: Public>(seed: &str) -> AccountId59where60 AccountPublic: From<<TPublic::Pair as Pair>::Public>,61{62 AccountPublic::from(get_from_seed::<TPublic>(seed)).into_account()63}6465pub fn development_config() -> ChainSpec {66 let mut properties = Map::new();67 properties.insert("tokenSymbol".into(), "OPL".into());68 properties.insert("tokenDecimals".into(), 15.into());69 properties.insert("ss58Format".into(), 42.into());7071 ChainSpec::from_genesis(72 73 "Development",74 75 "dev",76 ChainType::Local,77 move || {78 testnet_genesis(79 80 get_account_id_from_seed::<sr25519::Public>("Alice"),81 vec![82 get_from_seed::<AuraId>("Alice"),83 get_from_seed::<AuraId>("Bob"),84 ],85 86 vec![87 get_account_id_from_seed::<sr25519::Public>("Alice"),88 get_account_id_from_seed::<sr25519::Public>("Bob"),89 ],90 1000.into(),91 )92 },93 94 vec![],95 96 None,97 98 None,99 None,100 101 Some(properties),102 103 Extensions {104 relay_chain: "rococo-dev".into(),105 para_id: 1000,106 },107 )108}109110pub fn local_testnet_rococo_config() -> ChainSpec {111 ChainSpec::from_genesis(112 113 "Local Testnet",114 115 "local_testnet",116 ChainType::Local,117 move || {118 testnet_genesis(119 120 get_account_id_from_seed::<sr25519::Public>("Alice"),121 vec![122 get_from_seed::<AuraId>("Alice"),123 get_from_seed::<AuraId>("Bob"),124 ],125 126 vec![127 get_account_id_from_seed::<sr25519::Public>("Alice"),128 get_account_id_from_seed::<sr25519::Public>("Bob"),129 get_account_id_from_seed::<sr25519::Public>("Charlie"),130 get_account_id_from_seed::<sr25519::Public>("Dave"),131 get_account_id_from_seed::<sr25519::Public>("Eve"),132 get_account_id_from_seed::<sr25519::Public>("Ferdie"),133 get_account_id_from_seed::<sr25519::Public>("Alice//stash"),134 get_account_id_from_seed::<sr25519::Public>("Bob//stash"),135 get_account_id_from_seed::<sr25519::Public>("Charlie//stash"),136 get_account_id_from_seed::<sr25519::Public>("Dave//stash"),137 get_account_id_from_seed::<sr25519::Public>("Eve//stash"),138 get_account_id_from_seed::<sr25519::Public>("Ferdie//stash"),139 ],140 1000.into(),141 )142 },143 144 vec![],145 146 None,147 148 None,149 None,150 151 None,152 153 Extensions {154 relay_chain: "rococo-local".into(),155 para_id: 1000,156 },157 )158}159160pub fn local_testnet_westend_config() -> ChainSpec {161 ChainSpec::from_genesis(162 163 "Local Testnet",164 165 "local_testnet",166 ChainType::Local,167 move || {168 testnet_genesis(169 170 get_account_id_from_seed::<sr25519::Public>("Alice"),171 vec![172 get_from_seed::<AuraId>("Alice"),173 get_from_seed::<AuraId>("Bob"),174 get_from_seed::<AuraId>("Charlie"),175 get_from_seed::<AuraId>("Dave"),176 get_from_seed::<AuraId>("Eve"),177 ],178 179 vec![180 get_account_id_from_seed::<sr25519::Public>("Alice"),181 get_account_id_from_seed::<sr25519::Public>("Bob"),182 get_account_id_from_seed::<sr25519::Public>("Charlie"),183 get_account_id_from_seed::<sr25519::Public>("Dave"),184 get_account_id_from_seed::<sr25519::Public>("Eve"),185 get_account_id_from_seed::<sr25519::Public>("Ferdie"),186 get_account_id_from_seed::<sr25519::Public>("Alice//stash"),187 get_account_id_from_seed::<sr25519::Public>("Bob//stash"),188 get_account_id_from_seed::<sr25519::Public>("Charlie//stash"),189 get_account_id_from_seed::<sr25519::Public>("Dave//stash"),190 get_account_id_from_seed::<sr25519::Public>("Eve//stash"),191 get_account_id_from_seed::<sr25519::Public>("Ferdie//stash"),192 ],193 1000.into(),194 )195 },196 197 vec![],198 199 None,200 201 None,202 None,203 204 None,205 206 Extensions {207 relay_chain: "westend-local".into(),208 para_id: 1000,209 },210 )211}212213fn testnet_genesis(214 root_key: AccountId,215 initial_authorities: Vec<AuraId>,216 endowed_accounts: Vec<AccountId>,217 id: ParaId,218) -> GenesisConfig {219 GenesisConfig {220 system: unique_runtime::SystemConfig {221 code: unique_runtime::WASM_BINARY222 .expect("WASM binary was not build, please build it!")223 .to_vec(),224 },225 balances: BalancesConfig {226 balances: endowed_accounts227 .iter()228 .cloned()229 230 .map(|k| (k, 1 << 100))231 .collect(),232 },233 treasury: Default::default(),234 sudo: SudoConfig {235 key: Some(root_key),236 },237 vesting: VestingConfig { vesting: vec![] },238 parachain_info: unique_runtime::ParachainInfoConfig { parachain_id: id },239 parachain_system: Default::default(),240 aura: unique_runtime::AuraConfig {241 authorities: initial_authorities,242 },243 aura_ext: Default::default(),244 evm: EVMConfig {245 accounts: BTreeMap::new(),246 },247 ethereum: EthereumConfig {},248 }249}