ब्लॉकचेन — ETH.BUILD
ब्लॉकचेन खनन कसे कार्य करते, ब्लॉक एकमेकांशी कसे जोडले जातात, प्रूफ-ऑफ-वर्क (PoW) ब्लॉकचेनला कसे सुरक्षित करते आणि जेव्हा कोणी डेटामध्ये छेडछाड करण्याचा प्रयत्न करतो तेव्हा काय होते याचे प्रात्यक्षिक.
Date published: 14 जानेवारी, 2021
ऑस्टिन ग्रिफिथ यांचे एक ट्युटोरिअल ज्यामध्ये ETH.BUILD व्हिज्युअल प्रोग्रामिंग टूल वापरून ब्लॉकचेन खनन (mining) कसे कार्य करते हे दाखवले आहे. ऑस्टिन प्रूफ-ऑफ-वर्क (PoW) एकमत, ब्लॉक चेनिंग, खनन काठिण्य, ब्लॉक बक्षीस आणि चेनच्या अपरिवर्तनीयतेबद्दल (immutability) माहिती देतात.
ही ट्रान्सक्रिप्ट ऑस्टिन ग्रिफिथ यांनी प्रकाशित केलेल्या मूळ व्हिडिओ ट्रान्सक्रिप्टची (opens in a new tab) एक सुलभ प्रत आहे. वाचनीयतेसाठी यात थोडे संपादन केले आहे.
समन्वयाची समस्या (0:00)
शुभ सकाळ, हॅपी बोटाय फ्रायडे! हे ETH.BUILD ब्लॉकचेनवर लक्ष केंद्रित करत आहे — खरोखरच एक छान गोष्ट. आपण या क्लाउन बोटमध्ये आहोत, त्यासाठी आपला बिटकॉइन बोटाय. चला सुरु करूया.
तर आतापर्यंतच्या अभ्यासक्रमात, आपण की जोड्या (key pairs), हॅश आणि लेजर (ledgers) बद्दल माहिती घेतली आहे. आपल्याला असे आढळून आले की जर आपल्याला वितरित नेटवर्कवर (केंद्रीकृत नाही) मूल्याचा व्यवहार करायचा असेल, तर आपल्याला समन्वयाच्या समस्यांना सामोरे जावे लागते. आपल्याला अशी समस्या येते जिथे आपण भिन्न पक्षांमध्ये एकमत (consensus) शोधू शकत नाही कारण त्या सर्वांना वेगवेगळ्या वेळी वेगवेगळे व्यवहार प्राप्त होतात. हे सोडवण्याचे अनेक वेगवेगळे मार्ग आहेत, परंतु प्रूफ-ऑफ-वर्क (PoW) येईपर्यंत त्यापैकी एकही चांगला नव्हता.
आपण बायझंटाईन जनरल्सची समस्या एक साईड क्वेस्ट म्हणून पाहिली, आणि आपण तिथे शिकलो की जेव्हा जनरल्स असुरक्षित नेटवर्कवरून संदेश पाठवतात तेव्हा त्यांना हे सिद्ध करावे लागते की त्यांच्याकडे सैन्य आहे. त्यानंतर संदेश प्राप्त करणारा पक्ष सांगू शकतो की ती व्यक्ती खरोखरच हल्ला करणारी सैन्य असलेली जनरल आहे आणि ते समन्वय साधू शकतात.
ब्लॉक आणि नॉन्स (1:04)
तर या लेजरसह, आपण नेटवर्कवरून व्यवहार घेत आहोत. प्रत्येक वैयक्तिक वापरकर्त्याने त्यांचे काम सिद्ध करण्याऐवजी, आपण प्रूफ-ऑफ-वर्कला व्यवहारांच्या ब्लॉकमध्ये समाविष्ट करणार आहोत आणि मायनरला त्यावर काम करू देणार आहोत.
आपण एक ब्लॉक आणतो ज्यामध्ये व्यवहार असतात — नेटवर्कवर जे काही येत आहे, ते आपण या ब्लॉकमध्ये लोड करतो. जर आपण या ब्लॉकची रचना पाहिली, तर त्यात एक नॉन्स देखील असतो. तो नॉन्स आपल्याला हॅश बदलण्याची परवानगी देतो. जर आपण हा संपूर्ण ब्लॉक घेतला, त्याला स्ट्रिंगमध्ये रूपांतरित केले आणि त्याचे हॅशिंग केले, तर आपल्याला एक हॅश मिळतो. जसे व्यवहार बदलतात, तसा तो हॅश बदलतो, परंतु जसे आपण नॉन्स बदलतो, तसा हॅश देखील बदलतो.
आपण येथे काही काम करत आहोत — आपल्याकडे व्यवहारांचा एक यादृच्छिक संच आहे, आणि जोपर्यंत हॅशमध्ये सुरुवातीला शून्य (leading zero) येत नाही तोपर्यंत आपण नॉन्स बदलत आहोत. जर तुम्ही बायझंटाईन जनरल्सबद्दलची साईड क्वेस्ट पाहिली असेल, तर आपण हे सुरुवातीचे शून्य सिद्ध करण्यासाठी कामाचे एक अनियंत्रित प्रमाण म्हणून निवडले आहे. त्यामुळे नॉन्स फक्त प्रत्येक संख्येतून जातो — 1, 2, 3, 4 — आणि जेव्हा आपल्याला सुरुवातीला शून्य मिळते, तेव्हा आपण म्हणतो: तो एक वैध ब्लॉक आहे.
प्रूफ-ऑफ-वर्क प्रत्यक्ष कृतीत (3:00)
जर आपण एक माइन केलेला ब्लॉक घेतला, त्याचा हॅश काढला आणि तो हॅश फंक्शनमध्ये टाकला, तर आपण हे सिद्ध करू शकतो की त्याच्या सुरुवातीला शून्य आहे — आपण हे सिद्ध करू शकतो की या ब्लॉकवर काम केले गेले आहे.
हॅश फंक्शनसाठी CPU लागतो, जे एक मर्यादित संसाधन आहे. सुरुवातीला शून्य असलेला हॅश शोधण्यासाठी आपण आपली सर्व CPU शक्ती पणाला लावत आहोत. एकदा का आपल्याला तो मिळाला, की आपल्याकडे एक वैध ब्लॉक असतो — ब्लॉक मुळात गोठवला (frozen) जातो. त्या वेळी जे काही व्यवहार त्यात होते ते आता या ब्लॉकमध्ये आहेत, आणि प्रत्येकजण त्याचा आदर करतो, आणि आपण पुढील ब्लॉककडे जाऊ शकतो.
ब्लॉक एकमेकांशी जोडणे (3:56)
येथे एक युक्ती आहे: आपण जुना ब्लॉक घेतो आणि तो नवीन ब्लॉकला जोडतो. जर आपण रचना पाहिली, तर नवीन ब्लॉकमध्ये कोणतेही व्यवहार नसतात आणि नॉन्स रिकामा असतो, परंतु त्यात व्यवहारांसह एक मूळ (parent) ब्लॉक असतो. मागील ब्लॉक पुढील ब्लॉकचा भाग असणार आहे, त्यामुळे आपल्याकडे एक संपूर्ण चेन असेल.
आपण व्यवहार पूलमधून नवीनतम व्यवहार टाकतो आणि नॉन्स शोधण्यावर काम करतो. ब्लॉक क्रमांक 2 माइन झाला आहे — हे व्यवहार वैध करण्यासाठी आपल्याला 10 च्या नॉन्सची आवश्यकता होती. मग आपण तीच गोष्ट करतो: जुना ब्लॉक जोडतो, नवीन आणतो, जे काही नवीनतम व्यवहार आहेत ते टाकतो आणि त्यावर पुन्हा काम करतो. पुरेशा प्रयत्नांनंतर आपल्याला ब्लॉक 3 साठी नॉन्स सापडला. ब्लॉक 4 — तीच प्रक्रिया, आणि आपण पुढे जात राहतो.
खनन काठिण्य (5:02)
हे खूप सोपे आहे — आपण खूप लवकर एक वैध ब्लॉक शोधू शकत आहोत, आणि आपल्याला ते अधिक कठीण करायचे आहे. मी काठिण्य (difficulty) 2 पर्यंत वाढवणार आहे. आपण ब्लॉक 5 जोडतो, नवीनतम व्यवहार आणतो आणि काउंटर चालू करतो. आता आपण खनन करत आहोत — आपली मर्यादित CPU शक्ती वापरून यादृच्छिक हॅश टाकत आहोत जोपर्यंत आपल्याला सुरुवातीला दोन शून्य असलेला हॅश मिळत नाही, कारण काठिण्य वाढवले गेले आहे. याला थोडा वेळ लागणार आहे.
आता आपल्याकडे 5 ब्लॉकची ही ब्लॉकचेन आहे. त्या ब्लॉकमध्ये व्यवहार आहेत आणि प्रत्येक ब्लॉक मागील ब्लॉकचा संदर्भ देतो. प्रत्येक ब्लॉक तयार करण्यासाठी काही अनियंत्रित प्रमाणात काम करावे लागले, आणि कामाचे प्रमाण काठिण्याद्वारे नियंत्रित केले जाते.
मायनर (6:46)
मायनर म्हणजे काय ते पाहूया. बायझंटाईन जनरल्सच्या समस्येमध्ये, ज्या जनरलला "पहाटे हल्ला" करायचा होता त्याला सैनिकांची गरज होती. प्रत्येक सैनिकाच्या आत जे चालले आहे तेच आपण येथे आपल्या मायनरसोबत करत आहोत — आपण एक संदेश आणि एक नॉन्स घेत आहोत आणि ते शक्य तितक्या वेगाने हॅश फंक्शनमध्ये टाकत आहोत, ते सुरुवातीचे शून्य मिळवण्याचा प्रयत्न करत आहोत. सुरुवातीचे शून्य ही एक अनियंत्रित गोष्ट आहे ज्यावर आपण सर्वांनी सहमती दर्शवली आहे — तुम्ही सैनिक आहात किंवा तुम्ही युद्ध करू शकता हे सिद्ध करण्यासाठी हे काम पुरेसे आहे.
मला एक मायनर आणू द्या आणि हे थोडे जलद करू द्या. मायनर आपल्या ब्लॉकसाठी तीच गोष्ट करणार आहे — तो पूलमधून येणारे व्यवहार घेतो, त्यांना ब्लॉकमध्ये टाकतो आणि जोपर्यंत त्याला वैध हॅश मिळत नाही तोपर्यंत त्यावर काम करत राहतो.
मायनर थोडा अधिक कार्यक्षम आहे. तो खननावर अधिक लक्ष केंद्रित करतो. तो यादृच्छिकपणे हॅश टाकत आहे — आपला मायनर आधी हेच करत होता, फक्त ते पडद्यामागे (abstracted away) होते. आपण ते बॅकग्राउंडमध्ये चालताना पाहू शकतो, फक्त हॅशवर काम करत आहे. त्याला ते सापडले — ब्लॉक 6 माइन झाला आहे.
डबल स्पेंड्स आणि नेटवर्क प्रोपगेशन (10:00)
आता आपण डबल स्पेंडिंगच्या (double spending) या समस्येबद्दल आणि नेटवर्क प्रोपगेशनच्या (network propagation) समस्येबद्दल बोललो. जेव्हा आपल्याकडे लेजर आणि वितरित नेटवर्क असते आणि कोणीतरी व्यवहार पाठवतो, तेव्हा तो वेगवेगळ्या लोकांना वेगवेगळ्या वेळी मिळतो. त्यामुळे, नेटवर्कवर असे दोन मायनर असू शकतात जे एकाच वेळी ब्लॉक माइन करतात आणि त्यांच्यामध्ये वेगवेगळे व्यवहार असतात.
त्या वेळी प्रत्येकजण वैध असतो — दोघांनीही प्रूफ-ऑफ-वर्क केले, दोघांकडेही सुरुवातीला शून्य आहेत. परंतु ते दोन्ही अधिकृत (canonical) असू शकत नाहीत. ते दोन्ही सत्य असू शकत नाहीत. त्यामुळे कोणती खरी चेन आहे याबद्दल नेटवर्कमध्ये एकमत होण्यासाठी आपल्याला एका मार्गाची आवश्यकता आहे.
एकाधिक मायनर आणि एकमत (12:27)
मला हा ब्लॉक घेऊ द्या आणि तो येथे हलवू द्या. मला असे दोन वेगवेगळे मायनर हवे आहेत जे एकाच समस्येवर काम करत आहेत, एकाच व्यवहार पूलकडे लक्ष ठेवून आहेत आणि स्वतंत्रपणे ब्लॉक तयार करत आहेत. आपल्याकडे दोन मायनर आहेत: मॅलरी आणि माईक. मी काठिण्य 3 वर सेट केले आहे, आणि दोघेही सुरुवातीला तीन शून्य असलेला हॅश शोधण्यावर काम करत आहेत.
तर मॅलरीला आधी ब्लॉक सापडला! उत्तम. आता काय होते — कारण आपण वितरित नेटवर्कवर आहोत, माईकला कदाचित मॅलरीच्या ब्लॉकबद्दल अद्याप माहिती नसेल. तो कदाचित अजूनही त्याच्या स्वतःच्या आवृत्तीवर काम करत असेल. आणि आता माईकलाही एक सापडला. त्यामुळे आपल्याकडे दोन वैध मार्ग आहेत.
जर तुम्ही नेटवर्कवरील एक पीअर असाल आणि तुम्हाला मॅलरीचा ब्लॉक आधी दिसला, तर तुम्हाला वाटते की तो मुख्य ब्लॉक आहे. नंतर माईकचा ब्लॉक येतो. त्यापैकी एक सर्वात लांब चेन बनल्यास तुम्ही ते दोन्ही जवळ ठेवता. आणि नियम असा आहे: सर्वात लांब वैध चेनचे अनुसरण करा.
कॉइनबेस आणि ब्लॉक बक्षीस (15:33)
जेव्हा एखादा मायनर ब्लॉक माइन करतो, तेव्हा आपण म्हणतो: येथे आपल्याला हवे असलेले सर्व व्यवहार आहेत, येथे नॉन्स आहे, येथे मूळ (parent) ब्लॉक आहे — परंतु आपण असेही म्हणणार आहोत की येथे ती व्यक्ती आहे जिने तो ब्लॉक माइन केला आहे. याला कॉइनबेस (coinbase) म्हणतात — मला वाटते आता त्या नावाची एक कंपनी आहे, पण ती वेगळी आहे. आपण त्याला फक्त "मायनर" म्हणणार आहोत. त्यामुळे आपल्या ब्लॉकला आता मायनर फील्डची आवश्यकता आहे.
तर माईकला नुकताच ब्लॉक सापडला आहे, आणि माईकला यातून 10 चे मूल्य देखील मिळणार आहे. हे सर्व काम करण्यासाठी आपल्याला मायनर्सना प्रोत्साहित करण्याची गरज आहे, बरोबर? नेटवर्क सुरक्षित करण्यासाठी ते हे रिग्स (rigs) खरेदी करण्यासाठी पैसे खर्च करत आहेत. हे मायनर्स त्यांच्या सर्व हॅश पॉवरसह नेटवर्क सुरक्षित करण्यासाठी पैसे खर्च करत आहेत — सर्व मायनर्स मिळून, कदाचित हजारो. या हॅशवर काम करणारे रिग्स तयार करण्यासाठी ते चांगले पैसे देत आहेत, आणि त्यांना प्रोत्साहित करण्यासाठी आपण त्यांना त्यांनी माइन केलेल्या प्रत्येक ब्लॉकचा एक वाटा देतो ज्याला ब्लॉक बक्षीस म्हणतात.
ब्लॉक बक्षीस आणि प्रोत्साहन (16:52)
तर ब्लॉकच्या या आवृत्तीत, मॅलरीकडे 10 डॉलर्स आहेत, परंतु या आवृत्तीत माईककडे 10 डॉलर्स आहेत. या दोन खेळाडूंपैकी प्रत्येकाला त्यांच्या स्वतःच्या चेनवर पुढे जाण्यासाठी प्रोत्साहित केले जाते, आणि उर्वरित नेटवर्कला एकमत शोधण्याची आवश्यकता असते. मुळात हे सर्व कोणाकडे सर्वात लांब वैध चेन आहे यावर येऊन थांबते.
माईक त्याचा ब्लॉक मूळ (parent) म्हणून सेट करणार आहे आणि पुढील ब्लॉकवर काम करण्यास सुरुवात करणार आहे. मॅलरीही तेच करणार आहे. आणि नेटवर्कवरील इतर कोण कोणाची बाजू घेतो यावर हे अवलंबून असते. आपल्याला खराब नेटवर्क असलेल्या लोकांना शिक्षा द्यायची नसल्यामुळे, मला खात्री आहे की इथेरियममध्ये आपण अंकल ब्लॉक्सना (uncle blocks) — जे वैध ब्लॉक सर्वात लांब चेनमध्ये पोहोचू शकले नाहीत — पैसे देतो कारण ते अजूनही नेटवर्क सुरक्षित करण्यात मदत करत आहेत.
आपल्याकडे समन्वय आणि एकमताची ही समस्या होती, आणि व्यवहार वैध करण्यासाठी समाविष्ट कराव्या लागणाऱ्या या अनियंत्रित प्रमाणातील कामाचा वापर करून आपण ती सोडवली. या सर्व व्यवहारांच्या आणि मागील ब्लॉकच्या हॅशचे सुरुवातीचे तीन शून्य शोधण्यासाठी मॅलरीने हॅशिंग आणि हॅशिंग आणि हॅशिंग करण्याचे हे सर्व काम केले.
ब्लॉकचेनला क्वेरी करणे (18:30)
जी कोणती सर्वात लांब चेन असेल तिच्याशी आपण संवाद साधू शकतो. माईक अजून 7 वर गेला नाही, त्यामुळे आपण पाहू शकतो की येथे उंची अजूनही 6 आहे. आणि आपण लोकांसाठी बॅलन्सची क्वेरी करण्यासारख्या गोष्टी करू शकतो. तर आपण बॅलन्सवर क्लिक करतो — आपल्याला काय मिळते? 524. तर हेडीकडे 524 किंवा या चेनसाठी जे काही मूळ टोकन आहे ते जमा आहे. आपण तिचा नॉन्स पाहू शकतो, आपण लेजरसह करू शकणाऱ्या सर्व गोष्टी करू शकतो, परंतु आता आपण ब्लॉक रचत आहोत आणि त्या ब्लॉकमध्ये व्यवहार आहेत.
जे वापरकर्ते फक्त पैसे पाठवत आहेत, त्यांच्याकडून आपण काम काढून घेऊन ते मायनर्सकडे दिले आहे, आणि आपण त्यांना हे ब्लॉक बक्षीस देऊन प्रोत्साहित केले आहे. प्रत्येक व्यक्ती प्रति व्यवहार एक छोटी रक्कम देखील देणार आहे, परंतु आपण त्याबद्दल नंतरच्या भागात बोलू. आपल्याला आत्ता गॅसबद्दल बोलायचे नाही, परंतु हे जाणून घेणे उपयुक्त आहे की केवळ ब्लॉक माइन करण्यासाठीच नाही, तर अनेक व्यवहारांसह संपूर्ण ब्लॉक माइन करण्यासाठी देखील प्रोत्साहन दिले जाते. परंतु ते एक लहान प्रोत्साहन आहे — आपण शेवटी त्यापर्यंत पोहोचू.
चेनची अपरिवर्तनीयता (19:51)
जसे ब्लॉक माइन केले जातात, तसे ते अधिकाधिक सुरक्षित होतात. मला तुम्हाला काय म्हणायचे आहे ते दाखवू द्या. तर माईकने एक ब्लॉक माइन केला, मॅलरी येथे प्रात्यक्षिक करत होती आणि ब्लॉक माइन करू शकली नाही. त्यामुळे आता माईकची चेन सर्वात लांब असणार आहे, आणि ती संपूर्ण नेटवर्कवर जाईल. प्रत्येकजण ती पाहेल आणि म्हणेल: ठीक आहे, या चेनमध्ये 7 ब्लॉक आहेत, ते सर्व वैध आहेत — आपण याच चेनचे अनुसरण करणार आहोत. तुम्हाला हार्ड फोर्क, विवादास्पद फोर्क मिळू शकतात, जिथे आपण ज्या नियमांनी खेळत आहोत ते बदलणार आहेत आणि मानवांच्या वेगवेगळ्या गटांना वेगवेगळ्या चेनचे अनुसरण करायचे आहे. खूप छान गोष्टी आहेत.
ठीक आहे शेवटी, जर आपण ब्लॉक 3 वर परत गेलो आणि काहीतरी बदलले — कोणताही लहान तपशील बदलला — मी येथे जाणार आहे. फ्रँकला काही व्यवहार झाला आहे. समजा फ्रँकच्या ऐवजी आपण ते ईव्हमध्ये बदलले. आता मी ओके दाबल्यावर काय होते ते पहा: ते पहा. मी ब्लॉक 3 चा एक छोटासा भाग बदलला आणि अचानक संपूर्ण चेन कोलमडून पडली. ती आता वैध राहिली नाही. जर मी ते नेटवर्कवर प्रसारित केले, तर लोक मला हसून हाकलून देतील.
एकदा ब्लॉक माइन झाल्यानंतर तुम्ही काहीही बदलू शकत नाही जोपर्यंत तुम्ही मागे जाऊन बदललेल्या गोष्टी पुन्हा माइन करत नाही. मला मुळात मायनरला पुन्हा येथे जोडावे लागेल आणि 7 ब्लॉकसह माईकच्या बरोबरीला पोहोचण्यासाठी पुरेशी शक्ती मिळवण्याचा प्रयत्न करावा लागेल. हे खूप, खूप कठीण असेल. ब्लॉक जितका खोल असेल, तितके त्यातून परत येणे कठीण असते. ही वस्तुस्थिती की येथे ब्लॉक 3 मध्ये जिथे कार्लोसने बॉबला 84 पाठवले — बॉब हे जाणून खूप सुरक्षित राहू शकतो की, अनेक ब्लॉक खोलवर, ते पैसे नक्कीच तिथे आहेत. येथे कोणताही विवादास्पद फोर्क असण्याची शक्यता नाही — मी सुरक्षित आहे. यालाच आपण अंतिमत्व (finality) म्हणतो.
सारांश (22:00)
लेजर आणि एकमताची ही समस्या असण्याऐवजी, आपण ब्लॉक प्रमाणित करण्यासाठी हॅशवर काम करण्यासाठी प्रूफ-ऑफ-वर्क वापरतो — आणि "वैध" म्हणजे सुरुवातीला शून्यांची एक अनियंत्रित संख्या. ब्लॉकची चेन तयार करताना आपल्याला अजूनही समस्यांचा सामना करावा लागणार आहे, जिथे माइन केलेले ब्लॉक प्रत्यक्षात वेगवेगळ्या ठिकाणी वेगवेगळ्या वेळी पोहोचू शकतात. त्यामुळे आपल्याकडे एक पुढील एकमत अल्गोरिदम आहे जो सांगतो: सर्वात लांब चेनचे अनुसरण करा जी वैध आहे आणि ज्या नियम संचामध्ये तुम्हाला सहभागी व्हायचे आहे त्याचे अनुसरण करते.
ठीक आहे, हॅपी बोटाय फ्रायडे! हे ETH.BUILD वरील ब्लॉकचेन होते. मी हे सेव्ह करेन आणि तिथे ठेवेन जेणेकरून तुम्ही फक्त "लोड" दाबू शकाल आणि खेळण्यासाठी तुमच्याकडे एक चेन असेल. हॅपी फ्रायडे!