5 #ifndef __ZECALE_CORE_AGGREGATOR_CIRCUIT_HPP__
6 #define __ZECALE_CORE_AGGREGATOR_CIRCUIT_HPP__
11 #include <libzeth/core/extended_proof.hpp>
13 using namespace libzeth;
32 template<
typename wppT,
typename wsnarkT,
typename nverifierT,
size_t NumProofs>
36 using npp = libsnark::other_curve<wppT>;
37 using nsnark =
typename nverifierT::snark;
38 using verification_key_variable_gadget =
39 typename nverifierT::verification_key_variable_gadget;
40 using proof_variable_gadget =
typename nverifierT::proof_variable_gadget;
42 const size_t _num_inputs_per_nested_proof;
44 libsnark::protoboard<libff::Fr<wppT>> _pb;
49 libsnark::pb_variable<libff::Fr<wppT>> _nested_vk_hash;
54 libsnark::pb_variable<libff::Fr<wppT>> _nested_proof_results;
59 std::array<libsnark::pb_variable_array<libff::Fr<wppT>>, NumProofs>
60 _nested_primary_inputs;
63 std::array<libsnark::pb_variable<libff::Fr<wppT>>, NumProofs>
64 _nested_proof_results_unpacked;
69 std::shared_ptr<verification_key_variable_gadget> _nested_vk;
77 std::array<std::shared_ptr<proof_variable_gadget>, NumProofs>
81 std::shared_ptr<verification_key_hash_gadget<wppT, nverifierT>>
82 _nested_vk_hash_gadget;
85 std::shared_ptr<aggregator_gadget<wppT, nverifierT, NumProofs>>
89 std::shared_ptr<libsnark::packing_gadget<libff::Fr<wppT>>>
90 _nested_proof_results_packer;
99 typename wsnarkT::keypair generate_trusted_setup()
const;
102 size_t num_primary_inputs()
const;
104 const libsnark::r1cs_constraint_system<libff::Fr<wppT>>
105 &get_constraint_system()
const;
108 extended_proof<wppT, wsnarkT> prove(
109 const typename nsnark::verification_key &nested_vk,
111 const libzeth::extended_proof<npp, nsnark> *,
112 NumProofs> &extended_proofs,
113 const typename wsnarkT::proving_key &aggregator_proving_key);
120 #endif // __ZECALE_CORE_AGGREGATOR_CIRCUIT_HPP__