Why Proofs?
An indexer scans the ZCash blockchain and builds a registry of names. But why should anyone trust it? What if it:
- Fabricates a registration that never happened on-chain?
- Charges the wrong fee?
- Registers a name twice?
- Tampers with the registry state?
ZK proofs eliminate these questions. Each proof is a cryptographic certificate that the registration was processed correctly. Anyone can verify the proof independently.
What Each Proof Verifies
The ZCash Prover uses SP1 - a RISC-V zero-knowledge virtual machine. For every transaction with domain, the prover performs the following checks inside the zkVM:
- Name validity - 1-64 characters, lowercase alphanumeric + hyphens
- Fee sufficiency - the transaction paid enough ZEC for the name length
- Protocol command integrity - all the protocol's conditions are met
- Ed25519 signature -- the signature over
memo commandis valid - Merkle tree insertion -- the name didn't already exist, and the new state root is correct
If any check fails, the proof cannot be generated.
Public Outputs
Each proof commits 3 values that are permanently bound to it:
| Output | Description |
|---|---|
old_root | Merkle tree root before this registration |
new_root | Merkle tree root after this registration |
end_block_height | The latest ZCash block of the registration batch |
The block_height pin the proof to a specific ZCash block (like a checkpoint). Anyone can look up transactions on a ZCash node and confirm the memo and value match.