Giter VIP home page Giter VIP logo

plonky2-circom's Introduction

Plonky2 verifier in Circom

This code has not yet been audited, and should not be used in any production systems.

This project reached the milestone to verify any recursive plonky2 proof with public inputs using the following settings:

  • GoldilocksField
  • QuadraticExtension
  • BN128 field based Poseidon hasher

Supported custom gates:

  • NoopGate
  • ConstantGate
  • PublicInputGate
  • BaseSumGate
  • LowDegreeInterpolationGate
  • ReducingExtensionGate
  • ReducingGate
  • ArithmeticGate
  • ArithmeticExtensionGate
  • MulExtensionGate
  • ExponentiationGate
  • RandomAccessGate
  • PoseidonMdsGate
  • PoseidonGate

Optional:

  • Zero knowledge support

Results using standard recursive config

Test machine: 256GB RAM, 32 core GCP VM

****GENERATING RECURSIVE PLONKY2 PROOF****
    Finished release [optimized] target(s) in 0.06s
     Running unittests src/lib.rs (target/release/deps/plonky2_circom_verifier-5ffbd921631d1f4c)

running 1 test
test verifier::tests::test_recursive_verifier ... ok

successes:

---- verifier::tests::test_recursive_verifier stdout ----
######################### recursive verify #########################
######################### recursive verify #########################
Generating Circom files ...
proof size: 127728


successes:
    verifier::tests::test_recursive_verifier

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 3 filtered out; finished in 8.69s

DONE (0s)
****COMPILING CIRCUIT****
template instances: 999
non-linear constraints: 29442900
linear constraints: 0
public inputs: 68
public outputs: 0
private inputs: 15877
private outputs: 0
wires: 29217270
labels: 63028953
Written successfully: ./plonky2.r1cs
Written successfully: ./plonky2.sym
Written successfully: ./plonky2_cpp/plonky2.cpp and ./plonky2_cpp/plonky2.dat
Written successfully: ./plonky2_cpp/main.cpp, circom.hpp, calcwit.hpp, calcwit.cpp, fr.hpp, fr.cpp, fr.asm and Makefile
Everything went okay, circom safe
DONE (1178s)
****COMPILING WITNESS GENERATOR****
g++ -c main.cpp -std=c++11 -O3 -I.
g++ -c calcwit.cpp -std=c++11 -O3 -I.
g++ -c fr.cpp -std=c++11 -O3 -I.
nasm -felf64 fr.asm -o fr_asm.o
g++ -c plonky2.cpp -std=c++11 -O3 -I.
g++ -o plonky2 *.o -lgmp 
DONE (140s)
****WITNESS GENERATION****
DONE (9s)
****GENERATING ZKEY 0****
DONE (12580s)
****CONTRIBUTE TO PHASE 2 CEREMONY****
DONE (1149s)
****VERIFYING FINAL ZKEY (SKIP FOR TESTING)****
DONE (0s)
****EXPORTING VKEY****
DONE (1s)
****GENERATING PROOF****
DONE (38s)
****VERIFYING PROOF****
[INFO]  snarkJS: OK!
DONE (1s)
****SOLIDITY VERIFIER TEST****
Compiled 1 Solidity file successfully


  Groth16
    ✔ Should return true when proof is correct (2055ms)


  1 passing (2s)

****GENERATING A NEW RECURSIVE PLONKY2 PROOF****
    Finished release [optimized] target(s) in 0.06s
     Running unittests src/lib.rs (target/release/deps/plonky2_circom_verifier-5ffbd921631d1f4c)

running 1 test
test verifier::tests::test_recursive_verifier ... ok

successes:

---- verifier::tests::test_recursive_verifier stdout ----
######################### recursive verify #########################
######################### recursive verify #########################
Generating Circom files ...
proof size: 127728


successes:
    verifier::tests::test_recursive_verifier

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 3 filtered out; finished in 8.49s

