pepper-project / pequin

A system for verifying outsourced computations, and applying SNARKs. Simplified release of the main Pepper codebase.
Other
122 stars 46 forks source link

Testing example apps #66

Open aluex opened 4 years ago

aluex commented 4 years ago

Hi there, Sorry to bother but I have been having troubles going through the tutorial with other example apps. The mm_pure_arith works for me but when I try the same steps on hello_world and ramput_micro, it outputs errors when I try to run the prover to prove things.

For hello_world, it shows

Building Prover ... Makefile:1: A top-level warning

  • compiling common objs g++ -m64 -std=c++11 -DCURVE_BN128 -DBN_SUPPORT_SNARK -DBINARY_OUTPUT -DMONTGOMERY_OUTPUT -DNO_PROCPS -DUSE_ASM -DDB_NUM_ADDRESSES=1024 -DDB_HASH_NUM_BITS=1216 -DRAM_CELL_NUM_BITS=32 -DFAST_RAM_WORD_WIDTH=64 -DFAST_RAM_ADDRESS_WIDTH=32 -DFOLDER_TMP=\"/tmp/yuxia/tmp_state\" -DNAME=\"hello_world\" -I./include -I. -I/home/yuxia/pepper_deps/include -I../thirdparty/libsnark -I../thirdparty/libsnark/depends/libff -I../thirdparty/libsnark/depends/libfqfft pepper_prover.cpp -o bin/pepper_prover_hello_world obj/common/sha1.o obj/common/sha256.o obj/common/utility.o obj/common/measurement.o obj/common/mpnvector.o obj/common/mpnclass.o obj/common/mpnops.o obj/common/math.o obj/common/memory.o obj/common/waksman_router.o obj/storage/hasher.o obj/storage/ram_impl.o obj/storage/kyoto_block_store.o obj/storage/leveldb_block_store.o obj/storage/configurable_block_store.o obj/storage/null_hash.o obj/storage/ggh_hash.o obj/storage/exo.o obj/storage/db_util.o obj/storage/external_sort.o obj/storage/db_block_store.o obj/include/db.o obj/include/binary_tree.o obj/include/binary_tree_int_int.o obj/include/binary_tree_int_hash_t.o obj/include/fix_t.o obj/include/avl_tree.o obj/libv/computation_p.o obj/libv/exogenous_checker.o -L/home/yuxia/pepper_deps/lib -L../thirdparty/libsnark/build/libsnark -L../thirdparty/libsnark/build/depends/libff/libff -L../thirdparty/libsnark/build/depends -lsnark -lff -lzm -lgmp -lgmpxx -lpapi -lrt -lleveldb -lkyotocabinet -Wl,-rpath,/home/yuxia/pepper_deps/lib/ NUMBER OF CONSTRAINTS: 3 Generating Inputs ... Generating inputs, will write to ./prover_verifier_shared/hello_world.inputs Proving ... NUMBER OF CONSTRAINTS: 3 reading proving key from file... Reset time counters for profiling (enter) Call to r1cs_gg_ppzksnark_prover [ ] (0.0000s x0.99 from start) (enter) Compute the polynomial H [ ] (0.0000s x0.97 from start) (enter) Call to r1cs_to_qap_witness_map [ ] (0.0000s x0.99 from start) (enter) Compute evaluation of polynomials A, B on set S [ ] (0.0001s x1.00 from start) (leave) Compute evaluation of polynomials A, B on set S [0.0000s x1.04] (0.0001s x1.00 from start) (enter) Compute coefficients of polynomial A [ ] (0.0001s x1.00 from start) (leave) Compute coefficients of polynomial A [0.0001s x1.00] (0.0002s x1.00 from start) (enter) Compute coefficients of polynomial B [ ] (0.0002s x1.00 from start) (leave) Compute coefficients of polynomial B [0.0000s x1.01] (0.0002s x1.00 from start) (enter) Compute ZK-patch [ ] (0.0002s x1.00 from start) (leave) Compute ZK-patch [0.0000s x1.08] (0.0002s x1.00 from start) (enter) Compute evaluation of polynomial A on set T [ ] (0.0003s x1.00 from start) (leave) Compute evaluation of polynomial A on set T [0.0000s x1.01] (0.0003s x1.00 from start) (enter) Compute evaluation of polynomial B on set T [ ] (0.0003s x1.00 from start) (leave) Compute evaluation of polynomial B on set T [0.0000s x1.01] (0.0003s x1.00 from start) (enter) Compute evaluation of polynomial H on set T [ ] (0.0003s x1.00 from start) (enter) Compute evaluation of polynomial C on set S [ ] (0.0003s x1.00 from start) (leave) Compute evaluation of polynomial C on set S [0.0000s x1.06] (0.0003s x1.00 from start) (enter) Compute coefficients of polynomial C [ ] (0.0004s x1.00 from start) (leave) Compute coefficients of polynomial C [0.0000s x1.01] (0.0004s x1.00 from start) (enter) Compute evaluation of polynomial C on set T [ ] (0.0004s x1.00 from start) (leave) Compute evaluation of polynomial C on set T [0.0000s x1.01] (0.0004s x1.00 from start) (enter) Divide by Z on set T [ ] (0.0004s x1.00 from start) (leave) Divide by Z on set T [0.0001s x1.00] (0.0005s x1.00 from start) (leave) Compute evaluation of polynomial H on set T [0.0002s x1.00] (0.0005s x1.00 from start) (enter) Compute coefficients of polynomial H [ ] (0.0005s x1.00 from start) (leave) Compute coefficients of polynomial H [0.0000s x1.01] (0.0005s x1.00 from start) (enter) Compute sum of H and ZK-patch [ ] (0.0005s x1.00 from start) (leave) Compute sum of H and ZK-patch [0.0000s x1.08] (0.0005s x1.00 from start) (leave) Call to r1cs_to_qap_witness_map [0.0005s x1.00] (0.0006s x1.00 from start) pepper_prover_hello_world: ../thirdparty/libsnark/libsnark/zk_proof_systems/ppzksnark/r1cs_gg_ppzksnark/r1cs_gg_ppzksnark.tcc:406: libsnark::r1cs_gg_ppzksnark_proof libsnark::r1cs_gg_ppzksnark_prover(const libsnark::r1cs_gg_ppzksnark_proving_key&, libsnark::r1cs_gg_ppzksnark_primary_input&, libsnark::r1cs_gg_ppzksnark_auxiliary_input&) [with ppT = libff::bn128_pp; libsnark::r1cs_gg_ppzksnark_primary_input = std::vector<libff::Fp_model<4, ((const libff::bigint<4>&)(& libff::bn128_modulus_r))>, std::allocator<libff::Fp_model<4, ((const libff::bigint<4>&)(& libff::bn128_modulus_r))> > >; typename EC_ppT::Fp_type = libff::Fp_model<4, ((const libff::bigint<4>&)(& libff::bn128_modulus_r))>; libsnark::r1cs_gg_ppzksnark_auxiliary_input = std::vector<libff::Fp_model<4, ((const libff::bigint<4>&)(& libff::bn128_modulus_r))>, std::allocator<libff::Fp_model<4, ((const libff::bigint<4>&)(& libff::bn128_modulus_r))> > >]: Assertion `!qap_wit.coefficients_for_H[qap_wit.degree()-2].is_zero()' failed. Aborted (core dumped)

