Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions libsnark/jsnark_interface/CircuitReader.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -345,6 +345,10 @@ void CircuitReader::parseAndEval(char* arithFilepath, char* inputsFilepath) {
} else if (opcode == MULCONST_OPCODE) {
wireValues[outWires[0]] = constant * inValues[0];
}
for(int i = 0; i < outWires.size(); i++) {
std::cout << "main.go:449 " << outWires[i] << " ";
wireValues[outWires[i]].print();
}
//end = libff::get_nsec_time();
//evalTime += (end - begin);
} else {
Expand Down
5 changes: 2 additions & 3 deletions libsnark/jsnark_interface/CircuitReader.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,8 @@ class CircuitReader {
int getNumOutputs() { return numOutputs;}
std::vector<Wire> getInputWireIds() const { return inputWireIds; }
std::vector<Wire> getOutputWireIds() const { return outputWireIds; }
unsigned int numWires;
unsigned int numInputs, numNizkInputs, numOutputs;

private:
ProtoboardPtr pb;
Expand All @@ -81,9 +83,6 @@ class CircuitReader {
std::vector<Wire> nizkWireIds;
std::vector<Wire> outputWireIds;

unsigned int numWires;
unsigned int numInputs, numNizkInputs, numOutputs;

unsigned int currentVariableIdx, currentLinearCombinationIdx;

void parseAndEval(char* arithFilepath, char* inputsFilepath);
Expand Down
25 changes: 21 additions & 4 deletions libsnark/jsnark_interface/run_ppzksnark.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -64,13 +64,28 @@ int main(int argc, char **argv) {
char *output_auxiliary_input_filename = argv[6];
cout << "Translate Circuit and Input" << endl;
CircuitReader reader(arith_filename, in_filename, pb);
r1cs_constraint_system<FieldT> cs = get_constraint_system_from_gadgetlib2(*pb);
cout << "num inputs: " << reader.getNumInputs() << endl;
cout << "num outputs: " << reader.getNumOutputs() << endl;
cout << "num wires: " << reader.numWires << endl;
cout << "num nizkinputs: " << reader.numNizkInputs << endl;

r1cs_constraint_system<FieldT> cs = get_constraint_system_from_gadgetlib2(*pb);

// 10688740
const r1cs_variable_assignment<FieldT> full_assignment = get_variable_assignment_from_gadgetlib2(*pb);
cs.primary_input_size = reader.getNumInputs() + reader.getNumOutputs();
cs.auxiliary_input_size = full_assignment.size() - cs.num_inputs();
std::cout << cs.primary_input_size << std::endl;
const r1cs_primary_input<FieldT> primary_input(full_assignment.begin(),
cs.secret_input_size = reader.numNizkInputs;
std::cout << "primary_input_size: " << cs.primary_input_size << std::endl;
std::cout << "auxiliary_input_size (private input + internal var): " << cs.auxiliary_input_size << std::endl;

cout << "num variables: " << cs.num_variables() << endl;
cout << "num inputs from cs: " << cs.num_inputs() << endl;
cout << "num constraints: " << cs.num_constraints() << endl;
cout << "constraint system: " << endl;
cs.print();

const r1cs_primary_input<FieldT> primary_input(full_assignment.begin(),
full_assignment.begin() + cs.num_inputs());
const r1cs_auxiliary_input<FieldT> auxiliary_input(
full_assignment.begin() + cs.num_inputs(), full_assignment.end());
Expand Down Expand Up @@ -138,7 +153,9 @@ int main(int argc, char **argv) {
char *output_proof_filename = argv[6];
r1cs_constraint_system<FieldT> cs;
std::ifstream ci(circuit_filename, ios::binary | ios::in);
ci >> cs;
libff::enter_block("Loading constraint system");
ci >> cs;
libff::leave_block("Leaving constraint system");
ci.close();
libsnark::prove<libsnark::default_r1cs_gg_ppzksnark_pp>(cs, proof_key_filename, primary_input_filename, aux_input_filename, output_proof_filename);
break;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ class r1cs_constraint {

friend std::ostream& operator<< <FieldT>(std::ostream &out, const r1cs_constraint<FieldT> &c);
friend std::istream& operator>> <FieldT>(std::istream &in, r1cs_constraint<FieldT> &c);
void print() const;
};

/************************* R1CS variable assignment **************************/
Expand Down Expand Up @@ -114,6 +115,7 @@ class r1cs_constraint_system {
public:
size_t primary_input_size;
size_t auxiliary_input_size;
size_t secret_input_size;

std::vector<r1cs_constraint<FieldT> > constraints;

Expand Down Expand Up @@ -143,6 +145,7 @@ class r1cs_constraint_system {
friend std::istream& operator>> <FieldT>(std::istream &in, r1cs_constraint_system<FieldT> &cs);

void report_linear_constraint_statistics() const;
void print();
};


Expand Down
19 changes: 19 additions & 0 deletions libsnark/relations/constraint_satisfaction_problems/r1cs/r1cs.tcc
Original file line number Diff line number Diff line change
Expand Up @@ -230,6 +230,14 @@ void r1cs_constraint_system<FieldT>::swap_AB_if_beneficial()
libff::leave_block("Call to r1cs_constraint_system::swap_AB_if_beneficial");
}

template<typename FieldT>
void r1cs_constraint_system<FieldT>::print() {
for (const r1cs_constraint<FieldT>& c : this->constraints)
{
c.print();
}
}

template<typename FieldT>
bool r1cs_constraint_system<FieldT>::operator==(const r1cs_constraint_system<FieldT> &other) const
{
Expand All @@ -243,6 +251,7 @@ std::ostream& operator<<(std::ostream &out, const r1cs_constraint_system<FieldT>
{
out << cs.primary_input_size << "\n";
out << cs.auxiliary_input_size << "\n";
out << cs.secret_input_size << "\n";

out << cs.num_constraints() << "\n";
for (const r1cs_constraint<FieldT>& c : cs.constraints)
Expand All @@ -258,6 +267,7 @@ std::istream& operator>>(std::istream &in, r1cs_constraint_system<FieldT> &cs)
{
in >> cs.primary_input_size;
in >> cs.auxiliary_input_size;
in >> cs.secret_input_size;

cs.constraints.clear();

Expand Down Expand Up @@ -307,5 +317,14 @@ void r1cs_constraint_system<FieldT>::report_linear_constraint_statistics() const
#endif
}

template<typename FieldT>
void r1cs_constraint<FieldT>::print() const {
std::cout << "constraint: " << std::endl;
this->a.print();
this->b.print();
this->c.print();
std::cout << std::endl;
}

} // libsnark
#endif // R1CS_TCC_
Original file line number Diff line number Diff line change
Expand Up @@ -127,9 +127,10 @@ void prove(const r1cs_constraint_system<libff::Fr<ppT> > &cs, char *proof_key_fi
std::cout << "enter prove" << std::endl;
r1cs_gg_ppzksnark_proving_key<ppT> pk;
std::ifstream pki(proof_key_filename, ios::in);
libff::enter_block("Loading pk");
pki >> pk;
pki.close();
std::cout << "finish loading pk" << std::endl;
libff::leave_block("Loading pk");

r1cs_primary_input<FieldT> primary_input, aux_input;
std::ifstream pi(primary_input_filename, ios::binary | ios::in);
Expand Down