mithril_common/test/crypto_helper/cardano/
extensions.rs1use anyhow::Context;
2
3use crate::StdResult;
4use crate::crypto_helper::{MKProof, MKTree, MKTreeNode, MKTreeStoreInMemory, ProtocolParameters};
5
6pub trait ProtocolInitializerTestExtension {
8 fn override_protocol_parameters(&mut self, protocol_parameters: &ProtocolParameters);
10}
11
12pub trait MKProofTestExtension {
14 fn from_leaves<T: Into<MKTreeNode> + Clone>(leaves: &[T]) -> StdResult<MKProof>;
16
17 fn from_subset_of_leaves<T: Into<MKTreeNode> + Clone>(
19 leaves: &[T],
20 leaves_to_verify: &[T],
21 ) -> StdResult<MKProof>;
22}
23
24impl MKProofTestExtension for MKProof {
25 fn from_leaves<T: Into<MKTreeNode> + Clone>(leaves: &[T]) -> StdResult<MKProof> {
26 Self::from_subset_of_leaves(leaves, leaves)
27 }
28
29 fn from_subset_of_leaves<T: Into<MKTreeNode> + Clone>(
30 leaves: &[T],
31 leaves_to_verify: &[T],
32 ) -> StdResult<MKProof> {
33 fn list_to_mknode<T: Into<MKTreeNode> + Clone>(hashes: &[T]) -> Vec<MKTreeNode> {
34 hashes.iter().map(|h| h.clone().into()).collect()
35 }
36
37 let leaves = list_to_mknode(leaves);
38 let leaves_to_verify = list_to_mknode(leaves_to_verify);
39
40 let mktree = MKTree::<MKTreeStoreInMemory>::new(&leaves)
41 .with_context(|| "MKTree creation should not fail")?;
42 mktree.compute_proof(&leaves_to_verify)
43 }
44}