in src/hashwires.rs [476:497]
fn final_smt_root_and_proof<D: Hash>(
top_salted_roots: &[[u8; 32]],
shuffled_indexes: &[usize],
tree_height: usize,
leaf_index: usize,
smt_secret: &SmtSecret,
) -> Result<(Vec<u8>, Vec<u8>), HwError> {
let mut smt_leaves = compute_smt_leaves(top_salted_roots, shuffled_indexes, tree_height);
let node = smt_leaves[leaf_index].0;
smt_leaves.sort_by(|(t1, _), (t2, _)| t1.cmp(t2));
let mut tree: Smt<node_template::HashWiresNodeSmt<D>> = Smt::new(tree_height);
tree.build(&smt_leaves, smt_secret);
let inclusion_proof =
MerkleProof::<node_template::HashWiresNodeSmt<D>>::generate_inclusion_proof(&tree, &[node])
.ok_or(HwError::InclusionProofError)?;
let smt_proof = inclusion_proof.serialize();
Ok((tree.get_root_raw().serialize(), smt_proof))
}