From 3ee81503084291c3771658a09f16ffc207d58ad3 Mon Sep 17 00:00:00 2001 From: Rostyslav Tyshko Date: Wed, 23 Oct 2024 02:00:08 +0200 Subject: [PATCH 01/11] setup --- storage/src/nullifier_sparse_merkle_tree.rs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/storage/src/nullifier_sparse_merkle_tree.rs b/storage/src/nullifier_sparse_merkle_tree.rs index 6301125..dd8ec95 100644 --- a/storage/src/nullifier_sparse_merkle_tree.rs +++ b/storage/src/nullifier_sparse_merkle_tree.rs @@ -120,3 +120,16 @@ impl Default for NullifierSparseMerkleTree { Self::new() } } + +#[cfg(test)] +mod tests { + use super::*; + use crate::nullifier::UTXONullifier; + use monotree::database::MemoryDB; + use monotree::hasher::Blake3; + use monotree::Monotree; + + fn create_nullifier(hash: TreeHashType) -> UTXONullifier { + UTXONullifier { utxo_hash: hash } + } +} From ac7c9966c3a5f6a833f03479772c2ecbb9c9648a Mon Sep 17 00:00:00 2001 From: Rostyslav Tyshko Date: Wed, 23 Oct 2024 02:00:30 +0200 Subject: [PATCH 02/11] add test_new_tree_initialization --- storage/src/nullifier_sparse_merkle_tree.rs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/storage/src/nullifier_sparse_merkle_tree.rs b/storage/src/nullifier_sparse_merkle_tree.rs index dd8ec95..dbb7a3d 100644 --- a/storage/src/nullifier_sparse_merkle_tree.rs +++ b/storage/src/nullifier_sparse_merkle_tree.rs @@ -132,4 +132,10 @@ mod tests { fn create_nullifier(hash: TreeHashType) -> UTXONullifier { UTXONullifier { utxo_hash: hash } } + + #[test] + fn test_new_tree_initialization() { + let tree = NullifierSparseMerkleTree::new(); + assert!(tree.curr_root.is_none()); + } } From 241108f5a76dcb23a89790fece3e5b03df925b83 Mon Sep 17 00:00:00 2001 From: Rostyslav Tyshko Date: Wed, 23 Oct 2024 02:00:55 +0200 Subject: [PATCH 03/11] add test_insert_single_item --- storage/src/nullifier_sparse_merkle_tree.rs | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/storage/src/nullifier_sparse_merkle_tree.rs b/storage/src/nullifier_sparse_merkle_tree.rs index dbb7a3d..ffa75eb 100644 --- a/storage/src/nullifier_sparse_merkle_tree.rs +++ b/storage/src/nullifier_sparse_merkle_tree.rs @@ -138,4 +138,15 @@ mod tests { let tree = NullifierSparseMerkleTree::new(); assert!(tree.curr_root.is_none()); } + + #[test] + fn test_insert_single_item() { + let mut tree = NullifierSparseMerkleTree::new(); + let nullifier = create_nullifier([1u8; 32]); // Sample 32-byte hash + + let result = tree.insert_item(nullifier); + assert!(result.is_ok()); + assert!(tree.curr_root.is_some()); + } + } From c520a2fa4314b564d2e01749469c04408bc1bc41 Mon Sep 17 00:00:00 2001 From: Rostyslav Tyshko Date: Wed, 23 Oct 2024 02:01:11 +0200 Subject: [PATCH 04/11] add test_insert_multiple_items --- storage/src/nullifier_sparse_merkle_tree.rs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/storage/src/nullifier_sparse_merkle_tree.rs b/storage/src/nullifier_sparse_merkle_tree.rs index ffa75eb..d616ab2 100644 --- a/storage/src/nullifier_sparse_merkle_tree.rs +++ b/storage/src/nullifier_sparse_merkle_tree.rs @@ -149,4 +149,17 @@ mod tests { assert!(tree.curr_root.is_some()); } + #[test] + fn test_insert_multiple_items() { + let mut tree = NullifierSparseMerkleTree::new(); + let nullifiers = vec![ + create_nullifier([1u8; 32]), + create_nullifier([2u8; 32]), + create_nullifier([3u8; 32]), + ]; + + let result = tree.insert_items(nullifiers); + assert!(result.is_ok()); + assert!(tree.curr_root.is_some()); + } } From 23878e45b5b75defb21b104c731969185246faf0 Mon Sep 17 00:00:00 2001 From: Rostyslav Tyshko Date: Wed, 23 Oct 2024 02:01:31 +0200 Subject: [PATCH 05/11] add test_search_item_inclusion --- storage/src/nullifier_sparse_merkle_tree.rs | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/storage/src/nullifier_sparse_merkle_tree.rs b/storage/src/nullifier_sparse_merkle_tree.rs index d616ab2..64ab39a 100644 --- a/storage/src/nullifier_sparse_merkle_tree.rs +++ b/storage/src/nullifier_sparse_merkle_tree.rs @@ -162,4 +162,21 @@ mod tests { assert!(result.is_ok()); assert!(tree.curr_root.is_some()); } + + #[test] + fn test_search_item_inclusion() { + let mut tree = NullifierSparseMerkleTree::new(); + let nullifier = create_nullifier([1u8; 32]); + + tree.insert_item(nullifier.clone()).unwrap(); + + let result = tree.search_item_inclusion([1u8; 32]); + assert!(result.is_ok()); + assert_eq!(result.unwrap(), true); + + let non_existing = tree.search_item_inclusion([99u8; 32]); + assert!(non_existing.is_ok()); + assert_eq!(non_existing.unwrap(), false); + } + } From bea4af2485266e89b91ff2a4e142312bd4a38210 Mon Sep 17 00:00:00 2001 From: Rostyslav Tyshko Date: Wed, 23 Oct 2024 02:01:48 +0200 Subject: [PATCH 06/11] add test_search_multiple_item_inclusions --- storage/src/nullifier_sparse_merkle_tree.rs | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/storage/src/nullifier_sparse_merkle_tree.rs b/storage/src/nullifier_sparse_merkle_tree.rs index 64ab39a..57c3e55 100644 --- a/storage/src/nullifier_sparse_merkle_tree.rs +++ b/storage/src/nullifier_sparse_merkle_tree.rs @@ -179,4 +179,22 @@ mod tests { assert_eq!(non_existing.unwrap(), false); } + #[test] + fn test_search_multiple_item_inclusions() { + let mut tree = NullifierSparseMerkleTree::new(); + let nullifiers = vec![ + create_nullifier([1u8; 32]), + create_nullifier([2u8; 32]), + create_nullifier([3u8; 32]), + ]; + + tree.insert_items(nullifiers).unwrap(); + + let search_hashes = vec![[1u8; 32], [2u8; 32], [99u8; 32]]; + let result = tree.search_item_inclusions(&search_hashes); + assert!(result.is_ok()); + + let expected_results = vec![true, true, false]; + assert_eq!(result.unwrap(), expected_results); + } } From a8dc896be7d3cde7095ba418fb0962379a9b22f6 Mon Sep 17 00:00:00 2001 From: Rostyslav Tyshko Date: Wed, 23 Oct 2024 02:02:04 +0200 Subject: [PATCH 07/11] add test_non_membership_proof --- storage/src/nullifier_sparse_merkle_tree.rs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/storage/src/nullifier_sparse_merkle_tree.rs b/storage/src/nullifier_sparse_merkle_tree.rs index 57c3e55..0d06fc7 100644 --- a/storage/src/nullifier_sparse_merkle_tree.rs +++ b/storage/src/nullifier_sparse_merkle_tree.rs @@ -197,4 +197,16 @@ mod tests { let expected_results = vec![true, true, false]; assert_eq!(result.unwrap(), expected_results); } + + #[test] + fn test_non_membership_proof() { + let mut tree = NullifierSparseMerkleTree::new(); + let non_member_hash = [5u8; 32]; + + let result = tree.get_non_membership_proof(non_member_hash); + assert!(result.is_ok()); + + let (proof, root) = result.unwrap(); + assert!(root.is_none()); + } } From b01d1b84c673c4a9e02c1369e38d74a891a0c54b Mon Sep 17 00:00:00 2001 From: Rostyslav Tyshko Date: Wed, 23 Oct 2024 02:02:22 +0200 Subject: [PATCH 08/11] add test_non_membership_proofs_multiple --- storage/src/nullifier_sparse_merkle_tree.rs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/storage/src/nullifier_sparse_merkle_tree.rs b/storage/src/nullifier_sparse_merkle_tree.rs index 0d06fc7..b7c9c5d 100644 --- a/storage/src/nullifier_sparse_merkle_tree.rs +++ b/storage/src/nullifier_sparse_merkle_tree.rs @@ -209,4 +209,19 @@ mod tests { let (proof, root) = result.unwrap(); assert!(root.is_none()); } + + #[test] + fn test_non_membership_proofs_multiple() { + let mut tree = NullifierSparseMerkleTree::new(); + let non_member_hashes = vec![[5u8; 32], [6u8; 32], [7u8; 32]]; + + let result = tree.get_non_membership_proofs(&non_member_hashes); + assert!(result.is_ok()); + + let proofs = result.unwrap(); + for (proof, root) in proofs { + assert!(root.is_none()); + } + } + } From d4e2928abf435ffbf28f531bfd5a6a4e961eaf53 Mon Sep 17 00:00:00 2001 From: Rostyslav Tyshko Date: Wed, 23 Oct 2024 02:02:38 +0200 Subject: [PATCH 09/11] add test_insert_and_get_proof_of_existing_item --- storage/src/nullifier_sparse_merkle_tree.rs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/storage/src/nullifier_sparse_merkle_tree.rs b/storage/src/nullifier_sparse_merkle_tree.rs index b7c9c5d..3d822b1 100644 --- a/storage/src/nullifier_sparse_merkle_tree.rs +++ b/storage/src/nullifier_sparse_merkle_tree.rs @@ -224,4 +224,14 @@ mod tests { } } + #[test] + fn test_insert_and_get_proof_of_existing_item() { + let mut tree = NullifierSparseMerkleTree::new(); + let nullifier = create_nullifier([1u8; 32]); + + tree.insert_item(nullifier.clone()).unwrap(); + + let proof_result = tree.get_non_membership_proof([1u8; 32]); + assert!(proof_result.is_err()); + } } From a6e63013ca1c51617e257335fca2fc7be4704d1c Mon Sep 17 00:00:00 2001 From: Rostyslav Tyshko Date: Wed, 23 Oct 2024 02:02:52 +0200 Subject: [PATCH 10/11] add test_insert_and_get_proofs_of_existing_items --- storage/src/nullifier_sparse_merkle_tree.rs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/storage/src/nullifier_sparse_merkle_tree.rs b/storage/src/nullifier_sparse_merkle_tree.rs index 3d822b1..d96e555 100644 --- a/storage/src/nullifier_sparse_merkle_tree.rs +++ b/storage/src/nullifier_sparse_merkle_tree.rs @@ -234,4 +234,18 @@ mod tests { let proof_result = tree.get_non_membership_proof([1u8; 32]); assert!(proof_result.is_err()); } + + #[test] + fn test_insert_and_get_proofs_of_existing_items() { + let mut tree = NullifierSparseMerkleTree::new(); + let nullifiers = vec![ + create_nullifier([1u8; 32]), + create_nullifier([2u8; 32]), + ]; + + tree.insert_items(nullifiers).unwrap(); + + let proof_result = tree.get_non_membership_proofs(&[[1u8; 32], [2u8; 32]]); + assert!(proof_result.is_err()); + } } From ad99fd62bde5c648b5004ceb0b6eac1800ca141c Mon Sep 17 00:00:00 2001 From: Rostyslav Tyshko Date: Wed, 23 Oct 2024 02:03:06 +0200 Subject: [PATCH 11/11] fmt --- storage/src/nullifier_sparse_merkle_tree.rs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/storage/src/nullifier_sparse_merkle_tree.rs b/storage/src/nullifier_sparse_merkle_tree.rs index d96e555..b59898b 100644 --- a/storage/src/nullifier_sparse_merkle_tree.rs +++ b/storage/src/nullifier_sparse_merkle_tree.rs @@ -238,10 +238,7 @@ mod tests { #[test] fn test_insert_and_get_proofs_of_existing_items() { let mut tree = NullifierSparseMerkleTree::new(); - let nullifiers = vec![ - create_nullifier([1u8; 32]), - create_nullifier([2u8; 32]), - ]; + let nullifiers = vec![create_nullifier([1u8; 32]), create_nullifier([2u8; 32])]; tree.insert_items(nullifiers).unwrap();