A toolkit for viable zk-SNARKS on Ethereum, Web, Mobile and Desktop
Switch branches/tags
Nothing to show
Clone or download
Pull request Compare This branch is 326 commits ahead, 11 commits behind barryWhiteHat:master.
HarryR Merge pull request #102 from HarryR/debug-flag-propogate
Propogate the 'DEBUG' definition, otherwise FMT() won't work
Latest commit 093b660 Dec 8, 2018
Type Name Latest commit message Commit time
Failed to load latest commit information.
.appendix Moved appendix to .appendix Nov 28, 2018
contracts "pragma solidity" changed from 0.4.24 to ^0.4.24 for all contracts Nov 13, 2018
depends init Jul 12, 2018
ethsnarks Added JubJub README Dec 4, 2018
migrations Removed all miximus related work from project, made importing via CMa… Nov 27, 2018
src Disable GLIBCXX debug by default Dec 5, 2018
test Fixed path of hashpreimage keys Nov 27, 2018
utils Initial work to integrate the solidity stuff into the project Jul 19, 2018
.gitattributes Create .gitattributes Aug 22, 2018
.gitignore Removed all miximus related work from project, made importing via CMa… Nov 27, 2018
.gitmodules Added Python requirements.txt + .gitignore Jul 12, 2018
.solhint.json solhint "compiler version" warning silenced Nov 13, 2018
.travis.yml Implemented 2-bit window lookup gadget Oct 20, 2018
AUTHORS Moved all python into ethsnarks module Jul 16, 2018
CMakeLists.txt Propogate the 'DEBUG' definition, otherwise FMT() won't work for prog… Dec 8, 2018
LICENSE Added python bytes to field elements tests Jul 30, 2018
Makefile Use native CMake mechanism for finding OpenMP, added openmp build opt… Dec 7, 2018
README.md Added gitter to README.md Nov 27, 2018
appveyor.yml Add OpenSSL dirs to Cmake for Windows (appveyor) Aug 23, 2018
package.json Fixes for Node-FFI on OSX Nov 20, 2018
requirements-dev.txt Removed scipy from dependencies, removed lagrange test code which use… Oct 21, 2018
requirements.txt Removed unnecessary dependencies, added python3-pip to Ubuntu Aug 23, 2018
truffle.js Consolidated hashpreimage Jul 28, 2018



Join the chat at https://gitter.im/ethsnarks

Zero-Knowledge proofs are coming to Ethereum and Dapps in 2018/2019!

EthSnarks is a collection of zkSNARK circuits and supporting libraries to use them with Ethereum smart contracts, it aims to help solve one of the biggest problems facing zkSNARKS on Ethereum - cross-platform on desktop, mobile and in-browser, cheap enough to run on-chain, and with algorithms that significantly reduces the time it takes to run the prover.

The notable advantages of using EthSnarks are:

  • Reduced cost, 500k gas with 1 input, using Groth16.
  • Prove zkSNARKs in-browser, with WebAssembly and Emscripten
  • Linux, Mac and (soon) Windows builds
  • Solidity, Python and C++ support in one place
  • A growing library of gadgets and algorithms

EthSnarks is participating in the Ethereum Foundation's grants program Wave 4, over the next 6-8 months development will continue full-time, and we will be working with companies and developers to help overcome the common challenges and hurdles that we all face. Get in-touch for more information.

WARNING: EthSnarks is alpha quality software, improvements and fixes are made frequently, and documentation doesn't yet exist



Build Status BCH compliance

Type make - the first time you run it will retrieve submodules, setup cmake and build everything, for more information about the build process see the Travis-CI build logs.

Before building, you may need to retrieve the source code for the dependencies:

git submodule update --init --recursive

The following dependencies (for Linux) are needed:

  • cmake
  • g++ or clang++
  • gmp
  • libcrypto
  • boost
  • npm / nvm

WebAssembly and JavaScript builds are supported via ethsnarks-emscripten

Requests and Contributions

This project aims to help create an ecosystem where a small number of well tested but simple zkSNARK circuits can be easily integrated into your project without having to do all of the work up-front.

If you have any ideas for new components, please Open an issue, or submit a pull request.


We are surely increasing the range of gadgets, supporting libraries, available documentation and examples; at the moment the best way to find out how to use something is to dig into the code or ask questions via a new issue

The following gadgets are available