141 / 736NEUTRINO

Compact Block Filters

BIP 157 और BIP 158 के संक्षिप्त ब्लॉक फ़िल्टर

फोन का वॉलेट हर लेनदेन डाउनलोड किए बिना अपने भुगतान कैसे ढूँढ़ता है? Compact Block Filters उसे वे ब्लॉक चुनने में मदद करते हैं जिन्हें ध्यान से देखना चाहिए, बिना सर्वर को अपने निगरानी वाले पतों की सूची भेजे।

Compact Block Filters, Bitcoin ब्लॉक की सामग्री के छोटे सार होते हैं। वॉलेट इन्हें डाउनलोड करके अपने उपकरण पर जाँचता है कि किन ब्लॉक में उसके भुगतान हो सकते हैं। फिर उन्हीं ब्लॉक को पूरा मँगाता है। इससे डेटा बचता है और खोज के बारे में कम जानकारी बाहर जाती है। लेकिन फ़िल्टर में मेल मिलना भुगतान का प्रमाण नहीं है और Bitcoin के सभी नियमों के पूर्ण सत्यापन की जगह नहीं लेता।

अन्ना अपने फोन के वॉलेट में भुगतान आने का इंतजार कर रही है। वॉलेट बिटकॉइन पाने और भेजने वाला ऐप या उपकरण है। ब्लॉक लेनदेन के समूह हैं, लेकिन फोन को हर समूह पूरा डाउनलोड करने की जरूरत नहीं। वह पहले छोटे फ़िल्टर देख सकता है, जैसे किताब के सूचकांक से काम का पन्ना ढूँढ़ते हैं। एक ही ब्लॉक और फ़िल्टर प्रकार के लिए सभी को वही सार मिलता है; अन्ना के लिए क्या जरूरी है, यह उसके फोन पर चुना जाता है। तकनीकी दस्तावेज BIP 157 और BIP 158 काम बाँटते हैं: पहला फ़िल्टर प्राप्त करने और जाँचने का तरीका बताता है, दूसरा उसकी सामग्री और बनावट। वॉलेट पहले ब्लॉक हेडर जाँचता है, यानी वे बुनियादी रिकॉर्ड जो ब्लॉक को चेन में जोड़ते हैं। फिर फ़िल्टर की जाँच के डेटा और फ़िल्टर खुद लेता है। मेल मिलने पर पूरा ब्लॉक डाउनलोड करके वास्तविक लेनदेन ढूँढ़ता है। मिलता-जुलता नाम Compact Blocks, BIP 152 में है, लेकिन उसका काम अलग है: नए ब्लॉक को नोड के बीच तेजी से पहुँचाना। नोड ऐसा प्रोग्राम है जो लेनदेन और ब्लॉक की जाँच करता है और नेटवर्क के दूसरे सहभागियों से संपर्क रखता है। [1] [2] [5] [6]

Bitcoin लेनदेन आउटपुट बनाता है: रकम और उसे बाद में खर्च करने की शर्तें। इन शर्तों को लिखने वाला कोड scriptPubKey कहलाता है। नए लेनदेन का इनपुट उस पुराने आउटपुट की ओर इशारा करता है जिसे खर्च किया जा रहा है। इसलिए 0x00 पहचान वाला basic फ़िल्टर नए आउटपुट के स्क्रिप्ट और ब्लॉक में खर्च होने वाले पुराने आउटपुट के स्क्रिप्ट, दोनों शामिल करता है। अन्ना इससे पैसे मिलने और खर्च होने, दोनों को खोज सकती है। OP_RETURN से शुरू होने वाले नए आउटपुट स्क्रिप्ट छोड़ दिए जाते हैं; यह निर्देश आउटपुट को खर्च न किए जा सकने वाला बनाता है। coinbase लेनदेन का खास इनपुट भी छोड़ा जाता है, क्योंकि वह पुराने आउटपुट को खर्च किए बिना माइनर का पुरस्कार तय करता है। खाली तत्व हटते हैं और दोहराया तत्व सिर्फ एक बार गिना जाता है। यह सभी लेनदेन पहचानकर्ताओं txid, पते के टेक्स्ट या हस्ताक्षर जैसे witness डेटा की सूची नहीं है। सही फ़िल्टर बनाने के लिए नए ब्लॉक के साथ उन पुराने आउटपुट का डेटा भी चाहिए जिन्हें उसके लेनदेन खर्च करते हैं। [2]

