partner_chains_demo_node/
testnet.rs

1use 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			// Initial PoA authorities
36			vec![
37				//alice public keys
38				authority_keys(
39					"0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d",
40					"0x88dc3417d5058ec4b4503e0c12ea1a0a89be200fe98922423d4334014fa6b0ee",
41					"0x020a1091341fe5664bfa1782d5e04779689068c916b04cb365ec3153755684d9a1",
42				),
43			],
44			// Sudo account
45			Some(get_account_id_from_seed::<sr25519::Public>(
46				"assist draw loud island six improve van gas slam urban penalty lyrics",
47			)),
48			// Pre-funded accounts
49			vec![
50				AccountId::from_str(
51					"0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d",
52				)
53				.unwrap(),
54				AccountId::from_str(
55					"0x8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48",
56				)
57				.unwrap(),
58				// SDETs test accounts, keys are in e2e-tests/secrets
59				// negative-test
60				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		//alice public keys
77		authority_keys(
78			"0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d",
79			"0x88dc3417d5058ec4b4503e0c12ea1a0a89be200fe98922423d4334014fa6b0ee",
80			"0x020a1091341fe5664bfa1782d5e04779689068c916b04cb365ec3153755684d9a1",
81		),
82		//bob public keys
83		authority_keys(
84			"0x8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48",
85			"0xd17c2d7823ebf260fd138f2d7e27d114c0145d968b5ff5006125f2414fadae69",
86			"0x0390084fdbf27d2b79d26a4f13f0ccd982cb755a661969143c37cbc49ef5b91f27",
87		),
88		//charlie public keys
89		authority_keys(
90			"0x90b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22",
91			"0x439660b36c6c03afafca027b910b4fecf99801834c62a5e6006f27d978de234f",
92			"0x0389411795514af1627765eceffcbd002719f031604fadd7d188e2dc585b4e1afb",
93		),
94		//dave public keys
95		authority_keys(
96			"0x306721211d5404bd9da88e0204360a1a9ab8b87c66c1bc2fcdd37f3c2222cc20",
97			"0x5e639b43e0052c47447dac87d6fd2b6ec50bdd4d0f614e4299c665249bbd09d9",
98			"0x03bc9d0ca094bd5b8b3225d7651eac5d18c1c04bf8ae8f8b263eebca4e1410ed0c",
99		),
100		//eve public keys
101		authority_keys(
102			"0xe659a7a1628cdd93febc04a4e0646ea20e9f5f0ce097d9a05290d4a9e054df4e",
103			"0x1dfe3e22cc0d45c70779c1095f7489a8ef3cf52d62fbd8c2fa38c9f1723502b5",
104			"0x031d10105e323c4afce225208f71a6441ee327a65b9e646e772500c74d31f669aa",
105		),
106		//ferdie public keys
107		authority_keys(
108			"0x1cbd2d43530a44705ad088af313e18f80b53ef16b36177cd4b77b846f2a5f07c",
109			"0x568cb4a574c6d178feb39c27dfc8b3f789e5f5423e19c71633c748b9acf086b5",
110			"0x0291f1217d5a04cb83312ee3d88a6e6b33284e053e6ccfc3a90339a0299d12967c",
111		),
112		//greg public keys
113		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		// SDETs test accounts, keys are in e2e-tests/secrets
141		// negative-test
142		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			// Initial PoA authorities
159			testnet_initial_authorities(),
160			// Sudo account
161			Some(testnet_sudo_key()),
162			// Pre-funded accounts
163			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
176/// Configure initial storage state for FRAME modules.
177pub 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			// Configure endowed accounts with initial balance of 1 << 60.
188			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			// Assign network admin rights.
195			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}