****WITNESS GENERATION****
DONE (10s)
****GENERATING PROOF****
DONE (36s)
****VERIFYING PROOF****
[INFO]  snarkJS: OK!
DONE (1s)
****SOLIDITY VERIFIER TEST****


  Groth16
    ✔ Should return true when proof is correct (2059ms)


  1 passing (2s)

Results using high rate recursive config

Test machine: 32GB RAM, 24 core PC.

Recursive proof (proof size: 58916)

****GENERATING RECURSIVE PLONKY2 PROOF****
   Compiling plonky2_circom_verifier v0.1.0 (/home/sai/Project/polymer/plonky2-circom)
    Finished release [optimized] target(s) in 4.63s
     Running unittests src/lib.rs (target/release/deps/plonky2_circom_verifier-4dfa06387e9d7dae)
running 1 test
test verifier::tests::test_recursive_verifier has been running for over 60 seconds
test verifier::tests::test_recursive_verifier ... ok
successes:
---- verifier::tests::test_recursive_verifier stdout ----
Generating Circom files ...
proof size: 58916
successes:
    verifier::tests::test_recursive_verifier
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 3 filtered out; finished in 171.39s
DONE (0s)
****COMPILING CIRCUIT****
template instances: 958
non-linear constraints: 12892923
linear constraints: 0
public inputs: 4
public outputs: 0
private inputs: 7353
private outputs: 0
wires: 12799230
labels: 27782784
Written successfully: ./plonky2.r1cs
Written successfully: ./plonky2.sym
Written successfully: ./plonky2_cpp/plonky2.cpp and ./plonky2_cpp/plonky2.dat
Written successfully: ./plonky2_cpp/main.cpp, circom.hpp, calcwit.hpp, calcwit.cpp, fr.hpp, fr.cpp, fr.asm and Makefile
Everything went okay, circom safe
DONE (483s)
****COMPILING WITNESS GENERATOR****
g++ -c main.cpp -std=c++11 -O3 -I.
g++ -c calcwit.cpp -std=c++11 -O3 -I.
g++ -c fr.cpp -std=c++11 -O3 -I.
nasm -felf64 fr.asm -o fr_asm.o
g++ -c plonky2.cpp -std=c++11 -O3 -I.
g++ -o plonky2 *.o -lgmp 
DONE (89s)
****GENERATING ZKEY 0****
DONE (13174s)
****CONTRIBUTE TO PHASE 2 CEREMONY****
DONE (484s)
****VERIFYING FINAL ZKEY (SKIP FOR TESTING)****
DONE (0s)
****EXPORTING VKEY****
DONE (0s)
****WITNESS GENERATION****
DONE (3s)
****GENERATING PROOF****
DONE (25s)
****VERIFYING PROOF****
[INFO]  snarkJS: OK!
DONE (1s)
****SOLIDITY VERIFIER TEST****
Compiled 1 Solidity file successfully
  Groth16
    ✔ Should return true when proof is correct (1408ms)
  1 passing (1s)

Verify a new Plonky2 proof using the same circuits

****GENERATING RECURSIVE PLONKY2 PROOF****
   Compiling plonky2_circom_verifier v0.1.0 (/home/sai/Project/polymer/plonky2-circom)
    Finished release [optimized] target(s) in 4.52s
     Running unittests src/lib.rs (target/release/deps/plonky2_circom_verifier-4dfa06387e9d7dae)
running 1 test
test verifier::tests::test_recursive_verifier has been running for over 60 seconds
test verifier::tests::test_recursive_verifier ... ok
successes:
---- verifier::tests::test_recursive_verifier stdout ----
Generating Circom files ...
proof size: 58916
successes:
    verifier::tests::test_recursive_verifier
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 3 filtered out; finished in 177.80s
DONE (0s)
****WITNESS GENERATION****
DONE (3s)
****GENERATING PROOF****
DONE (26s)
****VERIFYING PROOF****
[INFO]  snarkJS: OK!
DONE (0s)
****SOLIDITY VERIFIER TEST****
  Groth16
    ✔ Should return true when proof is correct (1388ms)
  1 passing (1s)

