use fawkes_crypto::rand::Rng; use libzeropool_zkbob::{POOL_PARAMS, circuit::tree::{CTreePub, CTreeSec, tree_update}, native::tree::{TreePub, TreeSec}, fawkes_crypto::{ ff_uint::Num, circuit::{ cs::{CS, DebugCS} }, core::signal::Signal, rand::thread_rng, }, }; use std::time::Instant; use libzeropool_zkbob::helpers::sample_data::HashTreeState; #[test] fn test_circuit_tx_fullfill_not_empty(){ let mut rng = thread_rng(); let mut state = HashTreeState::new(&*POOL_PARAMS); let num_elements:usize = rng.gen_range(1, 1000); for _ in 0..num_elements { state.push(rng.gen(), &*POOL_PARAMS); } let root_before = state.root(); let proof_filled = state.merkle_proof(num_elements-1); let proof_free = state.merkle_proof(num_elements); let prev_leaf = state.hashes[0].last().unwrap().clone(); state.push(rng.gen(), &*POOL_PARAMS); let root_after = state.root(); let leaf = state.hashes[0].last().unwrap().clone(); let p = TreePub {root_before, root_after, leaf}; let s = TreeSec {proof_filled, proof_free, prev_leaf}; let ref cs = DebugCS::rc_new(); let ref p = CTreePub::alloc(cs, Some(&p)); let ref s = CTreeSec::alloc(cs, Some(&s)); let mut num_gates = cs.borrow().num_gates(); let start = Instant::now(); tree_update(p, s, &*POOL_PARAMS); let duration = start.elapsed(); num_gates=cs.borrow().num_gates()-num_gates; println!("tx gates = {}", num_gates); println!("Time elapsed in c_transfer() is: {:?}", duration); } #[test] fn test_circuit_tx_fullfill_empty(){ let mut rng = thread_rng(); let mut state = HashTreeState::new(&*POOL_PARAMS); let root_before = state.root(); let proof_filled = state.merkle_proof(0); let proof_free = state.merkle_proof(0); let prev_leaf = Num::ZERO; state.push(rng.gen(), &*POOL_PARAMS); let root_after = state.root(); let leaf = state.hashes[0].last().unwrap().clone(); let p = TreePub {root_before, root_after, leaf}; let s = TreeSec {proof_filled, proof_free, prev_leaf}; let ref cs = DebugCS::rc_new(); let ref p = CTreePub::alloc(cs, Some(&p)); let ref s = CTreeSec::alloc(cs, Some(&s)); let mut num_gates = cs.borrow().num_gates(); let start = Instant::now(); tree_update(p, s, &*POOL_PARAMS); let duration = start.elapsed(); num_gates=cs.borrow().num_gates()-num_gates; println!("tx gates = {}", num_gates); println!("Time elapsed in c_transfer() is: {:?}", duration); }