use crate::types::{ArchivedSlashingsDiff, SlashingsDiff, SLOTS_PER_EPOCH};
pub fn diff_slashings(
base_slot: u64,
target_slot: u64,
base_buffer: &[u64],
target_buffer: &[u64],
) -> SlashingsDiff {
let base_epoch = base_slot / SLOTS_PER_EPOCH;
let target_epoch = target_slot / SLOTS_PER_EPOCH;
let modulus = base_buffer.len() as u64;
let mut updates = Vec::new();
let mut current_epoch = base_epoch;
while current_epoch < target_epoch {
current_epoch += 1;
let idx = (current_epoch % modulus) as u16;
let base_val = base_buffer[idx as usize];
let target_val = target_buffer[idx as usize];
if base_val != target_val {
updates.push((idx, target_val));
}
}
SlashingsDiff { updates }
}
pub fn apply_slashings(base_buffer: &mut [u64], delta: &ArchivedSlashingsDiff) {
for update in delta.updates.iter() {
let idx = update.0.to_native() as usize;
let val = update.1.to_native();
base_buffer[idx] = val;
}
}