partner_chains_demo_node/
testnet.rs

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