partner_chains_demo_node/
staging.rs

1use crate::chain_spec::get_account_id_from_seed;
2use crate::chain_spec::*;
3use partner_chains_demo_runtime::{
4	AccountId, AuraConfig, BalancesConfig, BridgeConfig, GovernedMapConfig, GrandpaConfig,
5	RuntimeGenesisConfig, SessionCommitteeManagementConfig, SessionConfig, SidechainConfig,
6	SudoConfig, SystemConfig, TestHelperPalletConfig,
7};
8use sc_service::{ChainType, Properties};
9use sidechain_domain::*;
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 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		.with_properties({
109			let mut properties = Properties::new();
110			properties.insert("tokenSymbol".into(), "UNIT".into());
111			properties.insert("tokenDecimals".into(), 12.into());
112			properties.insert("ss58Format".into(), 42.into());
113			properties
114		})
115		.build())
116}
117
118/// Configure initial storage state for FRAME modules.
119pub fn staging_genesis(
120	initial_authorities: Vec<AuthorityKeys>,
121	root_key: Option<AccountId>,
122	endowed_accounts: Vec<AccountId>,
123	_enable_println: bool,
124) -> Result<serde_json::Value, envy::Error> {
125	let genesis_utxo = sp_sidechain::read_genesis_utxo_from_env_with_defaults()?;
126	let config = RuntimeGenesisConfig {
127		system: SystemConfig { ..Default::default() },
128		balances: BalancesConfig {
129			// Configure endowed accounts with initial balance of 1 << 60.
130			balances: endowed_accounts.iter().cloned().map(|k| (k, 1 << 60)).collect(),
131			dev_accounts: None,
132		},
133		aura: AuraConfig { authorities: vec![] },
134		grandpa: GrandpaConfig { authorities: vec![], ..Default::default() },
135		sudo: SudoConfig {
136			// Assign network admin rights.
137			key: root_key,
138		},
139		transaction_payment: Default::default(),
140		session: SessionConfig {
141			keys: initial_authorities
142				.iter()
143				.map(|authority_keys| {
144					(
145						authority_keys.cross_chain.clone().into(),
146						authority_keys.cross_chain.clone().into(),
147						authority_keys.session.clone(),
148					)
149				})
150				.collect(),
151			non_authority_keys: Default::default(),
152		},
153		sidechain: SidechainConfig { genesis_utxo, ..Default::default() },
154		session_committee_management: SessionCommitteeManagementConfig {
155			initial_authorities: initial_authorities
156				.into_iter()
157				.map(|keys| CommitteeMember::permissioned(keys.cross_chain, keys.session))
158				.collect(),
159			main_chain_scripts: sp_session_validator_management::MainChainScripts::read_from_env()?,
160		},
161		governed_map: GovernedMapConfig {
162			main_chain_scripts: Some(sp_governed_map::MainChainScriptsV1::read_from_env()?),
163			..Default::default()
164		},
165		test_helper_pallet: TestHelperPalletConfig {
166			participation_data_release_period: 30,
167			..Default::default()
168		},
169		bridge: BridgeConfig {
170			main_chain_scripts: Some(sp_partner_chains_bridge::MainChainScripts::read_from_env()?),
171			initial_checkpoint: Some(genesis_utxo),
172			..Default::default()
173		},
174	};
175
176	Ok(serde_json::to_value(config).expect("Genesis config must be serialized correctly"))
177}