hekaton-system

Horizontally-scalable zkSNARKs for any iterated computation

https://github.com/pratyush/hekaton-system

Science Score: 36.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
  • Committers with academic emails
    1 of 1 committers (100.0%) from academic institutions
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (11.6%) to scientific vocabulary
Last synced: 11 months ago · JSON representation

Repository

Horizontally-scalable zkSNARKs for any iterated computation

Basic Info
  • Host: GitHub
  • Owner: Pratyush
  • License: apache-2.0
  • Language: Rust
  • Default Branch: main
  • Homepage:
  • Size: 21.9 MB
Statistics
  • Stars: 8
  • Watchers: 4
  • Forks: 3
  • Open Issues: 4
  • Releases: 0
Created almost 4 years ago · Last pushed over 1 year ago
Metadata Files
Readme Changelog Contributing License Citation Security

README.md

Hekaton

This repo contains code for the Hekaton divide-and-aggregate zero-knowledge proof scheme.

Code organization

The code is organized as follows:

  • cp-groth16 contains our implementation of Mirage, along with our interface for writing "staged" circuits that can be easily integrated with commit-and-prove SNARKs
  • distributed-prover implements our DNA SNARK, and also implements the experiments described in the paper.
  • mpi-snark implements the MPI binary that runs the distributed prover on an MPI-compatible cluster.
  • slurm_scripts contains various scripts required for running these experiments on our cluster. The most salient of these are the setup_bench script and the run_single_bench script, which respectively perform SRS generation and circuit proving.

Caveats

  • The code in this repo is not production-ready. It is the product of a small research team. Use with caution.
  • We do not implement a standalone verifier for our proofs. The prover runs a verification routine here, but we haven't exposed it as its own function.
  • We do not implement an interface for specifying public inputs to circuits.

Build instructions

This is a Rust library, and so can be compiled by using the cargo build tool.

To install cargo (and rust), follow the instructions here: rustup.rs.

This library is currently supported only on Linux; any relatively recent distribution should work.

A second dependency is OpenMPI; install this from your package manager of choice.

Running benchmarks

The existing scripts for reproducing experiments are specialized for our university cluster. So you won't be able to run these to completion on your system.

To simply compile and run experiments locally, one can invoke the commands in the following scripts: - slurm_scripts/setup_task.sh to perform SRS generation - slurm_scripts/my_task.sh to invoke the distributed prover and benchmark its performance.

Specifically, the steps are as follows:

  • First, switch to the distributed_prover folder.

  • For setup for main scalability experiments: cargo run --release setup-big-merkle \ --num-subcircuits <num_subcircuits> \ # specifies number of subcircuits --num-sha2-iters <num_iters_of_sha2> \ # specifies subcircuit size --num-portals <num_shared_wires> \ # specifies number of shared wires --key-out <file_name> # specifies file to store the generated SRS

  • For setup for verifiable key directory experiment: cargo run --release setup-vkd \ --num-subcircuits <num_subcircuits> \ # number of subcircuits --key-out <file_name> # specifies file to store the generated SRS

  • For setup for VM experiment: cargo run --release setup-vm \ --num-subcircuits <num_subcircuits> \ # number of subcircuits (increasing this increases the size of the overall circuit) --num-cycles-per-subcircuit 1024 \ --key-out <file_name> # specifies file to store the generated SRS

  • Next, to run any of the corresponding experiments, simply invoke the following command: cargo run --release work \ --key-file <file_name> \ # the file produced in the steps above --num-workers <num_workers> \ # the number of MPI workers to use for this experiment.

Owner

  • Name: Pratyush Mishra
  • Login: Pratyush
  • Kind: user
  • Company: @arkworks-rs

GitHub Events

Total
  • Watch event: 7
  • Push event: 2
  • Fork event: 1
Last Year
  • Watch event: 7
  • Push event: 2
  • Fork event: 1

Committers

Last synced: about 1 year ago

All Time
  • Total Commits: 1
  • Total Committers: 1
  • Avg Commits per committer: 1.0
  • Development Distribution Score (DDS): 0.0
Past Year
  • Commits: 1
  • Committers: 1
  • Avg Commits per committer: 1.0
  • Development Distribution Score (DDS): 0.0
Top Committers
Name Email Commits
Pratyush Mishra p****a@b****u 1
Committer Domains (Top 20 + Academic)

Issues and Pull Requests

Last synced: about 1 year ago

All Time
  • Total issues: 5
  • Total pull requests: 3
  • Average time to close issues: 21 days
  • Average time to close pull requests: 2 days
  • Total issue authors: 1
  • Total pull request authors: 2
  • Average comments per issue: 1.8
  • Average comments per pull request: 0.0
  • Merged pull requests: 3
  • Bot issues: 0
  • Bot pull requests: 0
Past Year
  • Issues: 0
  • Pull requests: 0
  • Average time to close issues: N/A
  • Average time to close pull requests: N/A
  • Issue authors: 0
  • Pull request authors: 0
  • Average comments per issue: 0
  • Average comments per pull request: 0
  • Merged pull requests: 0
  • Bot issues: 0
  • Bot pull requests: 0
Top Authors
Issue Authors
  • rozbb (5)
Pull Request Authors
  • Dutt-A (2)
  • Pratyush (1)
Top Labels
Issue Labels
Pull Request Labels