This commit is contained in:
Sergio Chouhy 2025-08-07 09:33:54 -03:00
parent aba8f3549f
commit ae9963aec3
2 changed files with 55 additions and 20 deletions

1
Cargo.lock generated
View File

@ -2987,7 +2987,6 @@ dependencies = [
"hex", "hex",
"k256", "k256",
"log", "log",
"nssa",
"rand 0.8.5", "rand 0.8.5",
"reqwest 0.11.27", "reqwest 0.11.27",
"risc0-zkvm 2.3.1 (git+https://github.com/risc0/risc0.git?branch=release-2.3)", "risc0-zkvm 2.3.1 (git+https://github.com/risc0/risc0.git?branch=release-2.3)",

View File

@ -121,49 +121,85 @@ impl V01State {
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use super::*; use super::*;
use crate::{ use crate::{public_transaction, signature::PrivateKey};
public_transaction::{self, WitnessSet},
signature::PrivateKey,
};
fn genesis_state_for_tests() -> (V01State, Address) { fn genesis_state_for_tests(balances: &[u128], addresses: &[Address]) -> V01State {
let account_1 = { assert_eq!(balances.len(), addresses.len());
let mut this = Account::default(); let accounts: Vec<Account> = balances
this.program_owner = AuthenticatedTransferProgram::PROGRAM_ID; .iter()
this.balance = 100; .map(|balance| {
this let mut account = Account::default();
}; account.balance = *balance;
let address_1 = Address::new([1; 32]); account.program_owner = AuthenticatedTransferProgram::PROGRAM_ID;
let public_state = [(address_1.clone(), account_1)].into_iter().collect(); account
(V01State { public_state }, address_1) })
.collect();
let public_state = addresses
.to_owned()
.into_iter()
.zip(accounts.into_iter())
.collect();
V01State { public_state }
} }
fn transfer_transaction_for_tests( fn transfer_transaction_for_tests(
from: Address, from: Address,
from_key: PrivateKey, from_key: PrivateKey,
nonce: u128,
to: Address, to: Address,
balance: u128, balance: u128,
) -> PublicTransaction { ) -> PublicTransaction {
let addresses = vec![from, to]; let addresses = vec![from, to];
let nonces = vec![0]; let nonces = vec![nonce];
let program_id = AuthenticatedTransferProgram::PROGRAM_ID; let program_id = AuthenticatedTransferProgram::PROGRAM_ID;
let message = public_transaction::Message::new(program_id, addresses, nonces, balance); let message = public_transaction::Message::new(program_id, addresses, nonces, balance);
let witness_set = WitnessSet::for_message(&message, &[from_key]); let witness_set = public_transaction::WitnessSet::for_message(&message, &[from_key]);
PublicTransaction::new(message, witness_set) PublicTransaction::new(message, witness_set)
} }
#[test] #[test]
fn test_1() { fn test_1() {
let (mut genesis_state, address) = genesis_state_for_tests(); let addresses = [Address::new([1; 32])];
let from = address; let balances = [100];
let mut genesis_state = genesis_state_for_tests(&balances, &addresses);
let from = addresses[0].clone();
let from_key = PrivateKey(1); let from_key = PrivateKey(1);
let to = Address::new([2; 32]); let to = Address::new([2; 32]);
let balance_to_move = 5; let balance_to_move = 5;
let tx = transfer_transaction_for_tests(from, from_key, to.clone(), 5); let tx =
transfer_transaction_for_tests(from.clone(), from_key, 0, to.clone(), balance_to_move);
let _ = genesis_state.transition_from_public_transaction(tx); let _ = genesis_state.transition_from_public_transaction(tx);
assert_eq!( assert_eq!(
genesis_state.get_account_by_address(&to).balance, genesis_state.get_account_by_address(&to).balance,
balance_to_move balance_to_move
); );
assert_eq!(
genesis_state.get_account_by_address(&from).balance,
balances[0] - balance_to_move
);
assert_eq!(genesis_state.get_account_by_address(&from).nonce, 1);
assert_eq!(genesis_state.get_account_by_address(&to).nonce, 0);
}
#[test]
fn test_2() {
let addresses = [Address::new([1; 32]), Address::new([99; 32])];
let balances = [100, 200];
let mut genesis_state = genesis_state_for_tests(&balances, &addresses);
let from = addresses[1].clone();
let from_key = PrivateKey(99);
let to = addresses[0].clone();
let balance_to_move = 8;
let to_previous_balance = genesis_state.get_account_by_address(&to).balance;
let tx = transfer_transaction_for_tests(from.clone(), from_key, 0, to.clone(), balance_to_move);
let _ = genesis_state.transition_from_public_transaction(tx);
assert_eq!(genesis_state.get_account_by_address(&to).balance, 108);
assert_eq!(
genesis_state.get_account_by_address(&from).balance,
balances[1] - balance_to_move
);
assert_eq!(genesis_state.get_account_by_address(&from).nonce, 1);
assert_eq!(genesis_state.get_account_by_address(&to).nonce, 0);
} }
} }