Zero-knowledge proofs have a reputation for being math-heavy and hard to debug. In frameworks like circom (JavaScript toolchain), the lack of static typing means type confusion bugs pass silently.
halo2 is a ZK proving system written in Rust. I’ve been working with production halo2 circuits for three years. In this talk I’ll show what building ZK circuits in Rust actually looks like: how the type system enforces circuit structure (typed columns, region APIs, the Circuit trait), how MockProver catches constraint bugs before you waste time on full proving, and where Rust’s strictness helps versus where it gets in the way.
I’ll walk through a minimal circuit (a range check: proving a number is between 0 and 255 without revealing it), show the execution trace, the constraints, and the proof, then connect it to a real use case: age verification with a digital ID, where you prove you’re over 18 without revealing your birth date. Live demo: I’ll run this on stage. No heavy math, just Rust and finite field basics.