diff options
| author | Santo Cariotti <santo@dcariotti.me> | 2025-07-17 09:00:53 +0000 |
|---|---|---|
| committer | Santo Cariotti <santo@dcariotti.me> | 2025-07-17 09:00:53 +0000 |
| commit | 9c4a1633559d45d9a57978de74fb75b937cdee70 (patch) | |
| tree | 5af707d4b734d18626966334244dd2b1e97ec06c /src/merkletree.rs | |
| parent | ed89e47b756b24fa4f52fa62236e43d41e8f0882 (diff) | |
Do not duplicate the last node when elements are odd
Diffstat (limited to 'src/merkletree.rs')
| -rw-r--r-- | src/merkletree.rs | 18 |
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" ); } |
