Definition
Compact Block Filters let a lightweight Bitcoin wallet decide which blocks contain transactions it cares about without telling any peer what addresses it is watching. BIP158 defines the filter format, while BIP157 defines the peer-to-peer messages a client uses to request filters and filter headers. This pair underpins the privacy-preserving light-client model popularized by the Neutrino implementation.
Golomb-coded sets
Each block's basic filter is a Golomb-Coded Set (GCS): the scriptPubKeys of the block's outputs and the previous output scripts being spent are hashed with SipHash, sorted, reduced to successive deltas, and compressed with Golomb-Rice coding. The basic filter uses parameters M = 784,931 and P = 19, giving a false-positive probability of roughly one in 784,931. A querying client gets every true match with certainty and only an occasional false positive, which it resolves by downloading that full block.
Why the model is more private
The crucial inversion versus older designs is direction: the full node serves the same deterministic filter to everyone, and the client matches locally against its own wallet scripts. The node never learns the client's addresses. The trade-off is that the client downloads more data than an address-revealing query would, and in Bitcoin Core serving these filters to peers is not enabled by default; an operator must run with the block-filter index and explicitly allow peer filter requests.
This is the privacy-respecting successor to address-leaking Bloom Filters (BIP37). It builds on the chain established by Headers-First Sync.
In Simple Terms
Compact Block Filters let a lightweight Bitcoin wallet decide which blocks contain transactions it cares about without telling any peer what addresses it is watching.…
