partner_chains_demo_node/
chain_spec.rs

1use partner_chains_cli::CreateChainSpecConfig;
2use partner_chains_demo_runtime::{
3	AccountId, CrossChainPublic, Signature, WASM_BINARY, opaque::SessionKeys,
4};
5use sc_service::ChainType;
6use sidechain_slots::SlotsPerEpoch;
7use sp_core::{Pair, Public};
8use sp_runtime::traits::{IdentifyAccount, Verify};
9
10pub type ChainSpec = sc_service::GenericChainSpec;
11
12#[derive(Clone, Debug, PartialEq)]
13pub struct AuthorityKeys {
14	pub session: SessionKeys,
15	pub cross_chain: CrossChainPublic,
16}
17
18/// Generate a crypto pair from seed.
19pub fn get_from_seed<TPublic: Public>(seed: &str) -> <TPublic::Pair as Pair>::Public {
20	TPublic::Pair::from_string(seed, None)
21		.expect("static values are valid; qed")
22		.public()
23}
24
25type AccountPublic = <Signature as Verify>::Signer;
26
27pub fn get_account_id_from_seed<TPublic: Public>(seed: &str) -> AccountId
28where
29	AccountPublic: From<<TPublic::Pair as Pair>::Public>,
30{
31	AccountPublic::from(get_from_seed::<TPublic>(seed)).into_account()
32}
33
34pub fn runtime_wasm() -> &'static [u8] {
35	WASM_BINARY.expect("Runtime wasm not available")
36}
37
38/// Creates chain-spec according to the config obtained by wizards.
39/// [serde_json::Value] is returned instead of [sc_service::GenericChainSpec] in order to avoid
40/// GPL code in the toolkit.
41pub fn pc_create_chain_spec(config: &CreateChainSpecConfig<SessionKeys>) -> serde_json::Value {
42	let runtime_genesis_config = partner_chains_demo_runtime::RuntimeGenesisConfig {
43		system: partner_chains_demo_runtime::SystemConfig::default(),
44		balances: partner_chains_demo_runtime::BalancesConfig::default(),
45		aura: partner_chains_demo_runtime::AuraConfig::default(),
46		grandpa: partner_chains_demo_runtime::GrandpaConfig::default(),
47		sudo: partner_chains_demo_runtime::SudoConfig::default(),
48		transaction_payment: Default::default(),
49		session: config.pallet_partner_chains_session_config(),
50		sidechain: config.pallet_sidechain_config(SlotsPerEpoch::default()),
51		pallet_session: Default::default(),
52		session_committee_management: config.pallet_session_validator_management_config(),
53		native_token_management: config.native_token_management_config(),
54		governed_map: config.governed_map_config(),
55		test_helper_pallet: partner_chains_demo_runtime::TestHelperPalletConfig {
56			participation_data_release_period: 30,
57			..Default::default()
58		},
59	};
60	let genesis_json = serde_json::to_value(runtime_genesis_config)
61		.expect("Genesis config must be serialized correctly");
62	let chain_spec = ChainSpec::builder(runtime_wasm(), None)
63		.with_name("Partner Chains Demo")
64		.with_id("partner_chains_demo")
65		.with_chain_type(ChainType::Live)
66		.with_genesis_config(genesis_json)
67		.build();
68	let raw = false;
69	let chain_spec_str = chain_spec.as_json(raw).expect("Chain spec serialization can not fail");
70	serde_json::from_str(&chain_spec_str).unwrap()
71}