partner_chains_demo_node/
testnet.rs1use crate::chain_spec::*;
2use authority_selection_inherents::CommitteeMember;
3use partner_chains_demo_runtime::{
4 AccountId, AuraConfig, BalancesConfig, GovernedMapConfig, GrandpaConfig,
5 NativeTokenManagementConfig, RuntimeGenesisConfig, SessionCommitteeManagementConfig,
6 SessionConfig, SidechainConfig, SudoConfig, SystemConfig, TestHelperPalletConfig,
7};
8use sc_service::ChainType;
9use sidechain_domain::*;
10use sidechain_slots::SlotsPerEpoch;
11use sp_core::bytes::from_hex;
12use sp_core::{ed25519, sr25519};
13use std::str::FromStr;
14
15pub fn authority_keys(
16 aura_pub_key: &str,
17 grandpa_pub_key: &str,
18 sidechain_pub_key: &str,
19) -> AuthorityKeys {
20 let aura_pk = sr25519::Public::from_raw(from_hex(aura_pub_key).unwrap().try_into().unwrap());
21 let granda_pk =
22 ed25519::Public::from_raw(from_hex(grandpa_pub_key).unwrap().try_into().unwrap());
23 let sidechain_pk = sidechain_domain::SidechainPublicKey(from_hex(sidechain_pub_key).unwrap());
24
25 let session_keys = (aura_pk, granda_pk).into();
26 AuthorityKeys { session: session_keys, cross_chain: sidechain_pk.try_into().unwrap() }
27}
28
29pub fn development_config() -> Result<ChainSpec, envy::Error> {
30 Ok(ChainSpec::builder(runtime_wasm(), None)
31 .with_name("Development")
32 .with_id("dev")
33 .with_chain_type(ChainType::Development)
34 .with_genesis_config(testnet_genesis(
35 vec![
37 authority_keys(
39 "0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d",
40 "0x88dc3417d5058ec4b4503e0c12ea1a0a89be200fe98922423d4334014fa6b0ee",
41 "0x020a1091341fe5664bfa1782d5e04779689068c916b04cb365ec3153755684d9a1",
42 ),
43 ],
44 Some(get_account_id_from_seed::<sr25519::Public>(
46 "assist draw loud island six improve van gas slam urban penalty lyrics",
47 )),
48 vec![
50 AccountId::from_str(
51 "0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d",
52 )
53 .unwrap(),
54 AccountId::from_str(
55 "0x8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48",
56 )
57 .unwrap(),
58 AccountId::from_str("5F1N52dZx48UpXNLtcCzSMHZEroqQDuYKfidg46Tp37SjPcE").unwrap(),
61 ],
62 true,
63 )?)
64 .build())
65}
66
67pub fn testnet_initial_authorities() -> Vec<AuthorityKeys> {
68 vec![
69 authority_keys(
71 "0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d",
72 "0x88dc3417d5058ec4b4503e0c12ea1a0a89be200fe98922423d4334014fa6b0ee",
73 "0x020a1091341fe5664bfa1782d5e04779689068c916b04cb365ec3153755684d9a1",
74 ),
75 authority_keys(
77 "0x8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48",
78 "0xd17c2d7823ebf260fd138f2d7e27d114c0145d968b5ff5006125f2414fadae69",
79 "0x0390084fdbf27d2b79d26a4f13f0ccd982cb755a661969143c37cbc49ef5b91f27",
80 ),
81 authority_keys(
83 "0x90b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22",
84 "0x439660b36c6c03afafca027b910b4fecf99801834c62a5e6006f27d978de234f",
85 "0x0389411795514af1627765eceffcbd002719f031604fadd7d188e2dc585b4e1afb",
86 ),
87 authority_keys(
89 "0x306721211d5404bd9da88e0204360a1a9ab8b87c66c1bc2fcdd37f3c2222cc20",
90 "0x5e639b43e0052c47447dac87d6fd2b6ec50bdd4d0f614e4299c665249bbd09d9",
91 "0x03bc9d0ca094bd5b8b3225d7651eac5d18c1c04bf8ae8f8b263eebca4e1410ed0c",
92 ),
93 authority_keys(
95 "0xe659a7a1628cdd93febc04a4e0646ea20e9f5f0ce097d9a05290d4a9e054df4e",
96 "0x1dfe3e22cc0d45c70779c1095f7489a8ef3cf52d62fbd8c2fa38c9f1723502b5",
97 "0x031d10105e323c4afce225208f71a6441ee327a65b9e646e772500c74d31f669aa",
98 ),
99 authority_keys(
101 "0x1cbd2d43530a44705ad088af313e18f80b53ef16b36177cd4b77b846f2a5f07c",
102 "0x568cb4a574c6d178feb39c27dfc8b3f789e5f5423e19c71633c748b9acf086b5",
103 "0x0291f1217d5a04cb83312ee3d88a6e6b33284e053e6ccfc3a90339a0299d12967c",
104 ),
105 authority_keys(
107 "0x2c4ed1038f6e4131c21b6b89885ed232c5b81bae09009376e9079cc8aa518a1c",
108 "0xfa41bacb202b0529288b05af1b324f85fe561091c2d29d9df1df37c3aa687c23",
109 "0x02dacce90fca29ca80404d9b4e8ff3d9dabd03def6a82e412acb2ad04dd734dbfc",
110 ),
111 ]
112}
113
114pub fn testnet_endowed_accounts() -> Vec<AccountId> {
115 vec![
116 AccountId::from_str("0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d")
117 .unwrap(),
118 AccountId::from_str("0x8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48")
119 .unwrap(),
120 AccountId::from_str("0x90b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22")
121 .unwrap(),
122 AccountId::from_str("0x306721211d5404bd9da88e0204360a1a9ab8b87c66c1bc2fcdd37f3c2222cc20")
123 .unwrap(),
124 AccountId::from_str("0xe659a7a1628cdd93febc04a4e0646ea20e9f5f0ce097d9a05290d4a9e054df4e")
125 .unwrap(),
126 AccountId::from_str("0x1cbd2d43530a44705ad088af313e18f80b53ef16b36177cd4b77b846f2a5f07c")
127 .unwrap(),
128 AccountId::from_str("0x2c4ed1038f6e4131c21b6b89885ed232c5b81bae09009376e9079cc8aa518a1c")
129 .unwrap(),
130 AccountId::from_str("0x9cedc9f7b926191f64d68ee77dd90c834f0e73c0f53855d77d3b0517041d5640")
131 .unwrap(),
132 testnet_sudo_key(),
133 AccountId::from_str("5F1N52dZx48UpXNLtcCzSMHZEroqQDuYKfidg46Tp37SjPcE").unwrap(),
136 ]
137}
138
139pub fn testnet_sudo_key() -> AccountId {
140 get_account_id_from_seed::<sr25519::Public>(
141 "assist draw loud island six improve van gas slam urban penalty lyrics",
142 )
143}
144
145pub fn local_testnet_config() -> Result<ChainSpec, envy::Error> {
146 Ok(ChainSpec::builder(runtime_wasm(), None)
147 .with_name("Local Testnet")
148 .with_id("local_testnet")
149 .with_chain_type(ChainType::Local)
150 .with_genesis_config(testnet_genesis(
151 testnet_initial_authorities(),
153 Some(testnet_sudo_key()),
155 testnet_endowed_accounts(),
157 true,
158 )?)
159 .build())
160}
161
162pub fn testnet_genesis(
164 initial_authorities: Vec<AuthorityKeys>,
165 root_key: Option<AccountId>,
166 endowed_accounts: Vec<AccountId>,
167 _enable_println: bool,
168) -> Result<serde_json::Value, envy::Error> {
169 let config = RuntimeGenesisConfig {
170 system: SystemConfig { ..Default::default() },
171 balances: BalancesConfig {
172 balances: endowed_accounts.iter().cloned().map(|k| (k, 1 << 60)).collect(),
174 dev_accounts: None,
175 },
176 aura: AuraConfig { authorities: vec![] },
177 grandpa: GrandpaConfig { authorities: vec![], ..Default::default() },
178 sudo: SudoConfig {
179 key: root_key,
181 },
182 transaction_payment: Default::default(),
183 session: SessionConfig {
184 initial_validators: initial_authorities
185 .iter()
186 .map(|authority_keys| {
187 (authority_keys.cross_chain.clone().into(), authority_keys.session.clone())
188 })
189 .collect(),
190 },
191 sidechain: SidechainConfig {
192 genesis_utxo: sp_sidechain::read_genesis_utxo_from_env_with_defaults()?,
193 slots_per_epoch: SlotsPerEpoch::read_from_env()?,
194 ..Default::default()
195 },
196 pallet_session: Default::default(),
197 session_committee_management: SessionCommitteeManagementConfig {
198 initial_authorities: initial_authorities
199 .into_iter()
200 .map(|keys| CommitteeMember::permissioned(keys.cross_chain, keys.session))
201 .collect(),
202 main_chain_scripts: sp_session_validator_management::MainChainScripts::read_from_env()?,
203 },
204 native_token_management: NativeTokenManagementConfig {
205 main_chain_scripts: Some(sp_native_token_management::MainChainScripts::read_from_env()?),
206 ..Default::default()
207 },
208 governed_map: GovernedMapConfig {
209 main_chain_scripts: Some(Default::default()),
210 ..Default::default()
211 },
212 test_helper_pallet: TestHelperPalletConfig {
213 participation_data_release_period: 30,
214 ..Default::default()
215 },
216 };
217
218 Ok(serde_json::to_value(config).expect("Genesis config must be serialized correctly"))
219}