partner_chains_demo_node/
chain_spec.rs1use partner_chains_cli::CreateChainSpecConfig;
2use partner_chains_demo_runtime::{
3 AccountId, CrossChainPublic, SessionConfig, 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
18pub 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
38pub 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: SessionConfig {
50 keys: config
51 .initial_permissioned_candidates_parsed
52 .iter()
53 .map(|authority_keys| {
54 (
55 authority_keys.account_id_32().into(),
56 authority_keys.account_id_32().into(),
57 authority_keys.keys.clone(),
58 )
59 })
60 .collect(),
61 non_authority_keys: vec![],
62 },
63 sidechain: config.pallet_sidechain_config(SlotsPerEpoch::default()),
64 session_committee_management: config.pallet_session_validator_management_config(),
65 governed_map: config.governed_map_config(),
66 test_helper_pallet: partner_chains_demo_runtime::TestHelperPalletConfig {
67 participation_data_release_period: 30,
68 ..Default::default()
69 },
70 bridge: config.bridge_config(),
71 };
72 let genesis_json = serde_json::to_value(runtime_genesis_config)
73 .expect("Genesis config must be serialized correctly");
74 let chain_spec = ChainSpec::builder(runtime_wasm(), None)
75 .with_name("Partner Chains Demo")
76 .with_id("partner_chains_demo")
77 .with_chain_type(ChainType::Live)
78 .with_genesis_config(genesis_json)
79 .with_boot_nodes(config.bootnodes.iter().map(|bn| bn.parse().unwrap()).collect())
80 .build();
81 let raw = false;
82 let chain_spec_str = chain_spec.as_json(raw).expect("Chain spec serialization can not fail");
83 serde_json::from_str(&chain_spec_str).unwrap()
84}