1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
use std::path::PathBuf; use crate::tree::tree_branch::TreeBranch; use crate::tree::tree_leaf::TreeLeaf; use crate::tree::tree_data::TreeData; use crate::tree::tree_node::TreeNode; use crate::tree_db::HashTreeDB; use crate::tree_hasher::TreeHasher; use crate::tree_hasher::TreeHashResult; use crate::merkle_bit::{BinaryMerkleTreeResult, MerkleBIT}; pub struct HashTree { tree: MerkleBIT<HashTreeDB, TreeBranch, TreeLeaf, TreeData, TreeNode, TreeHasher, TreeHashResult, Vec<u8>> } impl HashTree { pub fn new(depth: usize) -> BinaryMerkleTreeResult<Self> { let path = PathBuf::new(); let tree = MerkleBIT::new(&path, depth)?; Ok(Self { tree }) } pub fn open(_path: &PathBuf, depth: usize) -> BinaryMerkleTreeResult<Self> { let tree = MerkleBIT::new(&_path, depth)?; Ok(Self { tree }) } pub fn get(&self, root_hash: &[u8], keys: &mut [&[u8]]) -> BinaryMerkleTreeResult<Vec<Option<Vec<u8>>>> { self.tree.get(root_hash, keys) } pub fn insert(&mut self, previous_root: Option<&[u8]>, keys: &mut [&[u8]], values: &mut Vec<&Vec<u8>>) -> BinaryMerkleTreeResult<Vec<u8>> { self.tree.insert(previous_root, keys, values) } pub fn remove(&mut self, root_hash: &[u8]) -> BinaryMerkleTreeResult<()> { self.tree.remove(root_hash) } }