Skip to main content

A Python library that allows for easy compiling/proving/verifying of zk circuits

Project description

zkpy

A Python library that allows for easy compiling/proving/verifying of zk circuits.

License GitHub issues example workflow codecov PyPI docs

Overview

ZKPy is a Python library that allows for easy compiling/proving/verifying of zk circuits. It is implemented as a wrapper of Circom or SnarkJS, allowing developers to incorporate zero knowledge proofs into Python projects.

Features: The ptau module allows users to:

  • Create and contribute to a powers of tau ceremony
  • Apply beacon to a powers of tau ceremony
  • Perform phase 2 of a powers of tau ceremony (for groth16)
  • Export and import contributions from 3rd party software
  • Verify a powers of tau file

The circuits module allows users to:

  • Compile circom circuits
  • Generate r1cs, wasm, etc
  • Generate witness from input file
  • Prove circuits with support for three proving schemes (groth16, PLONK, FFLONK)
  • Export verification keys
  • Verify proofs with support for three proving schemes (groth16, PLONK, FFLONK)

Dependencies

zkpy requires Circom and snarkjs. You can find installation instructions here.

Installation

The recommended way to install zkpy is through pip.

pip install zkpy

Usage

Powers of Tau

Here is an example use case walking through a powers of tau ceremony:

from zkpy.ptau import PTau

ptau = PTau()
ptau.start() 
ptau.contribute()
ptau.beacon()
ptau.prep_phase2()

The PTau object maintains an underlying powers of tau file throughout these operations. You can also import an existing ptau file:

ptau = PTau(ptau_file="ptau_file.ptau")

At any stage, we can verify the powers of tau file is valid:

ptau.verify()

Ptau demo

Circuit

This class uses a circuit defined in a circom file to generate and verify zk proofs.

Here is an example scenario walking through compiling a circuit, generating witnesses, generating a proof, and verifying the proof:

from zkpy.circuit import Circuit, GROTH, PLONK, FFLONK

circuit = Circuit("./circuit.circom")
circuit.compile()
circuit.get_info()
circuit.print_constraints()
circuit.gen_witness("./example_circuits/input.json")
circuit.setup(PLONK, ptau)
circuit.prove(PLONK)
circuit.export_vkey()
circuit.verify(PLONK, vkey_file="vkey.json", public_file="public.json", proof_file="proof.json")

Circuit Demo

Contributing

Help is always appreciated! Feel free to open an issue if you find a problem, or open a pull request if you've solved an issue.

See more at CONTRIBUTING.md

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

zkpy-0.2.0.tar.gz (13.4 MB view details)

Uploaded Source

File details

Details for the file zkpy-0.2.0.tar.gz.

File metadata

  • Download URL: zkpy-0.2.0.tar.gz
  • Upload date:
  • Size: 13.4 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.13

File hashes

Hashes for zkpy-0.2.0.tar.gz
Algorithm Hash digest
SHA256 13f937bd5e74dd6a04c3cd9bb90b10c8ba15216b1865980cc9ebfeafd15c5553
MD5 fc3ab60980563e0fa2d87a32343c0e29
BLAKE2b-256 545f99bb70aece717fc478aba4c63fb3dc3a0173b2a958b92f2a4812bd078569

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page