सर्वर अन्ना को ऐसा सार भेज सकता है जिसमें उसका भुगतान जानबूझकर गायब हो। इसलिए वॉलेट फ़िल्टर के पुराने फ़िल्टर से संबंध भी जाँचता है। हैश डेटा का छोटा डिजिटल निशान है। सहेजे फ़िल्टर पर SHA-256 दो बार लगाने से उसका double-SHA256 मिलता है। इस निशान को पिछले फ़िल्टर हेडर से जोड़कर उसी तरह हैश किया जाता है; परिणाम अगला हेडर है। पुराने फ़िल्टर में बदलाव से उसके बाद की जाँच का डेटा भी बदलता है। लेकिन माइनिंग से सुरक्षित ब्लॉक हेडर में फ़िल्टर की इस सहायक चेन का हैश दर्ज नहीं होता। अगर सभी जुड़े सर्वर एक ही झूठी चेन दें, तो भी उसके निशान पूरी तरह मेल खा सकते हैं। सिर्फ गणितीय संगति यह साबित नहीं करती कि सार असली ब्लॉक के अनुसार है। [1]

इसीलिए BIP 157 कई स्वतंत्र नोड से जुड़ने की सलाह देता है; इस बातचीत में इन्हें peers कहते हैं। अपने नोड जैसे विश्वसनीय नोड से सुरक्षित कनेक्शन दूसरा विकल्प है। फ़िल्टर चेन अलग-अलग हों तो वॉलेट पहला अंतर ढूँढ़ता है। संबंधित ब्लॉक और जरूरी पुराने आउटपुट से सही फ़िल्टर फिर बनाया जा सकता है। सही फ़िल्टर पहचानने की गारंटी के लिए कम से कम एक ईमानदार पीयर जरूरी है; एक ही हमलावर से कई कनेक्शन काफी नहीं। चेन खुद भी बदल सकती है: पुनर्गठन में उसके अंत का कुछ हिस्सा ऐसी शाखा से बदलता है जिसमें अधिक संचित प्रमाणित काम हो। वॉलेट को उस शाखा के फ़िल्टर अपनाकर प्रभावित भुगतान फिर जाँचने पड़ते हैं। पहले मिली पुष्टि भी इस पर निर्भर रहती है कि नेटवर्क कौन-सी चेन स्वीकार करता है। [1] [2]

पुराने BIP 37 तरीके में वॉलेट अपने निगरानी वाले डेटा का निजी फ़िल्टर सर्वर को भेजता था। Compact Block Filters में दिशा उलट जाती है: वॉलेट सामान्य डेटा लेता है और अपनी जरूरत का चयन उपकरण पर करता है। इससे देखे जा रहे स्क्रिप्ट की जानकारी कम बाहर जाती है। फिर भी प्रदाता देखता है कि अन्ना बाद में कौन-से पूरे ब्लॉक माँगती है और उन अनुरोधों को उसके IP पते, यानी कनेक्शन के नेटवर्क पते, से जोड़ सकता है। बार-बार आने पर और संबंध समझ में आ सकते हैं। BIP 157 इसलिए उन नोड में से पूरे ब्लॉक का स्रोत यादृच्छिक रूप से चुनने को कहता है जिनसे वॉलेट ने खुद कनेक्शन खोला हो। ब्लॉक और फ़िल्टर अलग नोड से आ सकते हैं। गोपनीयता बेहतर होती है, पर गुमनामी की गारंटी नहीं मिलती। [1]

फ़िल्टर चेन में शामिल हो चुके ब्लॉक बताते हैं। वे वर्तमान Mempool को नहीं दिखाते, यानी उन अपुष्ट लेनदेन को जिन्हें कोई नोड आगे भेजने या माइनिंग के लिए रखता है। मेल यह भी साबित नहीं करता कि अन्ना के पास मिले पैसे खर्च करने की कुंजी है। निजी कुंजी एक गुप्त संख्यात्मक मान है, जिससे वॉलेट पैसे खर्च करने की अनुमति देने वाला डिजिटल हस्ताक्षर बनाता है। वॉलेट को वास्तविक लेनदेन और ब्लॉक में उसके शामिल होने की जाँच करनी चाहिए। फिर भी हल्का क्लाइंट Full Node की तरह हर ब्लॉक के हर लेनदेन को सभी नियमों के अनुसार नहीं परखता। संसाधन बचाने के बदले सुरक्षा में यह वास्तविक समझौता है। डेटा उपलब्धता अलग बात है: Pruned Node पुराने ब्लॉक जाँचने के बाद मिटा सकता है और फ़िल्टर रख सकता है। अन्ना को तब सार मिलेगा, पर पूरा पुराना ब्लॉक कहीं और से लेना होगा। केवल पुराने डेटा की छँटाई का अर्थ पूर्ण नियम सत्यापन छोड़ना नहीं है। [1] [5]

