runtime_eden/
genesis_config_presets.rsuse crate::{
constants::{EXISTENTIAL_DEPOSIT, NODL},
AuraId, SessionKeys,
};
use cumulus_primitives_core::ParaId;
use primitives::{AccountId, Balance, Signature};
use sp_core::{sr25519, Pair, Public};
use sp_runtime::traits::{IdentifyAccount, Verify};
#[cfg(not(feature = "std"))]
use sp_std::alloc::format;
use sp_std::vec;
use sp_std::vec::Vec;
type AccountPublic = <Signature as Verify>::Signer;
fn get_from_seed<TPublic: Public>(seed: &str) -> <TPublic::Pair as Pair>::Public {
TPublic::Pair::from_string(&format!("//{}", seed), None)
.expect("static values are valid; qed")
.public()
}
fn get_account_id_from_seed<TPublic: Public>(seed: &str) -> AccountId
where
AccountPublic: From<<TPublic::Pair as Pair>::Public>,
{
AccountPublic::from(get_from_seed::<TPublic>(seed)).into_account()
}
fn testnet_accounts() -> Vec<AccountId> {
Vec::from([
get_account_id_from_seed::<sr25519::Public>("Alice"),
get_account_id_from_seed::<sr25519::Public>("Bob"),
get_account_id_from_seed::<sr25519::Public>("Charlie"),
get_account_id_from_seed::<sr25519::Public>("Dave"),
get_account_id_from_seed::<sr25519::Public>("Eve"),
get_account_id_from_seed::<sr25519::Public>("Ferdie"),
get_account_id_from_seed::<sr25519::Public>("Alice//stash"),
get_account_id_from_seed::<sr25519::Public>("Bob//stash"),
get_account_id_from_seed::<sr25519::Public>("Charlie//stash"),
get_account_id_from_seed::<sr25519::Public>("Dave//stash"),
get_account_id_from_seed::<sr25519::Public>("Eve//stash"),
get_account_id_from_seed::<sr25519::Public>("Ferdie//stash"),
])
}
pub fn eden_session_keys(keys: AuraId) -> SessionKeys {
SessionKeys { aura: keys }
}
fn eden_testnet_genesis(
root_key: Vec<AccountId>,
collators: Vec<(AccountId, AuraId)>,
endowed_accounts: Option<Vec<AccountId>>,
id: ParaId,
) -> serde_json::Value {
const ENDOWMENT: Balance = 10_000 * NODL;
let endowed_accounts: Vec<AccountId> = endowed_accounts.unwrap_or_else(testnet_accounts);
serde_json::json!({
"balances": {
"balances": endowed_accounts.iter().cloned().map(|k| (k, ENDOWMENT)).collect::<Vec<_>>(),
},
"collatorSelection": {
"invulnerables": collators.iter().cloned().map(|(acc, _)| acc).collect::<Vec<_>>(),
"candidacyBond": EXISTENTIAL_DEPOSIT * 16,
"desiredCandidates": 0
},
"session": {
"keys": collators
.into_iter()
.map(|(acc, aura)| {
(
acc.clone(), acc, eden_session_keys(aura), )
})
.collect::<Vec<_>>(),
},
"parachainInfo": {
"parachainId": id,
},
"technicalMembership": {
"members": root_key,
},
"polkadotXcm": {
"safeXcmVersion": Some(xcm::latest::VERSION),
},
})
}
pub fn development_config_genesis(id: ParaId) -> serde_json::Value {
#[cfg(feature = "runtime-benchmarks")]
let collators = vec![];
#[cfg(not(feature = "runtime-benchmarks"))]
let collators = vec![
(
get_account_id_from_seed::<sr25519::Public>("Alice"),
get_from_seed::<AuraId>("Alice"),
),
(
get_account_id_from_seed::<sr25519::Public>("Bob"),
get_from_seed::<AuraId>("Bob"),
),
];
eden_testnet_genesis(
vec![get_account_id_from_seed::<sr25519::Public>("Alice")],
collators,
None,
id,
)
}
pub fn get_preset(id: &sp_genesis_builder::PresetId) -> Option<sp_std::vec::Vec<u8>> {
let patch = match id.try_into() {
Ok("development") => development_config_genesis(2026.into()),
_ => return None,
};
Some(
serde_json::to_string(&patch)
.expect("serialization to json is expected to work. qed.")
.into_bytes(),
)
}