Proof without any custom gates (Proof size: 58660)

****COMPILING CIRCUIT****
template instances: 142
non-linear constraints: 8771891
linear constraints: 0
public inputs: 4
public outputs: 0
private inputs: 7321
private outputs: 0
wires: 8718375
labels: 19049523
Written successfully: ./plonky2.r1cs
Written successfully: ./plonky2.sym
Written successfully: ./plonky2_cpp/plonky2.cpp and ./plonky2_cpp/plonky2.dat
Written successfully: ./plonky2_cpp/main.cpp, circom.hpp, calcwit.hpp, calcwit.cpp, fr.hpp, fr.cpp, fr.asm and Makefile
Everything went okay, circom safe
DONE (261s)
****COMPILING WITNESS GENERATOR****
g++ -c main.cpp -std=c++11 -O3 -I.
g++ -c calcwit.cpp -std=c++11 -O3 -I.
g++ -c fr.cpp -std=c++11 -O3 -I.
nasm -felf64 fr.asm -o fr_asm.o
g++ -c plonky2.cpp -std=c++11 -O3 -I.
g++ -o plonky2 *.o -lgmp 
DONE (24s)
****GENERATING ZKEY 0****
DONE (3091s)
****CONTRIBUTE TO PHASE 2 CEREMONY****
DONE (400s)
****VERIFYING FINAL ZKEY (SKIP FOR TESTING)****
DONE (0s)
****EXPORTING VKEY****
DONE (0s)
****WITNESS GENERATION****
DONE (2s)
****GENERATING PROOF****
DONE (22s)
****VERIFYING PROOF****
[INFO]  snarkJS: OK!
DONE (1s)
****SOLIDITY VERIFIER TEST****
Compiled 1 Solidity file successfully
  Groth16
    ✔ Should return true when proof is correct (1410ms)
  1 passing (1s)

Proof with public inputs and custom gates (constant, public inputs and Poseidon) (Proof size: 62244)

****COMPILING CIRCUIT****
template instances: 842
non-linear constraints: 12067519
linear constraints: 0
public inputs: 4
public outputs: 0
private inputs: 7769
private outputs: 0
wires: 11982955
labels: 26019560
Written successfully: ./plonky2.r1cs
Written successfully: ./plonky2.sym
Written successfully: ./plonky2_cpp/plonky2.cpp and ./plonky2_cpp/plonky2.dat
Written successfully: ./plonky2_cpp/main.cpp, circom.hpp, calcwit.hpp, calcwit.cpp, fr.hpp, fr.cpp, fr.asm and Makefile
Everything went okay, circom safe
DONE (359s)
****COMPILING WITNESS GENERATOR****
g++ -c main.cpp -std=c++11 -O3 -I.
g++ -c calcwit.cpp -std=c++11 -O3 -I.
g++ -c fr.cpp -std=c++11 -O3 -I.
nasm -felf64 fr.asm -o fr_asm.o
g++ -c plonky2.cpp -std=c++11 -O3 -I.
g++ -o plonky2 *.o -lgmp 
DONE (86s)
****GENERATING ZKEY 0****
DONE (8524s)
****CONTRIBUTE TO PHASE 2 CEREMONY****
DONE (457s)
****VERIFYING FINAL ZKEY (SKIP FOR TESTING)****
DONE (0s)
****EXPORTING VKEY****
DONE (1s)
****WITNESS GENERATION****
DONE (2s)
****GENERATING PROOF****
DONE (25s)
****VERIFYING PROOF****
[INFO]  snarkJS: OK!
DONE (1s)
****SOLIDITY VERIFIER TEST****
Compiled 1 Solidity file successfully
  Groth16
    ✔ Should return true when proof is correct (1501ms)
  1 passing (2s)

plonky2-circom's People

Contributors

sai-deng avatar denisbsu avatar vuvoth avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.