1 #ifndef __ZETH_CIRCUITS_NOTE_HPP__
2 #define __ZETH_CIRCUITS_NOTE_HPP__
21 template<
typename FieldT>
class note_gadget :
public libsnark::gadget<FieldT>
25 libsnark::pb_variable_array<FieldT>
value;
27 libsnark::pb_variable_array<FieldT>
r;
30 libsnark::protoboard<FieldT> &pb,
31 const std::string &annotation_prefix =
"note_gadget");
40 template<
typename FieldT,
typename HashT,
typename HashTreeT,
size_t TreeDepth>
45 std::shared_ptr<libsnark::digest_variable<FieldT>> a_pk;
47 libsnark::pb_variable_array<FieldT> rho;
49 std::shared_ptr<COMM_cm_gadget<FieldT, HashT>> commit_to_inputs_cm;
51 libsnark::pb_variable<FieldT> commitment;
55 libsnark::pb_variable<FieldT> value_enforce;
57 libsnark::pb_variable_array<FieldT> address_bits_va;
60 std::shared_ptr<libsnark::pb_variable_array<FieldT>> auth_path;
64 std::shared_ptr<merkle_path_authenticator<FieldT, HashTreeT>>
68 std::shared_ptr<PRF_addr_a_pk_gadget<FieldT, HashT>> spend_authority;
70 std::shared_ptr<PRF_nf_gadget<FieldT, HashT>> expose_nullifiers;
72 std::shared_ptr<libsnark::digest_variable<FieldT>> nullifier;
76 libsnark::protoboard<FieldT> &pb,
77 const libsnark::pb_variable<FieldT> &ZERO,
78 std::shared_ptr<libsnark::digest_variable<FieldT>> a_sk,
80 std::shared_ptr<libsnark::digest_variable<FieldT>> nullifier,
82 const libsnark::pb_variable<FieldT> &rt,
83 const std::string &annotation_prefix =
"input_note_gadget");
91 const std::vector<FieldT> &merkle_path,
97 template<
typename FieldT,
typename HashT>
101 std::shared_ptr<libsnark::digest_variable<FieldT>> a_pk;
102 std::shared_ptr<COMM_cm_gadget<FieldT, HashT>> commit_to_outputs_cm;
106 libsnark::protoboard<FieldT> &pb,
107 std::shared_ptr<libsnark::digest_variable<FieldT>> rho,
108 const libsnark::pb_variable<FieldT> &commitment,
109 const std::string &annotation_prefix =
"output_note_gadget");
122 #endif // __ZETH_CIRCUITS_NOTE_HPP__