Please see the slightly outdated paper for an introduction to Ceno.
🚧 This project is currently under construction and not suitable for use in production. 🚧
If you are unfamiliar with the RISC-V instruction set, please have a look at the RISC-V instruction set reference.
Ceno is built in Rust, so installing the Rust toolchain is a pre-requisite if you want to develop on your local machine. We also use cargo-make to build Ceno. You can install cargo-make with the following command:
cargo install cargo-makeYou will also need to install the Risc-V target for Rust. You can do this with the following command:
rustup target add riscv32im-unknown-none-elfThe cargo ceno command is the primary tool for interacting with the Ceno zkVM. You can install it by running the following command from the root of the repository:
cargo install --path ceno_cliA variety of examples are availables.
To run an example, you first need to build it. You can run a specific example using the cargo ceno run command. For instance, to run the fibonacci example, use the following command:
cargo ceno run --example fibonacci --hints=10 --public-io=4191This command runs 2^10 (1024) Fibonacci steps via --hints=10. The expected result is 4191, which is verified against the --public-io=4191 argument.
To run the tests, you can use the following command:
cargo make testsClippy and check work as usual:
cargo check
cargo clippy
cargo buildTo set up docker container for CI, you can run the following command:
docker build -t ceno-runner scripts/ci/
docker run -d ceno-runnerCeno stands on the shoulders of remarkable projects in the zero-knowledge ecosystem. We extend our appreciation to the following works, which have shaped Ceno's design and direction:
- Plonky3 — Inspired by Plonky3’s modular architecture, enabling support for diverse field arithmetics.
- OpenVM — Ceno's recursion stack builds upon OpenVM's eDSL + native VM, while also borrowing its limb-based constraint design for RISC-V opcodes.
- SP1 — Derived significant insights from SP1's RISC-V emulator and memory layout strategy.