use std::collections::BTreeSet;
use serde::{Deserialize, Serialize};
use tiny_keccak::{Hasher, Sha3};
use crate::DbcContentHash;
#[derive(Debug, PartialEq, Eq, Hash, Clone, Serialize, Deserialize)]
pub struct DbcContent {
pub parents: BTreeSet<DbcContentHash>, pub amount: u64,
pub output_number: u8,
}
impl DbcContent {
pub fn new(parents: BTreeSet<DbcContentHash>, amount: u64, output_number: u8) -> Self {
DbcContent {
parents,
amount,
output_number,
}
}
pub fn hash(&self) -> DbcContentHash {
let mut sha3 = Sha3::v256();
for parent in self.parents.iter() {
sha3.update(parent);
}
sha3.update(&self.amount.to_be_bytes());
sha3.update(&self.output_number.to_be_bytes());
let mut hash = [0; 32];
sha3.finalize(&mut hash);
hash
}
}