partner_chains_demo_node/
testnet.rs

1use 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			// 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		.build())
65}
66
67pub fn testnet_initial_authorities() -> Vec<AuthorityKeys> {
68	vec![
69		//alice public keys
70		authority_keys(
71			"0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d",
72			"0x88dc3417d5058ec4b4503e0c12ea1a0a89be200fe98922423d4334014fa6b0ee",
73			"0x020a1091341fe5664bfa1782d5e04779689068c916b04cb365ec3153755684d9a1",
74		),
75		//bob public keys
76		authority_keys(
77			"0x8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48",
78			"0xd17c2d7823ebf260fd138f2d7e27d114c0145d968b5ff5006125f2414fadae69",
79			"0x0390084fdbf27d2b79d26a4f13f0ccd982cb755a661969143c37cbc49ef5b91f27",
80		),
81		//charlie public keys
82		authority_keys(
83			"0x90b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22",
84			"0x439660b36c6c03afafca027b910b4fecf99801834c62a5e6006f27d978de234f",
85			"0x0389411795514af1627765eceffcbd002719f031604fadd7d188e2dc585b4e1afb",
86		),
87		//dave public keys
88		authority_keys(
89			"0x306721211d5404bd9da88e0204360a1a9ab8b87c66c1bc2fcdd37f3c2222cc20",
90			"0x5e639b43e0052c47447dac87d6fd2b6ec50bdd4d0f614e4299c665249bbd09d9",
91			"0x03bc9d0ca094bd5b8b3225d7651eac5d18c1c04bf8ae8f8b263eebca4e1410ed0c",
92		),
93		//eve public keys
94		authority_keys(
95			"0xe659a7a1628cdd93febc04a4e0646ea20e9f5f0ce097d9a05290d4a9e054df4e",
96			"0x1dfe3e22cc0d45c70779c1095f7489a8ef3cf52d62fbd8c2fa38c9f1723502b5",
97			"0x031d10105e323c4afce225208f71a6441ee327a65b9e646e772500c74d31f669aa",
98		),
99		//ferdie public keys
100		authority_keys(
101			"0x1cbd2d43530a44705ad088af313e18f80b53ef16b36177cd4b77b846f2a5f07c",
102			"0x568cb4a574c6d178feb39c27dfc8b3f789e5f5423e19c71633c748b9acf086b5",
103			"0x0291f1217d5a04cb83312ee3d88a6e6b33284e053e6ccfc3a90339a0299d12967c",
104		),
105		//greg public keys
106		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		// SDETs test accounts, keys are in e2e-tests/secrets
134		// negative-test
135		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			// Initial PoA authorities
152			testnet_initial_authorities(),
153			// Sudo account
154			Some(testnet_sudo_key()),
155			// Pre-funded accounts
156			testnet_endowed_accounts(),
157			true,
158		)?)
159		.build())
160}
161
162/// Configure initial storage state for FRAME modules.
163pub 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			// Configure endowed accounts with initial balance of 1 << 60.
173			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			// Assign network admin rights.
180			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}