From e32ca70fd55aef99f728fae35a001b20960f26b5 Mon Sep 17 00:00:00 2001 From: eNDdy Date: Thu, 29 Aug 2024 13:19:02 -0600 Subject: [PATCH] change --- .../service/src/chain_spec/frequency_paseo.rs | 104 +----------- runtime/frequency/src/development_genesis.rs | 157 ++++++++++++++++++ .../frequency/src/genesis_config_presets.rs | 10 +- runtime/frequency/src/lib.rs | 1 + runtime/frequency/src/paseo_genesis.rs | 150 +++++++++++++++++ 5 files changed, 318 insertions(+), 104 deletions(-) create mode 100644 runtime/frequency/src/development_genesis.rs create mode 100644 runtime/frequency/src/paseo_genesis.rs diff --git a/node/service/src/chain_spec/frequency_paseo.rs b/node/service/src/chain_spec/frequency_paseo.rs index 20997aeb20..9c7c14b01d 100644 --- a/node/service/src/chain_spec/frequency_paseo.rs +++ b/node/service/src/chain_spec/frequency_paseo.rs @@ -68,108 +68,6 @@ pub fn local_paseo_testnet_config() -> ChainSpec { .with_protocol_id("frequency-paseo-local") .with_properties(properties) .with_chain_type(ChainType::Local) - .with_genesis_config(testnet_genesis( - // initial collators. - vec![ - ( - get_account_id_from_seed::("Alice"), - get_collator_keys_from_seed("Alice"), - ), - ( - get_account_id_from_seed::("Bob"), - get_collator_keys_from_seed("Bob"), - ), - ], - // Sudo - Some(get_account_id_from_seed::("Alice")), - // Endowed Accounts - vec![ - get_account_id_from_seed::("Alice"), - get_account_id_from_seed::("Bob"), - get_account_id_from_seed::("Charlie"), - get_account_id_from_seed::("Dave"), - get_account_id_from_seed::("Eve"), - get_account_id_from_seed::("Ferdie"), - get_account_id_from_seed::("Alice//stash"), - get_account_id_from_seed::("Bob//stash"), - get_account_id_from_seed::("Charlie//stash"), - get_account_id_from_seed::("Dave//stash"), - get_account_id_from_seed::("Eve//stash"), - get_account_id_from_seed::("Ferdie//stash"), - common_runtime::constants::TREASURY_PALLET_ID.into_account_truncating(), - ], - // Council members - vec![ - get_account_id_from_seed::("Alice"), - get_account_id_from_seed::("Charlie"), - get_account_id_from_seed::("Eve"), - ], - // Technical Committee members - vec![ - get_account_id_from_seed::("Bob"), - get_account_id_from_seed::("Dave"), - ], - // ParaId - 2000.into(), - )) + .with_genesis_config_preset_name("paseo-testnet") .build() } - -#[allow(clippy::unwrap_used)] -fn testnet_genesis( - invulnerables: Vec<(AccountId, AuraId)>, - root_key: Option, - endowed_accounts: Vec, - council_members: Vec, - technical_committee_members: Vec, - id: ParaId, -) -> serde_json::Value { - let genesis = frequency_runtime::RuntimeGenesisConfig { - system: frequency_runtime::SystemConfig { ..Default::default() }, - balances: frequency_runtime::BalancesConfig { - balances: endowed_accounts.iter().cloned().map(|k| (k, 1 << 60)).collect(), - }, - parachain_info: frequency_runtime::ParachainInfoConfig { - parachain_id: id, - ..Default::default() - }, - collator_selection: frequency_runtime::CollatorSelectionConfig { - invulnerables: invulnerables.iter().cloned().map(|(acc, _)| acc).collect(), - candidacy_bond: EXISTENTIAL_DEPOSIT * 16, - ..Default::default() - }, - session: frequency_runtime::SessionConfig { - keys: invulnerables - .into_iter() - .map(|(acc, aura)| { - ( - acc.clone(), // account id - acc, // validator id - template_session_keys(aura), // session keys - ) - }) - .collect(), - }, - // no need to pass anything to aura, in fact it will panic if we do. Session will take care - // of this. - aura: Default::default(), - aura_ext: Default::default(), - #[cfg(any(not(feature = "frequency-no-relay"), feature = "frequency-lint-check"))] - parachain_system: Default::default(), - sudo: SudoConfig { - // Assign network admin rights. - key: root_key, - }, - schemas: Default::default(), - time_release: Default::default(), - democracy: Default::default(), - treasury: Default::default(), - council: CouncilConfig { phantom: Default::default(), members: council_members }, - technical_committee: TechnicalCommitteeConfig { - phantom: Default::default(), - members: technical_committee_members, - }, - }; - - serde_json::to_value(&genesis).unwrap() -} diff --git a/runtime/frequency/src/development_genesis.rs b/runtime/frequency/src/development_genesis.rs new file mode 100644 index 0000000000..4d504214b3 --- /dev/null +++ b/runtime/frequency/src/development_genesis.rs @@ -0,0 +1,157 @@ +use common_primitives::node::Verify; +use cumulus_primitives_core::ParaId; +use sp_core::{sr25519, Pair, Public}; +use sp_runtime::traits::IdentifyAccount; +#[cfg(not(feature = "std"))] +use sp_std::alloc::format; + +use crate::*; +// Generate the session keys from individual elements. +// +// The input must be a tuple of individual keys (a single arg for now since we have just one key). +fn template_session_keys(keys: AuraId) -> SessionKeys { + SessionKeys { aura: keys } +} + +#[allow(clippy::unwrap_used)] +fn load_genesis_schemas() -> Vec { + serde_json::from_slice(include_bytes!("../../../resources/genesis-schemas.json")).unwrap() +} + +type AccountPublic = ::Signer; + +#[allow(clippy::unwrap_used)] +pub fn development_genesis( + invulnerables: Vec<(AccountId, AuraId)>, + root_key: AccountId, + endowed_accounts: Vec, + council_members: Vec, + technical_committee_members: Vec, + id: ParaId, +) -> serde_json::Value { + let genesis = RuntimeGenesisConfig { + system: Default::default(), + balances: BalancesConfig { + balances: endowed_accounts.iter().cloned().map(|k| (k, 1 << 60)).collect(), + }, + parachain_info: ParachainInfoConfig { parachain_id: id, ..Default::default() }, + collator_selection: CollatorSelectionConfig { + invulnerables: invulnerables.iter().cloned().map(|(acc, _)| acc).collect(), + candidacy_bond: EXISTENTIAL_DEPOSIT * 16, + ..Default::default() + }, + session: SessionConfig { + keys: invulnerables + .into_iter() + .map(|(acc, aura)| { + ( + acc.clone(), // account id + acc, // validator id + template_session_keys(aura), // session keys + ) + }) + .collect(), + }, + // no need to pass anything to aura, in fact it will panic if we do. Session will take care + // of this. + aura: Default::default(), + aura_ext: Default::default(), + #[cfg(any(not(feature = "frequency-no-relay"), feature = "frequency-lint-check"))] + parachain_system: Default::default(), + sudo: SudoConfig { + // Assign network admin rights. + key: Some(root_key), + }, + schemas: crate::pallet_schemas::GenesisConfig { + initial_schemas: load_genesis_schemas(), + ..Default::default() + }, + time_release: Default::default(), + democracy: Default::default(), + treasury: Default::default(), + council: CouncilConfig { phantom: Default::default(), members: council_members }, + technical_committee: TechnicalCommitteeConfig { + phantom: Default::default(), + members: technical_committee_members, + }, + }; + + serde_json::to_value(&genesis).unwrap() +} + +pub fn development_endowed_accounts() -> Vec { + vec![ + get_account_id_from_seed::("Alice"), + get_account_id_from_seed::("Bob"), + get_account_id_from_seed::("Charlie"), + get_account_id_from_seed::("Dave"), + get_account_id_from_seed::("Eve"), + get_account_id_from_seed::("Ferdie"), + get_account_id_from_seed::("Alice//stash"), + get_account_id_from_seed::("Bob//stash"), + get_account_id_from_seed::("Charlie//stash"), + get_account_id_from_seed::("Dave//stash"), + get_account_id_from_seed::("Eve//stash"), + get_account_id_from_seed::("Ferdie//stash"), + common_runtime::constants::TREASURY_PALLET_ID.into_account_truncating(), + ] +} + +pub fn development_invulnerables() -> Vec<(AccountId, AuraId)> { + vec![ + ( + get_account_id_from_seed::("Alice"), + get_collator_keys_from_seed("Alice"), + ), + (get_account_id_from_seed::("Bob"), get_collator_keys_from_seed("Bob")), + ] +} + +pub fn development_root() -> AccountId { + get_account_id_from_seed::("Alice") +} + +pub fn development_council_members() -> Vec { + vec![ + get_account_id_from_seed::("Alice"), + get_account_id_from_seed::("Charlie"), + get_account_id_from_seed::("Eve"), + ] +} + +pub fn development_technical_committee_members() -> Vec { + vec![ + get_account_id_from_seed::("Bob"), + get_account_id_from_seed::("Dave"), + ] +} + +/// Helper function to generate a crypto pair from seed +pub fn get_from_seed(seed: &str) -> ::Public { + TPublic::Pair::from_string(&format!("//{}", seed), None) + .expect("static values are valid; qed") + .public() +} + +/// Helper function to generate an account ID from seed +pub fn get_account_id_from_seed(seed: &str) -> AccountId +where + AccountPublic: From<::Public>, +{ + AccountPublic::from(get_from_seed::(seed)).into_account() +} + +/// Generate collator keys from seed. +/// +/// This function's return type must always match the session keys of the chain in tuple format. +pub fn get_collator_keys_from_seed(seed: &str) -> AuraId { + get_public_from_seed::(seed) +} + +#[allow(clippy::expect_used)] +/// Helper function to generate a crypto pair from seed +pub fn get_public_from_seed(seed: &str) -> ::Public { + TPublic::Pair::from_string(&format!("//{}", seed), None) + .expect("static values are valid; qed") + .public() +} diff --git a/runtime/frequency/src/genesis_config_presets.rs b/runtime/frequency/src/genesis_config_presets.rs index ddf1896489..6d3e7f277d 100644 --- a/runtime/frequency/src/genesis_config_presets.rs +++ b/runtime/frequency/src/genesis_config_presets.rs @@ -1,4 +1,4 @@ -use crate::development_genesis::*; +use crate::{development_genesis::*, paseo_genesis::*}; /// Provides the JSON representation of predefined genesis config for given `id`. pub fn get_preset(id: &sp_genesis_builder::PresetId) -> Option> { let patch = match id.try_into() { @@ -10,6 +10,14 @@ pub fn get_preset(id: &sp_genesis_builder::PresetId) -> Option paseo_testnet_genesis( + paseo_invulnerables(), + paseo_root(), + paseo_endowed_accounts(), + paseo_council_members(), + paseo_technical_committee_members(), + 2000.into(), + ), _ => return None, }; Some( diff --git a/runtime/frequency/src/lib.rs b/runtime/frequency/src/lib.rs index 2938e77e75..99a9bcff06 100644 --- a/runtime/frequency/src/lib.rs +++ b/runtime/frequency/src/lib.rs @@ -28,6 +28,7 @@ use sp_runtime::{ pub mod development_genesis; pub mod genesis_config_presets; +pub mod paseo_genesis; use pallet_collective::Members; diff --git a/runtime/frequency/src/paseo_genesis.rs b/runtime/frequency/src/paseo_genesis.rs new file mode 100644 index 0000000000..b77528f182 --- /dev/null +++ b/runtime/frequency/src/paseo_genesis.rs @@ -0,0 +1,150 @@ +use common_primitives::node::Verify; +use cumulus_primitives_core::ParaId; +use sp_core::{sr25519, Pair, Public}; +use sp_runtime::traits::IdentifyAccount; +#[cfg(not(feature = "std"))] +use sp_std::alloc::format; + +use crate::*; + +type AccountPublic = ::Signer; + +#[allow(clippy::unwrap_used)] +pub fn paseo_testnet_genesis( + invulnerables: Vec<(AccountId, AuraId)>, + root_key: Option, + endowed_accounts: Vec, + council_members: Vec, + technical_committee_members: Vec, + id: ParaId, +) -> serde_json::Value { + let genesis = RuntimeGenesisConfig { + system: SystemConfig { ..Default::default() }, + balances: BalancesConfig { + balances: endowed_accounts.iter().cloned().map(|k| (k, 1 << 60)).collect(), + }, + parachain_info: ParachainInfoConfig { parachain_id: id, ..Default::default() }, + collator_selection: CollatorSelectionConfig { + invulnerables: invulnerables.iter().cloned().map(|(acc, _)| acc).collect(), + candidacy_bond: EXISTENTIAL_DEPOSIT * 16, + ..Default::default() + }, + session: SessionConfig { + keys: invulnerables + .into_iter() + .map(|(acc, aura)| { + ( + acc.clone(), // account id + acc, // validator id + template_session_keys(aura), // session keys + ) + }) + .collect(), + }, + // no need to pass anything to aura, in fact it will panic if we do. Session will take care + // of this. + aura: Default::default(), + aura_ext: Default::default(), + #[cfg(any(not(feature = "frequency-no-relay"), feature = "frequency-lint-check"))] + parachain_system: Default::default(), + sudo: SudoConfig { + // Assign network admin rights. + key: root_key, + }, + schemas: Default::default(), + time_release: Default::default(), + democracy: Default::default(), + treasury: Default::default(), + council: CouncilConfig { phantom: Default::default(), members: council_members }, + technical_committee: TechnicalCommitteeConfig { + phantom: Default::default(), + members: technical_committee_members, + }, + }; + + serde_json::to_value(&genesis).unwrap() +} + +pub fn paseo_invulnerables() -> Vec<(AccountId, AuraId)> { + vec![ + ( + get_account_id_from_seed::("Alice"), + get_collator_keys_from_seed("Alice"), + ), + (get_account_id_from_seed::("Bob"), get_collator_keys_from_seed("Bob")), + ] +} + +pub fn paseo_root() -> Option { + Some(get_account_id_from_seed::("Alice")) +} + +pub fn paseo_endowed_accounts() -> Vec { + vec![ + get_account_id_from_seed::("Alice"), + get_account_id_from_seed::("Bob"), + get_account_id_from_seed::("Charlie"), + get_account_id_from_seed::("Dave"), + get_account_id_from_seed::("Eve"), + get_account_id_from_seed::("Ferdie"), + get_account_id_from_seed::("Alice//stash"), + get_account_id_from_seed::("Bob//stash"), + get_account_id_from_seed::("Charlie//stash"), + get_account_id_from_seed::("Dave//stash"), + get_account_id_from_seed::("Eve//stash"), + get_account_id_from_seed::("Ferdie//stash"), + common_runtime::constants::TREASURY_PALLET_ID.into_account_truncating(), + ] +} + +pub fn paseo_council_members() -> Vec { + vec![ + get_account_id_from_seed::("Alice"), + get_account_id_from_seed::("Charlie"), + get_account_id_from_seed::("Eve"), + ] +} + +pub fn paseo_technical_committee_members() -> Vec { + vec![ + get_account_id_from_seed::("Bob"), + get_account_id_from_seed::("Dave"), + ] +} + +/// Helper function to generate an account ID from seed +pub fn get_account_id_from_seed(seed: &str) -> AccountId +where + AccountPublic: From<::Public>, +{ + AccountPublic::from(get_from_seed::(seed)).into_account() +} + +/// Generate collator keys from seed. +/// +/// This function's return type must always match the session keys of the chain in tuple format. +pub fn get_collator_keys_from_seed(seed: &str) -> AuraId { + get_public_from_seed::(seed) +} + +#[allow(clippy::expect_used)] +/// Helper function to generate a crypto pair from seed +pub fn get_public_from_seed(seed: &str) -> ::Public { + TPublic::Pair::from_string(&format!("//{}", seed), None) + .expect("static values are valid; qed") + .public() +} + +/// Helper function to generate a crypto pair from seed +pub fn get_from_seed(seed: &str) -> ::Public { + TPublic::Pair::from_string(&format!("//{}", seed), None) + .expect("static values are valid; qed") + .public() +} + +// Generate the session keys from individual elements. +// +// The input must be a tuple of individual keys (a single arg for now since we have just one key). +fn template_session_keys(keys: AuraId) -> SessionKeys { + SessionKeys { aura: keys } +}