partner_chains_demo_node/
testnet.rs1use crate::chain_spec::*;
2use partner_chains_demo_runtime::{
3 AccountId, AuraConfig, BalancesConfig, BridgeConfig, GovernedMapConfig, GrandpaConfig,
4 RuntimeGenesisConfig, SessionCommitteeManagementConfig, SessionConfig, SidechainConfig,
5 SudoConfig, SystemConfig, TestHelperPalletConfig,
6};
7use sc_service::{ChainType, Properties};
8use sidechain_domain::*;
9use sidechain_slots::SlotsPerEpoch;
10use sp_core::bytes::from_hex;
11use sp_core::{ed25519, sr25519};
12use sp_session_validator_management::CommitteeMember;
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 .with_properties({
65 let mut properties = Properties::new();
66 properties.insert("tokenSymbol".into(), "UNIT".into());
67 properties.insert("tokenDecimals".into(), 12.into());
68 properties.insert("ss58Format".into(), 42.into());
69 properties
70 })
71 .build())
72}
73
74pub fn testnet_initial_authorities() -> Vec<AuthorityKeys> {
75 vec![
76 authority_keys(
78 "0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d",
79 "0x88dc3417d5058ec4b4503e0c12ea1a0a89be200fe98922423d4334014fa6b0ee",
80 "0x020a1091341fe5664bfa1782d5e04779689068c916b04cb365ec3153755684d9a1",
81 ),
82 authority_keys(
84 "0x8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48",
85 "0xd17c2d7823ebf260fd138f2d7e27d114c0145d968b5ff5006125f2414fadae69",
86 "0x0390084fdbf27d2b79d26a4f13f0ccd982cb755a661969143c37cbc49ef5b91f27",
87 ),
88 authority_keys(
90 "0x90b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22",
91 "0x439660b36c6c03afafca027b910b4fecf99801834c62a5e6006f27d978de234f",
92 "0x0389411795514af1627765eceffcbd002719f031604fadd7d188e2dc585b4e1afb",
93 ),
94 authority_keys(
96 "0x306721211d5404bd9da88e0204360a1a9ab8b87c66c1bc2fcdd37f3c2222cc20",
97 "0x5e639b43e0052c47447dac87d6fd2b6ec50bdd4d0f614e4299c665249bbd09d9",
98 "0x03bc9d0ca094bd5b8b3225d7651eac5d18c1c04bf8ae8f8b263eebca4e1410ed0c",
99 ),
100 authority_keys(
102 "0xe659a7a1628cdd93febc04a4e0646ea20e9f5f0ce097d9a05290d4a9e054df4e",
103 "0x1dfe3e22cc0d45c70779c1095f7489a8ef3cf52d62fbd8c2fa38c9f1723502b5",
104 "0x031d10105e323c4afce225208f71a6441ee327a65b9e646e772500c74d31f669aa",
105 ),
106 authority_keys(
108 "0x1cbd2d43530a44705ad088af313e18f80b53ef16b36177cd4b77b846f2a5f07c",
109 "0x568cb4a574c6d178feb39c27dfc8b3f789e5f5423e19c71633c748b9acf086b5",
110 "0x0291f1217d5a04cb83312ee3d88a6e6b33284e053e6ccfc3a90339a0299d12967c",
111 ),
112 authority_keys(
114 "0x2c4ed1038f6e4131c21b6b89885ed232c5b81bae09009376e9079cc8aa518a1c",
115 "0xfa41bacb202b0529288b05af1b324f85fe561091c2d29d9df1df37c3aa687c23",
116 "0x02dacce90fca29ca80404d9b4e8ff3d9dabd03def6a82e412acb2ad04dd734dbfc",
117 ),
118 ]
119}
120
121pub fn testnet_endowed_accounts() -> Vec<AccountId> {
122 vec![
123 AccountId::from_str("0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d")
124 .unwrap(),
125 AccountId::from_str("0x8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48")
126 .unwrap(),
127 AccountId::from_str("0x90b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22")
128 .unwrap(),
129 AccountId::from_str("0x306721211d5404bd9da88e0204360a1a9ab8b87c66c1bc2fcdd37f3c2222cc20")
130 .unwrap(),
131 AccountId::from_str("0xe659a7a1628cdd93febc04a4e0646ea20e9f5f0ce097d9a05290d4a9e054df4e")
132 .unwrap(),
133 AccountId::from_str("0x1cbd2d43530a44705ad088af313e18f80b53ef16b36177cd4b77b846f2a5f07c")
134 .unwrap(),
135 AccountId::from_str("0x2c4ed1038f6e4131c21b6b89885ed232c5b81bae09009376e9079cc8aa518a1c")
136 .unwrap(),
137 AccountId::from_str("0x9cedc9f7b926191f64d68ee77dd90c834f0e73c0f53855d77d3b0517041d5640")
138 .unwrap(),
139 testnet_sudo_key(),
140 AccountId::from_str("5F1N52dZx48UpXNLtcCzSMHZEroqQDuYKfidg46Tp37SjPcE").unwrap(),
143 ]
144}
145
146pub fn testnet_sudo_key() -> AccountId {
147 get_account_id_from_seed::<sr25519::Public>(
148 "assist draw loud island six improve van gas slam urban penalty lyrics",
149 )
150}
151
152pub fn local_testnet_config() -> Result<ChainSpec, envy::Error> {
153 Ok(ChainSpec::builder(runtime_wasm(), None)
154 .with_name("Local Testnet")
155 .with_id("local_testnet")
156 .with_chain_type(ChainType::Local)
157 .with_genesis_config(testnet_genesis(
158 testnet_initial_authorities(),
160 Some(testnet_sudo_key()),
162 testnet_endowed_accounts(),
164 true,
165 )?)
166 .with_properties({
167 let mut properties = Properties::new();
168 properties.insert("tokenSymbol".into(), "UNIT".into());
169 properties.insert("tokenDecimals".into(), 12.into());
170 properties.insert("ss58Format".into(), 42.into());
171 properties
172 })
173 .build())
174}
175
176pub fn testnet_genesis(
178 initial_authorities: Vec<AuthorityKeys>,
179 root_key: Option<AccountId>,
180 endowed_accounts: Vec<AccountId>,
181 _enable_println: bool,
182) -> Result<serde_json::Value, envy::Error> {
183 let genesis_utxo = sp_sidechain::read_genesis_utxo_from_env_with_defaults()?;
184 let config = RuntimeGenesisConfig {
185 system: SystemConfig { ..Default::default() },
186 balances: BalancesConfig {
187 balances: endowed_accounts.iter().cloned().map(|k| (k, 1 << 60)).collect(),
189 dev_accounts: None,
190 },
191 aura: AuraConfig { authorities: vec![] },
192 grandpa: GrandpaConfig { authorities: vec![], ..Default::default() },
193 sudo: SudoConfig {
194 key: root_key,
196 },
197 transaction_payment: Default::default(),
198 session: SessionConfig {
199 keys: initial_authorities
200 .iter()
201 .map(|authority_keys| {
202 (
203 authority_keys.cross_chain.clone().into(),
204 authority_keys.cross_chain.clone().into(),
205 authority_keys.session.clone(),
206 )
207 })
208 .collect(),
209 non_authority_keys: Default::default(),
210 },
211 sidechain: SidechainConfig {
212 genesis_utxo,
213 slots_per_epoch: SlotsPerEpoch::read_from_env()?,
214 ..Default::default()
215 },
216 session_committee_management: SessionCommitteeManagementConfig {
217 initial_authorities: initial_authorities
218 .into_iter()
219 .map(|keys| CommitteeMember::permissioned(keys.cross_chain, keys.session))
220 .collect(),
221 main_chain_scripts: sp_session_validator_management::MainChainScripts::read_from_env()?,
222 },
223 governed_map: GovernedMapConfig {
224 main_chain_scripts: Some(sp_governed_map::MainChainScriptsV1::read_from_env()?),
225 ..Default::default()
226 },
227 test_helper_pallet: TestHelperPalletConfig {
228 participation_data_release_period: 30,
229 ..Default::default()
230 },
231 bridge: BridgeConfig {
232 main_chain_scripts: Some(sp_partner_chains_bridge::MainChainScripts::read_from_env()?),
233 initial_checkpoint: Some(genesis_utxo),
234 ..Default::default()
235 },
236 };
237
238 Ok(serde_json::to_value(config).expect("Genesis config must be serialized correctly"))
239}