summaryrefslogtreecommitdiffstats
path: root/src/merkletree.rs
diff options
context:
space:
mode:
authorSanto Cariotti <santo@dcariotti.me>2025-07-17 09:00:53 +0000
committerSanto Cariotti <santo@dcariotti.me>2025-07-17 09:00:53 +0000
commit9c4a1633559d45d9a57978de74fb75b937cdee70 (patch)
tree5af707d4b734d18626966334244dd2b1e97ec06c /src/merkletree.rs
parented89e47b756b24fa4f52fa62236e43d41e8f0882 (diff)
Do not duplicate the last node when elements are odd
Diffstat (limited to 'src/merkletree.rs')
-rw-r--r--src/merkletree.rs18
1 files changed, 5 insertions, 13 deletions
diff --git a/src/merkletree.rs b/src/merkletree.rs
index fdbb5ac..53e6cdc 100644
--- a/src/merkletree.rs
+++ b/src/merkletree.rs
@@ -48,15 +48,11 @@ impl MerkleTree {
"Merkle Tree requires at least one element"
);
- let mut leaves: Vec<Node> = data_slices
+ let leaves: Vec<Node> = data_slices
.iter()
.map(|data| Node::new_leaf(hasher.hash(data)))
.collect();
- if leaves.len() % 2 != 0 {
- leaves.push(leaves.last().unwrap().clone());
- }
-
Self::build(hasher, leaves)
}
@@ -65,11 +61,7 @@ impl MerkleTree {
where
H: Hasher + 'static + std::marker::Sync + Clone,
{
- let mut leaves = fs::hash_dir(hasher.clone(), paths);
-
- if leaves.len() % 2 != 0 {
- leaves.push(leaves.last().unwrap().clone());
- }
+ let leaves = fs::hash_dir(hasher.clone(), paths);
Self::build(hasher, leaves)
}
@@ -176,11 +168,11 @@ mod tests {
let data = &["hello".as_bytes()];
let tree = MerkleTree::new(SHA256Hasher::new(), data);
- assert_eq!(tree.height(), 2);
- assert_eq!(tree.len(), 2);
+ assert_eq!(tree.height(), 1);
+ assert_eq!(tree.len(), 1);
assert_eq!(
tree.root().hash(),
- "286d189fda11bf4e906b6973a173009f47ede16532f1bae726223f8ee155d73b"
+ "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824"
);
}