छोटे आकार की एक कीमत है: खोजा गया तत्व ब्लॉक में न होने पर भी फ़िल्टर “शायद हाँ” कह सकता है। इसे false positive, यानी गलत सकारात्मक नतीजा कहते हैं। अन्ना तब बेवजह ब्लॉक डाउनलोड करेगी, लेकिन वॉलेट को काल्पनिक भुगतान नहीं मिलेगा और उसे रकम में जोड़ना नहीं चाहिए। सही फ़िल्टर अपने नियमों के अनुसार शामिल तत्व को नहीं चूकता; इस गुण से बेईमान सर्वर के गढ़े डेटा भरोसेमंद नहीं बन जाते। तकनीकी रूप से SipHash-2-4 तत्वों को N × M आकार की सीमा के भीतर संख्याओं में बदलता है; N तत्वों की संख्या है। संख्याएँ क्रम में रखी जाती हैं और उनके अंतर Golomb-Rice कोडिंग से कम जगह में सहेजे जाते हैं। P=19 कोडिंग नियंत्रित करता है; M=784931 आकस्मिक मेल को प्रभावित करता है। समूह से बाहर किसी एक तत्व की जाँच पर गलत मेल की संभावना लगभग 1/M है। बाइट डेटा की मात्रा मापने की एक सामान्य इकाई है। SipHash की कुंजी ब्लॉक हैश के little-endian क्रम में पहले 16 बाइट हैं, यानी निचले क्रम के बाइट पहले आते हैं। यह वॉलेट की गुप्त कुंजी नहीं है। यहाँ SipHash तत्वों को फ़िल्टर के लिए संख्याओं में बदलता है, उन्हें एन्क्रिप्ट नहीं करता। सहेजा फ़िल्टर N से शुरू होता है, जिसे शून्य या धनात्मक पूर्णांकों के CompactSize प्रारूप में लिखा जाता है। [2]

समीक्षा की तारीख 2026-10-17 पर दोनों दस्तावेजों की स्थिति Deployed है: प्रोटोकॉल उपयोग में है, लेकिन इसका मतलब हर वॉलेट में समर्थन नहीं है। यह सेटिंग उदाहरण खास तौर पर Bitcoin Core 29.0 के लिए है। -blockfilterindex स्थानीय इंडेक्स बनाता है। दूसरे नोड को फ़िल्टर देने के लिए -peerblockfilters और basic इंडेक्स चाहिए; NODE_COMPACT_FILTERS इस सुविधा की घोषणा करता है। प्रोग्रामिंग इंटरफ़ेस RPC में getblockfilter चुने ब्लॉक के filter और header फ़ील्ड लौटाता है। इसलिए RPC चलना अपने आप यह साबित नहीं करता कि दूसरे नेटवर्क नोड फ़िल्टर ले सकते हैं। विनिर्देश पढ़ने वालों के लिए: getcfilters/cfilter फ़िल्टर भेजता है, getcfheaders/cfheaders जोड़ जाँचने का डेटा और getcfcheckpt/cfcheckpt सहायक चेन के जाँच बिंदु देता है। ये नेटवर्क संदेशों के नाम हैं, मोबाइल वॉलेट उपयोगकर्ता के टाइप करने वाले आदेश नहीं। [3] [4]

पूरी तस्वीर के लिए इस प्रविष्टि के साथ यह भी पढ़ें Neutrino, Full Node, Pruned Node, Bitcoin में गोपनीयता, Compact Blocks, Mempool. इस प्रविष्टि का उल्लेख यहाँ भी है Compact Block Filters, Neutrino.

DOC · 001BIP 157 — Client Side Block Filteringविनिर्देश DOC · 002BIP 158 — Compact Block Filters for Light Clientsविनिर्देश DOC · 003Bitcoin Core 29.0 — getblockfilter RPCदस्तावेज़ DOC · 004Bitcoin Core 29.0 — Filter service configurationप्राथमिक स्रोत DOC · 005Bitcoin Developer Guide — Walletsदस्तावेज़ DOC · 006Bitcoin Developer Guide — Block Chainदस्तावेज़
समीक्षा की गई: स्रोत पहले · यह निवेश सलाह नहीं है