Skip to content

Commit

Permalink
Localize stake into networks
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
kayabaNerve committed Oct 13, 2023
1 parent 6a4c57e commit 0712e6f
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 10 deletions.
11 changes: 9 additions & 2 deletions substrate/node/src/chain_spec.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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() },
Expand Down
14 changes: 6 additions & 8 deletions substrate/validator-sets/pallet/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -29,21 +29,19 @@ 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>,
}

impl<T: Config> Default for GenesisConfig<T> {
fn default() -> Self {
GenesisConfig {
stake: Amount(1),
networks: Default::default(),
participants: Default::default(),
}
Expand Down Expand Up @@ -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);
}
Expand Down

0 comments on commit 0712e6f

Please sign in to comment.