Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/eniac/otti
A zkSNARK compiler for optimization problems
https://github.com/eniac/otti
Last synced: about 1 month ago
JSON representation
A zkSNARK compiler for optimization problems
- Host: GitHub
- URL: https://github.com/eniac/otti
- Owner: eniac
- Created: 2022-01-26T14:36:45.000Z (almost 3 years ago)
- Default Branch: main
- Last Pushed: 2023-03-31T20:19:39.000Z (over 1 year ago)
- Last Synced: 2024-08-03T01:13:39.460Z (4 months ago)
- Language: Python
- Homepage:
- Size: 41.8 MB
- Stars: 6
- Watchers: 7
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
- awesome-zkml - Otti
README
Otti
------
A zkSNARK compiler, solver, prover and verifier for optimization problems ([paper](https://eprint.iacr.org/2021/1436)).# Cloning
To clone this repository and its submodules run
```
git clone --recursive https://github.com/eniac/otti.git
```# Building
First, make sure you have installed [Docker CE](https://docs.docker.com/get-docker/).Then build the Otti container
```
docker build -t otti .
```And then run the container with 200GB of memory and get terminal access
```
docker run -m 200g -it otti
```## Reproducing experimental results
After connecting to the Docker container, run the following script to reproduce the experimental results from [Otti](https://eprint.iacr.org/2021/1436).
```
./run.py [--lp | --sdp | --sgd] [--small | --full | --custom datasets/]
```One of the `--lp | --sdp | --sgd` options is required. Then either execute with
the `--small` or `--full` flag or `--custom` and explicitly give a path to a dataset file.### Running the small suite
A subset of each dataset that can be reproduced on a personal computer with x86_64 architecture and >= 12GB of RAM.
These datasets are expected to take less than 1 hour.### Running the full suite
A subset of each MPS dataset that can be reproduced on a large machine with x86_64 architecture and > 200GB RAM.
These datasets can take several hours, in the order of 2-3 days to terminate. If your computer does not have sufficient
RAM memory or more applications have reserved memory, this might be killed by the OS. This is a well-known limitation
of the compiler that consumes large amounts of memory.### Running individual files in `datasets/*`
Our script will generate a C-file from the dataset file including non-deterministic checks. We
compile it with the Otti compiler, prove and verify it and print `Verification successful` and the total runtime.
of each stage.
Note that running indiviudal SGD datasets not from plmb is not supported at
this time.# Directory structure
```
├── compiler -- zkSNARK compiler written in Haskell, a fork of CirC.
├── codegen -- Code generators convert LP, SDP, SGD datasets to C files with non-deterministic checkers
├── datasets -- The datasets from the Otti paper evaluation
│ ├── LP -- Linear programming (LP) dataset based on Netlib-LP
│ ├── SDP -- Semi-definite programming (SDP) dataset based on SDPLIB
│ ├── SGD -- Stochastic Gradient Descent (SGD) dataset references and hyperparameters for PMLB dataset
├── Dockerfile -- The Dockerfile that builds Otti
├── README.md -- This file
├── run.py -- Entry point executable script for reproducing experimental results (artifact eval)
├── Spartan -- The Spartan zkSNARK prover/verifier back-end from Microsoft
├── spartan-zkinterface -- A compatibility layer between the compiler and Spartan
└── deps -- External dependensieshttps://github.com/circify/circ
```