Python library for ethsnarks
Project description
EthSnarks
Zero-Knowledge proofs are coming to Ethereum and Dapps in 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 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, 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 beta quality software, improvements and fixes are made frequently, and documentation doesn't yet exist
Examples
- Miximus - a self-service coin mixer and anonymous transfer method for Ethereum
- Hopper: an Open-Source Mixer for Mobile-friendly private transfers on Ethereum
- Example implementations of ethsnarks
- An example of a zero-knowledge-proof of a SHA256 pre-image for Ethereum
Building
Unix Flavours (Linux, OSX, Ubuntu, CentOS etc.)
The following dependencies are required to build Ethsnarks:
- cmake
- g++ or clang++
- gmp
- npm / nvm
Check-out the source-code using:
git clone git@github.com:HarryR/ethsnarks.git && cd ethsnarks
After checking-out the repository you need to install the necessary dependencies, the Makefile
includes pre-determined rules for different platforms, you need to run this as root
or an administrator user (i.e. for Brew on OSX):
make fedora-dependencies
(CentOS, Fedora, RHEL etc. requiresdnf
)make ubuntu-dependencies
(Ubuntu, Debian etc. requiresapt-get
)make mac-dependencies
(OSX, requires Homebrew)
Then install the Python dependencies, via Pip, into the local user directory:
make python-dependencies
Then build and test the project:
git submodule update --init --recursive
make
Windows (64-bit)
Install MSYS2 from https://www.msys2.org/ then open the MSYS2 Shell and run:
pacman --noconfirm -S make gmp gmp-devel gcc git cmake
git clone git@github.com:HarryR/ethsnarks.git
cd ethsnarks
git submodule update --init --recursive
cmake -E make_directory build
cmake -E chdir build cmake -DCMAKE_BUILD_TYPE=Debug ..
cmake --build build
Building under 32-bit MinGW32, MSYS (not MSYS2) and Microsoft Visual Studio may be supported in future depending upon demand, but currently it's probably broken...
WASM / Browser
WebAssembly, WASM and JavaScript builds are partially supported via ethsnarks-emscripten and ethsnarks-cheerp. The build process is similar, but using the Emscripten and Cheerp toolchains.
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.
Gadgets
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
- 1-of-N
- 2-bit lookup table
- 3-bit lookup table
- MiMC hash and cipher
- Poseidon hash function
- Miyaguchi-Preneel one-way function
- Merkle tree
- SHA256 (Ethereum compatible, full round)
- Shamir's Secret Sharing Scheme
- 'Baby JubJub' twisted Edwards curve
- EdDSA
- Pedersen hash
Maintainers
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for py_ethsnarks-0.0.2-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 15f11df3cef9ab899d5b1f2f68348e3b1960b25dbb7aac5854f69e0cf7af716a |
|
MD5 | da47ec56a5141e595161879bf497fff8 |
|
BLAKE2b-256 | 1c0b59eed1deb29534c19bb5e2fa4957669c12a2f1142b57800b8083b866683c |