Introduction
Tornado Nova uses zero-knowledge circuits written in Circom to enable private transactions. These circuits generate zk-SNARK proofs that validate transaction correctness without revealing sensitive information like amounts, recipients, or transaction history.Circuit Architecture
The circuit system is composed of several modular components:Core Components
Transaction Circuits
Universal JoinSplit circuits that support either 2 or 16 inputs with 2 outputs. These handle the main transaction logic including commitment verification, nullifier generation, and amount invariants.
Merkle Proof Circuits
Cryptographic proof circuits that verify a UTXO commitment exists in the Merkle tree without revealing which specific UTXO it is.
UTXO Model
Tornado Nova implements a UTXO (Unspent Transaction Output) model similar to Bitcoin. Each UTXO contains:Cryptographic Primitives
Commitments: Hide UTXO details while allowing verificationAll hash functions use Poseidon, a ZK-friendly hash function optimized for efficient circuit representation.
Circuit Parameters
The circuits use the following key parameters:| Parameter | Value | Description |
|---|---|---|
| Merkle Tree Levels | 5 | Supports up to 32 UTXOs (2^5) |
| Input Variants | 2 or 16 | Number of input UTXOs per transaction |
| Outputs | 2 | Number of output UTXOs per transaction |
| Zero Leaf | keccak256("tornado") % FIELD_SIZE | Default value for empty tree positions |
Privacy Guarantees
The circuits ensure:- Anonymity: Transactions cannot be linked to specific users
- Confidentiality: Transaction amounts remain private
- Unlinkability: Input and output UTXOs cannot be correlated
- Non-interactivity: No interaction required between sender and receiver
Next Steps
Transaction Circuits
Learn about the 2 and 16 input transaction circuit variants
Merkle Proofs
Understand how Merkle proof verification works in circuits