Nullifier to jednorazowy numer seryjny, który system zero-knowledge publikuje za każdym razem, gdy wydajesz prywatne środki. Dzięki niemu sieć albo serwer wie, że dana „notatka” (prywatne saldo) została już użyta, ale nie wie, która to była i do kogo należała. To jedno z tych rozwiązań, które na pierwszy rzut oka wyglądają jak sprzeczność: ukryć wszystko i jednocześnie nie pozwolić nikomu wydać tych samych pieniędzy dwa razy. Nullifier właśnie to robi.
Jaki problem rozwiązuje nullifier
W zwykłym blockchainie podwójne wydanie jest proste do wykrycia. Każda transakcja widoczna jest dla wszystkich, więc sieć sprawdza, czy dane środki już nie zostały wykorzystane. Gdy wchodzi prywatność, ten mechanizm przestaje działać, bo nikt nie powinien widzieć, które środki wydajesz.
Wyobraź sobie, że masz banknot, którego nikt nie może zobaczyć, ale każdy chce mieć pewność, że nie zapłacisz nim dwa razy. Rozwiązanie: za każdym razem, gdy płacisz, wyciskasz na kartce unikalną pieczątkę, która wynika z sekretu tego banknotu, ale po pieczątce nikt nie odtworzy, jaki to banknot. Jeśli następnym razem pojawi się ta sama pieczątka, wiadomo, że ktoś próbuje użyć tego samego banknotu ponownie. Ta pieczątka to nullifier.
Jak działa nullifier krok po kroku
- Notatka i sekret. Gdy wpłacasz środki do systemu prywatnego, powstaje notatka (note) zakodowana jako zobowiązanie (commitment) i wpisana do drzewa Merkle’a. Tylko Ty znasz jej sekret.
- Wyprowadzenie nullifiera. Przy wydaniu liczysz nullifier funkcją skrótu z sekretu notatki. To działanie jednokierunkowe: z sekretu da się policzyć nullifier, ale z nullifiera nie da się odzyskać sekretu.
- Dowód zero-knowledge. Dołączasz dowód, że notatka należy do drzewa, że znasz jej sekret i że nullifier został policzony poprawnie. Bez wskazywania, która to notatka.
- Sprawdzenie unikalności. System zapisuje nullifier na liście wydanych. Jeśli już na niej jest, wydatek zostaje odrzucony.
Kluczowe jest to, że nullifier i notatka nie są ze sobą powiązane w żaden widoczny sposób. Ktoś, kto patrzy z zewnątrz, widzi tylko, że jakiś nullifier został opublikowany. Nie wie, która wpłata za nim stoi.
Nullifier w zkAPI
Dobry przykład to zkAPI, protokół prywatnych płatności za AI, który ruszył na mainnecie Ethereum 1 października 2026 roku. Każdy wydatek publikuje tam jednokierunkowy numer seryjny wyprowadzony z sekretu notatki. Dopóki trzymasz się w granicach salda, jesteś nieśledzalny. Jeśli spróbujesz wydać to samo saldo dwa razy, powstanie duplikat nullifiera, który zdradzi próbę oszustwa, ale nie ujawni niczego poza tym.
W zkAPI dowody wydatków są generowane systemem Groth16 na krzywej BN254, a zobowiązania i nullifiery są haszowane funkcją Poseidon. To dobór pod konkretny cel: dowód ma być na tyle mały i szybki do weryfikacji, żeby dało się go sprawdzać przy każdej sesji.
Nullifier w innych systemach
Ten sam pomysł jest sercem większości prywatnych systemów opartych na zero-knowledge. W Zcash chronione transakcje używają nullifierów, żeby sieć wiedziała, że dana notatka została już wydana, bez ujawniania, która to była. Z tego wzorca korzystają też protokoły tożsamości i głosowania, gdzie nullifier gwarantuje, że ktoś zagłosował tylko raz, a nie mówi, jak zagłosował.
Czego nullifier NIE robi
- Nie ukrywa wszystkiego. Nullifier chroni przed podwójnym wydaniem i zrywa powiązanie wydatku z wpłatą. Nie ukrywa treści zapytań, adresu IP ani czasu aktywności. To osobne warstwy prywatności.
- Nie chroni przed błędem w kodzie. Jeśli obwód dowodowy albo kontrakt ma lukę, można fałszować dowody. Nullifier jest tylko jednym z elementów całego systemu.
- Nie gwarantuje zysku ani bezpieczeństwa środków. To technika kryptograficzna, a nie produkt inwestycyjny.
Dlaczego warto to rozumieć
Jako trader patrzę na to praktycznie. Prywatność w krypto wraca na agendę, a razem z nią narzędzia takie jak nullifier. Nie opieram żadnej decyzji tradingowej na tym, że jakiś protokół używa ciekawej kryptografii, ale rozumienie, jak te mechanizmy działają, pozwala odróżnić projekt, który coś robi, od takiego, który tylko dopisuje „zero-knowledge” do prezentacji.
Najczęstsze pytania o nullifier
Czy nullifier ujawnia, kim jestem?
Nie. Jest wyprowadzony jednokierunkowo z sekretu notatki, więc z samego nullifiera nie da się odtworzyć ani sekretu, ani wpłaty, do której należy.
Co się stanie, jeśli spróbuję wydać te same środki dwa razy?
Powstanie ten sam nullifier, a system odrzuci drugi wydatek, bo wykryje duplikat na liście wydanych.
Czy nullifier to to samo co hash?
Nullifier jest wynikiem funkcji skrótu, ale ma konkretną rolę: jest unikalnym znacznikiem wydania, wyprowadzonym z sekretu notatki i opublikowanym razem z dowodem.
Gdzie spotkam nullifiery?
W systemach prywatnych płatności, takich jak zkAPI i Zcash, a także w aplikacjach zero-knowledge, które muszą zagwarantować jednorazowość akcji, np. głosowania.
Podsumowanie
Nullifier to jednorazowa pieczątka, która pozwala systemowi prywatnemu odróżnić pierwsze wydanie od próby powtórki, bez ujawniania, czyje pieniądze zostały wydane. Jest podstawą ochrony przed podwójnym wydaniem w świecie zero-knowledge, ale chroni tylko jedną warstwę prywatności. Resztę trzeba zabezpieczyć osobno.


