From c1aa0d0004977ffe0e0e9986b996f6a4535f7c2d Mon Sep 17 00:00:00 2001 From: Rostyslav Tyshko Date: Thu, 26 Jun 2025 22:19:10 -0400 Subject: [PATCH 01/10] fix unused results --- zkvm/src/lib.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/zkvm/src/lib.rs b/zkvm/src/lib.rs index 7ab1225..052afe9 100644 --- a/zkvm/src/lib.rs +++ b/zkvm/src/lib.rs @@ -432,7 +432,7 @@ mod tests { let (digest, receipt) = prove(vec![message, message_2], SUMMATION_ELF).unwrap(); - verify(receipt, SUMMATION_ID); + verify(receipt, SUMMATION_ID).unwrap(); assert_eq!(digest, message + message_2); } @@ -443,7 +443,7 @@ mod tests { let (digest, receipt) = prove(vec![message, message_2], SUMMATION_ELF).unwrap(); - verify(receipt, SUMMATION_ID); + verify(receipt, SUMMATION_ID).unwrap(); assert_eq!(digest, message + message_2); } @@ -454,7 +454,7 @@ mod tests { let (digest, receipt) = prove(vec![message, message_2], MULTIPLICATION_ELF).unwrap(); - verify(receipt, MULTIPLICATION_ID); + verify(receipt, MULTIPLICATION_ID).unwrap(); assert_eq!(digest, message * message_2); } @@ -465,7 +465,7 @@ mod tests { let (digest, receipt) = prove(vec![message, message_2], MULTIPLICATION_ELF).unwrap(); - verify(receipt, MULTIPLICATION_ID); + verify(receipt, MULTIPLICATION_ID).unwrap(); assert_eq!(digest, message * message_2); } From 2fadf0c82f0383dd0702027c7c000fc808f9146c Mon Sep 17 00:00:00 2001 From: Rostyslav Tyshko Date: Thu, 26 Jun 2025 23:15:14 -0400 Subject: [PATCH 02/10] add test_gas_limits_check_sufficient_funds --- zkvm/src/lib.rs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/zkvm/src/lib.rs b/zkvm/src/lib.rs index 052afe9..9ea223e 100644 --- a/zkvm/src/lib.rs +++ b/zkvm/src/lib.rs @@ -420,6 +420,8 @@ pub fn verify(receipt: Receipt, image_id: impl Into) -> anyhow::Result<( #[cfg(test)] mod tests { + use crate::gas_calculator::GasCalculator; + use super::*; use test_methods::BIG_CALCULATION_ELF; use test_methods::{MULTIPLICATION_ELF, MULTIPLICATION_ID}; @@ -514,4 +516,15 @@ mod tests { res } + + #[test] + fn test_gas_limits_check_sufficient_funds() { + let message = 1; + let message_2 = 2; + let gas_calc = GasCalculator::new(1, 1, 1, 1, 1, 1000000, 1000000); + + let result = gas_limits_check(vec![message, message_2], SUMMATION_ELF, &gas_calc, 1000000); + assert!(result.is_ok()); + } + } From eb14d632d998b7258bf4d05546360caec5748c3d Mon Sep 17 00:00:00 2001 From: Rostyslav Tyshko Date: Thu, 26 Jun 2025 23:15:45 -0400 Subject: [PATCH 03/10] add test_gas_limits_check_insufficient_funds --- zkvm/src/lib.rs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/zkvm/src/lib.rs b/zkvm/src/lib.rs index 9ea223e..ab61f45 100644 --- a/zkvm/src/lib.rs +++ b/zkvm/src/lib.rs @@ -527,4 +527,14 @@ mod tests { assert!(result.is_ok()); } +#[test] + fn test_gas_limits_check_insufficient_funds() { + let message = 1; + let message_2 = 2; + let gas_calc = GasCalculator::new(1, 1, 1, 1, 1, 1000000, 1000000); + + let result = gas_limits_check(vec![message, message_2], SUMMATION_ELF, &gas_calc, 1); + assert!(matches!(result, Err(ExecutionFailureKind::InsufficientFundsError))); + } + } From d0c5040fe94679c671acd5da71e56a92ff61c7c0 Mon Sep 17 00:00:00 2001 From: Rostyslav Tyshko Date: Thu, 26 Jun 2025 23:16:37 -0400 Subject: [PATCH 04/10] add test_execute_mint_utxo --- zkvm/src/lib.rs | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/zkvm/src/lib.rs b/zkvm/src/lib.rs index ab61f45..29ebd45 100644 --- a/zkvm/src/lib.rs +++ b/zkvm/src/lib.rs @@ -317,11 +317,12 @@ pub fn prove_mint_utxo_multiple_assets( )) } -pub fn execute_mint_utxo(amount_to_mint: u128, owner: AccountAddress) -> anyhow::Result { +pub fn execute_mint_utxo(amount_to_mint: u128, owner: AccountAddress, randomness: [u8; 32]) -> anyhow::Result { let mut builder = ExecutorEnv::builder(); builder.write(&amount_to_mint)?; builder.write(&owner)?; + builder.write(&randomness)?; let env = builder.build()?; @@ -537,4 +538,16 @@ mod tests { assert!(matches!(result, Err(ExecutionFailureKind::InsufficientFundsError))); } + #[test] + fn test_execute_mint_utxo() { + let owner = AccountAddress::default(); + let amount = 123456789; + let mut randomness = [0u8; 32]; + OsRng.fill_bytes(&mut randomness); + + let utxo_exec = execute_mint_utxo(amount, owner, randomness).expect("execution failed"); + assert_eq!(utxo_exec.amount, amount); + assert_eq!(utxo_exec.owner, owner); + } + } From d9696e77eb1d89122965ef4d3d0550fc0c49ed6f Mon Sep 17 00:00:00 2001 From: Rostyslav Tyshko Date: Thu, 26 Jun 2025 23:16:56 -0400 Subject: [PATCH 05/10] add test_prove_mint_utxo --- zkvm/src/lib.rs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/zkvm/src/lib.rs b/zkvm/src/lib.rs index 29ebd45..1a971a0 100644 --- a/zkvm/src/lib.rs +++ b/zkvm/src/lib.rs @@ -550,4 +550,14 @@ mod tests { assert_eq!(utxo_exec.owner, owner); } +#[test] + fn test_prove_mint_utxo() { + let owner = AccountAddress::default(); + let amount = 123456789; + + let (utxo, _) = prove_mint_utxo(amount, owner).expect("proof failed"); + assert_eq!(utxo.amount, amount); + assert_eq!(utxo.owner, owner); + } + } From 90231f76cc03b14bc39dcf8d9360720e85f0d009 Mon Sep 17 00:00:00 2001 From: Rostyslav Tyshko Date: Thu, 26 Jun 2025 23:17:14 -0400 Subject: [PATCH 06/10] add test_prove_send_utxo --- zkvm/src/lib.rs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/zkvm/src/lib.rs b/zkvm/src/lib.rs index 1a971a0..fe777db 100644 --- a/zkvm/src/lib.rs +++ b/zkvm/src/lib.rs @@ -560,4 +560,18 @@ mod tests { assert_eq!(utxo.owner, owner); } +#[test] + fn test_prove_send_utxo() { + let owner = AccountAddress::default(); + let amount = 100; + let (input_utxo, _) = prove_mint_utxo(amount, owner).expect("mint failed"); + + let parts = vec![(40, owner), (60, owner)]; + let (outputs, _receipt) = prove_send_utxo(input_utxo, parts.clone()).expect("send failed"); + + let total: u128 = outputs.iter().map(|(utxo, _)| utxo.amount).sum(); + assert_eq!(total, amount); + assert_eq!(outputs.len(), 2); + } + } From 553e37b7013407c64dfdcf70544bdfc625841867 Mon Sep 17 00:00:00 2001 From: Rostyslav Tyshko Date: Thu, 26 Jun 2025 23:17:34 -0400 Subject: [PATCH 07/10] add test_prove_send_utxo_deshielded --- zkvm/src/lib.rs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/zkvm/src/lib.rs b/zkvm/src/lib.rs index fe777db..cc66c2d 100644 --- a/zkvm/src/lib.rs +++ b/zkvm/src/lib.rs @@ -574,4 +574,18 @@ mod tests { assert_eq!(outputs.len(), 2); } +#[test] + fn test_prove_send_utxo_deshielded() { + let owner = AccountAddress::default(); + let amount = 100; + let (utxo, _) = prove_mint_utxo(amount, owner).unwrap(); + let parts = vec![(60, owner), (40, owner)]; + + let (outputs, _) = prove_send_utxo_deshielded(utxo, parts.clone()).unwrap(); + + let total: u128 = outputs.iter().map(|(amt, _)| amt).sum(); + assert_eq!(total, amount); + assert_eq!(outputs.len(), 2); + } + } From a5c8e5125c29582cb2e1bad47ed29c013aa710fc Mon Sep 17 00:00:00 2001 From: Rostyslav Tyshko Date: Thu, 26 Jun 2025 23:17:58 -0400 Subject: [PATCH 08/10] add test_prove_send_utxo_shielded --- zkvm/src/lib.rs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/zkvm/src/lib.rs b/zkvm/src/lib.rs index cc66c2d..5481724 100644 --- a/zkvm/src/lib.rs +++ b/zkvm/src/lib.rs @@ -588,4 +588,17 @@ mod tests { assert_eq!(outputs.len(), 2); } + #[test] + fn test_prove_send_utxo_shielded() { + let owner = AccountAddress::default(); + let amount = 100; + let parts = vec![(60, owner), (40, owner)]; + + let (outputs, _) = prove_send_utxo_shielded(owner, amount, parts.clone()).unwrap(); + + let total: u128 = outputs.iter().map(|(utxo, _)| utxo.amount).sum(); + assert_eq!(total, amount); + assert_eq!(outputs.len(), 2); + } + } From b31f753c11b49c889eb0af41220693336d639e93 Mon Sep 17 00:00:00 2001 From: Rostyslav Tyshko Date: Thu, 26 Jun 2025 23:18:18 -0400 Subject: [PATCH 09/10] add test_prove_send_utxo_multiple_assets_one_receiver --- zkvm/src/lib.rs | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/zkvm/src/lib.rs b/zkvm/src/lib.rs index 5481724..a967bd3 100644 --- a/zkvm/src/lib.rs +++ b/zkvm/src/lib.rs @@ -528,7 +528,7 @@ mod tests { assert!(result.is_ok()); } -#[test] + #[test] fn test_gas_limits_check_insufficient_funds() { let message = 1; let message_2 = 2; @@ -550,7 +550,7 @@ mod tests { assert_eq!(utxo_exec.owner, owner); } -#[test] + #[test] fn test_prove_mint_utxo() { let owner = AccountAddress::default(); let amount = 123456789; @@ -560,7 +560,7 @@ mod tests { assert_eq!(utxo.owner, owner); } -#[test] + #[test] fn test_prove_send_utxo() { let owner = AccountAddress::default(); let amount = 100; @@ -574,7 +574,7 @@ mod tests { assert_eq!(outputs.len(), 2); } -#[test] + #[test] fn test_prove_send_utxo_deshielded() { let owner = AccountAddress::default(); let amount = 100; @@ -601,4 +601,20 @@ mod tests { assert_eq!(outputs.len(), 2); } + #[test] + fn test_prove_send_utxo_multiple_assets_one_receiver() { + let owner = AccountAddress::default(); + let receiver = AccountAddress::default(); + + let utxos = vec![ + prove_mint_utxo(100, owner).unwrap().0, + prove_mint_utxo(50, owner).unwrap().0, + ]; + + let (to_receiver, to_change, _receipt) = prove_send_utxo_multiple_assets_one_receiver(utxos, 1, receiver).unwrap(); + let total_to_receiver: u128 = to_receiver.iter().map(|u| u.amount).sum(); + + assert!(total_to_receiver > 0); + assert_eq!(to_receiver.len() + to_change.len(), 2); + } } From 28005ae633109aa4f32ff4331545063c4ac81879 Mon Sep 17 00:00:00 2001 From: Rostyslav Tyshko Date: Thu, 26 Jun 2025 23:18:30 -0400 Subject: [PATCH 10/10] fmt --- zkvm/src/lib.rs | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/zkvm/src/lib.rs b/zkvm/src/lib.rs index a967bd3..075657e 100644 --- a/zkvm/src/lib.rs +++ b/zkvm/src/lib.rs @@ -317,7 +317,11 @@ pub fn prove_mint_utxo_multiple_assets( )) } -pub fn execute_mint_utxo(amount_to_mint: u128, owner: AccountAddress, randomness: [u8; 32]) -> anyhow::Result { +pub fn execute_mint_utxo( + amount_to_mint: u128, + owner: AccountAddress, + randomness: [u8; 32], +) -> anyhow::Result { let mut builder = ExecutorEnv::builder(); builder.write(&amount_to_mint)?; @@ -535,7 +539,10 @@ mod tests { let gas_calc = GasCalculator::new(1, 1, 1, 1, 1, 1000000, 1000000); let result = gas_limits_check(vec![message, message_2], SUMMATION_ELF, &gas_calc, 1); - assert!(matches!(result, Err(ExecutionFailureKind::InsufficientFundsError))); + assert!(matches!( + result, + Err(ExecutionFailureKind::InsufficientFundsError) + )); } #[test] @@ -611,7 +618,8 @@ mod tests { prove_mint_utxo(50, owner).unwrap().0, ]; - let (to_receiver, to_change, _receipt) = prove_send_utxo_multiple_assets_one_receiver(utxos, 1, receiver).unwrap(); + let (to_receiver, to_change, _receipt) = + prove_send_utxo_multiple_assets_one_receiver(utxos, 1, receiver).unwrap(); let total_to_receiver: u128 = to_receiver.iter().map(|u| u.amount).sum(); assert!(total_to_receiver > 0);