Production checklist
Use this checklist before shipping a workflow backed by ProveKit. It is intentionally conservative: ProveKit is still under active development and main may change proof, key, recursive-verifier, or API formats between commits.
1. Pin the implementation
Section titled “1. Pin the implementation”- Use the
v1.0.2tag for the current documented interface; usemainonly for early-adopter work, with a migration or rollback plan. - Record the git commit, lockfile, toolchain, and exact CLI commands used to generate every artifact set.
2. Control and handle artifacts
Section titled “2. Control and handle artifacts”For every generated artifact, record the provenance below:
| Artifact | Required provenance |
|---|---|
.pkp | Circuit source, release, commit, generating command. |
.pkv | Same generation record as the matching .pkp. |
proof.np or JSON proof | Matching .pkp, input file, public inputs, commit. |
params_for_recursive_verifier | Matching .pkp and proof. |
r1cs.json | Matching .pkp and recursive-verifier export command. |
Groth16 pk / vk | Setup ceremony or development-only generation record. |
Handling rules:
- Do not mix artifacts generated from different releases, commits, circuits, or verifier/proof pairs.
- Treat public input encoding as an API contract; review
show-inputs --hexoutput as part of release sign-off. - Keep private witness values and prover keys out of logs unless explicitly approved.
3. Lock the end-to-end workflow
Section titled “3. Lock the end-to-end workflow”Add a CI job that runs the exact deployment path:
mkdir -p artifactscargo run --release --bin provekit-cli -- prepare \ . \ --pkp artifacts/app.pkp \ --pkv artifacts/app.pkvcargo run --release --bin provekit-cli -- prove \ --prover artifacts/app.pkp \ --input Prover.toml \ --out artifacts/proof.npcargo run --release --bin provekit-cli -- verify \ --verifier artifacts/app.pkv \ --proof artifacts/proof.npcargo run --release --bin provekit-cli -- show-inputs --hex \ artifacts/app.pkv \ artifacts/proof.npIf recursive verification is part of the product, add the export step and verify the Go/gnark path with the exact generated files:
cargo run --release --bin provekit-cli -- generate-gnark-inputs \ artifacts/app.pkp \ artifacts/proof.np \ --params artifacts/params_for_recursive_verifier \ --r1cs artifacts/r1cs.json4. Harden integration hosts
Section titled “4. Harden integration hosts”Rust services
Section titled “Rust services”- Reload or clone verifier state when verifying multiple proofs in one process.
- Keep the prover and verifier on the same release as the artifact set.
- Add regression tests that confirm mismatched key/proof pairs are rejected.
WASM / JavaScript
Section titled “WASM / JavaScript”- Call
initPanicHook()andinitThreadPool()before proving when using threaded builds. - Create a new
Proverfor each proof;proveBytes()/proveJs()consume the prover. - Validate witness maps before calling
proveBytes()orproveJs(). - Load
.pkpand.pkvartifacts from authenticated, integrity-checked sources.
FFI / mobile
Section titled “FFI / mobile”- Call
pk_init()once before proving. - Configure the custom allocator or mmap memory before initialization.
- Free every returned
PKBufwithpk_free_buf(). - Test low-memory and cancellation behavior on target devices.
Verifier server
Section titled “Verifier server”- Restrict artifact URL sources or proxy them through trusted storage.
- Tune
VERIFIER_MAX_REQUEST_SIZE,VERIFIER_REQUEST_TIMEOUT,VERIFIER_TIMEOUT_SECONDS, andVERIFIER_SEMAPHORE_LIMITfor real proof sizes. - Monitor
/health, request IDs, verification latency, timeout rate, and invalid-proof rate. - Decide how long downloaded artifacts remain in
VERIFIER_ARTIFACTS_DIR.
Recursive verifier
Section titled “Recursive verifier”- Generate the Groth16 trusted-setup proving and verifying keys with a production-grade ceremony, not the development helper.
- Re-run the recursive export after changing the proof, prover key, release, or circuit.
5. Red flags
Section titled “5. Red flags”Pause deployment if any of these are true:
- Artifact provenance is unknown or spans multiple branches or commits.
verifyfails locally for a proof the service plans to accept.- Recursive-verifier params or
r1cs.jsonwere not regenerated with the current.pkvand proof. - Public input ordering is not pinned by a
show-inputs --hextest for the production circuit. - Verifier-server artifact URLs can be controlled by untrusted clients without filtering.
- FFI buffers are not freed, or allocator setup happens after
pk_init(). - Browser proving reuses a consumed WASM
Proverinstance. - The deployment depends on
mainbehavior without a migration or rollback plan.