121 / 736IBD

Initial Block Download

नोड का पहला सिंक्रनाइज़ेशन

एक नया Bitcoin नोड नेटवर्क का अतीत नहीं जानता। भुगतानों के बारे में अपनी जाँच पर भरोसा करने से पहले उसे उस इतिहास तक पहुँचकर उसे संसाधित करना पड़ता है। Initial Block Download समझाता है कि पहली बार शुरू करते समय केवल तेज़ इंटरनेट क्यों पर्याप्त नहीं होता।

Initial Block Download, संक्षेप में IBD, Bitcoin नोड का शुरुआती सिंक्रनाइज़ेशन है। सामान्य प्रक्रिया में वह पुराने ब्लॉक प्राप्त करता है, अपने सॉफ़्टवेयर के नियमों से उनकी जाँच करता है और अभी तक खर्च नहीं हुई राशि का वर्तमान रिकॉर्ड बनाता है।

मान लीजिए आप घर पर Full Node शुरू करते हैं। यह ऐसा प्रोग्राम है जो Bitcoin के ब्लॉक और लेनदेन की जाँच खुद करता है। ब्लॉक लेनदेन का एक समूह है, जो साझा इतिहास में जोड़ा जाता है। दूसरे भागीदारों के पास लंबा इतिहास है, लेकिन आपके नए नोड के पास अभी वह नहीं है। पहले वह हेडर प्राप्त करता है: छोटे रिकॉर्ड जो ब्लॉकों को एक-दूसरे से जोड़ते हैं। उनमें Proof of Work भी होता है, यानी किए गए गणनात्मक काम का प्रमाण। माइनर बार-बार गणना करके यह प्रमाण खोजते हैं; दूसरे लोग मिले परिणाम को जल्दी जाँच सकते हैं। हेडर की सूची किताब की विषय-सूची जैसी है: रास्ता बताती है, लेकिन उसे पा लेने का अर्थ हर पन्ने को पढ़कर जाँचना नहीं है। [1] [7]

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

नोड कई साथियों से एक साथ ब्लॉक ले सकता है, इसलिए उसे केवल एक भेजने वाले की गति पर निर्भर नहीं रहना पड़ता। लेकिन उन्हें अपने सत्यापित इतिहास में जोड़ने के लिए पिछली स्थिति जानना ज़रूरी है। भुगतान के इनपुट उस पिछली राशि की ओर संकेत करते हैं जिसे वह खर्च करना चाहता है। नोड को देखना होता है कि वह राशि मौजूद है और पहले खर्च नहीं हुई है। इसलिए बाद का ब्लॉक डाउनलोड हो जाने पर भी पहले वाले की प्रक्रिया पूरी होने का इंतज़ार कर सकता है। डेटा डाउनलोड होना और सिंक्रनाइज़ेशन पूरा होना अलग बातें हैं। [1] [2]

नोड ब्लॉक की सामग्री की तुलना उसके हेडर में मौजूद लेनदेन के डिजिटल फ़िंगरप्रिंट से करता है, जिसे Merkle Tree बनाता है। वह खर्चों का क्रम और माइनर का इनाम अनुमत राशि से अधिक तो नहीं है, जैसी बातें भी देखता है। नियम वही लागू होते हैं जो इतिहास के उस बिंदु पर प्रभावी थे। डिजिटल हस्ताक्षर निजी कुंजी, यानी एक गुप्त संख्यात्मक मान, से भुगतान की अनुमति का प्रमाण बनाता है, लेकिन उस कुंजी को उजागर नहीं करता। पुराने हस्ताक्षरों और खर्च की अन्य शर्तों की जाँच के लिए assumevalid नाम की एक खास सेटिंग है, जिसकी चर्चा आगे है। हेडर या भरोसेमंद दिखने वाले साथी से मिली फ़ाइल इन सभी जाँचों का विकल्प नहीं हैं। [2] [3]

हर ब्लॉक संसाधित करते समय नोड खर्च हो चुके आउटपुट हटाता है और नए जोड़ता है। आउटपुट एक निश्चित राशि है, जिसके साथ उसे आगे खर्च करने की शर्तें होती हैं। जब तक उसे खर्च नहीं किया गया हो, उसे UTXO कहते हैं। इनका समूह अगला भुगतान जाँचने देता है, ताकि हर बार पूरा इतिहास शुरुआत से न पढ़ना पड़े। यह बैंक खातों की सूची नहीं है, न ही सभी पुराने लेनदेन की कॉपी। [2] [3]

