Veilify keys are derived from an EIP-712 signature, not stored. The same wallet signing the same typed data always yields the same keys.

The signed message

  • account must be a 20-byte hex address. It is lowercased before signing.
  • chainId must be a positive integer.
  • keyVersion is an integer in [1, 2³²). It defaults to 1.
The exact schema is pinned per deployment. Changing any field produces different keys, and existing notes become invisible. Never mix signing schemas within one deployment.

Key hierarchy

Viewing key = (pk, nk, ivk, ovk). It reads everything but spends nothing. Spending also needs a fresh wallet signature.

Inbox key

The public half, registered on-chain once:
Its hash is the key-registry leaf:
See Key Registry for the on-chain checks.