partner_chains_demo_node/
staging.rs

1use crate::chain_spec::get_account_id_from_seed;
2use crate::chain_spec::*;
3use authority_selection_inherents::CommitteeMember;
4use partner_chains_demo_runtime::{
5	AccountId, AuraConfig, BalancesConfig, GovernedMapConfig, GrandpaConfig,
6	NativeTokenManagementConfig, RuntimeGenesisConfig, SessionCommitteeManagementConfig,
7	SessionConfig, SidechainConfig, SudoConfig, SystemConfig, TestHelperPalletConfig,
8};
9use sc_service::ChainType;
10use sidechain_domain::*;
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 staging_initial_authorities() -> Vec<AuthorityKeys> {
30	vec![
31		// validator-1
32		authority_keys(
33			"0xba94651de6279a38a416b97b9720c3df76224435e951ac73e9e302a4ee9fcf73",
34			"0xdde2501588713ddad5daf5a898c19d82cd591609c9184679868640c8cfe8287d",
35			"0x03b827f4da9711bab7292e5695576a841a4d20af9a07b1ba7a230168d2a78e9df4",
36		),
37		// validator-2
38		authority_keys(
39			"0x36128fff2acc04f206ccaf4e9f8e9995998efced29075a58b7d76d3735c21208",
40			"0x8f9a9856a27cc114ce85b64f41144f0c907c4bd8b3102b083b52b6b61aff6c47",
41			"0x02ef5bcd94d54a18ad199559782cd72ac3ccd850976aaaafbca8f9d2625afbf7c4",
42		),
43		// validator-3
44		authority_keys(
45			"0x9a32d3896a56e822321f7bc915befc8ce112c5d67e3c6497295bd3d7b020f94c",
46			"0x4f3c0ecc6dc474f27ad7967f5cdbd50da047ffedbc91b65f5cd247515489c98f",
47			"0x02f2762ab6e1a125dc03908a7b738f8023d13763f28a11d7633c6c8bc463478430",
48		),
49		// validator-4
50		authority_keys(
51			"0xc41992b8eb2f3a8a6c46211df584827f9eeb0175e2c75e1242392262b55b6874",
52			"0x34b71fdad96431bf115350d8ad21eec07a2b154ff32dc31125f988e308bebea8",
53			"0x025e19f82c5e2bac5e8869d49ff26359e442628bc5cfa38eeb5275f43d04015da8",
54		),
55		// validator-5
56		authority_keys(
57			"0x500d7ff6d903c85db5ee5624df9510c2a085cf30da260166bd370010d0bdc97a",
58			"0xa04d74c1539550876d04e4d2de4e0531087c3b6810ce96ddc16d78ccf4ac4f11",
59			"0x03f38a062a4b372c045c1dddc4fe98a2c9cb1d6eec8bf02f973fd29b1096cd8155",
60		),
61	]
62}
63pub fn staging_endowed_accounts() -> Vec<AccountId> {
64	vec![
65		AccountId::from_str("0xba94651de6279a38a416b97b9720c3df76224435e951ac73e9e302a4ee9fcf73")
66			.unwrap(),
67		AccountId::from_str("0x36128fff2acc04f206ccaf4e9f8e9995998efced29075a58b7d76d3735c21208")
68			.unwrap(),
69		AccountId::from_str("0x9a32d3896a56e822321f7bc915befc8ce112c5d67e3c6497295bd3d7b020f94c")
70			.unwrap(),
71		AccountId::from_str("0xc41992b8eb2f3a8a6c46211df584827f9eeb0175e2c75e1242392262b55b6874")
72			.unwrap(),
73		AccountId::from_str("0x500d7ff6d903c85db5ee5624df9510c2a085cf30da260166bd370010d0bdc97a")
74			.unwrap(),
75		AccountId::from_str("0xc2a8354c3928ffacf21eb8b2c3e6bceda9d54b0e2ce10f48fe8b9afafb7d8a3a")
76			.unwrap(),
77		AccountId::from_str("0x22c9f9d51022b7ad2204131e6268ab079c84bcdb44a4c6907affed5779da9c7b")
78			.unwrap(),
79		staging_sudo_key(),
80		// SDETs test accounts, keys are in e2e-tests/secrets
81		// negative-test
82		AccountId::from_str("5F1N52dZx48UpXNLtcCzSMHZEroqQDuYKfidg46Tp37SjPcE").unwrap(),
83		// faucet-0
84		AccountId::from_str("5C7C2Z5sWbytvHpuLTvzKunnnRwQxft1jiqrLD5rhucQ5S9X").unwrap(),
85	]
86}
87
88pub fn staging_sudo_key() -> AccountId {
89	get_account_id_from_seed::<sr25519::Public>(
90		"assist draw loud island six improve van gas slam urban penalty lyrics",
91	)
92}
93
94pub fn staging_config() -> Result<ChainSpec, envy::Error> {
95	Ok(ChainSpec::builder(runtime_wasm(), None)
96		.with_name("Staging")
97		.with_id("staging")
98		.with_chain_type(ChainType::Local)
99		.with_genesis_config(staging_genesis(
100			// Initial PoA authorities
101			staging_initial_authorities(),
102			// Sudo account
103			Some(staging_sudo_key()),
104			// Pre-funded accounts
105			staging_endowed_accounts(),
106			true,
107		)?)
108		.build())
109}
110
111/// Configure initial storage state for FRAME modules.
112pub fn staging_genesis(
113	initial_authorities: Vec<AuthorityKeys>,
114	root_key: Option<AccountId>,
115	endowed_accounts: Vec<AccountId>,
116	_enable_println: bool,
117) -> Result<serde_json::Value, envy::Error> {
118	let config = RuntimeGenesisConfig {
119		system: SystemConfig { ..Default::default() },
120		balances: BalancesConfig {
121			// Configure endowed accounts with initial balance of 1 << 60.
122			balances: endowed_accounts.iter().cloned().map(|k| (k, 1 << 60)).collect(),
123			dev_accounts: None,
124		},
125		aura: AuraConfig { authorities: vec![] },
126		grandpa: GrandpaConfig { authorities: vec![], ..Default::default() },
127		sudo: SudoConfig {
128			// Assign network admin rights.
129			key: root_key,
130		},
131		transaction_payment: Default::default(),
132		session: SessionConfig {
133			initial_validators: initial_authorities
134				.iter()
135				.map(|authority_keys| {
136					(authority_keys.cross_chain.clone().into(), authority_keys.session.clone())
137				})
138				.collect(),
139		},
140		sidechain: SidechainConfig {
141			genesis_utxo: sp_sidechain::read_genesis_utxo_from_env_with_defaults()?,
142			..Default::default()
143		},
144		pallet_session: Default::default(),
145		session_committee_management: SessionCommitteeManagementConfig {
146			initial_authorities: initial_authorities
147				.into_iter()
148				.map(|keys| CommitteeMember::permissioned(keys.cross_chain, keys.session))
149				.collect(),
150			main_chain_scripts: sp_session_validator_management::MainChainScripts::read_from_env()?,
151		},
152		native_token_management: NativeTokenManagementConfig {
153			main_chain_scripts: Some(sp_native_token_management::MainChainScripts::read_from_env()?),
154			..Default::default()
155		},
156		governed_map: GovernedMapConfig {
157			main_chain_scripts: Some(Default::default()),
158			..Default::default()
159		},
160		test_helper_pallet: TestHelperPalletConfig {
161			participation_data_release_period: 30,
162			..Default::default()
163		},
164	};
165
166	Ok(serde_json::to_value(config).expect("Genesis config must be serialized correctly"))
167}