मिनीस्क्रिप्ट: कैसे ब्लॉकस्ट्रीम इंजीनियर बिटकॉइन प्रोग्रामिंग को आसान बना रहे हैं (एर)
बिटकॉइन ने पहली स्मार्ट अनुबंध प्रोग्रामिंग भाषा की पेशकश की जिसे दुनिया ने कभी देखा था। स्क्रिप्ट, जैसा कि इस भाषा को कहा जाता है, उपयोगकर्ताओं को विभिन्न स्थितियों को सांकेतिक शब्दों में बदलने देता है जिसके तहत सिक्के खर्च किए जा सकते हैं। लेकिन जब यह एक क्रांतिकारी अवधारणा थी, तो इसका उपयोग करना आसान नहीं था, विशेष रूप से अधिक जटिल खर्च स्थितियों के लिए। दोनों एक जटिल अनुबंध लिखने के साथ-साथ यह भी पुष्टि करते हैं कि अनुबंध वह करता है जो यह करना चाहिए कि मानव त्रुटि से ग्रस्त है। फिर भी, विशेष रूप से दांव पर पैसे के साथ, शर्तों की सही व्याख्या अत्यंत महत्वपूर्ण है.
पिछले एक साल में, ब्लॉकचैन इंजीनियर एंड्रयू पॉलेस्ट्रा, पीटर वुइल और साकेत कंजालकर ने इसमें सुधार किया। स्क्रिप्ट को अपनी नंगे अनिवार्यताओं से हटाकर, उनकी “नई” प्रोग्रामिंग भाषा – “मिनिस्क्रिप्ट“- अमूर्तता को दूर करता है और बिटकॉइन पर प्रोग्रामिंग को आसान बनाना चाहिए और इसमें शामिल सभी लोगों के लिए सुरक्षित होना चाहिए.
“मिनिस्क्रिप्ट एक सैद्धांतिक अर्थ में, स्क्रिप्ट की तुलना में अधिक सीमित है,” ब्लॉकस्ट्रीम निदेशक अनुसंधान और मिनिसस्क्रिप्ट सह-डिजाइनर एंड्रयू पॉलेस्ट्रा ने बिटकॉइन पत्रिका को बताया। “लेकिन यह सब कुछ कर सकता है जिसके लिए लोग वास्तव में स्क्रिप्ट का उपयोग करते हैं।”
लिपि
हमें शुरू से करना चाहिए.
प्रत्येक बिटकॉइन लेनदेन में दो मुख्य भाग होते हैं: इनपुट और आउटपुट, दोनों में कोड के टुकड़े होते हैं। इनपुट “अनलॉक” सिक्के और आउटपुट “उन्हें लॉक” फिर से निर्दिष्ट करते हैं कि किस स्थिति में उन्हें बाद के लेनदेन इनपुट में अनलॉक किया जा सकता है। ऐसी आवश्यकताओं में आमतौर पर एक मान्य क्रिप्टोग्राफ़िक हस्ताक्षर शामिल होते हैं, लेकिन अधिक संभावनाएं होती हैं; उदाहरण के लिए, एक सिक्का खर्च किए जाने से पहले निश्चित समय बीत गया होगा या एक विशिष्ट गुप्त संख्या को शामिल किया जाना चाहिए.
लेनदेन में यह कोड स्क्रिप्ट के साथ बनाया गया है, जो एक प्रोग्रामिंग भाषा है जिसे विशेष रूप से बिटकॉइन के लिए डिज़ाइन किया गया है। स्क्रिप्ट फोर्थ से प्रेरित थी, जो 1960 में आविष्कार की गई एक प्रोग्रामिंग भाषा थी जिसे मूल रूप से रेडियो दूरबीनों को संचालित करने के लिए डिज़ाइन किया गया था। स्क्रिप्ट को समायोजित किया जाता है, हालांकि, इसे बिटकॉइन के लिए अधिक अनुकूल बनाने के लिए.
उदाहरण के लिए, स्क्रिप्ट में एक ओपकोड (एक निर्देश) नहीं है जो “लूप्स” बनाता है: भाषा एक ही गणना को अनबाउंड नंबर बार प्रदर्शन करने का समर्थन नहीं करती है। बिटकॉइन में, एक ही गणना को कई बार अनबाउंड करने की आवश्यकता नहीं है क्योंकि बिटकॉइन नोड वास्तव में लेनदेन की गणना नहीं करते हैं – वे लेनदेन को मान्य करते हैं। (ऐसा क्यों है, इसकी अधिक तकनीकी व्याख्या के लिए, देखें ये पद ब्लॉकस्ट्रीम इंजीनियर रसेल ओ’कॉनर द्वारा।)
स्क्रिप्ट भी “अप्रकाशित” है। इसका मतलब यह है कि गणना के परिणामों की व्याख्या और विभिन्न तरीकों से उपयोग किया जा सकता है। उदाहरण के लिए, एक वैध हस्ताक्षर का नतीजा “सच” हो सकता है, लेकिन “सच” हो सकता है, बदले में व्याख्या की जा सकती है और इसे “1” के रूप में उपयोग किया जाता है और बाद में गणित समीकरणों में इसका उपयोग किया जाता है: “सच” प्लस “सच” जोड़ देगा उदाहरण के लिए, “2” तक, इसका मतलब यह हो सकता है कि यदि न्यूनतम दो वैध हस्ताक्षर आवश्यक हैं तो पर्याप्त हस्ताक्षर उपलब्ध कराए गए थे.
यह हमें इस लेख के संदर्भ में स्क्रिप्ट की सबसे महत्वपूर्ण संपत्ति में लाता है: यह मुश्किल है “के बारे में कारण.”इसका अनिवार्य रूप से मतलब है कि गणना के परिणामों की कई तरीकों से व्याख्या की जा सकती है। यहां तक कि अगर कोई हस्ताक्षर अमान्य है, उदाहरण के लिए, स्क्रिप्ट को ऐसे लिखा जा सकता है कि लेनदेन अभी भी किसी अन्य कारण से मान्य है.
“Bitcoin Script में opcodes हैं जो वास्तव में बेतुकी बातें करते हैं,” Poelstra ने समझाया। “जैसे, एक सच्चे / झूठे मूल्य के रूप में एक हस्ताक्षर की व्याख्या, उस पर शाखा; उस बूलियन को एक संख्या में बदलें और फिर स्टैक में अनुक्रमित करें, और उस संख्या के आधार पर स्टैक को पुनर्व्यवस्थित करें। और यह कैसे होता है इसके लिए विशिष्ट नियम सुपर नट हैं। “
इससे स्क्रिप्ट को काम करने में मुश्किल हो सकती है। विशेष रूप से यदि खर्च करने की आवश्यकता (“अनलॉक”) सिक्के अधिक जटिल हो जाते हैं, तो लेनदेन के लेखक को अनजाने में कोड में कुछ ऐसा शामिल हो सकता है जो सिक्कों को उद्देश्य से अलग-अलग परिस्थितियों में खर्च करने की अनुमति देता है। इसके विपरीत, एक लेन-देन को प्राप्त करने वाला ऐसे क्वर्क को नोटिस करने में विफल हो सकता है और अपने सिक्के एक हमलावर को खो सकता है जो नोटिस करता है.
एक समस्या का एक ठोस उदाहरण
यहाँ एक ठोस उदाहरण है कि ये समस्याएँ स्क्रिप्ट की उपयोगिता को कैसे सीमित करती हैं.
ब्लॉकस्ट्रीम ग्रीन वॉलेट में एक मानक “cosigning” सेटअप है। वॉलेट उपयोगकर्ता दो में से एक कुंजी को नियंत्रित करता है, और ब्लॉकस्ट्रीम दूसरे को नियंत्रित करता है। फंड को दो तरीकों से खर्च किया जा सकता है। सबसे पहले, जब भी उपयोगकर्ता एक सिक्का खर्च करना चाहता है, तो वे लेनदेन पर हस्ताक्षर करते हैं और अनुरोध करते हैं कि ब्लॉकस्ट्रीम इस पर भी हस्ताक्षर करता है। ब्लॉकस्ट्रीम आमतौर पर ऐसा करेगा, हालांकि इसके लिए यह आवश्यक हो सकता है कि उपयोगकर्ता पुष्टि करता है कि वे वास्तव में एक माध्यमिक पुष्टि के माध्यम से लेनदेन करना चाहते हैं, जैसे ईमेल पुष्टिकरण। लेकिन ब्लॉकस्ट्रीम के अंत में कुछ गलत हो सकता है – शायद कंपनी गायब हो जाती है या अपनी कुंजी खो देती है, या यह किसी अन्य कारण से हस्ताक्षर नहीं कर सकता है। उस स्थिति में, उपयोगकर्ता के पास अपने बिटकॉइन को खर्च करने के लिए अभी भी एक कमबैक समाधान है: एक समयसीमा समाप्त हो जाने के बाद, वे कुछ पूर्व निर्धारित समय बीत जाने के बाद एक वैध लेनदेन बना सकते हैं। शायद एक महीना.
यह ठीक काम करता है, लेकिन यह भी सीमित है। उपयोगकर्ता बिटकॉइन की किसी भी स्मार्ट अनुबंध क्षमता का उपयोग नहीं कर सकता है, भले ही वे सेटअप के अंत में अधिक लचीलापन जोड़ना चाहते हों.
“अभी ग्रीन के पास एक निश्चित स्क्रिप्ट है जिसे वह सभी ग्राहकों के लिए उपयोग करता है, जो मूल रूप से सिर्फ एक साधारण बहु-हस्ताक्षर है,” पॉलेस्ट्रा ने कहा। “लेकिन वास्तव में, हमें परवाह नहीं करनी चाहिए कि स्क्रिप्ट क्या कहती है। हम क्या परवाह करते हैं: कुछ समय से पहले, क्या हमारे हस्ताक्षर के बिना सिक्कों को खर्च करना असंभव है? यदि उपयोगकर्ता हमारे साथ कुछ पागल नीति का उपयोग करना चाहता है, तो हमें उसका समर्थन करने में सक्षम होना चाहिए, जब तक कि वह एक शर्त जिसके बारे में हमें परवाह है, वह पूरी हो गई है। ”
उदाहरण के लिए, उपयोगकर्ता एक साल बीत जाने के बाद अपने प्रियजनों को सिक्का खर्च करने की अनुमति देना चाहते हैं, यदि वे गुजर जाते हैं। या हो सकता है कि उपयोगकर्ता वास्तव में एक कंपनी है, और यह एक मल्टीसिग सेटअप बनाना चाहता है, जहां बोर्ड के तीन सदस्यों में से कोई भी एक साथ सिक्के (ब्लॉकस्ट्रीम के साथ संयोजन में) खर्च कर सकता है.
वर्तमान में, यह बिटकॉइन स्क्रिप्ट के साथ तकनीकी रूप से संभव हो सकता है। हालाँकि, इसके लिए यह आवश्यक होगा कि उपयोगकर्ता एक कस्टम सेटअप डिज़ाइन करे, और ब्लॉकस्ट्रीम को इस कस्टम सेटअप में भाग लेना होगा.
“, लेकिन अगर उपयोगकर्ता हमें एक मनमानी स्क्रिप्ट देता है, तो हमारे लिए यह बताना असंभव है कि क्या हम इसके बारे में परवाह करते हैं या नहीं [मिले], क्योंकि सभी स्क्रिप्ट व्यवहारों का कुल सेट वास्तव में जटिल है,” पॉलेस्ट्रा ने समझाया। उदाहरण के लिए, यदि कोई स्क्रिप्ट हस्ताक्षर लेती है, तो हमें यह सोचने की जरूरत है कि यदि उपयोगकर्ता एक गैर-हस्ताक्षर देता है तो क्या होगा। क्या सिक्कों को खर्च करने देने में इसे धोखा दिया जा सकता है? ”
मिनिस्क्रिप्ट
पिछले एक साल में, मिनीस्क्रिप्ट को पॉइलस्ट्रा, ब्लॉकस्ट्रीम कोर टेक इंजीनियर पीटर वुइल और ब्लॉकस्ट्रीम इंटर्न संकेट कंजालकर ने डिजाइन किया था। (मिनिसस्क्रिप्ट आधिकारिक रूप से ब्लॉकस्ट्रीम उत्पाद नहीं है, हालांकि)
संक्षेप में, मिनिसस्क्रिप्ट स्क्रिप्ट का एक “स्ट्रिप्ड डाउन” संस्करण है: “स्क्रिप्ट टूलकिट” से “टूल्स” का चयन जो इसे मनुष्यों द्वारा सत्यापित करना आसान और आसान बनाता है। साधनों को व्यावहारिक रूप से कुछ भी सक्षम करने के लिए सावधानी से चुना जाता है जो स्क्रिप्ट के साथ किया जा सकता है – केवल कुछ फ्रिंज अपवाद हैं जो वास्तव में कोई भी उपयोग नहीं करता है। इसलिए जबकि मिनिसस्क्रिप्ट की एक पंक्ति अभी भी स्क्रिप्ट की एक वैध रेखा है, यह अनिवार्य रूप से अप्रत्याशित, संभवतः अनपेक्षित, कोड के परिणामों को रोककर मानवीय त्रुटि से बचाती है।.
ऊपर एक समस्या का उदाहरण लेते हुए, मिनिस्क्रिप्ट के साथ, उपयोगकर्ता आसानी से इस तरह से एक सेटअप डिज़ाइन कर सकता है कि ब्लॉकस्ट्रीम तुच्छ रूप से जांच कर सके कि इसकी एक शर्त पूरी हो गई है। विशेष रूप से, ब्लॉकस्ट्रीम यह देख सकता है कि धन केवल तभी खर्च किया जा सकता है जब यह संकेत करता है या यदि एक महीना बीत चुका है – कोई भी बात नहीं जो सेटअप के उपयोगकर्ता के अंत में शामिल हैं, तो यह अतिरिक्त समयसीमा या मल्टीगिस या कुछ और हो। मिनिस्क्रिप्ट के साथ, कोई अप्रत्याशित झगड़ा नहीं हो सकता है जो ब्लॉकस्ट्रीम के अंत को ओवरराइड करेगा.
मिनिसस्क्रिप्ट वास्तव में इतना सरल और पूर्वानुमेय है कि वास्तव में, सेटअप को हमेशा निर्णय वृक्ष में बदल दिया जा सकता है: सेटअप का एक दृश्य (“चित्रात्मक एन्कोडिंग”), जिसके बारे में तर्क करना बहुत आसान है.
उदाहरण के लिए, नीचे दिया गया विज़ुअलाइज़ेशन एक सेटअप दिखाता है, जहाँ तीन में से दो उपयोगकर्ताओं को सिक्के चलाने के लिए साइन इन करना पड़ता है। एक बैकअप विकल्प के रूप में, सिक्कों को आपातकालीन कुंजी के साथ स्थानांतरित किया जा सकता है, लेकिन केवल कुछ समय बीतने के बाद.
मिनिस्क्रिप्ट का दृश्य
[लेखक का ध्यान दें: इसके लिए तेजस्वी नादहल्ली का धन्यवाद संकेत द्वारा दिखाना दृश्य के पहले का वर्णन गलत था।]
“मिनिस्क्रिप्ट के साथ ब्लॉकस्ट्रीम के लिए और अधिक जटिल सेटअपों में भाग लेना आसान है – हम स्क्रिप्ट को एक पेड़ में डिकोड करते हैं, फिर हम पेड़ के हर पत्ते की जांच करते हैं, पूछते हैं (क) क्या इस पत्ते पर कोई टाइमआउट स्थिति है ?; या (बी) क्या इस पत्ते को हमारे हस्ताक्षर में से एक की आवश्यकता है? ” पोइल्स्ट्रा ने कहा.
यदि उत्तर दोनों प्रश्नों के लिए हां है, तो ब्लॉकस्ट्रीम भाग ले सकता है.
उपयोग में मिनिस्क्रिप्ट
जबकि मिनिस्क्रिप्ट एक कार्य प्रगति पर है, इसके शुरुआती संस्करण जारी कर दिए गए हैं और ये उपयोग करने के लिए तैयार हैं.
मिनिसस्क्रिप्ट लिखने की प्रक्रिया को और भी आसान बनाने के लिए, वूइल ने एक “नीति भाषा” डिजाइन की। नीति भाषा वास्तव में स्वयं की प्रोग्रामिंग भाषा की तरह है। उन शर्तों को प्रोग्रामिंग करने के बाद, जिनके तहत इस नीति की भाषा में एक सिक्का खर्च किया जा सकता है, इसे मिनीस्क्रिप्ट में संकलित (“अनुवादित”) किया जा सकता है, और इसलिए मान्य स्क्रिप्ट में, बिटकॉइन लेनदेन आउटपुट में शामिल किया जाना है.
इस नीति भाषा का एक बड़ा अतिरिक्त लाभ यह है कि यह स्वचालित रूप से न्यूनतम का सबसे प्रभावी संस्करण में संकलित करता है, संभव है कि स्क्रिप्ट वास्तव में एनकोड के आधार पर संभव हो।.
“मिनिसस्क्रिप्ट के बारे में बात यह है कि यह मूल रूप से स्क्रिप्ट है … आपके पास about या ‘लिखने का एक टन तरीका’ और ‘लिखने के लिए एक टन है और कुछ दूसरों की तुलना में अधिक कुशल हैं,” पॉलेस्ट्रा ने कहा। “नीति की भाषा में केवल एक, या ‘,’ एक ‘और’ और आगे ‘है, और पीटर [वूइल] ने इस सुपर अनुकूलित कंपाइलर को लिखा है जो कि आपके लिए मिनिसस्क्रिप्ट में बदल देगा, और इसे इष्टतम तरीके से करेगा।”
यह केवल एक सैद्धांतिक अवधारणा नहीं है। भले ही मिनिसस्क्रिप्ट और संकलक का वर्तमान संस्करण अंतिम संस्करण नहीं है, लेकिन ब्लॉकस्ट्रीम इसे आंतरिक रूप से अपने लिक्विड साइडसेहिन फ़ंक्शन सॉफ़्टवेयर की विकास शाखा के लिए उपयोग कर रहा है। (पॉइलेस्ट्रा ने बताया कि वूइल के अनुकूलन कंपाइलर के उपयोग ने ब्लॉकस्ट्रीम 22 बाइट्स को अपने मूल, “हाथ से लुढ़का हुआ” स्क्रिप्ट के रूप में सहेजा है।) वुइल किसी भी व्यक्ति के लिए पॉलिसी भाषा के डेमो संस्करण का उपयोग करने के लिए मिनिसस्क्रिप्ट कंपाइलर को होस्ट करता है। http://bitcoin.sipa.be/miniscript/.