gnark

package module
v0.0.0-...-ae8e47d Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 25, 2023 License: Apache-2.0 Imports: 2 Imported by: 0

README

gnark zk-SNARK library

Twitter URL License Go Report Card PkgGoDev Documentation Status DOI

gnark is a fast zk-SNARK library that offers a high-level API to design circuits. The library is open source and developed under the Apache 2.0 license

gnark Users

To get started with gnark and write your first circuit, follow these instructions.

Checkout the online playground to compile circuits and visualize constraint systems.

Warning

gnark has been partially audited and is provided as-is, we make no guarantees or warranties to its safety and reliability. In particular, gnark makes no security guarantees such as constant time implementation or side-channel attack resistance.

gnark and gnark-crypto packages are optimized for 64bits architectures (x86 amd64) and tested on Unix (Linux / macOS).

Issues

gnark issues are tracked in the GitHub issues tab.

To report a security bug, please refer to gnark Security Policy.

If you have any questions, queries or comments, GitHub discussions is the place to find us.

You can also get in touch directly: gnark@consensys.net

Release Notes

Release Notes

Proving schemes and curves

Refer to Proving schemes and curves for more details.

gnark support the following zk-SNARKs:

which can be instantiated with the following curves

  • BN254
  • BLS12-381
  • BLS12-377
  • BW6-761
  • BLS24-315
  • BW6-633
  • BLS24-317
Example

Refer to the gnark User Documentation

Here is what x**3 + x + 5 = y looks like

package main

import (
	"github.com/consensys/gnark-crypto/ecc"
	"github.com/consensys/gnark/backend/groth16"
	"github.com/consensys/gnark/frontend"
	"github.com/consensys/gnark/frontend/cs/r1cs"
)

// CubicCircuit defines a simple circuit
// x**3 + x + 5 == y
type CubicCircuit struct {
	// struct tags on a variable is optional
	// default uses variable name and secret visibility.
	X frontend.Variable `gnark:"x"`
	Y frontend.Variable `gnark:",public"`
}

// Define declares the circuit constraints
// x**3 + x + 5 == y
func (circuit *CubicCircuit) Define(api frontend.API) error {
	x3 := api.Mul(circuit.X, circuit.X, circuit.X)
	api.AssertIsEqual(circuit.Y, api.Add(x3, circuit.X, 5))
	return nil
}

func main() {
	// compiles our circuit into a R1CS
	var circuit CubicCircuit
	ccs, _ := frontend.Compile(ecc.BN254.ScalarField(), r1cs.NewBuilder, &circuit)

	// groth16 zkSNARK: Setup
	pk, vk, _ := groth16.Setup(ccs)

	// witness definition
	assignment := CubicCircuit{X: 3, Y: 35}
	witness, _ := frontend.NewWitness(&assignment, ecc.BN254.ScalarField())
	publicWitness, _ := witness.Public()

	// groth16: Prove & Verify
	proof, _ := groth16.Prove(ccs, pk, witness)
	groth16.Verify(proof, vk, publicWitness)
}

Citing

If you use gnark in your research a citation would be appreciated. Please use the following BibTeX to cite the most recent release.

