eth_state_diff/
attestations.rs1use crate::types::{ArchivedAttestationsDiff, AttestationsDiff};
7
8pub fn diff_attestations_append(base_ssz: &[u8], target_ssz: &[u8]) -> AttestationsDiff {
10 if base_ssz == target_ssz {
11 return AttestationsDiff::Unchanged;
12 }
13
14 if target_ssz.len() > base_ssz.len() {
15 AttestationsDiff::Append(target_ssz[base_ssz.len()..].to_vec())
16 } else {
17 AttestationsDiff::FullReplacement(target_ssz.to_vec())
19 }
20}
21
22pub fn diff_attestations_replacement(base_ssz: &[u8], target_ssz: &[u8]) -> AttestationsDiff {
24 if base_ssz == target_ssz {
25 AttestationsDiff::Unchanged
26 } else {
27 AttestationsDiff::FullReplacement(target_ssz.to_vec())
28 }
29}
30
31pub fn apply_attestations(base: &mut Vec<u8>, delta: &ArchivedAttestationsDiff) {
33 match delta {
34 ArchivedAttestationsDiff::Unchanged => {}
35 ArchivedAttestationsDiff::Append(bytes) => {
36 base.extend_from_slice(bytes.as_slice());
37 }
38 ArchivedAttestationsDiff::FullReplacement(bytes) => {
39 base.clear();
40 base.extend_from_slice(bytes.as_slice());
41 }
42 }
43}