fn final_smt_root_and_proof()

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))
}