massa_pos_exports/
pos_changes.rs1use crate::{DeferredCredits, ProductionStats};
2use bitvec::prelude::*;
3use massa_models::{address::Address, prehash::PreHashMap};
4use serde::{Deserialize, Serialize};
5
6#[derive(Debug, Clone, Deserialize, Serialize, Default)]
8pub struct PoSChanges {
9 pub seed_bits: BitVec<u8>,
11
12 pub roll_changes: PreHashMap<Address, u64>,
14
15 pub production_stats: PreHashMap<Address, ProductionStats>,
17
18 pub deferred_credits: DeferredCredits,
21}
22
23impl PoSChanges {
24 pub fn is_empty(&self) -> bool {
26 self.seed_bits.is_empty()
27 && self.roll_changes.is_empty()
28 && self.production_stats.is_empty()
29 && self.deferred_credits.credits.is_empty()
30 }
31
32 pub fn extend(&mut self, other: PoSChanges) {
34 self.seed_bits.extend(other.seed_bits);
36
37 self.roll_changes.extend(other.roll_changes);
39
40 for (other_addr, other_stats) in other.production_stats {
42 self.production_stats
43 .entry(other_addr)
44 .or_default()
45 .extend(&other_stats);
46 }
47
48 self.deferred_credits.extend(other.deferred_credits);
50 }
51}