subspace_test_client/
auto_id_domain_chain_spec.rs1use crate::chain_spec::get_from_seed;
4use auto_id_domain_test_runtime::{BalancesConfig, RuntimeGenesisConfig, SystemConfig};
5use domain_runtime_primitives::AccountIdConverter;
6use parity_scale_codec::Encode;
7use sc_chain_spec::{ChainType, GenericChainSpec, NoExtension};
8use sp_core::crypto::AccountId32;
9use sp_core::{sr25519, Pair, Public};
10use sp_domains::storage::RawGenesis;
11use sp_domains::{
12 DomainRuntimeConfig, GenesisDomain, OperatorAllowList, OperatorPublicKey, RuntimeType,
13};
14use sp_runtime::traits::{Convert, IdentifyAccount};
15use sp_runtime::{BuildStorage, MultiSigner, Percent};
16use subspace_runtime_primitives::{AccountId, Balance, SSC};
17
18pub(crate) fn get_public_key_from_seed<TPublic: Public>(
20 seed: &'static str,
21) -> <TPublic::Pair as Pair>::Public {
22 TPublic::Pair::from_string(&format!("//{seed}"), None)
23 .expect("Static values are valid; qed")
24 .public()
25}
26
27pub(crate) fn get_account_id_from_seed(seed: &'static str) -> AccountId32 {
29 MultiSigner::from(get_public_key_from_seed::<sr25519::Public>(seed)).into_account()
30}
31
32pub(crate) fn endowed_accounts() -> Vec<AccountId32> {
33 vec![
34 get_account_id_from_seed("Alice"),
35 get_account_id_from_seed("Bob"),
36 get_account_id_from_seed("Charlie"),
37 get_account_id_from_seed("Dave"),
38 get_account_id_from_seed("Eve"),
39 get_account_id_from_seed("Ferdie"),
40 get_account_id_from_seed("Alice//stash"),
41 get_account_id_from_seed("Bob//stash"),
42 get_account_id_from_seed("Charlie//stash"),
43 get_account_id_from_seed("Dave//stash"),
44 get_account_id_from_seed("Eve//stash"),
45 get_account_id_from_seed("Ferdie//stash"),
46 ]
47}
48
49fn testnet_auto_id_genesis() -> RuntimeGenesisConfig {
50 RuntimeGenesisConfig {
51 system: SystemConfig::default(),
52 balances: BalancesConfig::default(),
53 ..Default::default()
54 }
55}
56
57pub fn get_genesis_domain(
58 sudo_account: subspace_runtime_primitives::AccountId,
59) -> Result<GenesisDomain<AccountId, Balance>, String> {
60 let raw_genesis_storage = {
61 let domain_chain_spec = GenericChainSpec::<NoExtension, ()>::builder(
62 auto_id_domain_test_runtime::WASM_BINARY
63 .ok_or_else(|| "Development wasm not available".to_string())?,
64 None,
65 )
66 .with_chain_type(ChainType::Development)
67 .with_genesis_config(
68 serde_json::to_value(testnet_auto_id_genesis())
69 .map_err(|error| format!("Failed to serialize genesis config: {error}"))?,
70 )
71 .build();
72 let storage = domain_chain_spec
73 .build_storage()
74 .expect("Failed to build genesis storage from genesis runtime config");
75 let raw_genesis = RawGenesis::from_storage(storage);
76 raw_genesis.encode()
77 };
78
79 Ok(GenesisDomain {
80 runtime_name: "auto-id".to_owned(),
81 runtime_type: RuntimeType::AutoId,
82 runtime_version: auto_id_domain_test_runtime::VERSION,
83 raw_genesis_storage,
84
85 owner_account_id: sudo_account,
87 domain_name: "auto-id-domain".to_owned(),
88 bundle_slot_probability: (1, 1),
89 operator_allow_list: OperatorAllowList::Anyone,
90
91 signing_key: get_from_seed::<OperatorPublicKey>("Bob"),
92 minimum_nominator_stake: 100 * SSC,
93 nomination_tax: Percent::from_percent(5),
94 initial_balances: endowed_accounts()
95 .iter()
96 .cloned()
97 .map(|k| (AccountIdConverter::convert(k), 2_000_000 * SSC))
98 .collect(),
99
100 domain_runtime_config: DomainRuntimeConfig::default_auto_id(),
101 })
102}