From 0712e6f10776703d01603a7c81e546e342ad6d46 Mon Sep 17 00:00:00 2001 From: Luke Parker <lukeparker5132@gmail.com> Date: Fri, 13 Oct 2023 00:04:28 -0400 Subject: [PATCH] Localize stake into networks Sets a stake requirement of 100k for Serai and Monero, as Serai doesn't have stake requirements and Monero isn't expected to see as much volume/institutional support as Bitcoin/Ethereum. --- substrate/node/src/chain_spec.rs | 11 +++++++++-- substrate/validator-sets/pallet/src/lib.rs | 14 ++++++-------- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/substrate/node/src/chain_spec.rs b/substrate/node/src/chain_spec.rs index 32c32d03..0e5c0a77 100644 --- a/substrate/node/src/chain_spec.rs +++ b/substrate/node/src/chain_spec.rs @@ -55,8 +55,15 @@ fn testnet_genesis( }, validator_sets: ValidatorSetsConfig { - stake: Amount(1_000_000 * 10_u64.pow(8)), - networks: serai_runtime::primitives::NETWORKS.to_vec(), + networks: serai_runtime::primitives::NETWORKS + .iter() + .map(|network| match network { + NetworkId::Serai => (NetworkId::Serai, Amount(100_000 * 10_u64.pow(8))), + NetworkId::Bitcoin => (NetworkId::Bitcoin, Amount(1_000_000 * 10_u64.pow(8))), + NetworkId::Ethereum => (NetworkId::Bitcoin, Amount(1_000_000 * 10_u64.pow(8))), + NetworkId::Monero => (NetworkId::Bitcoin, Amount(100_000 * 10_u64.pow(8))), + }) + .collect(), participants: validators.iter().map(|name| account_from_name(name)).collect(), }, session: SessionConfig { keys: validators.iter().map(|name| session_key(*name)).collect() }, diff --git a/substrate/validator-sets/pallet/src/lib.rs b/substrate/validator-sets/pallet/src/lib.rs index fa20632f..2927e1a7 100644 --- a/substrate/validator-sets/pallet/src/lib.rs +++ b/substrate/validator-sets/pallet/src/lib.rs @@ -29,13 +29,12 @@ pub mod pallet { #[derive(Clone, PartialEq, Eq, Debug, Encode, Decode)] pub struct GenesisConfig<T: Config> { /// Stake requirement to join the initial validator sets. + + /// Networks to spawn Serai with, and the stake requirement per key share. /// /// Every participant at genesis will automatically be assumed to have this much stake. /// This stake cannot be withdrawn however as there's no actual stake behind it. - // TODO: Localize stake to network - pub stake: Amount, - /// Networks to spawn Serai with. - pub networks: Vec<NetworkId>, + pub networks: Vec<(NetworkId, Amount)>, /// List of participants to place in the initial validator sets. pub participants: Vec<T::AccountId>, } @@ -43,7 +42,6 @@ pub mod pallet { impl<T: Config> Default for GenesisConfig<T> { fn default() -> Self { GenesisConfig { - stake: Amount(1), networks: Default::default(), participants: Default::default(), } @@ -327,10 +325,10 @@ pub mod pallet { } } - for id in self.networks.clone() { - AllocationPerKeyShare::<T>::set(id, Some(self.stake)); + for (id, stake) in self.networks.clone() { + AllocationPerKeyShare::<T>::set(id, Some(stake)); for participant in self.participants.clone() { - Pallet::<T>::set_allocation(id, participant, self.stake); + Pallet::<T>::set_allocation(id, participant, stake); } Pallet::<T>::new_set(id); }