Compact Block Filters jsou malé deterministicky sestavené pravděpodobnostní indexy jednotlivých bloků. BIP 158 vymezuje obsah a kódování, BIP 157 přenos a kontrolu návaznosti; klient své hledané skripty porovnává lokálně.
Peněženka synchronizuje hlavičky bloků a filtrů, stáhne filtry a testuje své skripty u sebe. Při shodě získá celý blok a hledá konkrétní transakci. Zůstatek nemá zvýšit jen kvůli shodě: filtr nevrací částku, potvrzení vlastnictví ani úplnou transakční historii. [BIP 157 — Client Side Block Filtering]
BIP 158 basic zahrnuje scriptPubKey nových výstupů kromě těch začínajících OP_RETURN a skripty předchozích výstupů utrácených vstupy mimo coinbase. Prázdné položky se vynechávají. Adresní řetězec je nutné převést na správný skript; filtr není univerzální index txid, witness dat nebo libovolné poznámky. [BIP 158 — Compact Block Filters for Light Clients] [Bitcoin Core — BasicFilterElements]
Golomb-Rice kódování ukládá rozdíly seřazených hashovaných hodnot; basic používá P=19 a M=784931. Jeden nečlenský dotaz může mít shodu přibližně 1/M. Více sledovaných skriptů znamená více příležitostí ke kolizi; nejde o pevnou chybovost celé peněženky. Správně sestavený filtr zahrnutý prvek nevynechá. [BIP 158 — Compact Block Filters for Light Clients]
Hlavička filtru propojuje hash aktuálního filtru s předchozí hlavičkou. Kontrola návaznosti odhalí nesoulad s již přijatým řetězcem, ale tento závazek není součástí hlavičky bitcoinového bloku. Útočník tedy může dodat vnitřně konzistentní falešné filtry; samotný správně vypočítaný hash nezaručuje pravdivý obsah. [BIP 157 — Client Side Block Filtering]
BIP 157 staví odhalení nepravdivého filtru na porovnání peerů s alespoň jedním poctivým. Rekonstrukce basic může potřebovat také skripty utrácených předchozích výstupů. Při reorganizaci je nutné navázat filtry na novou větev a přepočítat stav peněženky; stará výška sama neurčuje stejný blok. [BIP 157 — Client Side Block Filtering] [Bitcoin Core — BasicFilterElements]
Na rozdíl od BIP 37 klient neposílá vlastní adresní filtr serveru. Peer ale stále může pozorovat IP adresu, časování a požadované bloky. Stahování bloků od různých peerů omezuje soustředění těchto informací, nikoli všechny korelace; náhodná shoda sama z přenosu nedělá anonymní komunikaci. [BIP 157 — Client Side Block Filtering]
Bitcoin Core RPC getblockfilter vrací filtr a jeho hlavičku pro hash bloku při zapnutém odpovídajícím indexu. To samo nedokládá veřejnou P2P službu ani schopnost daného peera poskytnout každý historický blok. Klient potřebuje funkční zdroj bloků; filtry uzavřených bloků neoznamují nepotvrzené transakce v Mempool. [BIP 157 — Client Side Block Filtering] [Bitcoin Core 30.0 — getblockfilter]
Compact Blocks podle BIP 152 zrychlují přenos nového bloku pomocí krátkých identifikátorů transakcí a místního Mempool. Compact Block Filters vybírají relevantní bloky pro klienta. Ani lokální shoda, ani kontrola zařazení transakce nenahrazují samostatnou plnou konsenzuální validaci všech bloků. [BIP 157 — Client Side Block Filtering] [BIP 152 — Compact Block Relay]
Pro nejúplnější obraz čtěte toto heslo společně s Compact Block Filters, Neutrino, Full Node, Soukromí v Bitcoinu, Kompaktní přenos bloků. Opačným směrem na něj odkazují také Neutrino.