miraland_runtime/
snapshot_hash.rs1use {
3 miraland_accounts_db::{
4 accounts_hash::AccountsHashKind, epoch_accounts_hash::EpochAccountsHash,
5 },
6 miraland_sdk::{
7 clock::Slot,
8 hash::{Hash, Hasher},
9 },
10};
11
12#[derive(Debug, Clone, Copy, PartialEq, Eq)]
17pub struct StartingSnapshotHashes {
18 pub full: FullSnapshotHash,
19 pub incremental: Option<IncrementalSnapshotHash>,
20}
21
22#[derive(Debug, Clone, Copy, PartialEq, Eq)]
25pub struct FullSnapshotHash(pub (Slot, SnapshotHash));
26
27#[derive(Debug, Clone, Copy, PartialEq, Eq)]
30pub struct IncrementalSnapshotHash(pub (Slot, SnapshotHash));
31
32#[derive(Debug, PartialEq, Eq, Clone, Copy)]
34pub struct SnapshotHash(pub Hash);
35
36impl SnapshotHash {
37 #[must_use]
39 pub fn new(
40 accounts_hash: &AccountsHashKind,
41 epoch_accounts_hash: Option<&EpochAccountsHash>,
42 ) -> Self {
43 let snapshot_hash = match epoch_accounts_hash {
44 None => *accounts_hash.as_hash(),
45 Some(epoch_accounts_hash) => {
46 let mut hasher = Hasher::default();
47 hasher.hash(accounts_hash.as_hash().as_ref());
48 hasher.hash(epoch_accounts_hash.as_ref().as_ref());
49 hasher.result()
50 }
51 };
52
53 Self(snapshot_hash)
54 }
55}