Just One Lookup Table.
Jolt is a zkVM (zero-knowledge virtual machine) for RISC-V, built to be the simplest, fastest, and most extensible general-purpose of its kind. This repository currently contains an implementation of Jolt for the RISC-V 32-bit Base Integer instruction set (RV32I). Contributors are welcome!
The Jolt paper was written by Arasu Arun, Srinath Setty, and Justin Thaler.
- Docs
- Blog posts
- Papers
Note
Jolt is in alpha and is not suitable for production use yet.
For developers looking to build using Jolt, check out the Quickstart guide.
For developers looking to contribute to Jolt, follow the instructions below.
You will need Rust nightly.
To compile the guest programs to RV32I, you will need to add the compilation target using rustup
:
rustup target add riscv32i-unknown-none-elf
Finally, clone this repo:
git clone git@github.com:a16z/jolt.git
This repository uses workspaces, and each workspace can be built individually, e.g.
cargo build -p jolt-core
For faster incremental builds, use the build-fast
profile:
cargo build --profile build-fast jolt-core
Unit and end-to-end tests for jolt-core
can be run using the following command:
cargo test -p jolt-core
Examples in the examples
directory can be run using e.g.
```cargo run --release -p sha2-chain`
Jolt uses tracing_chrome for performance profiling.
To generate a trace, run:
cargo run --profile build-fast -p jolt-core trace --name sha3 --format chrome
Where --name
can be sha2
, sha3
, sha2-chain
, or fibonacci
. The corresponding guest programs can be found in the examples
directory. The benchmark inputs are provided in bench.rs
.
The above command will output a JSON file, e.g. trace-1712455107389520.json
, which can be viewed in Perfetto.
This repository started as a fork of https://github.com/arkworks-rs/spartan. Original Spartan code by Srinath Setty.
This code is being provided as is. No guarantee, representation or warranty is being made, express or implied, as to the safety or correctness of the code. It has not been audited and as such there can be no assurance it will work as intended, and users may experience delays, failures, errors, omissions or loss of transmitted information. Nothing in this repo should be construed as investment advice or legal advice for any particular facts or circumstances and is not meant to replace competent counsel. It is strongly advised for you to contact a reputable attorney in your jurisdiction for any questions or concerns with respect thereto. a16z is not liable for any use of the foregoing, and users should proceed with caution and use at their own risk. See a16z.com/disclosures for more info.