And for the ramput_micro, it shows

Makefile:1: A top-level warning

  • compiling common objs g++ -m64 -std=c++11 -DCURVE_BN128 -DBN_SUPPORT_SNARK -DBINARY_OUTPUT -DMONTGOMERY_OUTPUT -DNO_PROCPS -DUSE_ASM -DDB_NUM_ADDRESSES=1024 -DDB_HASH_NUM_BITS=1216 -DRAM_CELL_NUM_BITS=32 -DFAST_RAM_WORD_WIDTH=64 -DFAST_RAM_ADDRESS_WIDTH=32 -DFOLDER_TMP=\"/tmp/yuxia/tmp_state\" -DNAME=\"ramput_micro\" -I./include -I. -I/home/yuxia/pepper_deps/include -I../thirdparty/libsnark -I../thirdparty/libsnark/depends/libff -I../thirdparty/libsnark/depends/libfqfft pepper_prover.cpp -o bin/pepper_prover_ramput_micro obj/common/sha1.o obj/common/sha256.o obj/common/utility.o obj/common/measurement.o obj/common/mpnvector.o obj/common/mpnclass.o obj/common/mpnops.o obj/common/math.o obj/common/memory.o obj/common/waksman_router.o obj/storage/hasher.o obj/storage/ram_impl.o obj/storage/kyoto_block_store.o obj/storage/leveldb_block_store.o obj/storage/configurable_block_store.o obj/storage/null_hash.o obj/storage/ggh_hash.o obj/storage/exo.o obj/storage/db_util.o obj/storage/external_sort.o obj/storage/db_block_store.o obj/include/db.o obj/include/binary_tree.o obj/include/binary_tree_int_int.o obj/include/binary_tree_int_hash_t.o obj/include/fix_t.o obj/include/avl_tree.o obj/libv/computation_p.o obj/libv/exogenous_checker.o -L/home/yuxia/pepper_deps/lib -L../thirdparty/libsnark/build/libsnark -L../thirdparty/libsnark/build/depends/libff/libff -L../thirdparty/libsnark/build/depends -lsnark -lff -lzm -lgmp -lgmpxx -lpapi -lrt -lleveldb -lkyotocabinet -Wl,-rpath,/home/yuxia/pepper_deps/lib/ NUMBER OF CONSTRAINTS: 950705 Generating Inputs ... Generating inputs, will write to ./prover_verifier_shared/ramput_micro.inputs Proving ... NUMBER OF CONSTRAINTS: 950705 reading proving key from file... Reset time counters for profiling (enter) Call to r1cs_gg_ppzksnark_prover [ ] (0.0000s x1.00 from start) (enter) Compute the polynomial H [ ] (0.0000s x0.97 from start) (enter) Call to r1cs_to_qap_witness_map [ ] (0.0000s x0.99 from start) pepper_prover_ramput_micro: ../thirdparty/libsnark/libsnark/reductions/r1cs_to_qap/r1cs_to_qap.tcc:216: libsnark::qap_witness libsnark::r1cs_to_qap_witness_map(const libsnark::r1cs_constraint_system&, libsnark::r1cs_primary_input&, libsnark::r1cs_auxiliary_input&, const FieldT&, const FieldT&, const FieldT&) [with FieldT = libff::Fp_model<4, ((const libff::bigint<4>&)(& libff::bn128_modulus_r))>; libsnark::r1cs_primary_input = std::vector<libff::Fp_model<4, ((const libff::bigint<4>&)(& libff::bn128_modulus_r))>, std::allocator<libff::Fp_model<4, ((const libff::bigint<4>&)(& libff::bn128_modulus_r))> > >; libsnark::r1cs_auxiliary_input = std::vector<libff::Fp_model<4, ((const libff::bigint<4>&)(& libff::bn128_modulus_r))>, std::allocator<libff::Fp_model<4, ((const libff::bigint<4>&)(& libff::bn128_modulus_r))> > >]: Assertion `cs.is_satisfied(primary_input, auxiliary_input)' failed. Aborted (core dumped)

The inputs are the generated by the default input generator.

void ramput_micro_input_gen (mpq_t * input_q, int num_inputs, char *argv[]) {

    for (int i = 0; i < num_inputs; i++) {
        mpq_set_ui(input_q[i], rand(), 1);
    }
}

It seems the QAP witness does not satisfy the constraints..?