Veilify is a UTXO-based privacy pool. Value lives in notes. Each note is committed into an append-only Merkle tree and encrypted to its owner. Spending a note publishes its nullifier, which marks it spent without revealing which note it was.

Building blocks

Key Derivation

Viewing and inbox keys derived from one wallet signature.

Notes

Encrypted UTXOs and how they are committed.

Note Encryption

ECDH on Grumpkin, nine-field ciphertexts, trial decryption.

Nullifiers

Note nullifiers stop double-spends. Transaction nullifiers stop replay.

Operations

State

The statement each proof makes

Every private operation proves, for a signed EIP-1559 transaction tx:
  1. tx carries a valid ECDSA signature by the owner’s wallet key, for chain ID VIRTUAL_CHAIN_ID.
  2. Each input note is in the note tree under root, and is owned by the signer.
  3. The published note nullifiers and transaction nullifier are derived correctly.
  4. Σ inputs = Σ outputs + fee, per token.
  5. Output notes are committed and encrypted correctly.
  6. The gas fields and fee match what the user signed.
The contract checks everything else: nullifier freshness, root validity, relayer allowlist and field ranges.