
zkVVM
Privacy for users, transparency for institutions.
About
The problem it solves **The Problem** Financial institutions moving on-chain face an unsolvable tradeoff: • Full transparency exposes sensitive financial activity to competitors, attackers, and the public. • Full privacy prevents auditing and compliance, making institutions and regulators unable to verify fund flows. Neither extreme enables real-world adoption. The system needs selective disclosure, transparency where accountability is required, privacy where protection is essential. ---- **The Insight** Financial infrastructure should make institutional flows visible while keeping individual transactions private. In other words: **transparency for settlement and oversight, privacy for users.** ---- **The Solution: zkVVM** zkVVM introduces a two-layer model: • **Transparent inter-institution layer:** Institutions deploy their own zkVVM instances and settle between each other via EVVM. These flows are visible and auditable on-chain. • **Private intra-institution layer:** Users transact inside shielded pools using zero-knowledge proofs. Deposits, transfers, and withdrawals remain unlinkable and amounts can remain private. ---- **Why It Matters** • Institutions gain compliance-ready transparency without exposing customer data. • Users get real financial privacy and protection from surveillance. • Regulators & auditors can verify flows and solvency where it matters. ---- **zkVVM makes on-chain finance viable by combining privacy, auditability, and institutional compliance.** Use of AI tools and agents We used AI assistants, primarily Gemini and Claude, as development copilots to accelerate research, implementation, and documentation. They helped clarify zero-knowledge workflows, Poseidon/Merkle/nullifier logic, and Noir circuit constraints; reviewed Solidity patterns and EVVM meta-transaction flows; assisted with frontend hooks, TypeScript structure, and UX improvements; and supported drafting technical docs and the pitch narrative. All architectural decisions, security-critical logic, and final implementations were validated manually and through testing.
How it's made
Challenges we ran into One of the main hurdles was getting the zero-knowledge withdrawal flow to work reliably across the Noir circuits, verifier, and Solidity contracts. Early proofs failed due to mismatches in public inputs, Merkle root formatting, and nullifier handling, which caused on-chain verification to revert. We resolved this by standardizing input encoding across the circuit and contract layers, adding helper circuits for commitment/root computation, and building integration tests that generated real proofs end-to-end. This ensured deterministic proof generation and prevented double-spend or invalid-root errors.