यह एक में दूसरा लेख है शृंखला अलग-अलग वाचा के प्रस्तावों में गहरी गोताखोरी जो एक गहन टूटने के लिए परिपक्वता के एक बिंदु पर पहुंच गई है।
CheckSigFromStack (CSFS), BIP 348 के साथ ब्रैंडन ब्लैक और जेरेमी रुबिन द्वारा आगे रखा गया, एक वाचा नहीं है। जैसा कि मैंने इस श्रृंखला के परिचयात्मक लेख में कहा, कुछ प्रस्ताव जो मैं कवर कर रहा हूं, वे वाचा नहीं हैं, लेकिन किसी तरह से उनके साथ तालमेल या परस्पर संबंध रखते हैं। CSFS इसका पहला उदाहरण है।
CSFS एक बहुत ही सरल ओपकोड है, लेकिन इससे पहले कि हम इसके माध्यम से जाते हैं कि यह कैसे काम करता है, इस बात की मूल बातें देखें कि वास्तव में एक बिटकॉइन स्क्रिप्ट कैसे काम करती है।
स्क्रिप्ट एक स्टैक आधारित भाषा है। इसका मतलब है कि डेटा को स्टैक पर एक दूसरे के ऊपर एक साथ “स्टैक्ड” किया जाता है, और स्टैक के ऊपर से एक आइटम को हटाकर संचालित किया जाता है, जो कि एक ऑपकोड के आधार पर संचालित करने के लिए होता है, या तो डेटा वापस करता है या स्टैक के शीर्ष पर इसका परिणाम होता है।
स्क्रिप्ट के दो भाग होते हैं जब इसे अंततः निष्पादित और सत्यापित किया जाता है, स्क्रिप्ट को अनलॉक करने के लिए “गवाह” प्रदान किया जाता है, और आउटपुट में शामिल स्क्रिप्ट खर्च की जा रही है। गवाह/अनलॉकिंग स्क्रिप्ट को लॉकिंग स्क्रिप्ट के बाईं ओर “जोड़ा” किया जाता है, और फिर प्रत्येक तत्व को एक -एक करके एक -एक करके स्टैक को जोड़ा जाता है (या संचालित करता है)। इस उदाहरण को देखें (“|“गवाह और स्क्रिप्ट के बीच की सीमा को चिह्नित करता है):
1 2 | On_add 3 on_equal
यह उदाहरण स्क्रिप्ट स्टैक में “1” मान जोड़ती है, फिर उस के शीर्ष पर “2” मान। Op_add स्टैक के शीर्ष दो तत्वों को लेता है और उन्हें एक साथ जोड़ता है, परिणाम को स्टैक पर वापस डाल देता है (इसलिए अब वह सब स्टैक पर है “3” है)। एक और “3” फिर स्टैक में जोड़ा जाता है। अंतिम आइटम, op_equal, स्टैक के शीर्ष दो आइटम लेता है और स्टैक पर “1” लौटाता है (1 और 0 सही या गलत के साथ -साथ संख्याओं का प्रतिनिधित्व कर सकता है)।
एक स्क्रिप्ट को स्टैक के शीर्ष पर अंतिम आइटम के साथ समाप्त होना चाहिए, अन्यथा स्क्रिप्ट (और लेनदेन इसे निष्पादित करना) विफल हो जाता है और इसे सर्वसम्मति से अमान्य माना जाता है।
यह एक पे-टू-पबकी-हैश (P2PKH) स्क्रिप्ट का एक मूल उदाहरण है, यानी विरासत के पते जो “1” से शुरू होते हैं:
पहले हस्ताक्षर और सार्वजनिक कुंजी को स्टैक में जोड़ा जाता है। तब डीयूपी कहा जाता है, जो शीर्ष स्टैक आइटम लेता है और इसे डुप्लिकेट करता है, इसे स्टैक के शीर्ष पर लौटाता है। Hash160 शीर्ष स्टैक आइटम (सार्वजनिक कुंजी डुप्लिकेट) लेता है, उसे हैश करता है, फिर इसे स्टैक के शीर्ष पर लौटाता है। स्क्रिप्ट से सार्वजनिक कुंजी हैश को स्टैक के ऊपर रखा गया है। समान रूप से कार्य करता है समान के समान, यह दो शीर्ष स्टैक आइटम को पकड़ता है और परिणाम के आधार पर 1 या 0 लौटाता है। एकमात्र अंतर यह है कि इक्वाल्विफ़ भी समान के बाद सत्यापित चलाता है, जो कि शीर्ष स्टैक आइटम 1 नहीं है, और शीर्ष स्टैक आइटम को भी हटाता है। अंत में Checksig चलाया जाता है, जो शीर्ष दो स्टैक आइटमों को पकड़ लेता है, जो उन्हें एक हस्ताक्षर और एक प्यूबकी मानते हैं, और लेनदेन के हैश के खिलाफ स्पष्ट रूप से हस्ताक्षर को सत्यापित करता है। यदि यह मान्य है तो यह स्टैक के ऊपर 1 डालता है।
Checksig बिटकॉइन में सबसे अधिक उपयोग किए जाने वाले Opcodes में से एक है। प्रत्येक लेन -देन, लगभग कोई अपवाद नहीं है, अपनी एक स्क्रिप्ट में किसी बिंदु पर इस ओपकोड का उपयोग करता है। हस्ताक्षर सत्यापन बिटकॉइन प्रोटोकॉल का एक मूलभूत घटक है। समस्या यह है कि आप किस संदेश के खिलाफ हस्ताक्षर की जाँच कर रहे हैं, इस संदर्भ में लगभग कोई लचीलापन नहीं है। Checksig केवल लेनदेन के सत्यापन के खिलाफ एक हस्ताक्षर को सत्यापित करेगा। कुछ लचीलापन है, यानी आप कुछ हद तक स्वतंत्रता के साथ तय कर सकते हैं कि हस्ताक्षर के किस हिस्से पर हस्ताक्षर लागू होते हैं, लेकिन यह बात है।
CSFS का उद्देश्य किसी भी मनमाना संदेश के खिलाफ एक हस्ताक्षर को सत्यापित करने की अनुमति देकर इसे बदलना है, जिसे सीधे स्टैक पर धकेल दिया जाता है, बजाय लेनदेन के खिलाफ हस्ताक्षर के सत्यापन तक सीमित होने के बजाय। Opcode एक बहुत ही बुनियादी परिचालन संरचना का अनुसरण करता है:
हस्ताक्षर और संदेश को स्टैक के ऊपर गिरा दिया जाता है, फिर उनके ऊपर सार्वजनिक कुंजी, और अंत में CSFS स्टैक से शीर्ष तीन आइटमों को पकड़ लेता है, जो उन्हें सार्वजनिक कुंजी, संदेश और ऊपर से नीचे तक हस्ताक्षर मानते हैं, संदेश के खिलाफ हस्ताक्षर को सत्यापित करते हैं। यदि हस्ताक्षर मान्य है, तो 1 को स्टैक पर रखा जाता है।
इतना ही। CheckSig का एक सरल संस्करण जो उपयोगकर्ताओं को केवल खर्च करने के लेनदेन के बजाय मनमानी संदेश निर्दिष्ट करने देता है।
तो वास्तव में यह क्या अच्छा है? खर्च लेनदेन के खिलाफ स्टैक पर एक मनमाना संदेश के खिलाफ एक हस्ताक्षर की जाँच करने का क्या उपयोग है?
सबसे पहले, संयोजन में केबल टीवी यह एक ऐसी कार्यक्षमता प्रदान कर सकता है, जो बिजली के डेवलपर्स की शुरुआत से ही चाहते हैं, फ्लोटिंग हस्ताक्षर जो विभिन्न लेनदेन में संलग्न हो सकते हैं। यह मूल रूप से हस्ताक्षर के लिए एक नए सिघैश ध्वज के रूप में प्रस्तावित किया गया था (वह क्षेत्र जो यह तय करता है कि एक लेनदेन के भागों में एक हस्ताक्षर क्या लागू होता है)। इसकी आवश्यकता थी क्योंकि एक लेनदेन हस्ताक्षर लेनदेन की लेनदेन आईडी को कवर करता है जिसने आउटपुट को खर्च किया जा रहा है। इसका मतलब है कि एक हस्ताक्षर केवल एक लेनदेन खर्च के लिए मान्य है एकदम सही आउटपुट।
यह बिजली के लिए एक वांछित व्यवहार है क्योंकि यह हमें चैनल दंड के साथ दूर करने की अनुमति देगा। हर पिछले लाइटनिंग स्टेट को यह सुनिश्चित करने के लिए एक पेनल्टी की और लेन -देन की आवश्यकता होती है कि यह सुनिश्चित करने के लिए कि आपका चैनल प्रतिपक्ष कभी भी उनमें से किसी का भी उपयोग नहीं करता है, जो उन फंडों का दावा करने की कोशिश करते हैं जो वे नहीं हैं। यदि वे कोशिश करते हैं तो आप उनके सभी पैसे का दावा कर सकते हैं। एक बेहतर कार्यक्षमता कुछ ऐसी होगी जो आपको किसी भी पिछले राज्य के लेन -देन को “संलग्न” करने की अनुमति देती है, जो किसी भी पिछले एक को चोरी के प्रयास को सही ढंग से वितरित करके उन्हें जब्त करने के लिए विरोध करती है।
यह एक बुनियादी स्क्रिप्ट के साथ पूरा किया जा सकता है जो एक सीटीवी हैश और उस पर एक हस्ताक्षर लेता है जिसे सीएसएफएस का उपयोग करके जांचा जाता है। यह किसी भी लेनदेन हैश को उस CSFS कुंजी द्वारा हस्ताक्षरित करने की अनुमति देगा जो इस स्क्रिप्ट के साथ बनाए गए किसी भी आउटपुट को खर्च करता है।
एक अन्य उपयोगी विशेषता एक UTXO के नियंत्रण का प्रतिनिधिमंडल है। जिस तरह से CSFS कुंजी द्वारा हस्ताक्षरित कोई भी CTV हैश वैध रूप से उस स्क्रिप्ट के साथ एक UTXO खर्च कर सकता है, अन्य चर को स्क्रिप्ट में पारित किया जा सकता है, जैसे कि एक नई सार्वजनिक कुंजी। एक स्क्रिप्ट का निर्माण किया जा सकता है जो एक CSFS कुंजी को साइन ऑफ करने की अनुमति देता है कोई सार्वजनिक कुंजी, जिसे तब सीएसएफएस का उपयोग करके मान्य किया जा सकता है और एक सामान्य चेकसीग सत्यापन के लिए उपयोग किया जा सकता है। यह आपको इसे ऑन-चेन को स्थानांतरित किए बिना किसी और को UTXO खर्च करने की क्षमता को सौंपने की अनुमति देगा।
अंत में, कैट के साथ संयोजन में, सीएसएफ का उपयोग बहुत अधिक जटिल आत्मनिरीक्षण कार्यक्षमता की रचना करने के लिए किया जा सकता है। जैसा कि हम बाद में श्रृंखला में देखेंगे, हालांकि, सीएसएफएस को वास्तव में इस अधिक उन्नत व्यवहार में से किसी को भी अनुकरण करने की आवश्यकता नहीं है, क्योंकि बिल्ली अकेले ऐसा करने में सक्षम है।
CSFS एक बहुत ही बुनियादी ओपकोड है जो अपने आप में सरल उपयोगी कार्यक्षमता की पेशकश करने के अलावा बहुत उपयोगी कार्यक्षमता बनाने के लिए सबसे सरल वाचा ओपकोड के साथ बहुत अच्छी तरह से रचना करता है। जबकि फ्लोटिंग हस्ताक्षर के बारे में ऊपर का उदाहरण विशेष रूप से लाइटनिंग नेटवर्क को संदर्भित करता है, फ्लोटिंग हस्ताक्षर एक आम तौर पर उपयोगी आदिम हैं जो बिटकॉइन पर निर्मित किसी भी प्रोटोकॉल पर लागू होते हैं जो पूर्व-हस्ताक्षरित लेनदेन का उपयोग करते हैं।
फ्लोटिंग हस्ताक्षर के अलावा, स्क्रिप्ट प्रतिनिधिमंडल एक बहुत ही उपयोगी आदिम है जो एक नई सार्वजनिक कुंजी के लिए एक UTXO पर नियंत्रण सौंपने से परे सामान्य करता है। स्क्रिप्ट सत्यापन प्रवाह में तथ्य के बाद “साइडलोड” चर की एक ही मूल क्षमता किसी भी चीज़ पर लागू हो सकती है, न कि केवल सार्वजनिक कुंजी पर। Timelock मान, हैशलॉक प्रीमेज, आदि। कोई भी स्क्रिप्ट जो एक वैरिएबल को सत्यापित करने के लिए एक वैरिएबल को हार्डकोड करता है, अब उन मूल्यों को गतिशील रूप से जोड़ा जा सकता है, इस तथ्य के बाद जोड़ा जा सकता है।
उसके शीर्ष पर, CSFS एक बहुत ही परिपक्व प्रस्ताव है। इसका एक कार्यान्वयन है जो तरल नेटवर्क और तत्वों पर लाइव रहा है (कोडबेस तरल उपयोग करता है) 2016 से। इसके अलावा बिटकॉइन कैश एक है संस्करण 2018 के बाद से।
CSFS एक बहुत ही परिपक्व प्रस्ताव है जो वैचारिक रूप से लगभग तब तक वापस चला जाता है जब तक मैं इस स्थान पर रहा हूं, कई परिपक्व कार्यान्वयन के साथ, और बहुत स्पष्ट उपयोग के मामलों में इसे लागू किया जा सकता है।