ZK Voting App Deep Dive: Mixers, Merkel Trees, and Build with Noir - BuidlGuidl's Builder Bootcamp
Duration: 00:59:02
Speaker:
Type: Talk
Expertise:
Event: Devcon
Date: Jul 2026
This session introduces the core concepts and implementation details behind building a fully private ZK voting application. Philip walks through the privacy mechanism, starting with the concept of a mixer (similar to Tornado Cash) to break the link between a voter's address and their vote. The presentation then explains why a specialized Lean Incremental Merkel Tree is necessary for on-chain registration, and concludes with a deep dive into using the Noir (Nargo) programming language to define the zero-knowledge circuits and generate a Solidity verifier contract.
👉 To learn everything about building on Ethereum, go to https://speedrunethereum.com/
------
0:00 Speaker Introduction (Philip from Build Guild) & ZK Voting App Goal
0:02:10 Why Anonymous Voting is Needed (On-Chain Transparency Issues)
0:03:38 Concept 1: How Mixers Work (Like Tornado Cash)
0:04:40 Breaking the Sender-Receiver Connection with a Mixer
0:05:24 The Three Phases of a Mixer: Deposit, Mixing, and Withdraw
0:06:46 Mixer Mechanism: Using a New Address & a Secret to Withdraw
0:07:28 Mixer Application: Using the Gate to Call a Vote Function
0:07:39 Privacy Growth: Why the Mixer Pool Size and Fixed Denominations Matter
0:09:20 ZK Voting App Architecture: Back-end (Solidity/Noir) vs. Front-end (Proof Generation)
0:10:26 Back-end: Registration and Merkel Trees
0:11:03 Merkel Tree Basics (Quick Summary)
0:11:48 Problem with Normal Merkel Trees for Dynamic Registration (Over-Recalculation)
0:12:50 Solution: Lean Incremental Merkel Tree (Optimized for Incremental Updates)
0:20:24 Zero-Knowledge Proof Concept: Proving Ownership Without Revealing the Secret
0:22:14 Introduction to Noir (Nargo): The Rust-Based Circuit Programming Language
0:23:44 Noir: Public Inputs (Visible) vs. Private Inputs (The Secret)
0:24:46 Building the ZK Circuit: Including the Merkel Path and Commitment
0:26:01 ZK Logic: Nullifier Hash (Preventing Double-Voting)
0:31:58 Verifier Contract Logic: Checking the Computed Root Against the Stored Root
0:34:09 Generating the Solidity Verifier Contract with nargo
0:35:54 Front-end Role: Generating the ZK Proof Off-Chain
0:37:58 Solidity Implementation: Calling the Verifier Contract with Proof and Public Inputs
0:39:09 Final App Logic: Registering Votes & Storing Nullifiers for Double-Vote Check
0:57:32 Q&A: Preventing Linking of Registration and Voting Transactions (Causality)
------