in crypto/src/merkle/mod.rs [342:360]
fn map_indexes(
indexes: &[usize],
tree_depth: usize,
) -> Result<BTreeMap<usize, usize>, MerkleTreeError> {
let num_leaves = 2usize.pow(tree_depth as u32);
let mut map = BTreeMap::new();
for (i, index) in indexes.iter().cloned().enumerate() {
map.insert(index, i);
if index >= num_leaves {
return Err(MerkleTreeError::LeafIndexOutOfBounds(num_leaves, index));
}
}
if indexes.len() != map.len() {
return Err(MerkleTreeError::DuplicateLeafIndex);
}
Ok(map)
}