50 / 691NONCE

Nonce

ब्लॉक हेडर में माइनिंग काउंटर

Bitcoin माइनिंग में Nonce, 80-बाइट ब्लॉक हेडर का 32-बिट फ़ील्ड है। माइनर इसे बदलकर ऐसा double-SHA-256 हैश खोजते हैं जिसका संख्यात्मक मान Proof of Work के target से कम या उसके बराबर हो।

माइनिंग Nonce सार्वजनिक uint32 खोज पैरामीटर है, कोई रहस्य या हस्ताक्षर nonce नहीं। अन्य हेडर फ़ील्ड स्थिर रहने पर इसके 2^32 मान होते हैं, जिन्हें आधुनिक ASIC तेज़ी से जाँच लेता है। इसलिए माइनिंग सॉफ़्टवेयर coinbase लेनदेन के Extranonce और उससे Merkle root को बदलकर, या nTime और अनुमत version बिट बदलकर खोज क्षेत्र नया करता है।

Bitcoin हेडर में 80 बाइट होते हैं: version, पिछले ब्लॉक का हैश, Merkle root, time, nBits और चार-बाइट Nonce। Nonce, little-endian क्रम में क्रमबद्ध किया गया 32-बिट बिना चिह्न वाला पूर्णांक है। इसे बदलने से क्रमबद्ध हेडर और उसका double-SHA-256 हैश बदलता है, लेकिन अपने आप लेनदेन सूची नहीं बदलती। [Bitcoin Developer Reference — Block headers]

SHA-256 के इनपुट में छोटे बदलाव सफलता की कोई उपयोगी दिशा नहीं देते। Nonce में एक जोड़ने से व्यावहारिक रूप से असंबंधित 256-बिट हैश बनता है, इसलिए अलग हेडर स्वतंत्र प्रायिकता वाले प्रयास माने जा सकते हैं। बिल्कुल वही हेडर दोहराने पर हमेशा वही हैश मिलता है; सफल मान तक जाने की कोई उपयोगी ढाल नहीं होती। [Bitcoin Developer Reference — Block headers] [Bitcoin Developer Guide — Mining]

अन्य हेडर फ़ील्ड स्थिर हों तो चार-बाइट Nonce के ठीक 4,294,967,296 अर्थात 2^32 मान होते हैं। आधुनिक ASIC इस पूरे क्षेत्र को प्रति सेकंड कई बार जाँच सकता है, इसलिए अकेला Nonce फ़ील्ड आधुनिक माइनिंग के लिए पर्याप्त नहीं। सभी मान जाँच लेना वैध Proof of Work मिलने की गारंटी नहीं है। [Bitcoin Developer Reference — Block headers] [BIP 320 — nVersion bits for general purpose use]

Mining Pool और माइनिंग सॉफ़्टवेयर coinbase लेनदेन के अंदर Extranonce का उपयोग करते हैं। मिलता-जुलता नाम होने पर भी यह हेडर का अतिरिक्त फ़ील्ड नहीं है। Extranonce बदलने से coinbase txid और फिर हेडर का Merkle root बदलता है, जिससे माइनिंग Nonce के 2^32 मानों का नया खोज क्षेत्र खुलता है। [Bitcoin Developer Guide — Mining] [Bitcoin Developer Reference — Transactions]

Coinbase लेनदेन Merkle वृक्ष की एक पत्ती है। वृक्ष की पुनर्गणना में उसके txid का बदलाव हेडर के Merkle root तक पहुँचता है। इससे माइनर को पिछले ब्लॉक के उसी हैश और लगभग उसी ब्लॉक सामग्री के साथ नया हेडर मिलता है; इसके लिए अन्य लेनदेन बदलना आवश्यक नहीं है। [Bitcoin Developer Reference — Block headers] [Bitcoin Developer Guide — Mining]

