Ethsnarks Projects

Ethsnarks is comprised of a main repository and several other repositories which use the main repository as a git submodule.

ethsnarks

The core repository, includes implementations of all algorithms and common code, the build system and tests. It is implemented in C++ using CMake as a build system. It can be built on Linux, OSX and Windows - however, testing is limited to Linux and OSX so Windows support may be subtly broken.

ethsnarks-emscripten

Builds libsnark and Ethsnarks for WebAssembly using Emscripten.

However, libgmp compiled to WebAssembly using Emscripten is very slow, around 40x slower than native. Given that around 60% of the proving time is GMP modulo multiplication operations this is a significant performance impact which limits the usefulness of the Emscripten port of Ethsnarks.

Examples

ethsnarks-hashpreimage

Ethereum compatible example project, demonstrates how to prove you know the secret pre-image for a SHA2-256 hash, integrates with an on-chain smart contract with Truffle, Javascript and Python support.

ethsnarks-snasma

Demonstrates the ‘roll_up’ transaction aggregator pattern for computational compression - using only three fields ‘from index’, ‘to index’ and ‘amount’ for each transaction the zkSNARK circuit ensures that a valid signature for the ‘from’ account in a merkle tree is used - it then updates the merkle tree and provides the new root.

ethsnarks-miximus

Ethereum compattible example project, provides an anonymised fixed-denomination coin mixing service for Ethereum. Includes Truffle, Javascript, Solidity and Python support.

ethsnarks-pepper-extgadget

Example of integrating Ethsnarks with the Pepper project to provide ‘exogenous gadgets’.

High-level languages

ethsnarks-il

This project aims to separate the ‘intermediate language’ part of the Ethsnarks repository (which started as part of the jsnark and pinocchio compatibility efforts) into its own repository.

ethsnarks-jsnark

Initial attempt at integration between jsnark and Ethsnarks, the circuits compiled using jsnark or xjsnark can be compiled, proved and run using Ethsnarks - which in turn is compatible with Ethereum.

ethsnarks-sfdl

Initial attempt at porting the FairPlay MPC language called ‘Secure Function Definition Language’ to be compatible with Ethsnarks and Ethereum.

ethsnarks-pinocchio

Initial attempt to add support for the Pinocchio C to QAP compiler and intermediate language to Ethsnarks.