snarkvm_ledger_block/ratify/
mod.rsmod bytes;
mod serialize;
mod string;
use console::{network::prelude::*, types::Address};
use ledger_committee::Committee;
use indexmap::IndexMap;
type Variant = u8;
type PublicBalances<N> = IndexMap<Address<N>, u64>;
type BondedBalances<N> = IndexMap<Address<N>, (Address<N>, Address<N>, u64)>;
#[derive(Clone, PartialEq, Eq)]
pub enum Ratify<N: Network> {
Genesis(Box<Committee<N>>, Box<PublicBalances<N>>, Box<BondedBalances<N>>),
BlockReward(u64),
PuzzleReward(u64),
}
impl<N: Network> Ratify<N> {
pub fn to_id(&self) -> Result<N::RatificationID> {
Ok(N::hash_bhp1024(&self.to_bytes_le()?.to_bits_le())?.into())
}
}
#[cfg(test)]
pub(crate) mod test_helpers {
use super::*;
use console::network::MainnetV0;
type CurrentNetwork = MainnetV0;
pub(crate) fn sample_ratifications(rng: &mut TestRng) -> Vec<Ratify<CurrentNetwork>> {
let committee = ledger_committee::test_helpers::sample_committee(rng);
let mut public_balances = PublicBalances::new();
for (address, _) in committee.members().iter() {
public_balances.insert(*address, rng.gen());
}
let bonded_balances = committee
.members()
.iter()
.map(|(address, (amount, _, _))| (*address, (*address, *address, *amount)))
.collect();
vec![
Ratify::Genesis(Box::new(committee), Box::new(public_balances), Box::new(bonded_balances)),
Ratify::BlockReward(rng.gen()),
Ratify::PuzzleReward(rng.gen()),
]
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn check_ratify_size() {
assert_eq!(std::mem::size_of::<Ratify<console::network::MainnetV0>>(), 32);
}
}