penpal_runtime/
genesis_config_presets.rs1use crate::*;
32use alloc::{vec, vec::Vec};
33use cumulus_primitives_core::ParaId;
34use frame_support::build_struct_json_patch;
35use parachains_common::{AccountId, AuraId};
36use sp_genesis_builder::PresetId;
37use sp_keyring::Sr25519Keyring;
38
39const SAFE_XCM_VERSION: u32 = xcm::prelude::XCM_VERSION;
40
41const DEFAULT_PARA_ID: ParaId = ParaId::new(2000);
42const ENDOWMENT: u128 = 1 << 60;
43
44fn penpal_parachain_genesis(
45 sudo: AccountId,
46 invulnerables: Vec<(AccountId, AuraId)>,
47 endowed_accounts: Vec<AccountId>,
48 endowment: Balance,
49 id: ParaId,
50) -> serde_json::Value {
51 build_struct_json_patch!(RuntimeGenesisConfig {
52 balances: BalancesConfig {
53 balances: endowed_accounts.iter().cloned().map(|k| (k, endowment)).collect(),
54 },
55 parachain_info: ParachainInfoConfig { parachain_id: id },
56 collator_selection: CollatorSelectionConfig {
57 invulnerables: invulnerables.iter().cloned().map(|(acc, _)| acc).collect(),
58 candidacy_bond: crate::EXISTENTIAL_DEPOSIT * 16,
59 },
60 session: SessionConfig {
61 keys: invulnerables
62 .into_iter()
63 .map(|(acc, aura)| {
64 (
65 acc.clone(), acc, penpal_session_keys(aura), )
69 })
70 .collect(),
71 },
72 polkadot_xcm: PolkadotXcmConfig { safe_xcm_version: Some(SAFE_XCM_VERSION) },
73 sudo: SudoConfig { key: Some(sudo.clone()) },
74 assets: AssetsConfig {
75 assets: vec![(
76 crate::xcm_config::TELEPORTABLE_ASSET_ID,
77 sudo.clone(), false, crate::EXISTENTIAL_DEPOSIT,
80 )],
81 metadata: vec![(
82 crate::xcm_config::TELEPORTABLE_ASSET_ID,
83 "pal-2".as_bytes().to_vec(),
84 "pal-2".as_bytes().to_vec(),
85 12,
86 )],
87 accounts: vec![(
88 crate::xcm_config::TELEPORTABLE_ASSET_ID,
89 sudo.clone(),
90 crate::EXISTENTIAL_DEPOSIT * 4096,
91 )]
92 },
93 foreign_assets: ForeignAssetsConfig {
94 assets: vec![(
95 crate::xcm_config::RelayLocation::get(),
96 sudo.clone(),
97 true,
98 crate::EXISTENTIAL_DEPOSIT
99 )],
100 metadata: vec![(
101 crate::xcm_config::RelayLocation::get(),
102 "relay".as_bytes().to_vec(),
103 "relay".as_bytes().to_vec(),
104 12
105 )],
106 accounts: vec![(
107 crate::xcm_config::RelayLocation::get(),
108 sudo,
109 crate::EXISTENTIAL_DEPOSIT * 4096,
110 )]
111 }
112 })
113}
114
115pub fn get_preset(id: &PresetId) -> Option<Vec<u8>> {
117 let genesis_fn = |authorities| {
118 penpal_parachain_genesis(
119 Sr25519Keyring::Alice.to_account_id(),
120 authorities,
121 Sr25519Keyring::well_known().map(|x| x.to_account_id()).collect(),
122 ENDOWMENT,
123 DEFAULT_PARA_ID,
124 )
125 };
126
127 let patch = match id.as_ref() {
128 sp_genesis_builder::DEV_RUNTIME_PRESET => genesis_fn(vec![(
129 Sr25519Keyring::Alice.to_account_id(),
130 Sr25519Keyring::Alice.public().into(),
131 )]),
132 sp_genesis_builder::LOCAL_TESTNET_RUNTIME_PRESET => genesis_fn(vec![
133 (Sr25519Keyring::Alice.to_account_id(), Sr25519Keyring::Alice.public().into()),
134 (Sr25519Keyring::Bob.to_account_id(), Sr25519Keyring::Bob.public().into()),
135 ]),
136 _ => return None,
137 };
138
139 Some(
140 serde_json::to_string(&patch)
141 .expect("serialization to json is expected to work. qed.")
142 .into_bytes(),
143 )
144}
145
146pub fn preset_names() -> Vec<PresetId> {
148 vec![
149 PresetId::from(sp_genesis_builder::DEV_RUNTIME_PRESET),
150 PresetId::from(sp_genesis_builder::LOCAL_TESTNET_RUNTIME_PRESET),
151 ]
152}
153
154pub fn penpal_session_keys(keys: AuraId) -> crate::SessionKeys {
158 crate::SessionKeys { aura: keys }
159}