Skip to content
This repository was archived by the owner on Jan 22, 2025. It is now read-only.

Commit 9110f2d

Browse files
committed
make_merkle_tree
1 parent c953638 commit 9110f2d

1 file changed

Lines changed: 18 additions & 0 deletions

File tree

ledger/src/shred/merkle.rs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -382,6 +382,24 @@ fn verify_merkle_proof(index: usize, node: Hash, merkle_branch: &MerkleBranch) -
382382
}) == (0, merkle_branch.root)
383383
}
384384

385+
fn make_merkle_tree(nodes: Vec<Hash>) -> Vec<Hash> {
386+
let mut tree = nodes;
387+
let mut size = tree.len();
388+
while size != 1 {
389+
let offset = tree.len() - size;
390+
for i in (offset..offset + size).step_by(2) {
391+
let node = &tree[i];
392+
let next = tree.get(i + 1).unwrap_or(&node);
393+
let node = &node.as_ref()[..SIZE_OF_MERKLE_PROOF_ENTRY];
394+
let next = &next.as_ref()[..SIZE_OF_MERKLE_PROOF_ENTRY];
395+
let hash = hashv(&[MERKLE_HASH_PREFIX_NODE, node, next]);
396+
tree.push(hash);
397+
}
398+
size = tree.len() - offset - size;
399+
}
400+
tree
401+
}
402+
385403
#[cfg(test)]
386404
mod test {
387405
use super::*;

0 commit comments

Comments
 (0)