Compact Block Filters to małe probabilistyczne indeksy pojedynczych bloków tworzone deterministycznie. BIP 158 określa zawartość i kodowanie, BIP 157 przesyłanie i kontrolę ciągłości; klient porównuje obserwowane skrypty lokalnie.
Portfel synchronizuje nagłówki bloków i filtrów, pobiera filtry i lokalnie testuje swoje skrypty. Po trafieniu pobiera cały blok i szuka konkretnej transakcji. Samo trafienie nie powinno zwiększać salda: filtr nie zwraca kwoty, dowodu własności ani pełnej historii transakcji. [BIP 157 — Client Side Block Filtering]
BIP 158 basic obejmuje scriptPubKey nowych wyjść poza zaczynającymi się od OP_RETURN oraz skrypty poprzednich wyjść wydawanych przez wejścia poza coinbase. Puste elementy są pomijane. Adres trzeba zamienić na właściwy skrypt; filtr nie indeksuje uniwersalnie txid, danych witness ani dowolnych notatek. [BIP 158 — Compact Block Filters for Light Clients] [Bitcoin Core — BasicFilterElements]
Golomb-Rice koduje różnice uporządkowanych wartości hash; basic używa P=19 i M=784931. Zapytanie o element spoza zbioru może trafić z prawdopodobieństwem około 1/M. Więcej skryptów oznacza więcej okazji do kolizji, a nie stały poziom błędu całego portfela. Poprawny filtr nie pomija zawartego elementu. [BIP 158 — Compact Block Filters for Light Clients]
Nagłówek łączy hash obecnego filtru z poprzednim nagłówkiem. Kontrola ciągłości wykrywa rozbieżność z zaakceptowanym łańcuchem, lecz tego zobowiązania nie ma w nagłówku bloku Bitcoin. Atakujący może podać wewnętrznie spójne fałszywe filtry; poprawnie obliczony hash sam nie gwarantuje prawdziwej zawartości. [BIP 157 — Client Side Block Filtering]
BIP 157 wykrywa fałszywe filtry przez porównanie peerów z co najmniej jednym uczciwym uczestnikiem. Odtworzenie basic może wymagać też skryptów wydanych poprzednich wyjść. Reorganizacja wymaga śledzenia filtrów nowej gałęzi i ponownego obliczenia stanu portfela; ta sama dawna wysokość nie określa tego samego bloku. [BIP 157 — Client Side Block Filtering] [Bitcoin Core — BasicFilterElements]
W odróżnieniu od BIP 37 klient nie wysyła serwerowi osobistego filtru adresów. Peer nadal może obserwować IP, czas i żądane bloki. Pobieranie od różnych peerów ogranicza skupienie informacji, nie wszystkie korelacje; przypadkowe trafienia same nie zapewniają anonimowej komunikacji. [BIP 157 — Client Side Block Filtering]
Bitcoin Core RPC getblockfilter zwraca filtr i nagłówek dla hasha bloku przy włączonym odpowiednim indeksie. Nie dowodzi to publicznej usługi P2P ani możliwości udostępnienia wszystkich dawnych bloków przez peera. Klient potrzebuje sprawnego źródła bloków; filtry ukończonych bloków nie ogłaszają niepotwierdzonych transakcji Mempool. [BIP 157 — Client Side Block Filtering] [Bitcoin Core 30.0 — getblockfilter]
Compact Blocks według BIP 152 przyspieszają przesył nowych bloków dzięki krótkim identyfikatorom transakcji i lokalnemu Mempool. Compact Block Filters wybierają istotne bloki dla klienta. Ani lokalne trafienie, ani kontrola włączenia transakcji nie zastępują niezależnej pełnej walidacji konsensusu wszystkich bloków. [BIP 157 — Client Side Block Filtering] [BIP 152 — Compact Block Relay]
Pełniejszy obraz uzyskasz, czytając to hasło razem z Compact Block Filters, Neutrino, Full Node, Prywatność w Bitcoinie, Compact block relay. Do tego hasła prowadzą również odsyłacze z Neutrino.