यदि हामीले विगतका केही वर्षको प्रचलनलाई हेर्यौं भने, हामीले सधैं ब्लकचेनको बारेमा सुनेका छौं, तर विशेषहरूको बारेमा धेरै छैन।
Bitcoin, Ethereum, Dogecoin, Matic, र अन्य जस्ता क्रिप्टोकरेन्सीहरू ब्लकचेन प्रविधिमा निर्भर छन् भन्ने कुरा हामी सबैलाई थाहा छ। Blockchain ले महत्वपूर्ण घटनाहरूको नेतृत्व गर्यो जसले 2021 मा धेरै उद्योगहरूमा क्रान्ति ल्यायो र नयाँ उपलब्धिहरूको लागि मार्ग प्रशस्त गर्यो।
ब्लकचेन भनेको सम्पादन गर्न, ह्याक गर्न वा ठगी गर्न गाह्रो वा असम्भव तरिकाले डाटा भण्डारण गर्ने माध्यम हो। यो लेनदेनको डिजिटल लेजर हो जुन नक्कल गरिएको छ र ब्लकचेनको कम्प्युटर प्रणालीको सम्पूर्ण नेटवर्कमा फैलिएको छ।
यो ग्राउन्ड ब्रेकिङ डाटाबेस टेक्नोलोजी हो जसले व्यावहारिक रूपमा सबै क्रिप्टोकरन्सीहरूलाई शक्ति दिन्छ। ब्लकचेनले सम्पूर्ण नेटवर्कमा डाटाबेसको समान प्रतिलिपिहरू फैलाएर प्रणालीलाई ह्याक गर्न वा ठगी गर्न अविश्वसनीय रूपमा गाह्रो बनाउँछ।
जबकि Bitcoin अब blockchain को लागि सबैभन्दा प्रमुख प्रयोग भएको छ, प्रविधिले धेरै फराकिलो अनुप्रयोगहरू सेवा गर्न सक्छ।
हालका वर्षहरूमा क्रिप्टोकरेन्सी र ब्लकचेनहरू बढ्दो रूपमा लोकप्रिय भएका छन्, र यो प्रवृत्ति जारी रहने अपेक्षा गरिएको छ।
हामी यस ट्यूटोरियलमा जाभास्क्रिप्टको साथ एक साधारण ब्लकचेन बनाउनेछौं। यसले तपाइँलाई ब्लकचेन कसरी काम गर्दछ भन्ने आधारभूत बुझाइ प्रदान गर्नेछ।
यसलाई MelodyCoin कल गरौं र कार्यमा सीधा प्रवेश गरौं!
एक ब्लक सिर्जना गर्दै
सुरु गर्नको लागि, हामी एउटा नयाँ JavaScript फाइल सिर्जना गर्नेछौं जसमा हामी हाम्रा सबै कोड राख्ने छौं।
यसलाई main.js भनौं र ब्लकचेन र ब्लकहरू कस्तो देखिने भन्ने वर्णनको साथ सुरु गरौं।
ब्लक क्लास सिर्जना गर्नुहोस् र यसलाई एउटा प्रकार्य दिनुहोस् वस्तु() { [नेटिभ कोड] } सँग सुरु गर्न।
तपाईंले नयाँ ब्लक सिर्जना गर्दा मिति, र अघिल्लो ब्लकको ह्यास दिनुपर्छ:
यहाँ प्रत्येक सम्पत्तिको लागि परिभाषाहरू छन्:
- टाइमस्ट्याम्पले ब्लक कहिले बनाइएको थियो भनेर संकेत गर्दछ। तपाईले जुन ढाँचा छान्नुहुन्छ प्रयोग गर्न सक्नुहुन्छ (यस अवस्थामा, एक UNIX टाइमस्ट्याम्प)।
- तपाईंले यो ब्लकमा जडान गर्न चाहेको कुनै पनि प्रकारको डाटा डाटा प्यारामिटरमा समावेश गर्न सकिन्छ। यदि तपाइँ क्रिप्टोकरन्सी सिर्जना गर्न चाहनुहुन्छ भने, तपाइँ लेनदेन डेटा राख्न सक्नुहुन्छ जस्तै प्रेषक/प्रापक र पैसाको रकम यहाँ सारियो।
- अघिल्लो ह्यास एक स्ट्रिङ हो जसले अघिल्लो ब्लकको ह्यास राख्छ। यसले ब्लकको चेन उत्पन्न गर्नेछ, जुन पछि हाम्रो ब्लकचेनको अखण्डता प्रदान गर्न महत्वपूर्ण हुनेछ।
ह्यासहरू सिर्जना गर्दै
प्रत्येक ब्लक अघिल्लो ब्लकमा लिङ्क हुन्छ (यसरी अघिल्लो ह्यास गुण)। त्यो हो, प्रत्येक ब्लकलाई ह्यास चाहिन्छ। ह्यास फिंगरप्रिन्ट जस्तै हो। यो प्रत्येक ब्लक को लागी फरक छ।
ब्लकको ह्यासलाई ह्यास प्रकार्य मार्फत यसको सबै सामग्रीहरू पास गरेर गणना गर्न सकिन्छ।
त्यसोभए, हालको ब्लकको ह्यास गणना गर्ने प्रकार्य लागू गरेर सुरु गरौं।
त्यसैले, ब्लक क्लास अन्तर्गत, हामी calculateHash प्रकार्य परिभाषित गर्छौं:
यद्यपि, SHA256 ह्यास JavaScript द्वारा समर्थित छैन र बाह्य पुस्तकालयबाट प्राप्त गर्नुपर्छ।
Crypto-js एक उत्कृष्ट प्याकेज हो जसले धेरै ह्यास एल्गोरिदमहरूको सुरक्षित कार्यान्वयन समावेश गर्दछ।
त्यसपछि हामी यसलाई हाम्रो main.js कोडमा आयात गर्न सक्छौं।
अब हामीसँग हाम्रो calculateHash() प्रकार्य छ, यसलाई हाम्रो ब्लकको प्रकार्यमा प्रयोग गर्नका लागि राखौं:
ब्लक कस्तो देखिन्छ भनेर वर्णन गरेपछि, हामी ब्लकचेन कस्तो देखिनु पर्छ भनेर परिभाषित गर्न सक्छौं। त्यसैले नयाँ कक्षा सिर्जना गरौं।
यस परिदृश्यमा, ब्लकचेन एक धेरै साधारण वस्तु हो जसमा सम्पत्ति श्रृंखला छ। यो श्रृंखलामा सबै ब्लकहरू समात्ने एरे हो।
हामीले ब्लकहरू थप्नु अघि, हामीले पहिले "जेनेसिस ब्लक" भनेर चिनिने कुरा सिर्जना गर्नुपर्छ। यो चेनमा पहिलो ब्लक हो, र यो अद्वितीय छ कि यसले पहिलेको ब्लकलाई संकेत गर्न सक्दैन (यो पहिलो हो!)।
त्यसोभए, जेनेसिस ब्लक निर्माण गर्न, म हाम्रो क्लासमा createGenesisBlock () नामक प्रकार्य थप्नेछु। हाम्रो ब्लकचेन क्लासको वस्तु() { [नेटिभ कोड] } प्रकार्यमा फर्कनुहोस्।
अब हामीले नयाँ ब्लकचेन उदाहरण निर्माण गर्दा जेनेसिस ब्लक समावेश गर्न सक्छौं:
ब्लकचेन विधिहरू
अब, हाम्रो Blockchain क्लासमा विधिहरू थपौं जसले हामीलाई नयाँ ब्लकहरू थप्ने र सबैभन्दा भर्खरको ब्लक ल्याउने जस्ता कामहरू गर्न अनुमति दिनेछ।
getLatestBlock प्रकार्य सबैभन्दा आधारभूत हो। यसले केवल चेन एरेको अन्तिम सदस्य फर्काउँछ:
addBlock प्रविधि अलि बढी संलग्न छ।
हामीले हाम्रो चेनमा नयाँ ब्लक थप्नु अघि, हामीले पहिले त्यो ब्लकको अघिल्लो ह्यास फिल्डलाई उचित रूपमा सेट गर्नुपर्छ।
यो हाम्रो चेनमा हालै थपिएको ब्लकको ह्यासमा सेट हुनुपर्छ। हामीले नयाँ ब्लकको ह्यास पनि गणना गर्न आवश्यक छ:
परीक्षण
हाम्रो MelodyCoin कसरी बाहिर आएको छ हेरौं।
यो पूरा गर्न ब्लकचेन उदाहरण सिर्जना गर्नुहोस्। केही थप ब्लकहरू थपौं:
हामीले त्यहाँ दुईवटा नयाँ ब्लक बनाएका छौं। हाम्रो ब्लकचेन हाल कस्तो देखिन्छ भनेर हेरौं।
MelodyCoin स्ट्रिङिफाइड हुनेछ र चार खाली ठाउँहरूसँग ढाँचा हुनेछ:
Blockchain को अखण्डता प्रमाणित गर्नुहोस्
ब्लकचेनहरू उत्कृष्ट छन् किनभने एक पटक ब्लक थपिएपछि, यो चेनको बाँकीलाई अमान्य नगरी परिमार्जन गर्न सकिँदैन।
यद्यपि, मेरो लागि यो कार्यान्वयनको साथ हाम्रो ब्लकचेनको अखण्डता जाँच गर्ने कुनै विधि छैन।
हाम्रो ब्लकचेनमा isChainValid प्रकार्य परिचय गरौं। यदि चेन वैध छ भने, यो साँचो फर्किनेछ; अन्यथा, यो गलत फर्किनेछ:
निष्ठा परीक्षण
हामी अब हाम्रो ब्लकचेनको अखण्डता परीक्षणमा राख्न सक्छौं। यदि हामीले यसलाई अहिले कार्यान्वयन गर्यौं भने, यसले हाम्रो चेन वास्तविक छ भनी पुष्टि गर्नेछ।
अब हाम्रो ब्लकचेनसँग छेडछाड गर्ने प्रयास गरौं। ब्लक 2 परिवर्तन गरौं र यसको सामग्रीहरू अधिलेखन गरौं (मानौं हामीले चारको सट्टा 100 सिक्का स्थानान्तरण गर्यौं)।
जब हामीले यसलाई कार्यान्वयन गर्छौं, हामी देख्न सक्छौं कि सफ्टवेयरले चेनसँग छेडछाड गर्ने हाम्रो प्रयासलाई मान्यता दिन्छ।
यद्यपि, तपाईं विश्वास गर्न सक्नुहुन्छ कि मेरो लागि यसमा हस्तक्षेप गर्ने अर्को तरिका छ। मैले ब्लकमा सामग्रीहरू परिवर्तन गरें तर ह्यास पुन: गणना गरेन। त्यसोभए तपाईं चलाख हुन प्रयास गर्न सक्नुहुन्छ र त्यही ब्लकको ह्यास पुन: गणना गर्न सक्नुहुन्छ।
हाम्रो सानो ब्लकचेन सेटअपमा यति मात्र थियो! यसले हामीलाई नयाँ ब्लकहरू थप्न र चेन भित्र डेटासँग छेडछाड पत्ता लगाउन सक्षम बनाउँछ।
हाम्रो सानो ब्लकचेनसँग दुईवटा मुद्दाहरू छन् जुन हामीले सम्बोधन गर्नुपर्छ:
- आधुनिक कम्प्युटरहरू धेरै छिटो छन् र सेकेन्डमा हाम्रो श्रृंखलामा हजारौं ब्लकहरू थप्न सक्छन्। हामी स्पष्ट रूपमा कसैले हाम्रो ब्लकचेन स्प्याम गर्न चाहँदैनौं।
- हाम्रो ब्लकचेन अझै पनि छेडछाडको लागि कमजोर छ। तपाइँ ब्लकको सामग्रीहरू अद्यावधिक गर्न सक्नुहुन्छ र त्यसपछि निम्न ब्लकहरूको लागि ह्यासहरू (र अघिल्लो ह्यासहरू) पुन: गणना गर्नुहोस्। यदि तपाइँ यसको साथ गडबड भए पनि, तपाइँ एक वैध श्रृंखला संग समाप्त हुनुहुनेछ।
यी चिन्ताहरूलाई सम्बोधन गर्न, ब्लकचेनहरूले "कामको प्रमाण" भनेर चिनिने प्रविधि प्रयोग गर्दछ। तपाईंले यो दृष्टिकोण प्रयोग गरेर ब्लक सिर्जना गर्न कम्प्युटेसनल स्रोतहरूको महत्त्वपूर्ण मात्रा प्रयोग गर्नुभएको देखाउनु पर्छ। यसलाई पनि भनिन्छ खानी.
प्रमाण-कार्यको लागि आवश्यक छ कि ब्लकको ह्यास शून्यको निश्चित मात्राबाट सुरु हुन्छ। तर तपाइँ कसरी थाहा पाउन सक्नुहुन्छ कि तपाइँको ह्यास यो नियम मा फिट हुन्छ?
ब्लकको सामग्रीले यसको ह्यास निर्धारण गर्दछ। त्यसैले हामी सधैं समान ह्यास प्राप्त गर्छौं, यदि हामीले सामग्रीहरू परिमार्जन गर्दैनौं।
प्रत्येक ब्लकलाई समाधानको रूपमा यसमा थपिएको नन्स मान हुनुपर्छ। यो अनिवार्य रूपमा केहि अनियमित डाटा हो जुन हामीले हाम्रो ब्लकको ह्यास पर्याप्त शून्यहरूसँग सुरु नभएसम्म अद्यावधिक गर्न सक्छौं। किनभने तपाईंले ह्यास प्रकार्यको आउटपुट परिवर्तन गर्न सक्नुहुन्न, तपाईंले धेरै फरक संयोजनहरूको परीक्षण गर्नुपर्छ र उत्तमको लागि आशा राख्नुपर्छ।
Blockchain मा खनन परिचय
हाम्रो ब्लक कक्षामा नन्स समावेश गरेर सुरु गरौं। nonce हाम्रो ब्लक भित्रको एकल मान हो जुन हामीले ब्लकको ह्यासलाई प्रभाव पार्न परिमार्जन गर्न सक्छौं।
हामी टाइमस्ट्याम्प वा डेटा परिवर्तन गर्न असमर्थ छौं।
अर्को, एउटा mineBlock() प्रकार्य लेखौं जसले ब्लकको वास्तविक खनन गर्नेछ। यो प्रकार्यलाई प्यारामिटरको रूपमा आवश्यक कठिनाइ पठाइनेछ र हाम्रो ब्लकको ह्यास पर्याप्त शून्यहरूसँग सुरु नभएसम्म कार्यान्वयन गर्न जारी रहनेछ।
मैले भर्खरै एउटा आधारभूत जबकि लूप बनाएको छु जुन हाम्रो ह्यास पर्याप्त शून्यहरूसँग सुरु नभएसम्म चल्नेछ। हामी कति शून्य आवश्यक छ भनेर निर्धारण गर्न कठिनाई प्रयोग गर्छौं। 5 को कठिनाई संग, हाम्रो ह्यास 5 शून्य संग सुरु हुनुपर्छ।
जब हाम्रो ह्यासले पर्याप्त शून्यहरू समावेश गर्दैन, हामी नन्सलाई एकले बढाउँछौं र ह्यासलाई पुन: गणना गर्छौं। र यदि हामीले कठिनाईसँग मेल खाने ह्यास फेला पार्यौं भने, हामी यसलाई कन्सोलमा लग गर्छौं।
हामीले गर्नुपर्ने अर्को एउटा कुरा छ। हामी वास्तवमा हाम्रो calculateHash विधिमा nonce चरलाई खातामा लिदैनौं, त्यसैले यो यहाँ छ:
ब्लकचेन क्लास
हाम्रो ब्लकचेन क्लासमा परीक्षणको लागि यो नयाँ दृष्टिकोण राखौं र यो कसरी जान्छ हेरौं।
सुरु गर्नको लागि, म हाम्रो ब्लकचेनको कठिनाईलाई वस्तु() प्रकार्यमा परिभाषित गर्नेछु। हामी यसलाई यहाँ परिभाषित गर्छौं किनकि हामी यसलाई पछि कतै प्रयोग गर्न सक्छौं।
addBlock प्रकार्यलाई हाम्रो चेनमा थप्नु अघि ब्लकलाई माइन गर्ने गरी परिमार्जन गरिनुपर्छ।
ब्लकचेन प्रयोग गर्नुहोस्
अब, कामको प्रमाणको एल्गोरिदमको साथ प्रयोग गर्न हाम्रो नयाँ ब्लकचेन राखौं। यहाँ, एक जोडी console.log कथनहरू थप्नुहोस्।
जब हामी यो कोड कार्यान्वयन गर्छौं, हामी खानी प्रक्रिया अब विशेष गरी छिटो छैन भनेर देख्न सक्छौं।
एल्गोरिदमले तीन शून्यबाट सुरु हुने ह्यासहरूसँग ब्लकहरू उत्पन्न गर्न केही समय लिन्छ (कठीनद्वारा कन्फिगर गरिएको रूपमा)।
त्यसोभए त्यो हाम्रो आधारभूत ब्लकचेन सेटअपको अन्त्य थियो।
हामी हाम्रो ब्लकचेनमा कति छिटो नयाँ ब्लकहरू थपिन्छन् भनेर नियमन गर्न सक्छौं।
यो blockchains मा सबैभन्दा महत्त्वपूर्ण सुरक्षा सुविधा हो। र अब जब तपाइँ यो कसरी काम गर्दछ बुझ्नुहुन्छ, तपाइँको आफ्नै सिर्जना गर्नुहोस्!
जवाफ छाड्नुस्