कुछ शर्तों के तहत Bitcoin Core पुराने स्क्रिप्ट चेक छोड़ सकता है, यानी हस्ताक्षर और खर्च की अन्य शर्तों की जाँच। assumevalid सेटिंग ऐसे ज्ञात ब्लॉक को निर्दिष्ट करती है जिसका इतिहास बाहरी रूप से सत्यापित किया गया है; उसके पूर्वज ब्लॉक, पर्याप्त काम और गहराई भी मायने रखते हैं। बाकी आवश्यक जाँचें बनी रहती हैं, लेकिन सत्यापन के एक हिस्से के परिणाम को मान लिया जाता है। इसलिए गलत धारणा जोखिम से खाली नहीं है। assumevalid=0 इस अनुकूलन को बंद करता है, जिसके बदले आपके कंप्यूटर को अधिक काम करना पड़ता है। [2]

Pruned Node पुराने ब्लॉक की फ़ाइलें संसाधित करने के बाद हटाता है और वर्तमान UTXO तथा अन्य आवश्यक डेटा रखता है। सामान्य IBD में वह फिर भी इतिहास प्राप्त करके संसाधित करता है; बस उसे पूरा हमेशा के लिए नहीं रखता। इससे डिस्क की जगह बचती है, पहले डाउनलोड का डेटा आकार अपने आप कम नहीं होती। बाद के किसी काम में हटाए गए ब्लॉक चाहिए हों, तो उन्हें दोबारा प्राप्त करना पड़ सकता है। [2] [7]

Bitcoin Core v29.0 अन्य बातों के साथ अंतिम स्वीकार किए गए ब्लॉक की उम्र, न्यूनतम संचित काम और लोडिंग की स्थिति देखता है। यह संचालन-संबंधी संकेतक एक बार false (शुरुआती सिंक्रनाइज़ेशन पूरा) हो जाए, तो उसी रन में true (शुरुआती सिंक्रनाइज़ेशन जारी) नहीं लौटता। यह प्रोग्राम का व्यवहार तय करने में मदद करता है; यह प्रमाण नहीं कि दुनिया में कहीं कोई नया ब्लॉक नहीं है। बाद में कनेक्शन टूट जाने पर भी यह हमेशा अद्यतन रहने का भरोसेमंद संकेत नहीं बन जाता। [2] [5]

तेज़ कनेक्शन मदद करता है, लेकिन कंप्यूटर को गणना और डिस्क पर लिखना भी पड़ता है। प्रोसेसर, मेमोरी, स्टोरेज और साथियों की उपलब्धता समय को प्रभावित करते हैं। getblockchaininfo के तकनीकी परिणाम में verificationprogress सत्यापन की प्रगति का अनुमान है। यह बचे हुए मिनटों का वादा नहीं, न ही केवल डाउनलोड किए गए बाइट का अनुपात है। ठीक से बंद करने के बाद अगली बार प्रोग्राम सहेजी गई प्रगति से आगे बढ़ सकता है; हर बार शून्य से शुरू करना ज़रूरी नहीं। [5] [7]

AssumeUTXO समर्थित UTXO स्नैपशॉट का उपयोग करने देता है, यानी किसी खास ब्लॉक पर सहेजी गई स्थिति। सॉफ़्टवेयर उसकी सामग्री को अपेक्षित फ़िंगरप्रिंट से मिलाता है और उससे जल्दी वर्तमान तक पहुँच सकता है, जबकि इतिहास की प्रक्रिया पृष्ठभूमि में चलती रहती है। बाद में उस ऐतिहासिक सत्यापन से बनी स्थिति भी मिलाई जाती है। यह किसी अजनबी से मिला कोई भी डेटाबेस स्वीकार करना या अतीत को कभी न जाँचना नहीं है। जल्दी उपयोग योग्य होना और पूरा ऐतिहासिक सत्यापन समाप्त होना दो अलग चरण हैं। [4] [8]

पूरी तस्वीर के लिए इस प्रविष्टि के साथ यह भी पढ़ें Pruned Node, AssumeUTXO, Block Propagation, Compact Blocks, Bitcoin, Bitcoin Core. इस प्रविष्टि का उल्लेख यहाँ भी है Block Propagation, Compact Blocks, Pruned Node, AssumeUTXO.

DOC · 001Bitcoin Developer Guide — Initial Block Downloadदस्तावेज़ DOC · 002Bitcoin Core — validationदस्तावेज़ DOC · 003Bitcoin Core — chainstateदस्तावेज़ DOC · 004Bitcoin Core — AssumeUTXO designदस्तावेज़ DOC · 005Bitcoin Core — getblockchaininfoदस्तावेज़ DOC · 006Satoshi Nakamoto — Bitcoin whitepaperप्राथमिक स्रोत DOC · 007Bitcoin.org — Running a Full Nodeदस्तावेज़ DOC · 008Bitcoin Core v29.0 — AssumeUTXO usageदस्तावेज़
समीक्षा की गई: स्रोत पहले · यह निवेश सलाह नहीं है