SDK Quick Start
The Nexus SDK provides simple, misuse-resistant programmatic use of the Nexus zkVM.
1. Install the Nexus zkVM
First, install Rust: https://www.rust-lang.org/tools/install.
Next, install the RISC-V target:
Then, install the Nexus zkVM:
And verify the installation:
This should print the available CLI commands. At present, the cargo nexus
CLI is minimal, providing just a cargo nexus host
command to setup an SDK based project.
2. Create a new Nexus host project
To use the zkVM programmatically, we need two programs: a guest program that runs on the zkVM, and a host program that operates the zkVM itself. Run:
This will create a new Rust project directory with the following structure:
Here, ./src/main.rs
is our host program, while ./src/guest/src/main.rs
is our guest program.
As a slightly more interesting example than the default Hello, World! program, you can change the content of ./src/guest/src/main.rs
to:
This guest program takes as input two integers, one public and one private, logs their values, and then returns their product.
Then, change the content of ./src/main.rs
to:
This host program compiles the guest program and then invokes the resultant binary with public input x = 5
and private input y = 3
.
The zkVM will then run the guest program, return a view containing the output (z = 15
) and logs, and produce a proof of its correct execution.
After the proving completes, the host program then reads the output out of the view, checks it and prints it along with any logs, and then verifies the proof.
3. Run your program
Next, we can run the host program (including executing and proving the guest program) with:
You should see the host program print:
To see more examples of using the SDK with more complicated guest programs, check out our walkthroughs for Gale-Shapley stable matching and the lambda calculus.
4. Run in legacy mode
In addition the Stwo-based Nexus zkVM 3.0 prover, the SDK also supports a legacy mode that uses the Nova, HyperNova, and (experimental) Jolt-based Nexus zkVM 2.0 machine. This machine uses a different runtime and requires additional configuration on the host side due to the use of public parameters and reference strings.
To use the legacy mode, you must first activate the appropriate feature for the nexus-sdk
dependency in the host program: legacy-nova
, legacy-hypernova
, or legacy-jolt
. Examples of using legacy mode to prove legacy guest programs are provided in the examples folder on Github.
To review the code used in the legacy mode, it corresponds to the Nexus zkVM v0.2.4 release.
Was this page helpful?