Compact Block Filters हल्के क्लाइंट के लिए ब्लॉक के संभाव्य इंडेक्स हैं। वॉलेट फ़िल्टर डाउनलोड करके अपने स्क्रिप्ट स्थानीय रूप से जाँचता है; BIP 37 की तरह निजी पता फ़िल्टर सर्वर को नहीं भेजता। समीक्षा में BIP 157 और BIP 158 का दर्जा Deployed है, लेकिन ये पूर्ण सहमति सत्यापन नहीं बदलते।
BIP 157, getcfilters/cfilter, getcfheaders/cfheaders और getcfcheckpt/cfcheckpt संदेश तय करता है। BIP 158, 0x00 प्रकार का basic फ़िल्टर बताता है। क्लाइंट पहले ब्लॉक हेडर, फिर फ़िल्टर हेडर और फ़िल्टर सिंक करता है; मेल होने पर ब्लॉक लाकर असली ट्रांज़ैक्शन खोजता है। यह तेज ब्लॉक रिले वाले BIP 152 के Compact Blocks से अलग है। [BIP 157 — Client Side Block Filtering] [BIP 158 — Compact Block Filters for Light Clients]
फ़िल्टर में नए आउटपुट के scriptPubKey होते हैं, सिवाय OP_RETURN से शुरू होने वाले स्क्रिप्ट के; साथ ही इनपुट द्वारा खर्च पिछले आउटपुट के स्क्रिप्ट होते हैं, coinbase इनपुट को छोड़कर। खाली तत्व हटाए जाते हैं और तत्वों का सेट बनता है। यह सभी txid, पता स्ट्रिंग या witness डेटा का इंडेक्स नहीं; बनाने के लिए खर्च किए पिछले आउटपुट भी चाहिए। [BIP 158 — Compact Block Filters for Light Clients]
SipHash-2-4 मानों को N × M सीमा में मैप करके क्रमबद्ध किया जाता है और अंतर Golomb-Rice से एन्कोड होते हैं। Basic में P=19 और M=784931 हैं; कुंजी little-endian रूप में ब्लॉक हैश के पहले 16 बाइट हैं। सीरियलाइज़ेशन CompactSize में N से शुरू होता है। सेट से बाहर की क्वेरी लगभग 1/M संभावना से गलत मेल दे सकती है; सही फ़िल्टर शामिल तत्व नहीं चूकता। [BIP 158 — Compact Block Filters for Light Clients]
फ़िल्टर हैश उसके सीरियलाइज़ेशन का double-SHA256 है। हेडर इस हैश और पिछले फ़िल्टर हेडर के जोड़ का double-SHA256 है। इससे जाँच योग्य श्रृंखला बनती है, लेकिन कमिटमेंट सहमति ब्लॉक हेडर में नहीं होता। इसलिए सभी जुड़े पीयर लगातार झूठी चेन दें तो केवल हैशिंग उसे नहीं पकड़ती। [BIP 157 — Client Side Block Filtering]
BIP 157 कई स्वतंत्र पीयर सुझाता है, जब तक विश्वसनीय पीयर से सुरक्षित कनेक्शन न हो। मतभेद पर क्लाइंट पहला अंतर ढूँढ़कर ब्लॉक और जरूरी पिछले आउटपुट डेटा से फ़िल्टर जाँचता है। सही फ़िल्टर की गारंटी कम से कम एक ईमानदार पीयर मानती है। पुनर्गठन के बाद फ़िल्टर नई शाखा के अनुसार होने चाहिए और संबंधित वॉलेट स्थिति की फिर से गणना करनी चाहिए। [BIP 157 — Client Side Block Filtering] [BIP 158 — Compact Block Filters for Light Clients]
स्थानीय मिलान पीयर को खोजे गए स्क्रिप्ट की सूची नहीं बताता। लेकिन बाद में पूरे ब्लॉक की माँग रुचि दिखाती है और IP पते या दोहराई क्वेरी से जुड़ सकती है। BIP 157 आउटबाउंड पीयर में से ब्लॉक स्रोत यादृच्छिक चुनने को कहता है; ब्लॉक स्रोत को फ़िल्टर देना जरूरी नहीं। यह गुमनामी की गारंटी नहीं है। [BIP 157 — Client Side Block Filtering]
फ़िल्टर पुष्ट ब्लॉक का होता है, वर्तमान Mempool का नहीं। मेल भुगतान या खर्च अधिकार का प्रमाण नहीं; ट्रांज़ैक्शन और जरूरी जाँच निर्णय करते हैं। नोड ब्लॉक हटाने के बाद फ़िल्टर रख सकता है, लेकिन तब पुराना पूरा ब्लॉक न दे पाए। हल्के क्लाइंट की बचत Full Node सुरक्षा मॉडल का स्थान नहीं लेती। [BIP 157 — Client Side Block Filtering]
Bitcoin Core 29.0 में -blockfilterindex इंडेक्स बनाता है; -peerblockfilters पीयर को सेवा देना चालू करता है और basic इंडेक्स माँगता है। NODE_COMPACT_FILTERS यह सेवा दर्शाता है। getblockfilter RPC चुने ब्लॉक के filter और header लौटाता है। केवल RPC या इंडेक्स होना P2P फ़िल्टर सेवा चालू होना नहीं है; यह प्रविष्टि नोड कॉन्फ़िगरेशन नहीं बदलती। [Bitcoin Core 29.0 — getblockfilter RPC] [Bitcoin Core 29.0 — Filter service configuration]
पूरी तस्वीर के लिए इस प्रविष्टि के साथ यह भी पढ़ें Neutrino, Full Node, Pruned node, Bitcoin में गोपनीयता, Compact block relay. इस प्रविष्टि का उल्लेख यहाँ भी है Compact Block Filters, Neutrino.