Skip to content

Quickstart

This guide takes you from a fresh checkout of Venus to a fully verified zk-STARK proof of an Ethereum mainnet block, using the bundled zec-reth guest. The whole flow is driven by the top-level Makefile.

Prerequisites

You need the system dependencies described in Installation -- Rust, Node.js 20+, and the platform-specific packages. For GPU proving you also need the CUDA Toolkit and a compatible NVIDIA driver.

1. Clone Venus

git clone https://github.com/cysic-labs/venus.git
cd venus

2. End-to-End: make all

The fastest path is the default Makefile target, which runs setup, prove, and verify in sequence with the bundled mainnet input:

make all

This expands into:

make setup    # build, install toolchain, generate proving key, build guest, ROM setup, compile-key
make prove    # generate the proof for the bundled input
make verify   # verify the generated proof

The first run includes the proving-key generation step, which takes approximately 30-45 minutes depending on the machine. Subsequent runs skip key generation and reuse ./build/provingKey.

What gets built

Path Produced by Description
target/release/cargo-zisk make build Venus CLI binary (built with --features gpu).
build/provingKey/ make generate-key Proving key generated from the bundled PIL.
guest/zisk-eth-client/bin/guests/stateless-validator-reth/target/.../zec-reth make build-guest Default guest ELF (zec-reth, an Ethereum stateless validator).
tmp/vadcop_final_proof.bin make prove Final aggregated zk-STARK proof.

If everything succeeds, make verify finishes with a line similar to:

[INFO ] ProofMan: Proofs verified successfully

3. Choose a Different Input

The default input is guest/zisk-eth-client/bin/guests/stateless-validator-reth/inputs/mainnet_24628607_66_7_zec_reth.bin. Override it with the INPUT variable:

make prove INPUT=/abs/path/to/your_input.bin
make verify

4. Use the Hints Stream

The Makefile exposes a hints workflow via USE_HINTS=true. With hints enabled, the hot precompile operations are precomputed during a native run of the guest and streamed back into the prover:

make prove USE_HINTS=true
make verify

Internally, this:

  1. Builds the guest natively with RUSTFLAGS='--cfg zisk_hints' (make build-guest-native).
  2. Runs the native guest to emit hints.bin into guest/.../hints/<block>_hints.bin (make generate-hints).
  3. Re-runs rom-setup with the -n flag to enable hint support in the ROM.
  4. Calls cargo-zisk prove with -H <hints-file> instead of -i <input-file>.

See Hints Stream for the full protocol and how to add hints to your own guest.

5. Inspecting the Proof

Once make verify succeeds, the proof artefacts live under tmp/:

tmp/
└── vadcop_final_proof.bin

You can re-run verification at any time without regenerating the proof:

make verify

6. Cleanup

make clean   # remove ./target, ./tmp, and guest build artifacts
make purge   # also remove ./build/provingKey, ./pil/zisk.pilout, and node_modules

Next Steps