1use libzeropool::{
2 circuit::{tree::tree_update, tx::c_transfer},
3 fawkes_crypto::{
4 backend::bellman_groth16::{
5 engines::Engine,
6 prover::{prove, Proof},
7 Parameters,
8 },
9 ff_uint::Num,
10 },
11 native::{
12 params::PoolParams,
13 tree::{TreePub, TreeSec},
14 tx::{TransferPub, TransferSec},
15 },
16};
17
18pub fn prove_tx<P, E>(
19 params: &Parameters<E>,
20 pool_params: &P,
21 transfer_pub: TransferPub<E::Fr>,
22 transfer_sec: TransferSec<E::Fr>,
23) -> (Vec<Num<E::Fr>>, Proof<E>)
24where
25 P: PoolParams<Fr = E::Fr>,
26 E: Engine,
27{
28 let circuit = |public, secret| {
29 c_transfer(&public, &secret, pool_params);
30 };
31
32 prove(params, &transfer_pub, &transfer_sec, circuit)
33}
34
35pub fn prove_tree<P, E>(
36 params: &Parameters<E>,
37 pool_params: &P,
38 tree_pub: TreePub<E::Fr>,
39 tree_sec: TreeSec<E::Fr>,
40) -> (Vec<Num<E::Fr>>, Proof<E>)
41where
42 P: PoolParams<Fr = E::Fr>,
43 E: Engine,
44{
45 let circuit = |public, secret| {
46 tree_update(&public, &secret, pool_params);
47 };
48
49 prove(params, &tree_pub, &tree_sec, circuit)
50}