//! A binary hash tree of SHA256d (two rounds of SHA256) hashes for //! node values. use std::io; use sha2::Sha256; use crate::serialization::{SerializationError, ZcashDeserialize, ZcashSerialize}; use crate::sha256d_writer::Sha256dWriter; use crate::transaction::Transaction; /// A binary hash tree of SHA256d (two rounds of SHA256) hashes for /// node values. #[derive(Default)] pub struct MerkleTree { leaves: Vec, } impl ZcashSerialize for MerkleTree { fn zcash_serialize(&self, writer: W) -> Result<(), SerializationError> { unimplemented!(); } } impl ZcashDeserialize for MerkleTree { fn zcash_deserialize(reader: R) -> Result { unimplemented!(); } } /// A SHA-256d hash of the root node of a merkle tree of SHA256-d /// hashed transactions in a block. #[derive(Clone, Debug, Eq, PartialEq)] pub struct MerkleTreeRootHash([u8; 32]); impl From> for MerkleTreeRootHash { fn from(merkle_tree: MerkleTree) -> Self { let mut hash_writer = Sha256dWriter::default(); merkle_tree .zcash_serialize(&mut hash_writer) .expect("The merkle tree of transactions must serialize."); Self(hash_writer.finish()) } }