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