Skip to main content
Using OpenVM securely requires deterministic program compilation, which enables users to verify that OpenVM binaries correspond to the original programs they are interested in. On the Axiom Proving API, we achieve this by running the compilation process in a Docker container. We use the following host and guest versions of Rust:
  • The host architecture is linux/amd64 with Rust .0: rustc {CARGO_TOOLCHAIN}.0 (05f9846f8 2025-03-31).
  • The guest target is riscv32im-risc0-zkvm-elf with Rust : rustc {CARGO_TOOLCHAIN}.0-nightly (a567209da 2025-02-13).
The resulting RISC-V ELF is then transpiled to an OpenVM binary. See the OpenVM documentation for more details about this build process.

Reproducing a Build

To replicate a build done on the Axiom Proving API, follow the following steps. Before running them, make sure you have cargo-openvm and Docker installed.
  1. Download the program source code (a tar.gz file) and the OpenVM config (a openvm.toml file) from the Axiom Proving API console program page.
  2. Prepare the following files locally:
An executable script (compile.sh), that compiles a program and puts the output in the output directory:
compile.sh
#!/bin/bash

cd YOUR_PROGRAM_NAME  # this is the directory name of your program
cargo openvm build
cp openvm/app.vmexe ../output/
And the Dockerfile. Note that --platform=linux/amd64 on the first line is necessary to guarantee that the build is identical.
  1. And then run these commands:
docker build -f Dockerfile . -t my-reproducible-build:latest

mkdir -p output
docker run -v $(pwd)/output:/output my-reproducible-build:latest
  1. Finally, download the OpenVM exe from the Axiom Proving API console and confirm that it matches what you obtained locally.
diff output/app.vmexe your-downloaded-exe