Skip to main content

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:

  1. Name validity - 1-64 characters, lowercase alphanumeric + hyphens
  2. Fee sufficiency - the transaction paid enough ZEC for the name length
  3. Protocol command integrity - all the protocol's conditions are met
  4. Ed25519 signature -- the signature over memo command is valid
  5. 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:

OutputDescription
old_rootMerkle tree root before this registration
new_rootMerkle tree root after this registration
end_block_heightThe 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.