This section of the documentation explains how to create a W3bstream ZK prover using Risc Zero as the ZK framework.

1. Rust language

Ensure you have the Rust compiler correctly installed
rustc --version

2. Cargo

Ensure you have cargo 1.72.0 or higher:
cargo version
update cargo with:
rustup update

3. rustzero toolchain

cargo install cargo-risczero
cargo risczero install

Build the prover code

Clone the W3bstream repository

Start by cloning the W3bstream repository, where you can start from a template prover:
git clone https://github.com/iotexproject/w3bstream.git
cd examples/risc0-circuit/
Open the folder in a code editor and make the required modifications based on your actual data message.
Learn more about developing Risc Zero provers: Go to the official Risc Zero documentation

Build the prover logic

cargo build --release
The prover bytecode is saved in a file named methods.rs inside the release folder. The correct path is logged at the end of the build:
warning: range-method@0.1.0: methods_path is: "/Users/simone/Source/GitHub/machinefi/sprout/examples/risc0-circuit/target/debug/build/range-method-2bec077ba5c1d7b6/out/methods.rs"
The method.rs file also includes the image ID of the prover that is needed by the verifier when verifying a proof:
pub const RANGE_ID: [u32; 8] = [512905798, 3876631256, 1803615688, 344980519, 987991463, 241449906, 813598757, 370978982];
-> Go to the Create a W3bstream Project section to create a W3bstream configuration file based on this prover.
→ See the On-chain Verification section to learn how to verify W3bstream proofs in your Dapp