Step by step

1

User signs a transaction

The wallet is connected to Veilify Network. The user signs a standard EIP-1559 transaction, for example “Send 0.5 ETH to 0xAlice”. The wallet shows its normal confirmation screen. There is no special UI and no change of workflow.
2

Proxy intercepts

The Veilify RPC proxy receives eth_sendTransaction (or the raw signed transaction). It parses the intent: recipient, amount and token. It checks whether the recipient has a registered inbox key. Then it selects funding notes (UTXOs) from the sender’s veiled balance.
3

Zero-knowledge proof

A Noir circuit proves, without revealing private data:
  • the transaction was authorized by a valid ECDSA signature
  • every input note exists in the note tree (Merkle membership)
  • every input note is unspent (nullifier derivation)
  • inputs cover outputs plus fees (balance conservation)
  • output notes are correctly encrypted to the recipient
4

Relayer submission

An allowlisted relayer submits the proof to the pool contract and pays gas. It is reimbursed from the transaction’s fee allocation. The sender’s address and IP never touch the chain.
5

On-chain verification

The pool contract:
  • verifies the proof against the verifier’s key
  • records each note nullifier, which blocks double-spending
  • records the transaction nullifier, which blocks replay
  • appends new note commitments to the Merkle tree
  • emits the encrypted note data in NoteAdded events
6

Recipient scans

The recipient’s proxy trial-decrypts new notes with their incoming viewing key. Matching notes are added to their veiled balance.

The UTXO model

Like Bitcoin and Zcash, Veilify tracks value as unspent outputs, not account balances. Each output is a note: an encrypted container that holds
  • the owner (a commitment to the hashed inbox key)
  • the value and token (coinId)
  • random trapdoors that blind both
  • a link to the nullifiers of the notes that created it
Only the note’s commitment is visible on-chain. The contents are encrypted and emitted in event logs, so only the owner can read them.

Withdrawals and rounds

A withdrawal has two modes:
  • Instant: the exit is proven and sent as soon as you sign.
  • Round: the exit is queued and sent at the next round. Withdrawals scheduled for the same round leave together. A staggered exit can spread its legs across several rounds.
See Withdrawal Rounds.