Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Concepts: Airdrop Nullifiers

To guard against airdrop double-claims while keeping claims unlinkable to later Zcash shielded spends, we publish an airdrop nullifier: a public, deterministic, airdrop-scoped identifier derived from the note’s nullifier key material via domain separation.

An airdrop configuration fixes two public domain parameters:

  • targetS: Sapling domain parameter (BLAKE2s personalization, exactly 8 bytes).
  • targetO: Orchard domain parameter used as the hash-to-curve domain string (at most 32 bytes, and must be valid UTF-8).

These parameters must be chosen so they do not coincide with the protocol domains for standard nullifiers: Zcash_nf (Sapling) and z.cash:Orchard (Orchard). See the cited specifications below.

Warning

If targetS = "Zcash_nf" (Sapling) or targetO = "z.cash:Orchard" (Orchard), then the airdrop construction collapses to the standard Zcash nullifier domain for that pool, meaning the published airdrop nullifiers will match Zcash nullifiers for the same notes and remove privacy.

Note

The codebase uses targetS = "ZAIRTEST" and targetO = "ZAIRTEST:O" as defaults.

  • Sapling: targetS is compiled into the Groth16 circuit; changing it requires a new trusted setup and verifying key, which is required for every target deployment supporting Sapling.
  • Orchard: targetO is baked into the circuit. Keys are re-derived deterministically per targetO at runtime (transparent setup, no ceremony).

Sapling

Sapling specifies the standard nullifier PRF (Sapling Protocol Specification, §5.4.2):

The Sapling airdrop nullifier uses the same construction, but replaces the personalization string with the public airdrop parameter targetS:

Orchard

Orchard specifies nullifier derivation (Zcash Protocol Specification, §4.16):

with generator:

The Orchard airdrop nullifier is derived by using an airdrop-specific generator:

and then computing as specified, but replacing with .