https://github.com/anoma/vamp-ir
Vamp-IR is a proof-system-agnostic language for writing arithmetic circuits
https://github.com/anoma/vamp-ir
blockchain cryptography zero-knowledge zkp
Last synced: 7 months ago
JSON representation
Vamp-IR is a proof-system-agnostic language for writing arithmetic circuits
- Host: GitHub
- URL: https://github.com/anoma/vamp-ir
- Owner: anoma
- License: apache-2.0
- Created: 2022-04-28T19:13:24.000Z (almost 4 years ago)
- Default Branch: main
- Last Pushed: 2023-08-29T15:24:30.000Z (over 2 years ago)
- Last Synced: 2025-04-02T06:17:44.107Z (10 months ago)
- Topics: blockchain, cryptography, zero-knowledge, zkp
- Language: Rust
- Homepage: https://anoma.github.io/VampIR-Book/
- Size: 105 MB
- Stars: 160
- Watchers: 8
- Forks: 50
- Open Issues: 48
-
Metadata Files:
- Readme: README.md
- License: LICENSE-APACHE
Awesome Lists containing this project
README
# Vamp-IR
Vamp-IR is a language for arithmetic circuits. The Vamp-IR compiler can transform an arithmetic circuit into a form that is compatible with any proving system backend.
## Docs
[Vamp-IR book (WIP)](https://github.com/anoma/VampIR-Book)
## Trying Vamp-IR
### Installation
```
git clone git@github.com:anoma/vamp-ir
cd vamp-ir
cargo build
```
### Hello World!
We will build a circuit in Vamp-IR that checks if a pair $(x, y)$ is a point on a circle of a certain radius, $R$, which is given publicly.
In a file `pyth.pir` :
```
// declare R to be public
pub R;
// define the Pythagorean relation we are checking
def pyth a b c = {
a^2 + b^2 = c^2
};
// appends constraint x^2 + y^2 = R^2 to the circuit
pyth x y R;
```
### Compile
Compile source `pyth.pir` to a circuit that can be used in Halo2 and serialize it to the file `pyth.halo2`.
```
vamp-ir halo2 compile -s pyth.pir -o pyth.halo2
```
### Create a proof
Suppose the target radius $R$ is $25$, and we come up with $(x, y) = (15, 20)$. We can use `vamp-ir` to create a Halo2 proof using these inputs.
First create a file `pyth.inputs` in JSON format which contains our solution.
```
{
"x": "15",
"y": "20",
"R": "25"
}
```
Then run the Halo2 prover using our compiled circuit and our inputs, outputting a Halo2 proof to `pyth.proof`.
```
vamp-ir halo2 prove -c pyth.halo2 -i pyth.inputs -o pyth.proof
```
### Verify the proof
Run the Halo2 verifier using the compiled circuit and the proof.
```
vamp-ir halo2 verify -c pyth.halo2 -p pyth.proof
```
###
## Benchmarks
These benchmarks are performed on a Lenovo ThinkPad X1 Carbon Gen 9 with 8.0 GiB RAM and
an 11th Gen Intel® Core™ i5-1135G7 @ 2.40GHz × 8 unless stated otherwise
### Halo2 backend
#### SHA256 1 block message
| | `Compile` | `Prove` | `Verify` |
|:--------|:-----------|:-----------|:---------|
| Vamp-IR | `172.05 s` | `26.72 s` | `0.61 s` |
| Halo2 | // | `161.05 s` | `1.06 s` |
#### SHA256 2 block message
| | `Compile` | `Prove` | `Verify` |
|:--------|:-----------|:-----------|:---------|
| Vamp-IR | `353.76 s` | `46.91 s` | `1.09 s` |
| Halo2 | // | `160.03 s` | `1.05 s` |
#### SHA256 4 block message
| | `Compile` | `Prove` | `Verify` |
|:--------|:-----------|:----------------|:---------|
| Vamp-IR | `729.47 s` | Memory Failiure | X |
| Halo2 | // | `160.36 s` | `1.03 s` |
We re-run the with a device that has 128GB of RAM and these are the results:
| | `Compile` | `Prove` | `Verify` |
|:--------|:----------|:-----------|:---------|
| Vamp-IR | `60 s` | `81.983 s` | `0.6 s ` |
### ZK-garage plonk backend
#### Blake2s
| | `Compile` | `Prove` | `Verify` |
|:----------|:----------|:----------|:---------|
| Vamp-IR | `76.30 s` | `57.59 s` | `0.22 s` |
| ZK-Garage | // | `32.48 s` | `0.10 s` |
#### Blake2s using only fan-in 2 gates
To have a more fair comparison between Vamp-IR and ZK-Garage, we can use only fan-in 2 gates in the Blake2s circuit.
This is because the current version of Vamp-IR does not uses fan-in 3 gates, as the ZK-Garage backend does, which in a
speed-up.
| | `Compile` | `Prove` | `Verify` |
|:----------|:----------|:-----------|:---------|
| Vamp-IR | `76.30 s` | `57.59 s` | `0.22 s` |
| ZK-Garage | // | `360.48 s` | `0.81 s` |
The version of Blake2 used for the latter benchmark can be found here:
https://github.com/heliaxdev/ark-plonk/blob/blake2s/examples/blake2s_circuit_fain2.rs
## License
Licensed under either of
* Apache License, Version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or
http://www.apache.org/licenses/LICENSE-2.0)
* MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT)
at your option.
### Contribution
Unless you explicitly state otherwise, any contribution intentionally
submitted for inclusion in the work by you, as defined in the Apache-2.0
license, shall be dual licensed as above, without any additional terms or
conditions.