226 / 736XNONCE

Extranonce

माइनर को नए प्रयासों के लिए जगह कैसे मिलती है

अलेना समझ रही है कि नया ब्लॉक कैसे बनता है। माइनर इनपुट डेटा बदलकर उसका हैश निकालता है। यह डेटा की एक छोटी पहचान है, जिसके संख्यात्मक मान को नेटवर्क की शर्त पूरी करनी होती है। लेकिन अगर किसी बदलने योग्य फ़ील्ड के सभी मान आज़माने पर भी सफलता न मिले, तो क्या होगा? Extranonce नए रूप तैयार करके खोज जारी रखने देता है। यह Bitcoin के नियम आसान नहीं करता और न पुरस्कार का वादा करता है; इसका काम मशीनों को वही प्रयास बार-बार दोहराने से बचाना है।

Extranonce अतिरिक्त बदलने योग्य डेटा है, जिसे माइनिंग सॉफ़्टवेयर आम तौर पर coinbase में रखता है। Coinbase ब्लॉक का विशेष पहला लेनदेन है, जो माइनिंग पुरस्कार आवंटित करता है। इस डेटा में बदलाव से ब्लॉक हेडर में मौजूद लेनदेनों की संयुक्त पहचान बदलती है और खोज के लिए नए इनपुट मिलते हैं। हेडर का अलग nonce फ़ील्ड इससे बड़ा नहीं होता।

हेडर ब्लॉक के डेटा का संक्षिप्त सार होता है। बिट शून्य या एक दर्ज करता है; आठ बिट मिलकर एक बाइट बनाते हैं। हेडर में 32 बिट का nonce फ़ील्ड भी होता है। बाकी डेटा स्थिर रहे तो इसमें 2^32 मान मिलते हैं। उसी हेडर और उसी nonce को दोबारा आज़माने से वही हैश और वही परिणाम आएगा। Extranonce इस फ़ील्ड को लंबा नहीं करता; वह दूसरे डेटा को बदलता है, जिससे नया हेडर तैयार होता है। अलेना इसे एक नए काम की तरह समझ सकती है, जिसके लिए काउंटर फिर से आज़माया जा सकता है। व्यवहार में नियमों की सीमा के भीतर हेडर के अन्य हिस्से भी बदले जा सकते हैं। [1] [5]

यहाँ coinbase का अर्थ हर ब्लॉक का पहला लेनदेन है, न कि एक्सचेंज। सॉफ़्टवेयर उसका extranonce बदलता है तो लेनदेन का एन्कोड किया हुआ डेटा और उससे निकला पहचानकर्ता TXID बदलते हैं। डेटा की पहचानों को क्रमशः जोड़ने वाली पेड़ जैसी संरचना से यह बदलाव Merkle root तक पहुँचता है। यह हेडर में रखी लेनदेनों की संयुक्त पहचान है। सॉफ़्टवेयर को प्रभावित शाखा की दोबारा गणना करनी पड़ती है। बाकी लेनदेन वैसे ही रह सकते हैं, लेकिन पुराने रूट को जस का तस नहीं रखा जा सकता। यही जुड़ाव माइनिंग के लिए नए इनपुट देता है। [1]

एक सरल मॉडल में बाकी सब स्थिर रखें और extranonce के दो बाइट पूरी तरह बदलने दें। उनसे 2^16 रूप मिलते हैं; 32 बिट nonce के साथ कुल 2^48 इनपुट संयोजन बनते हैं। यह संभव प्रयासों की संख्या है, मिले हुए ब्लॉकों की नहीं। अलेना को न आसान शर्त मिलती है, न यह भरोसा कि इसी समूह में सफलता ज़रूर होगी। लाभ व्यावहारिक है: आगे खोजने के लिए जगह बची है। खाली जगह बढ़ाने से वह मशीन अपने आप तेज़ नहीं हो जाती जिसे वास्तव में ये गणनाएँ करनी हैं। [1]

Extranonce की जगह नियमों से मुक्त खाली फ़ॉर्म नहीं है। Bitcoin का एक खास नियम BIP 34 कहता है कि coinbase इनपुट के scriptSig नामक डेटा फ़ील्ड की शुरुआत में ब्लॉक की सही तरह एन्कोड की गई ऊँचाई होनी चाहिए। ऊँचाई का अर्थ चेन में उसकी स्थिति है। 100 बाइट की सीमा पूरे coinbase scriptSig पर लागू होती है, सिर्फ extranonce पर नहीं। सॉफ़्टवेयर को अनिवार्य डेटा के लिए जगह रखनी और मान्य प्रारूप बचाना होता है। अलेना उसे मिटाकर लिख दे, तो आगे की गणनाएँ एक अमान्य ब्लॉक का हल खोज रही होंगी। [3] [4]

