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.
This commit is contained in:
Luke Parker 2023-10-13 00:04:28 -04:00
parent 6a4c57e86f
commit 0712e6f107
No known key found for this signature in database
2 changed files with 15 additions and 10 deletions

View file

@ -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() },

View file

@ -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);
}