@software{gnark-v0.8.0,
  author       = {Gautam Botrel and
                  Thomas Piellard and
                  Youssef El Housni and
                  Ivo Kubjas and
                  Arya Tabaie},
  title        = {ConsenSys/gnark: v0.8.0},
  month        = feb,
  year         = 2023,
  publisher    = {Zenodo},
  version      = {v0.8.0},
  doi          = {10.5281/zenodo.5819104},
  url          = {https://doi.org/10.5281/zenodo.5819104}
}

Contributing

Please read CONTRIBUTING.md for details on our code of conduct, and the process for submitting pull requests to us.

Versioning

We use SemVer for versioning. For the versions available, see the tags on this repository.

License

This project is licensed under the Apache 2 License - see the LICENSE file for details

Documentation

Overview

Package gnark provides fast Zero Knowledge Proofs (ZKP) systems and a high level APIs to design ZKP circuits.

gnark supports the following ZKP schemes:

  • Groth16
  • PLONK

gnark supports the following curves:

  • BN254
  • BLS12_377
  • BLS12_381
  • BW6_761
  • BLS24_315
  • BW6_633
  • BLS24_317

User documentation https://docs.gnark.consensys.net

Index

Constants

This section is empty.

Variables

View Source
var Version = semver.MustParse("0.8.0")

Functions

func Curves

func Curves() []ecc.ID

Curves return the curves supported by gnark

Types

This section is empty.

Directories

Path Synopsis
Package backend implements Zero Knowledge Proof systems: it consumes circuit compiled with gnark/frontend.
Package backend implements Zero Knowledge Proof systems: it consumes circuit compiled with gnark/frontend.
groth16
Package groth16 implements Groth16 Zero Knowledge Proof system (aka zkSNARK).
Package groth16 implements Groth16 Zero Knowledge Proof system (aka zkSNARK).
hint
Package hint allows to define computations outside of a circuit.
Package hint allows to define computations outside of a circuit.
plonk
Package plonk implements PLONK Zero Knowledge Proof system.
Package plonk implements PLONK Zero Knowledge Proof system.
witness
Package witness provides serialization helpers to encode a witness into a []byte.
Package witness provides serialization helpers to encode a witness into a []byte.
Package constraint provides constructs needed to build and use a constraint system.
Package constraint provides constructs needed to build and use a constraint system.
cs
schema/internal/reflectwalk
reflectwalk is a package that allows you to "walk" complex structures similar to how you may "walk" a filesystem: visiting every element one by one and calling callback functions allowing you to handle and manipulate those elements.
reflectwalk is a package that allows you to "walk" complex structures similar to how you may "walk" a filesystem: visiting every element one by one and calling callback functions allowing you to handle and manipulate those elements.
internal
backend/circuits
Package circuits contains test circuits
Package circuits contains test circuits
tinyfield
Package tinyfield contains field arithmetic operations for modulus = 0x2f.
Package tinyfield contains field arithmetic operations for modulus = 0x2f.
Package io offers serialization interfaces for gnark objects.
Package io offers serialization interfaces for gnark objects.
Package logger provides a configurable logger accross gnark components
Package logger provides a configurable logger accross gnark components
Package profile provides a simple way to generate pprof compatible gnark circuit profile.
Package profile provides a simple way to generate pprof compatible gnark circuit profile.
internal/graph
Package graph collects a set of samples into a directed graph.
Package graph collects a set of samples into a directed graph.
internal/measurement
Package measurement export utility functions to manipulate/format performance profile sample values.
Package measurement export utility functions to manipulate/format performance profile sample values.
internal/report
Package report summarizes a performance profile into a human-readable report.
Package report summarizes a performance profile into a human-readable report.
std
Package std provides components or functions to help design gnark circuits.
Package std provides components or functions to help design gnark circuits.
accumulator/merkle
Package merkle provides a ZKP-circuit function to verify merkle proofs.
Package merkle provides a ZKP-circuit function to verify merkle proofs.
algebra/sw_bls12377
Package sw (short weierstrass)
Package sw (short weierstrass)
algebra/sw_bls24315
Package sw (short weierstrass)
Package sw (short weierstrass)
algebra/weierstrass
Package weierstrass implements elliptic curve group operations in (short) Weierstrass form.
Package weierstrass implements elliptic curve group operations in (short) Weierstrass form.
commitments/kzg_bls12377
Package kzg_bls12377 provides a ZKP-circuit function to verify BLS12_377 KZG inside a BW6_761 circuit.
Package kzg_bls12377 provides a ZKP-circuit function to verify BLS12_377 KZG inside a BW6_761 circuit.
commitments/kzg_bls24315
Package kzg_bls24315 provides a ZKP-circuit function to verify BLS24_315 KZG inside a BW6_633 circuit.
Package kzg_bls24315 provides a ZKP-circuit function to verify BLS24_315 KZG inside a BW6_633 circuit.
gkr
groth16_bls12377
Package groth16_bls12377 provides a ZKP-circuit function to verify BLS12_377 Groth16 inside a BW6_761 circuit.
Package groth16_bls12377 provides a ZKP-circuit function to verify BLS12_377 Groth16 inside a BW6_761 circuit.
groth16_bls24315
Package groth16_bls24315 provides a ZKP-circuit function to verify BLS24-315 Groth16 inside a BW6-633 circuit.
Package groth16_bls24315 provides a ZKP-circuit function to verify BLS24-315 Groth16 inside a BW6-633 circuit.
hash
Package hash provides an interface that hash functions (as gadget) should implement.
Package hash provides an interface that hash functions (as gadget) should implement.
hash/mimc
Package mimc provides a ZKP-circuit function to compute a MiMC hash.
Package mimc provides a ZKP-circuit function to compute a MiMC hash.
math/emulated
Package emulated implements operations over any modulus.
Package emulated implements operations over any modulus.
permutation/keccakf
Package keccakf implements the KeccakF-1600 permutation function.
Package keccakf implements the KeccakF-1600 permutation function.
signature/ecdsa
Package ecdsa implements ECDSA signature verification over any elliptic curve.
Package ecdsa implements ECDSA signature verification over any elliptic curve.
signature/eddsa
Package eddsa provides a ZKP-circuit function to verify a EdDSA signature.
Package eddsa provides a ZKP-circuit function to verify a EdDSA signature.
Package test provides components or functions to help test and fuzz gnark circuits.
Package test provides components or functions to help test and fuzz gnark circuits.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL