INNER CODE UNIT · Rust
merkle_path
risc0/risc0-ethereum · crates/aggregation/src/lib.rs:386
pub fn merkle_path(leaves: &[Digest], index: usize) -> Vec<Digest> {
assert!(
index < leaves.len(),
"no leaf with index {index} in tree of size {}",
leaves.len()
);
if leaves.len() == 1 {
return Vec::new(); // If only one digest, return an empty path
}
let mut path = Vec::new();
let mut current_leaves = leaves;
let mut current_index = index;
while current_leaves.len() > 1 {
// Split the list into two halves
let mid = current_leaves.len().next_power_of_two() / 2;