Ein Nullifier ist der notenspezifische Fingerabdruck, mit dem das SolMask-Programm Double-Spends erkennt, ohne zu erfahren, welches Deposit du gerade ausgibst. Beim Einzahlen wählt dein Browser ein zufälliges nullifier_secret und hasht es per Poseidon in das On-Chain-Commitment hinein. Beim späteren Withdraw enthüllt dein Zero-Knowledge-Proof ausschließlich den Poseidon-Hash desselben Geheimnisses — dieser Hash ist der Nullifier.
Das Programm führt on-chain eine Menge sämtlicher jemals verwendeten Nullifier. Die Withdraw-Instruktion lehnt jeden Proof ab, dessen Nullifier bereits in dieser Menge steht, sodass eine Note nur ein einziges Mal ausgegeben werden kann. Entscheidend ist: Der Nullifier ist eine deterministische Funktion allein des Secrets. Zwei verschiedene Deposits liefern zwei verschiedene Nullifier, und ein Beobachter kann den Nullifier nicht auf ein konkretes Commitment zurückführen, ohne Poseidons Preimage-Resistenz zu brechen.
Da der Nullifier beim Withdraw offengelegt wird, die Verbindung von Nullifier zu Commitment aber durch den Proof verborgen bleibt, kostet die Double-Spend-Verhinderung dich keine Privatsphäre. Genau darin liegt der Sinn der Konstruktion.