Skip to content

Commit ae276ef

Browse files
curiecryptiquerejeta
authored andcommitted
batch proof tests corrected
1 parent 4a81720 commit ae276ef

File tree

1 file changed

+26
-76
lines changed

1 file changed

+26
-76
lines changed

mithril-stm/src/merkle_tree.rs

Lines changed: 26 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -684,36 +684,6 @@ mod tests {
684684
assert_eq!(tree.nodes, decoded.nodes);
685685
}
686686

687-
// #[test]
688-
// fn test_create_batch_proof((t, values) in arb_tree(30)) {
689-
// let mut mt_index_list :Vec<usize> = Vec::new();
690-
// for (i, _v) in values.iter().enumerate() {
691-
// mt_index_list.push(i);
692-
// }
693-
// mt_index_list.sort_unstable();
694-
// let batch_proof = t.get_batched_path(mt_index_list);
695-
// assert!(t.to_commitment_batch_compat().check(&values, &batch_proof).is_ok());
696-
// }
697-
698-
#[test]
699-
fn test_bytes_batch_path((t, values) in arb_tree(30)) {
700-
let mut mt_index_list :Vec<usize> = Vec::new();
701-
for (i, _v) in values.iter().enumerate() {
702-
mt_index_list.push(i);
703-
}
704-
mt_index_list.sort_unstable();
705-
706-
let bp = t.get_batched_path(mt_index_list);
707-
708-
let bytes = &bp.to_bytes();
709-
let deserialized = BatchPath::from_bytes(bytes).unwrap();
710-
assert!(t.to_commitment_batch_compat().check(&values, &deserialized).is_ok());
711-
712-
let encoded = bincode::serialize(&bp).unwrap();
713-
let decoded: BatchPath<Blake2b<U32>> = bincode::deserialize(&encoded).unwrap();
714-
assert!(t.to_commitment_batch_compat().check(&values, &decoded).is_ok());
715-
}
716-
717687
#[test]
718688
fn test_bytes_tree_commitment_batch_compat((t, values) in arb_tree(5)) {
719689
let encoded = bincode::serialize(&t.to_commitment_batch_compat()).unwrap();
@@ -781,65 +751,45 @@ mod tests {
781751
}
782752

783753
prop_compose! {
784-
fn arb_tree_arb_index_list(max_size: u32)
754+
fn arb_tree_arb_batch(max_size: u32)
785755
(v in vec(any::<u64>(), 2..max_size as usize)) -> (MerkleTree<Blake2b<U32>>, Vec<MTLeaf>, Vec<usize>) {
786756
let mut rng = thread_rng();
787757
let size = v.len();
788758
let pks = vec![VerificationKey::default(); size];
789759
let leaves = pks.into_iter().zip(v.into_iter()).map(|(key, stake)| MTLeaf(key, stake)).collect::<Vec<MTLeaf>>();
790-
let mut indices :Vec<usize> = Vec::with_capacity(size);
791-
for (i, _v) in leaves.iter().enumerate() {
792-
indices.push(i);
760+
761+
let indices: Vec<usize> = (0..size).collect();
762+
let mut mt_list: Vec<usize> = indices.into_iter().choose_multiple(&mut rng, size * 2 / 10 + 1);
763+
mt_list.sort_unstable();
764+
765+
let mut batch_values: Vec<MTLeaf> = Vec::with_capacity(mt_list.len());
766+
for i in mt_list.iter() {
767+
batch_values.push(leaves[*i]);
793768
}
794-
indices.iter().choose_multiple(&mut rng, size / 10 * 7);
795-
(MerkleTree::<Blake2b<U32>>::create(&leaves), leaves, indices)
769+
770+
(MerkleTree::<Blake2b<U32>>::create(&leaves), batch_values, mt_list)
796771
}
797772
}
798773

799774
proptest! {
800-
// Test the relation that t.get_path(i) is a valid
801-
// proof for i
802775
#![proptest_config(ProptestConfig::with_cases(100))]
803776
#[test]
804-
fn test_create_batch_proof((t, values, indices) in arb_tree_arb_index_list(60)) {
805-
806-
indices.clone().sort_unstable();
807-
print!("Indices: {}\n", indices.len());
777+
fn test_create_batch_proof((t, batch_values, indices) in arb_tree_arb_batch(30)) {
808778
let batch_proof = t.get_batched_path(indices);
809-
print!("Path: {}\n", batch_proof.values.len());
810-
print!("tree: {}\n", t.nodes.len());
811-
812-
assert!(t.to_commitment_batch_compat().check(&values, &batch_proof).is_ok());
813-
}
814-
815-
// #[test]
816-
// fn test_bytes_batch_path((t, values) in arb_tree(30)) {
817-
// let mut mt_index_list :Vec<usize> = Vec::new();
818-
// for (i, _v) in values.iter().enumerate() {
819-
// mt_index_list.push(i);
820-
// }
821-
// mt_index_list.sort_unstable();
822-
//
823-
// let bp = t.get_batched_path(mt_index_list);
824-
//
825-
// let bytes = &bp.to_bytes();
826-
// let deserialized = BatchPath::from_bytes(bytes).unwrap();
827-
// assert!(t.to_commitment_batch_compat().check(&values, &deserialized).is_ok());
828-
//
829-
// let encoded = bincode::serialize(&bp).unwrap();
830-
// let decoded: BatchPath<Blake2b<U32>> = bincode::deserialize(&encoded).unwrap();
831-
// assert!(t.to_commitment_batch_compat().check(&values, &decoded).is_ok());
832-
// }
833-
//
834-
// #[test]
835-
// fn test_bytes_tree_commitment_batch_compat((t, values) in arb_tree(5)) {
836-
// let encoded = bincode::serialize(&t.to_commitment_batch_compat()).unwrap();
837-
// let decoded: MerkleTreeCommitmentBatchCompat::<Blake2b<U32>> = bincode::deserialize(&encoded).unwrap();
838-
// let tree_commitment = MerkleTree::<Blake2b<U32>>::create(&values).to_commitment_batch_compat();
839-
// assert_eq!(tree_commitment.root, decoded.root);
840-
// assert_eq!(tree_commitment.nr_leaves, decoded.nr_leaves);
841-
//
842-
// }
779+
assert!(t.to_commitment_batch_compat().check(&batch_values, &batch_proof).is_ok());
780+
}
781+
782+
#[test]
783+
fn test_bytes_batch_path((t, batch_values, indices) in arb_tree_arb_batch(30)) {
784+
let bp = t.get_batched_path(indices);
843785

786+
let bytes = &bp.to_bytes();
787+
let deserialized = BatchPath::from_bytes(bytes).unwrap();
788+
assert!(t.to_commitment_batch_compat().check(&batch_values, &deserialized).is_ok());
789+
790+
let encoded = bincode::serialize(&bp).unwrap();
791+
let decoded: BatchPath<Blake2b<U32>> = bincode::deserialize(&encoded).unwrap();
792+
assert!(t.to_commitment_batch_compat().check(&batch_values, &decoded).is_ok());
793+
}
844794
}
845795
}

0 commit comments

Comments
 (0)