https://github.com/arkworks-rs/r1cs-tutorial
Tutorial for writing constraints in the `arkworks` framework
Science Score: 26.0%
This score indicates how likely this project is to be science-related based on various indicators:
-
○CITATION.cff file
-
✓codemeta.json file
Found codemeta.json file -
✓.zenodo.json file
Found .zenodo.json file -
○DOI references
-
○Academic publication links
-
○Academic email domains
-
○Institutional organization owner
-
○JOSS paper metadata
-
○Scientific vocabulary similarity
Low similarity (15.2%) to scientific vocabulary
Keywords
Repository
Tutorial for writing constraints in the `arkworks` framework
Basic Info
Statistics
- Stars: 243
- Watchers: 6
- Forks: 90
- Open Issues: 5
- Releases: 0
Topics
Metadata Files
README.md
Introduction to SNARK Development with `arkworks`
In this tutorial, we will learn how to write applications for use with state-of-the-art zkSNARKs using the arkworks ecosystem of SNARK libraries.
Prerequisites
Because the arkworks ecosystem uses the Rust programming language, this tutorial assumes some familiarity with the basics of Rust. We also assume basic familiarity with zkSNARK concepts, and in particular with the following terminology:
- Public input/instance: a publicly known object that the verifier can check a zkSNARK proof against. For example, in a proof of membership in a Merkle tree, the Merkle tree root would be a public input.
- Private input/witness: an object that is known only to the prover, for either efficiency or privacy reasons. In the Merkle tree example, the Merkle tree authentication path would be a private input.
- Circuit: an encoding of a computation in a way that can be proven using a zkSNARK.
- Gadget: subcircuits corresponding to useful computations that can be used to build up the full circuit. In the Merkle tree example, a hash function gadget would be used repeatedly.
Instructions
Ensure that you have the latest version of Rust installed (1.51 at the time of writing). If you do not already have Rust installed, you can do so via
rustup. Linux users, please note thatarkworksrelies on Rust 1.51, which might be more recent than the Rust version provided by your distribution's package repositories; hence, even if you have installed Rust via your package manager, please install the latest Rust viarustup.Clone this repository via
git clone https://github.com/arkworks-rs/r1cs-tutorial.git(Optional) While Rust works out of the box with your text editor of choice, using Visual Studio Code along with the
rust-analyzerplugin makes Rust development easier.(Optional) Join the Telegram channel for this tutorial and for the
arkworksecosystem to ask questions interactively.Proceed to the exercises below.
Exercises
In this tutorial, we will construct a SNARK-based rollup for a simple payments system. In the course of doing so, you will learn how to use arkworks libraries for writing constraint systems, how to debug these circuits for both correctness and performance, and finally how to plug these circuits into zkSNARKs.
First, checkout the main branch in the repository.
Exercise 1: Merkle Tree Example
We'll design a simple circuit for checking a Merkle tree membership path for a given leaf.
Open merkle-tree-example/README.md.
Exercise 2: Validating a single transaction
We'll design a circuit for validating a single transaction in a simple account-based payment system.
Open simple-payments/README.md to first learn more about the payment system, and then open rollup/README.md for the instructions for this exercise.
Exercise 3: Writing a rollup circuit
We'll design a circuit for a rollup for batch verification of transactions in the foregoing payment system.
Open rollup/README.md for the instructions for this exercise.
Solutions
If you get stuck on one of the above exercises, or if you wish to compare your solution with ours, check out the solutions branch on this repository.
Owner
- Name: arkworks
- Login: arkworks-rs
- Kind: organization
- Website: arkworks.rs
- Twitter: arkworks_rs
- Repositories: 25
- Profile: https://github.com/arkworks-rs
An ecosystem for developing and programming with zkSNARKs
GitHub Events
Total
- Watch event: 36
- Member event: 1
- Issue comment event: 1
- Pull request event: 4
- Fork event: 15
Last Year
- Watch event: 36
- Member event: 1
- Issue comment event: 1
- Pull request event: 4
- Fork event: 15
Issues and Pull Requests
Last synced: 9 months ago
All Time
- Total issues: 5
- Total pull requests: 9
- Average time to close issues: about 3 hours
- Average time to close pull requests: 2 days
- Total issue authors: 5
- Total pull request authors: 8
- Average comments per issue: 1.8
- Average comments per pull request: 0.56
- Merged pull requests: 7
- Bot issues: 0
- Bot pull requests: 0
Past Year
- Issues: 0
- Pull requests: 2
- Average time to close issues: N/A
- Average time to close pull requests: 6 days
- Issue authors: 0
- Pull request authors: 2
- Average comments per issue: 0
- Average comments per pull request: 0.5
- Merged pull requests: 0
- Bot issues: 0
- Bot pull requests: 0
Top Authors
Issue Authors
- ghost (1)
- fwmm (1)
- Dengjianping (1)
- stechu (1)
Pull Request Authors
- weikengchen (2)
- rac-sri (2)
- aayux (1)
- pmikolajczyk41 (1)
- mimoo (1)
- nuke-web3 (1)
- rnkrtt (1)
- Mikerah (1)
- Guayaba221 (1)
Top Labels
Issue Labels
Pull Request Labels
Dependencies
- actions-rs/cargo v1 composite
- actions-rs/toolchain v1 composite
- actions/cache v2 composite
- actions/checkout v2 composite
- actions/checkout v1 composite
- actions/checkout v2 composite