अगर हम पिछले कुछ वर्षों के रुझानों को देखें, तो हमने हर समय ब्लॉकचेन के बारे में सुना है, लेकिन बारीकियों के बारे में ज्यादा नहीं।
हम सभी जानते हैं कि बिटकॉइन, एथेरियम, डॉगकोइन, मैटिक और अन्य जैसी क्रिप्टोकरेंसी ब्लॉकचेन तकनीक पर निर्भर हैं। ब्लॉकचेन ने महत्वपूर्ण घटनाओं का नेतृत्व किया जिसने 2021 में कई उद्योगों में क्रांति ला दी और नई उपलब्धियों का मार्ग प्रशस्त किया।
ब्लॉकचेन डेटा को इस तरह से संग्रहीत करने का एक साधन है जिसे संपादित करना, हैक करना या ठगना कठिन या असंभव है। यह लेन-देन का एक डिजिटल खाता बही है जो ब्लॉकचेन के कंप्यूटर सिस्टम के पूरे नेटवर्क में डुप्लिकेट और फैला हुआ है।
यह ग्राउंड-ब्रेकिंग डेटाबेस तकनीक है जो व्यावहारिक रूप से सभी क्रिप्टोकरेंसी को शक्ति प्रदान करती है। ब्लॉकचेन पूरे नेटवर्क में डेटाबेस की समान प्रतियों को फैलाकर सिस्टम को हैक करना या धोखा देना अविश्वसनीय रूप से कठिन बना देता है।
जबकि बिटकॉइन अब ब्लॉकचेन के लिए सबसे प्रमुख उपयोग है, तकनीक बहुत व्यापक प्रकार के अनुप्रयोगों की सेवा कर सकती है।
हाल के वर्षों में क्रिप्टोकरेंसी और ब्लॉकचेन तेजी से लोकप्रिय हुए हैं, और इस प्रवृत्ति के जारी रहने की उम्मीद है।
हम इस ट्यूटोरियल में जावास्क्रिप्ट के साथ एक सरल ब्लॉकचेन बनाएंगे। यह आपको एक बुनियादी समझ प्रदान करेगा कि ब्लॉकचेन कैसे काम करता है।
आइए इसे मेलोडीकॉइन कहते हैं और कार्रवाई में सही हो जाते हैं!
एक ब्लॉक बनाना
शुरू करने के लिए, हम एक नई जावास्क्रिप्ट फ़ाइल बनाएंगे जिसमें हम अपना सारा कोड डाल देंगे।
आइए इसे main.js कहते हैं और एक विवरण के साथ शुरू करते हैं कि एक ब्लॉकचेन और ब्लॉक कैसे दिखना चाहिए।
एक ब्लॉक क्लास बनाएं और इसे शुरू करने के लिए एक फ़ंक्शन ऑब्जेक्ट() {[मूल कोड]} दें।
नया ब्लॉक बनाते समय आपको एक तारीख और पिछले ब्लॉक का हैश देना होगा:
यहां प्रत्येक संपत्ति की परिभाषाएं दी गई हैं:
- टाइमस्टैम्प इंगित करता है कि ब्लॉक कब बनाया गया था। आप जो भी प्रारूप चुनते हैं उसका उपयोग कर सकते हैं (इस मामले में, यूनिक्स टाइमस्टैम्प)।
- डेटा का कोई भी रूप जिसे आप इस ब्लॉक से कनेक्ट करना चाहते हैं, उसे डेटा पैरामीटर में शामिल किया जा सकता है। यदि आप एक क्रिप्टोकुरेंसी बनाना चाहते हैं, तो आप प्रेषक/रिसीवर जैसे लेनदेन डेटा और यहां स्थानांतरित धन की राशि रख सकते हैं।
- पिछलाहैश एक स्ट्रिंग है जिसमें पूर्व ब्लॉक का हैश होता है। यह वही है जो ब्लॉक की श्रृंखला उत्पन्न करेगा, जो बाद में हमारे ब्लॉकचेन की अखंडता प्रदान करने में महत्वपूर्ण होगा।
हैश बनाना
प्रत्येक ब्लॉक पिछले ब्लॉक (इस प्रकार पिछला हैश संपत्ति) से लिंक होता है। यही है, प्रत्येक ब्लॉक को हैश की आवश्यकता होती है। एक हैश एक फिंगरप्रिंट के समान है। यह प्रत्येक ब्लॉक के लिए अलग है।
एक ब्लॉक के हैश की गणना उसकी सभी सामग्री को हैश फ़ंक्शन के माध्यम से पास करके की जा सकती है।
तो, चलिए एक फ़ंक्शन को लागू करके शुरू करते हैं जो वर्तमान ब्लॉक के हैश की गणना करता है।
इसलिए, ब्लॉक क्लास के तहत, हम कैलकुलेट हैश फ़ंक्शन को परिभाषित करते हैं:
हालांकि, SHA256 हैश जावास्क्रिप्ट द्वारा समर्थित नहीं है और इसे बाहरी पुस्तकालय से प्राप्त किया जाना चाहिए।
क्रिप्टो-जेएस एक शानदार पैकेज है जिसमें कई हैश एल्गोरिदम के सुरक्षित कार्यान्वयन शामिल हैं।
फिर हम इसे अपने main.js कोड में इम्पोर्ट कर सकते हैं।
अब जब हमारे पास अपना कैलकुलेट हैश () फ़ंक्शन है, तो आइए इसे अपने ब्लॉक के फ़ंक्शन में उपयोग करने दें:
ब्लॉक कैसा दिखता है, इसका वर्णन करने के बाद, हम परिभाषित कर सकते हैं कि ब्लॉकचैन कैसा दिखना चाहिए। तो चलिए एक नया वर्ग बनाते हैं।
इस परिदृश्य में, ब्लॉकचेन एक बहुत ही सरल वस्तु है जिसमें एक संपत्ति श्रृंखला होती है। यह एक सरणी है जो श्रृंखला के सभी ब्लॉकों को पकड़ती है।
इससे पहले कि हम ब्लॉक जोड़ सकें, हमें पहले "जेनेसिस ब्लॉक" के रूप में जाना जाता है। यह श्रृंखला में पहला ब्लॉक है, और यह अद्वितीय है कि यह किसी पूर्व ब्लॉक को इंगित नहीं कर सकता है (यह पहला है!)
इसलिए, जेनेसिस ब्लॉक बनाने के लिए, मैं अपनी क्लास में createजेनेसिसब्लॉक () नाम का एक फंक्शन जोड़ूंगा। हमारे ब्लॉकचैन वर्ग के फ़ंक्शन ऑब्जेक्ट () { [मूल कोड] } में वापस।
जब भी हम एक नया ब्लॉकचैन इंस्टेंस बनाते हैं तो हम अब उत्पत्ति ब्लॉक को शामिल कर सकते हैं:
ब्लॉकचेन के तरीके
अब, हमारे ब्लॉकचैन वर्ग में विधियों को जोड़ते हैं जो हमें नए ब्लॉक जोड़ने और सबसे हालिया ब्लॉक लाने जैसे काम करने की अनुमति देगा।
GetLatestBlock फ़ंक्शन सबसे बुनियादी है। यह केवल श्रृंखला सरणी के अंतिम सदस्य को लौटाता है:
ऐडब्लॉक तकनीक थोड़ी अधिक शामिल है।
इससे पहले कि हम अपनी श्रृंखला में एक नया ब्लॉक जोड़ सकें, हमें पहले उस ब्लॉक के पिछले हैश फ़ील्ड को उचित रूप से सेट करना होगा।
इसे हमारी श्रृंखला में सबसे हाल ही में जोड़े गए ब्लॉक के हैश पर सेट किया जाना चाहिए। हमें नए ब्लॉक के हैश की गणना करने की भी आवश्यकता है:
परीक्षण
आइए देखें कि हमारा मेलोडीकॉइन कैसे निकला है।
इसे पूरा करने के लिए एक ब्लॉकचेन इंस्टेंस बनाएं। आइए कुछ और ब्लॉक जोड़ें:
हमने वहां दो नए ब्लॉक बनाए हैं। आइए एक नज़र डालते हैं कि वर्तमान में हमारा ब्लॉकचेन कैसा दिखता है।
MelodyCoin को चार स्थानों के साथ स्ट्रिंग और स्वरूपित किया जाएगा:
ब्लॉकचेन की सत्यनिष्ठा सत्यापित करें
ब्लॉकचेन शानदार हैं क्योंकि एक बार ब्लॉक जोड़ने के बाद, शेष श्रृंखला को अमान्य किए बिना इसे संशोधित नहीं किया जा सकता है।
हालांकि, इस कार्यान्वयन के साथ हमारे ब्लॉकचेन की अखंडता की जांच करने के लिए मेरे पास कोई तरीका नहीं है।
आइए हमारे ब्लॉकचेन में एक isChainValid फ़ंक्शन का परिचय दें। यदि श्रृंखला वैध है, तो यह सच हो जाएगी; अन्यथा, यह झूठी वापसी करेगा:
परीक्षण अखंडता
अब हम अपने ब्लॉकचेन की अखंडता का परीक्षण कर सकते हैं। यदि हम इसे अभी निष्पादित करते हैं, तो यह पुष्टि करेगा कि हमारी श्रृंखला वास्तविक है।
आइए अब हम अपने ब्लॉकचेन के साथ छेड़छाड़ करने का प्रयास करें। आइए ब्लॉक 2 को बदल दें और इसकी सामग्री को अधिलेखित कर दें (मान लें कि हमने चार के बजाय 100 सिक्के स्थानांतरित कर दिए हैं)।
जब हम इसे निष्पादित करते हैं, तो हम देख सकते हैं कि सॉफ़्टवेयर श्रृंखला के साथ छेड़छाड़ करने के हमारे प्रयास को पहचानता है।
हालाँकि, आप विश्वास कर सकते हैं कि मेरे लिए इसमें दखल देने का एक और तरीका है। मैंने ब्लॉक में सामग्री को बदल दिया लेकिन हैश की पुनर्गणना नहीं की। तो आप चतुर होने की कोशिश कर सकते हैं और उसी ब्लॉक के हैश को पुनर्गणना कर सकते हैं।
हमारे छोटे ब्लॉकचेन सेटअप में बस इतना ही था! यह हमें नए ब्लॉक जोड़ने और श्रृंखला के भीतर डेटा के साथ छेड़छाड़ का पता लगाने में सक्षम बनाता है।
हमारे छोटे ब्लॉकचेन के साथ दो मुद्दे हैं जिनका हमें समाधान करना चाहिए:
- आधुनिक कंप्यूटर बहुत तेज़ हैं और सेकंडों में हमारी श्रृंखला में हज़ारों ब्लॉक जोड़ सकते हैं। हम स्पष्ट रूप से नहीं चाहते कि कोई हमारे ब्लॉकचेन को स्पैम करे।
- हमारा ब्लॉकचेन अभी भी छेड़छाड़ की चपेट में है। आप किसी ब्लॉक की सामग्री को अपडेट कर सकते हैं और फिर निम्नलिखित सभी ब्लॉकों के लिए हैश (और पूर्व हैश) की पुनर्गणना कर सकते हैं। यहां तक कि अगर आप इसके साथ खिलवाड़ करते हैं, तो आप एक वैध श्रृंखला के साथ समाप्त हो जाएंगे।
इन चिंताओं को दूर करने के लिए, ब्लॉकचेन एक तकनीक का उपयोग करते हैं जिसे "काम का प्रमाण" कहा जाता है। आपको यह दिखाना होगा कि आपने इस दृष्टिकोण का उपयोग करके एक ब्लॉक बनाने के लिए महत्वपूर्ण मात्रा में कम्प्यूटेशनल संसाधनों का उपयोग किया है। इसे भी कहा जाता है खनन.
प्रूफ-ऑफ-वर्क के लिए आवश्यक है कि ब्लॉक का हैश एक विशिष्ट मात्रा में शून्य से शुरू हो। लेकिन आप कैसे जान सकते हैं कि आपका हैश इस नियम के अनुकूल है या नहीं?
एक ब्लॉक की सामग्री उसके हैश को निर्धारित करती है। इसलिए हम हमेशा एक ही हैश प्राप्त करते हैं, बशर्ते हम सामग्री को संशोधित न करें।
समाधान के रूप में प्रत्येक ब्लॉक में एक गैर-मूल्य जोड़ा जाना चाहिए। यह अनिवार्य रूप से कुछ यादृच्छिक डेटा है जिसे हम तब तक अपडेट कर सकते हैं जब तक कि हमारे ब्लॉक का हैश पर्याप्त शून्य से शुरू न हो जाए। चूंकि आप हैश फ़ंक्शन के आउटपुट को नहीं बदल सकते हैं, इसलिए आपको कई अलग-अलग संयोजनों का परीक्षण करना होगा और सर्वश्रेष्ठ के लिए आशा करनी होगी।
ब्लॉकचैन में खनन का परिचय दें
आइए अपने ब्लॉक वर्ग में एक गैर को शामिल करके शुरू करें। हमारे ब्लॉक के भीतर गैर-एकल मान है जिसे हम ब्लॉक के हैश को प्रभावित करने के लिए संशोधित कर सकते हैं।
हम टाइमस्टैम्प या डेटा को बदलने में असमर्थ हैं।
इसके बाद, आइए एक माइनब्लॉक () फ़ंक्शन लिखें जो किसी ब्लॉक का वास्तविक खनन करेगा। इस फ़ंक्शन को आवश्यक कठिनाई को एक पैरामीटर के रूप में भेजा जाएगा और तब तक निष्पादित होता रहेगा जब तक कि हमारे ब्लॉक का हैश पर्याप्त शून्य से शुरू नहीं हो जाता।
मैंने अभी एक बेसिक जबकि लूप बनाया है जो तब तक चलेगा जब तक कि हमारा हैश पर्याप्त शून्य से शुरू नहीं हो जाता। हम कठिनाई का उपयोग यह निर्धारित करने के लिए करते हैं कि कितने शून्य की आवश्यकता है। 5 की कठिनाई के साथ, हमारे हैश की शुरुआत 5 शून्य से होनी चाहिए।
जब हमारे हैश में पर्याप्त शून्य नहीं होते हैं, तो हम गैर को एक-एक करके बढ़ाते हैं और हैश की पुनर्गणना करते हैं। और अगर हमें एक हैश मिलता है जो कठिनाई से मेल खाता है, तो हम इसे कंसोल पर लॉग करते हैं।
एक और चीज है जो हमें करने की जरूरत है। हम अपने कैलकुलेट हैश पद्धति में वास्तव में गैर-चर को ध्यान में नहीं रखते हैं, इसलिए यहां यह है:
ब्लॉकचेन क्लास
आइए इस नए दृष्टिकोण को हमारे ब्लॉकचेन वर्ग में परीक्षण के लिए रखें और देखें कि यह कैसा चल रहा है।
शुरू करने के लिए, मैं फंक्शन ऑब्जेक्ट () में हमारे ब्लॉकचेन की कठिनाई को परिभाषित करूँगा। हम इसे यहाँ परिभाषित करते हैं क्योंकि हम इसे बाद में कहीं उपयोग कर सकते हैं।
एडब्लॉक फ़ंक्शन को तब इस तरह संशोधित किया जाना चाहिए कि यह हमारी श्रृंखला में जोड़ने से पहले ब्लॉक को माइन कर दे।
ब्लॉकचेन का प्रयोग करें
अब, हमारे नए ब्लॉकचेन को प्रूफ-ऑफ-वर्क एल्गोरिथम के साथ प्रयोग करने दें। यहां, कुछ कंसोल.लॉग स्टेटमेंट जोड़ें।
जब हम इस कोड को निष्पादित करते हैं, तो हम देख सकते हैं कि खनन प्रक्रिया अब विशेष रूप से तेज़ नहीं है।
एल्गोरिथम को हैश के साथ ब्लॉक उत्पन्न करने में कुछ समय लगता है जो तीन शून्य से शुरू होता है (जैसा कि कठिनाई से कॉन्फ़िगर किया गया है)।
तो यह हमारे बुनियादी ब्लॉकचेन सेटअप का अंत था।
प्रूफ-ऑफ-वर्क मैकेनिज्म की बदौलत हम यह नियंत्रित कर सकते हैं कि हमारे ब्लॉकचेन में कितनी जल्दी नए ब्लॉक जोड़े जाते हैं।
यह ब्लॉकचेन पर सबसे महत्वपूर्ण सुरक्षा विशेषता है। और अब जब आप समझ गए हैं कि यह कैसे काम करता है, तो अपना खुद का बनाना शुरू करें!
एक जवाब लिखें