Compact Block Filters são pequenos índices probabilísticos de cada bloco, construídos deterministicamente. BIP 158 define conteúdo e codificação; BIP 157, transmissão e continuidade. O cliente compara localmente os scripts monitorizados.
A carteira sincroniza cabeçalhos de blocos e filtros, descarrega filtros e testa os seus scripts localmente. Havendo correspondência, obtém o bloco inteiro e procura a transação concreta. A correspondência sozinha não deve aumentar o saldo: o filtro não devolve montante, prova de propriedade ou histórico completo. [BIP 157 — Client Side Block Filtering]
BIP 158 basic inclui scriptPubKey de novas saídas, exceto as iniciadas por OP_RETURN, e scripts de saídas anteriores gastas por entradas fora da coinbase. Elementos vazios são omitidos. O endereço deve tornar-se o script correto; não é um índice universal de txid, dados witness ou notas arbitrárias. [BIP 158 — Compact Block Filters for Light Clients] [Bitcoin Core — BasicFilterElements]
Golomb-Rice codifica diferenças entre valores hash ordenados; basic usa P=19 e M=784931. Uma consulta ausente do conjunto pode corresponder com probabilidade aproximada 1/M. Mais scripts monitorizados oferecem mais ocasiões de colisão, não uma taxa fixa de erro da carteira inteira. Um filtro correto não omite um elemento incluído. [BIP 158 — Compact Block Filters for Light Clients]
O cabeçalho liga o hash do filtro atual ao cabeçalho anterior. Verificar continuidade deteta divergências face a uma cadeia aceite, mas esse compromisso não integra o cabeçalho do bloco Bitcoin. Um atacante pode fornecer filtros falsos internamente coerentes; um hash calculado corretamente não garante, só por si, conteúdo verdadeiro. [BIP 157 — Client Side Block Filtering]
BIP 157 deteta filtros falsos comparando pares com pelo menos um participante honesto. Reconstruir basic pode exigir também scripts de saídas anteriores gastas. Uma reorganização obriga a seguir os filtros do novo ramo e recalcular o estado da carteira; a mesma altura antiga não identifica o mesmo bloco. [BIP 157 — Client Side Block Filtering] [Bitcoin Core — BasicFilterElements]
Ao contrário de BIP 37, o cliente não envia o seu filtro de endereços ao servidor. Um par ainda pode observar IP, tempos e blocos pedidos. Descarregar de pares diferentes limita a concentração de informação, não todas as correlações; correspondências acidentais não tornam, por si só, a comunicação anónima. [BIP 157 — Client Side Block Filtering]
Bitcoin Core RPC getblockfilter devolve filtro e cabeçalho para um hash de bloco com o índice correspondente ativo. Isso não demonstra um serviço P2P público nem capacidade do par para fornecer todos os blocos históricos. É necessária uma fonte funcional de blocos; estes filtros não anunciam transações não confirmadas do Mempool. [BIP 157 — Client Side Block Filtering] [Bitcoin Core 30.0 — getblockfilter]
Compact Blocks de BIP 152 aceleram o envio de novos blocos usando identificadores curtos e o Mempool local. Compact Block Filters selecionam blocos relevantes para o cliente. Nem a correspondência local nem verificar a inclusão de uma transação substituem a validação completa e independente do consenso de todos os blocos. [BIP 157 — Client Side Block Filtering] [BIP 152 — Compact Block Relay]
Para ter uma visão mais completa, leia este verbete junto com Compact Block Filters, Neutrino, Full Node, Privacidade no Bitcoin, Compact block relay. Também há referências a este verbete em Neutrino.