अनुमत सीमाओं के भीतर nTime बदलकर या version rolling के माध्यम से अनुमत version बिट बदलकर अतिरिक्त खोज क्षेत्र मिलता है। BIP320 कुछ nVersion बिट के सामान्य उपयोग का प्रस्ताव देता है; प्रस्ताव मात्र से सभी बिट मनमाने ढंग से बदलने की अनुमति नहीं मिलती। संबंधित सर्वसम्मति और माइनिंग कार्य के नियम लागू रहते हैं तथा अंतिम हैश को target पूरा करना होता है। [BIP 23 — getblocktemplate pooled mining] [BIP 320 — nVersion bits for general purpose use]

संयुक्त माइनिंग में Mining Pool या कार्य समन्वयक, worker को अलग coinbase/Extranonce या अन्य पैरामीटर देता है, ताकि उपकरण एक जैसे हेडर को बार-बार हैश करके काम बर्बाद न करें। BIP23 वैकल्पिक noncerange पैरामीटर भी बताता है। Stratum प्रोटोकॉल अनेक ASIC उपकरणों में खोज क्षेत्र बाँटते हैं। [BIP 23 — getblocktemplate pooled mining] [Bitcoin Developer Guide — Mining]

Nonce का संख्यात्मक मान अपने आप अच्छा या बुरा नहीं होता। Full Node पूरे विशिष्ट हेडर का हैश निकालकर nBits से प्राप्त वैध target से तुलना करता है। छोटा Nonce कुछ साबित नहीं करता; पूरे हेडर का हैश target से कम या बराबर होना चाहिए। यह शर्त पूरी होना ब्लॉक की बाकी वैधता जाँचों का विकल्प नहीं है। [Bitcoin Developer Reference — Block headers] [Bitcoin Core v30.0 — Proof of Work validation]

Nonce शब्द क्रिप्टोग्राफ़िक हस्ताक्षरों में भी आता है। अलग संदेशों के लिए गुप्त हस्ताक्षर स्केलर का गलत पुनः उपयोग Private Key उजागर कर सकता है। माइनिंग Nonce सार्वजनिक हेडर डेटा है और इसे छिपाना आवश्यक नहीं। हस्ताक्षर के सार्वजनिक डेटा को उसके गुप्त स्केलर या माइनिंग काउंटर से नहीं मिलाना चाहिए। [BIP 340 — Schnorr Signatures]

Bitcoin Core में getblockheader का सामान्य विस्तृत आउटपुट nonce, bits, time और अन्य फ़ील्ड देता है। verbose पैरामीटर false करने पर क्रमबद्ध हेडर हेक्साडेसिमल रूप में मिलता है। स्वतंत्र जाँच के लिए उसके ठीक 80 बाइट बनाएँ या डिकोड करें, double-SHA-256 निकालें और Bitcoin बाइट क्रम का ध्यान रखते हुए संख्यात्मक हैश की वैध target से तुलना करें। [Bitcoin Developer Reference — Block headers] [Bitcoin Core RPC — getblockheader] [Bitcoin Core v30.0 — Proof of Work validation]

पूरी तस्वीर के लिए इस प्रविष्टि के साथ यह भी पढ़ें Block header, बिटकॉइन माइनिंग, Proof of Work, Mining Target, कॉइनबेस लेनदेन, Bitcoin. इस प्रविष्टि का उल्लेख यहाँ भी है Block header, कॉइनबेस लेनदेन, ASIC Miner, Mining Target.

DOC · 001Bitcoin Developer Reference — Block headersदस्तावेज़ ↗DOC · 002Bitcoin Developer Guide — Miningदस्तावेज़ ↗DOC · 003Bitcoin Developer Reference — Transactionsदस्तावेज़ ↗DOC · 004BIP 23 — getblocktemplate pooled miningविनिर्देश ↗DOC · 005BIP 320 — nVersion bits for general purpose useविनिर्देश ↗DOC · 006Bitcoin Core RPC — getblockheaderदस्तावेज़ ↗DOC · 007Bitcoin Core RPC — getblocktemplateदस्तावेज़ ↗DOC · 008Bitcoin Core v30.0 — Proof of Work validationप्राथमिक स्रोत ↗DOC · 009BIP 340 — Schnorr Signaturesविनिर्देश ↗
स्रोत पहले · यह निवेश सलाह नहीं है