पूल में मिलकर माइनिंग करते समय अलग मशीनों का अलग विकल्प खोजना उपयोगी है। माइनिंग के काम बाँटने वाला प्रोटोकॉल Stratum V2 इसके लिए extranonce का बँटवारा भी इस्तेमाल करता है। ऊपर की ओर मौजूद सर्वर, upstream, एक तय extranonce_prefix देता है, यानी इस डेटा का शुरुआती हिस्सा। बीच का स्थानीय सॉफ़्टवेयर अपने क्लाइंटों के लिए दूसरा हिस्सा सुरक्षित रख सकता है और बचा हुआ हिस्सा आगे downstream भेज सकता है। ये दिशाएँ संबंधित कनेक्शन के हिसाब से हैं। दिया गया प्रीफ़िक्स अपने आप अंतिम माइनर के बदलने योग्य क्षेत्र में नहीं आता; उसे स्थिर रखने से प्रतिभागियों का काम अलग रहता है। [2]

Stratum V2 के विस्तारित चैनल में SubmitSharesExtended परिणाम के साथ बदले हुए बाइट भी भेजता है। Coinbase को इस क्रम में जोड़ा जाता है: coinbase_tx_prefix, extranonce_prefix, extranonce और coinbase_tx_suffix। ये माइनिंग प्रोग्रामों के बीच भेजे जाने वाले डेटा के हिस्सों के नाम हैं। extranonce फ़ील्ड की लंबाई तय समझौते के अनुसार होनी चाहिए। छोटी लिखावट देखने में वही संख्या लगे, तब भी अलग बाइट क्रम का अर्थ अलग लेनदेन हो सकता है। कंप्यूटर सटीक डेटा की तुलना करते हैं, उसके लगभग समान मानवीय अर्थ की नहीं। [2]

Stratum V2 का Standard Job ऐसा काम है जिसमें Merkle root स्थिर रहता है। अंतिम उपकरण केवल version, nonce और nTime के अनुमत हिस्से बदल सकता है: हेडर का संस्करण, काउंटर और समय। इसलिए वह विस्तारित चैनल की तरह अपना extranonce नहीं भेजता। ऊपर का सॉफ़्टवेयर नई coinbase और नया रूट तैयार करके अगला काम दे सकता है। अलेना को अपने उपकरण में extranonce की सेटिंग न मिले, तब भी पूरी व्यवस्था इस तरीके का इस्तेमाल कर सकती है। [2]

मान लें कि पुराने काम का परिणाम संसाधित होते समय नया प्रीफ़िक्स आ जाता है। Stratum V2 में SetExtranoncePrefix उस संदेश के बाद संबंधित चैनल, यानी उस माइनिंग सत्र, पर भेजे गए कामों पर लागू होता है। परिणाम को सही job_id, यानी काम के पहचानकर्ता, और उसके लिए दी गई जगह से जुड़ा रहना चाहिए। हर जगह सबसे नया प्रीफ़िक्स लगाने से पुराने परिणाम का आधार डेटा बदल सकता है। Extranonce का उद्देश्य अलग प्रयास बनाना और उनके संबंधों का हिसाब रखना है, बाद में उनके काम को बदल देना नहीं। [2]

पूरी तस्वीर के लिए इस प्रविष्टि के साथ यह भी पढ़ें Nonce, Merkle Tree, Mining Share, Block Template, Bitcoin. इस प्रविष्टि का उल्लेख यहाँ भी है ASIC Miner, Stratum V1, Stratum V2, Block Template.

DOC · 001Bitcoin Developer Guide — Mining and nonce spaceदस्तावेज़ DOC · 002Stratum V2 — Extended extranonce and jobsविनिर्देश DOC · 003BIP 34 — Height in coinbaseविनिर्देश DOC · 004Bitcoin Developer Reference — Coinbase inputदस्तावेज़ DOC · 005NIST — Binary data unitsदस्तावेज़
समीक्षा की गई: स्रोत पहले · यह निवेश सलाह नहीं है