Innovation at NoirHack

May 29, 2025
Key Points

Working at the frontier of knowledge might sound distant, extremely hard, or even like a fantasy… Yet our R&D team dove in from scratch to master one of the most cutting-edge technologies in the crypto ecosystem, one with the potential to change the world in the coming years.

“I expect ZK-SNARKs to be a significant revolution as they permeate the mainstream world over the next 10-20 years.”
Vitalik Buterin

Thanks to @aztecnetwork and @noirlang, over the past four weeks we took part in #NoirHack, an incredible hackathon focused on building real-world applications with Noir and Zero-Knowledge Proofs.

Below we share our experience, our project, and what we learned, but first…

What the #@%$ is Zero Knowledge Proofs and Noir?

Zero-knowledge proofs (ZKPs) are a broad family of cryptographic protocols that let you prove a statement is true without revealing any extra information about that statement while still allowing public verification.

The ZKP variant most widely used in the blockchain world is called zk-SNARKs. Different frameworks with distinct characteristics implement these proofs (e.g., PLONK, Halo, Groth16); each such framework is known as a zk-SNARK scheme.

The system involves two main actors:

  • Prover - the entity that produces the cryptographic proof.
  • Verifier - the entity that checks the proof’s validity.

Imagine you can open a safe in front of a crowd without revealing the combination, neither to the onlookers nor to the safe’s locking mechanism—proving only that you know the unlock code. You are the prover, the safe’s lock is the verifier, and the proof itself is your ZKP.

Under the hood

  • To create a ZKP, the prover feeds public and private data into a public program—the circuit—which is a set of constraints. If those constraints are satisfied, a valid proof is produced.
  • To verify a proof, the verifier runs it through a proving backend (of which there are many flavors).

A prover’s claim can be expressed abstractly as: F(x, w) = y, where

  • F – the public program, i.e., the circuit
  • x, y – public data (okay to reveal)
  • w – secret data (the safe’s combination), called the witness

Building a circuit means converting whatever logic or program you want to prove into an arithmetic format compatible with the cryptographic protocol, not an easy task. This conversion is called arithmetization.

Arithmetization transforms a program F into a constraint system: a collection of algebraic polynomial rules that can be satisfied only with knowledge of x, y, w.

Doing this by hand is hard. ✨ Noir ✨ closes the gap with this workflow:

  1. A program written in Noir is compiled to ACIR (Abstract Circuit Intermediate Representation).
  2. ACIR is universal, any proving backend can consume it.
  3. The chosen backend turns ACIR into the actual constraint system.

In short

  • Zero-Knowledge Proofs (ZKPs): cryptographic protocols that prove a statement true without leaking extra info.
    • zk-SNARK: a popular ZKP variant in blockchain.
    • zk-SNARK scheme: a specific framework (e.g., PLONK) for generating/verifying zk-SNARKs.
  • Constraint system: an arbitrary program expressed as algebraic polynomials.
  • Arithmetization: turning a program into a constraint system.
  • Noir: a Rust-flavored language that abstracts away arithmetization.

The actors:

  • Circuit: the program made of rules and constraints.
  • Prover: knows a secret w; if w is valid, generates a proof.
  • Verifier: uses a backend to check the proof.

A tiny example

  • Circuit in Noir:
fn main(a: Field, b: Field) {
	let sum = a + b;
    assert(sum == 42);
}
  • Circuit in PLONK
1 * a + 1 * b + 0 * wO ​+ 0 * (a * b) − 42 = 0

NoirHack 👽

The hackathon lasted four weeks. The first two weeks were dedicated to learning and building mental models for these technologies, which differ fundamentally from traditional programming.

Resources we found most helpful

To get hands-on with Noir and solidify those models, the three-episode Discovering Noir campaign by Node Guardians was invaluable.

Meanwhile, we enjoyed a parade of outstanding workshops, ranging from basics of ZK tech and ready-made libraries to brainstorming, team formation, and pitching tips. You can find the full list here:

Not only that, but throughout the entire duration, the help of everyone involved in organizing the hackathon was indispensable. No matter the time, there was always someone who could answer any concerns or questions, whether technical or not.

Many thanks to @CatMcGeeCode, @0xrafi, @james_zaki, @critesjosh_, @_saleel, @cryptobuilder_, @zkpedrongmi for your effort, time, and passion—without you, the hackathon experience would have been entirely different. 💜🫡

On-Chain Quests 🏹

The final two weeks were build-and-execute time. We brainstormed many ideas:

  • ZKP access gating for gaming
  • Anonymous voting pools
  • 1-v-1 fighting game without revealing fighter stats / perks
  • Nuclear inventory control with ZKPs

The idea that resonated most was an on-chain quest hub with rewards.

The core idea is simple, though the complexity depends on the quest type. For the hackathon we made a proof-of-concept around riddles:

  1. A user opens a quest, specifying its title, riddle, and a reward for the first solver.
  2. Everything is stored and mediated by a smart contract—public, automatic, immutable.
  3. We built a web interface where anyone can attempt the quest; a live activity board shows all simultaneous attempts.
  4. When someone submits the correct answer, the quest is marked solved and the reward is released.

Under the hood:

  • Our implementation tries to generate a valid proof from the submitted answer; it succeeds only if the answer matches the riddle’s solution.
  • The proof is sent on-chain to our QuestFactory contract.
  • A Solidity verifier contract, auto-generated from the Noir circuit with nargo, does the final check.
    How to generate a Solidity Verifier

If the data is correct, QuestFactory calls QuestVerifier. On success, the quest is closed, the reward paid to the solver, and events are emitted so the UI updates instantly.

Takeaways

The journey demanded effort, frustration, and hard work, but we discovered and learned a ton. Opportunities like this provide a much gentler on-ramp for anyone looking to dive down this rabbit hole.

Finally, our idea and execution were highlighted by the judges, and our team was named a Notable Team. 💜🚀

Many thanks to @aztecnetwork and @noirlang for the time, effort, resources, and everything it takes to run a global event of this scale. Until next time—Noir gud 👽

Macarena López Morillo
Head of People @ Rather Labs
Get the Full Picture
For an in-depth understanding of this topic, don't miss out. Learn more here and elevate your knowledge.
right arrow

Featured Resources

Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.