unlock_slot ist die per-Note geltende Zeitsperre, mit der SolMask seine Privacy-Delay durchsetzt. Beim Deposit rechnet die UI die von dir gewählte Verzögerung (1 Stunde, 6 Stunden, 1 Tag bis zu einer Woche) in eine Solana-Slot-Nummer um — ungefähr current_slot + delay_seconds / 0.4 — und bindet diesen Wert zusammen mit Secret und Betrag in das Commitment.
Beim Withdraw prüft der Groth16-Circuit, dass unlock_slot <= current_slot gilt, und der On-Chain-Verifier prüft, dass der ihm übergebene Slot mit Clock::get()?.slot übereinstimmt. Ein vor dem Unlock-Slot erzeugter Beweis ist mathematisch gültig, aber das Programm lehnt die Transaktion ab.
Die Verzögerung existiert, weil sofortige Withdrawals trivial verknüpfbar sind: Wenn ein Deposit und ein gleich hoher Withdraw in benachbarten Slots landen, trifft ein Beobachter mit dem ersten Tipp, wer was geschickt hat, ins Schwarze. Indem jede Note ihre gewählte Wartezeit absitzen muss, können neue Deposits neben deinem auflaufen und das Anonymitätsset wachsen, bevor dein Withdraw auf der Chain landet.