Witness Data वह जानकारी है जो SegWit में खर्च की शर्तें जाँचने के लिए लेनदेन के इनपुट के साथ दी जाती है। इनपुट पहले मिले उन सिक्कों का संदर्भ देता है जिन्हें अब खर्च किया जा रहा है। Witness में हस्ताक्षर, सार्वजनिक कुंजी या स्क्रिप्ट हो सकती है। यह लेनदेन का हिस्सा है, आपके पैसे रखने की कोई अलग जगह नहीं।
आना को पहले Bitcoin मिला था और अब वह उससे पीटर को भुगतान करना चाहती है। पुराने भुगतान ने एक आउटपुट बनाया था: रकम और उसे आगे खर्च करने की शर्तों का रिकॉर्ड। नया लेनदेन अपने इनपुट से उस आउटपुट का संदर्भ देता है। सिर्फ यह कहना काफी नहीं कि सिक्के आना के हैं। सामान्य भुगतान में वॉलेट ऐसा हस्ताक्षर बनाता है जिसे निजी कुंजी उजागर किए बिना जाँचा जा सके। वॉलेट बिटकॉइन पाने और भेजने वाला ऐप या उपकरण है। निजी कुंजी एक गुप्त संख्यात्मक मान है, जिससे ऐसा हस्ताक्षर बनाया जाता है। SegWit में यह जानकारी इनपुट के witness में दी जाती है। हस्ताक्षर मौजूद होने का अर्थ यह नहीं कि वह सही भी है। [1] [4] [5]
“मान्य दस्तावेज़ दिखाइए” की शर्त और वास्तव में दिखाए गए दस्तावेज़ का अंतर सोचिए। Bitcoin में कोई इंसान फैसला नहीं करता; नियम दोनों का मेल जाँचते हैं। Witness program पुराने आउटपुट में दर्ज शर्त का हिस्सा है। उसका संस्करण तय करता है कि जाँच कैसे होगी। Witness नया, खर्च करने वाला लेनदेन देता है। तकनीकी रूप से यह हर इनपुट के लिए डेटा मदों की क्रमबद्ध सूची है। यह अपने आप चलने वाला प्रोग्राम या सभी बिना खर्च किए सिक्कों की प्रतिलिपि नहीं है। [1] [7]
Witness में हस्ताक्षर, सार्वजनिक कुंजी या इस्तेमाल की गई स्क्रिप्ट दिख सकती है। सार्वजनिक कुंजी से हस्ताक्षर की जाँच की जाती है; उसे गुप्त रखना ज़रूरी नहीं है। स्क्रिप्ट खर्च की शर्तें बताने वाला प्रोग्राम है। Witness कोई एन्क्रिप्टेड तिजोरी नहीं है। निजी कुंजी आपके पास रहती है: उससे हस्ताक्षर करते हैं, उसे हस्ताक्षर की जगह नेटवर्क पर नहीं भेजते। Witness या प्रकाशित हस्ताक्षर Seed Phrase की जगह नहीं लेते; ये शब्द वॉलेट बहाल करने के काम आते हैं। कुंजियाँ और बैकअप दोनों खो जाएँ, तो सार्वजनिक भुगतान इतिहास अपने आप नए भुगतान पर हस्ताक्षर करने की क्षमता वापस नहीं दे सकता। [1] [3] [4]
ब्लॉक एक्सप्लोरर किसी खास नेटवर्क के लेनदेन और ब्लॉक खोजने वाला ऐप है। किसी एक्सप्लोरर में txid के साथ wtxid भी दिख सकता है। दोनों हैश हैं: डेटा के सटीक रूप पर SHA-256 दो बार लागू करके बने छोटे पहचान-चिह्न। txid में witness रहित रूप लिया जाता है, जबकि wtxid में witness समेत पूरा रूप। ये प्राप्तकर्ता के पते या दो अलग भुगतान नहीं हैं। यदि witness नहीं है, तो पुराना प्रारूप इस्तेमाल होता है और दोनों पहचानकर्ता समान होते हैं। Bitcoin Core v29.0 में decoderawtransaction पूरा पहचानकर्ता hash में और इनपुट का witness डेटा txinwitness में दिखाता है। [1] [7] [8]
एक लेनदेन पुष्टि होने से पहले ही दूसरे का संदर्भ बन सकता है। यदि कोई केवल हस्ताक्षर डेटा बदलकर पुराने लेनदेन का पहचानकर्ता बदल दे, तो संदर्भ मेल नहीं खाएगा। सिर्फ witness बदलने से txid नहीं बदलता। इससे Lightning Network जैसे आपस में निर्भर लेनदेन वाले प्रोटोकॉल को मदद मिलती है। फिर भी पूरा लेनदेन अपरिवर्तनीय नहीं बन जाता। दूसरे फ़ील्ड या SegWit रहित पुराने इनपुट txid को प्रभावित कर सकते हैं। बदला हुआ witness भी लागू सत्यापन नियमों पर खरा उतरना चाहिए। [1] [6]
Witness लेनदेन के पूरे रूप के साथ भेजा जाता है और शामिल होने पर ब्लॉक के डेटा का हिस्सा बनता है। यह चेन से बाहर मुफ़्त भंडारण नहीं है। Witness के सीरियलाइज़ेशन से जुड़ने वाला एक बाइट वजन में 1 WU जोड़ता है; मूल डेटा का एक बाइट 4 WU। WU वजन की इकाई है। Full Node नियमों की स्वतंत्र जाँच करता है और खर्च सत्यापित करने के लिए उसे संबंधित डेटा चाहिए। कम वजन का मतलब आवश्यक जाँच छोड़ने की छूट या भंडारण में शून्य जगह नहीं है। [1] [7]
पुराने प्रारूप में खर्च के प्रमाण scriptSig में आते थे। नेटिव SegWit संस्करण 0 इस फ़ील्ड को खाली रखने की माँग करता है; प्रमाण witness में होते हैं। P2SH में लिपटा रूप भी है। P2SH स्क्रिप्ट के हैश से पहचानी गई शर्त पर भुगतान का पुराना तरीका है। इसमें scriptSig में ठीक संबंधित witness program डालने का निर्देश होना चाहिए, मनमाने अतिरिक्त निर्देश नहीं। खर्च के प्रमाण witness में ही रहते हैं। एक उद्देश्य के कई रूप हो सकते हैं; सिर्फ फ़ील्ड का नाम देखकर अर्थ तय नहीं कर सकते। [1] [5]
P2WPKH हस्ताक्षर और सार्वजनिक कुंजी देता है। नोड जाँचता है कि कुंजी का हैश मूल शर्त से मेल खाता है और हस्ताक्षर सही है। P2WSH पूरे स्क्रिप्ट के हैश से पहचानी गई शर्त की अनुमति देता है। इसकी आखिरी witness मद witnessScript होती है; उसका हैश आउटपुट के प्रोग्राम से मेल खाना चाहिए। पहले की मदें स्क्रिप्ट चलाने के लिए शुरुआती डेटा, जैसे हस्ताक्षर, देती हैं। BIP 143 इस संस्करण के लिए हस्ताक्षर किए जाने वाले संदेश की रचना बताता है, जिसमें खर्च किए जा रहे आउटपुट की रकम भी आती है। डेटा पढ़ पाना शर्तों के पूरा होने का प्रमाण नहीं है। [1] [2] [5]
Taproot नेटिव witness संस्करण 1 का उपयोग करता है और कुंजी वाले रास्ते तथा स्क्रिप्ट वाले रास्ते से खर्च में अंतर करता है। रास्ता तय करने से पहले annex नाम का विशेष अतिरिक्त फ़ील्ड, यदि हो, अलग कर दिया जाता है। फिर भी उसका डेटा वजन में गिना जाता है और हस्ताक्षर में शामिल रहता है। एक मद बचे तो उसे कुंजी वाले रास्ते का हस्ताक्षर माना जाता है। स्क्रिप्ट वाला रास्ता इस्तेमाल की गई स्क्रिप्ट और control block दिखाता है। यह पुराने आउटपुट से संबंध सिद्ध करने वाला डेटा है, ब्लॉकचेन का नया ब्लॉक नहीं। उससे पहले की मदें, यदि हों, स्क्रिप्ट को डेटा देती हैं। संस्करण 0 के नियम यहाँ ज्यों के त्यों लागू नहीं होते। [3] [5]
क्रिप्टोग्राफ़िक कमिटमेंट ऐसा पहचान-चिह्न है जो डेटा को उसकी निश्चित सामग्री से बाँधता है। जब witness डेटा के प्रति कमिटमेंट आवश्यक हो, तो BIP 141 उसे Coinbase Transaction के जरिए बाकी ब्लॉक से जोड़ता है। यह माइनर के पुरस्कार के लिए पहला लेनदेन होता है। wtxid हैश के पेड़ से एक रूट बनता है, जो शामिल डेटा का सार है। उस पेड़ में पुरस्कार वाले लेनदेन का wtxid शून्य लिया जाता है। रूट को आरक्षित 32 बाइट के मान से जोड़कर दो बार हैश किया जाता है; यही कमिटमेंट उसके आउटपुट में दर्ज होता है। यदि किसी लेनदेन में witness न हो, तो कमिटमेंट वैकल्पिक है। यह सार्वजनिक प्रमाणों को जोड़ता है, कुंजी का बैकअप या सत्यापन का विकल्प नहीं है। [1]
पूरी तस्वीर के लिए इस प्रविष्टि के साथ यह भी पढ़ें SegWit, Block Weight, Bitcoin Script, Taproot, Bitcoin, Seed Phrase. इस प्रविष्टि का उल्लेख यहाँ भी है Block Weight, Miniscript, Compact Block Filters.