मर्कल ट्री हैश मानों का एक बाइनरी ट्री है, जहां प्रत्येक लीफ नोड डेटा के एक टुकड़े या डेटा के एक टुकड़े के हैश का प्रतिनिधित्व करता है। इसका उपयोग बड़ी मात्रा में डेटा की अखंडता को कुशलतापूर्वक सत्यापित करने के लिए किया जाता है। इसका आविष्कार 1979 में राल्फ मर्कल द्वारा किया गया था और इसका व्यापक रूप से बिटकॉइन और एथेरियम जैसी क्रिप्टोकरेंसी में उपयोग किया जाता है। हैश फ़ंक्शन एक फिंगरप्रिंट मशीन की तरह है। यह कोई भी इनपुट लेता है, जैसे फ़ाइल, टेक्स्ट, या संख्या, और एक अद्वितीय आउटपुट उत्पन्न करता है, जिसे हैश कहा जाता है, जो इनपुट से बहुत छोटा होता है। हैश इनपुट के फ़िंगरप्रिंट की तरह है. समान हैश वाले दो अलग-अलग इनपुट ढूंढना कठिन है। और हैश से मूल इनपुट प्राप्त करना असंभव है। उदाहरण के लिए, यदि आपके पास " " नामक फ़ाइल है जिसका आकार 1 एमबी है, तो आप केवल अक्षर लंबा हैश प्राप्त करने के लिए हैश फ़ंक्शन का उपयोग कर सकते हैं, जैसे । किशन.जेपीजी 64 0A6DF48A27EF7DB48B213DF3DBA84FAD1BB4FD9B47568DA1F570C067D9A4867F यदि आप फ़ाइल में एक पिक्सेल भी बदलते हैं, तो हैश पूरी तरह से अलग होगा, जैसे । C69E60E932F3D0C6C2363B68301E202551C09123A71F639E6AB3BC8F847BE4AF तो आप यह सत्यापित करने के लिए हैश का उपयोग कर सकते हैं कि फ़ाइल पहले जैसी ही है। प्रत्येक फ़ाइल के लिए हैश की अलग से गणना करना और संग्रहीत करना कठिन होगा। यहीं पर मर्कल के पेड़ काम आते हैं। लेकिन अगर आपके पास बहुत सारी फ़ाइलें हों तो क्या होगा? मर्कल वृक्ष हैश के पारिवारिक वृक्ष की तरह है। । फिर आप हैश को जोड़ते हैं और नए हैश प्राप्त करने के लिए उन्हें जोड़ते हैं। आप इस प्रक्रिया को तब तक दोहराते हैं जब तक आप पेड़ के शीर्ष पर नहीं पहुंच जाते, जहां आपके पास केवल एक हैश बचा होता है। इस हैश को कहा जाता है। आप प्रत्येक फ़ाइल के हैश से पेड़ की पत्तियों के रूप में शुरुआत करते हैं मर्कल रूट मर्कल रूट पेड़ की सभी फाइलों के फिंगरप्रिंट की तरह है। तो आप यह सत्यापित करने के लिए मर्कल रूट का उपयोग कर सकते हैं कि सभी फ़ाइलें पहले जैसी ही हैं। यदि कोई फ़ाइल बदलती है, तो उसका हैश बदल जाएगा, और उसके ऊपर के सभी हैश भी बदल जाएंगे जब तक कि मर्कल रूट नहीं बदल जाता। लेकिन आप किसी विशिष्ट फ़ाइल को कैसे सत्यापित करते हैं? आपको ट्री की सभी फ़ाइलों को डाउनलोड करने और जांचने की आवश्यकता नहीं है। आपको केवल फ़ाइल से मर्कल रूट तक पथ के साथ कुछ हैश को डाउनलोड करने और जांचने की आवश्यकता है। इस पथ को कहा जाता है। मर्कल प्रूफ़ उदाहरण के लिए, मान लीजिए कि आप सत्यापित करना चाहते हैं कि फ़ाइल "cat.jpg" सही है या नहीं। आपको केवल इसका हैश डाउनलोड करना होगा जो है, इसके भाई-बहन का हैश , उनके माता-पिता का भाई-बहन का हैश और मर्कल रूट । HA 0a6df4 HB (ea12e7) H CD (b582ae) H ABCD (7bd24f) फिर आप और मिलाकर गणना कर सकते हैं और H AB और H CD को मिलाकर गणना कर सकते हैं। यदि एच एबीसीडी मर्कल रूट से मेल खाता है, तो आप निश्चिंत हो सकते हैं कि।" " सही है। HA HB H AB H ABCD cat.jpg आप यह सत्यापित करने के लिए उसी सादृश्य का उपयोग कर सकते हैं कि ब्लॉक में मौजूद लेनदेन cat.jpg या डॉग.txt के बजाय मर्कल रूट को सत्यापित करके नियंत्रित किया गया है या नहीं। यह लीफ नोड्स पर लेनदेन का एक समूह होगा। कृपया ध्यान दें: आरेख को साफ़ दिखाने के लिए मैंने उपरोक्त उदाहरण में हैश मान को 6 वर्णों तक छोटा कर दिया है। यदि मेरे पास केवल तीन पत्ती वाले नोड हों तो क्या होगा? मैं मर्कल ट्री कैसे बनाऊंगा? इस परिदृश्य को एक नोड को डुप्लिकेट करके जल्दी से संबोधित किया जा सकता है, इस प्रकार नोड्स की कुल संख्या चार हो जाती है। उदाहरण के लिए, मान लीजिए कि आपने लेनदेन किया है। , और । आप उनके हैश की गणना कर सकते हैं. , , और । । बाद में; आप , , और प्राप्त करने के लिए हैश को जोड़ और संयोजित कर सकते हैं। मर्कल रूट है। TA TB TC HA HB HC फिर आप H C' प्राप्त करने के लिए HC की नकल कर सकते हैं H AB H CC' H ABCC' H ABCC' संक्षेप में, मर्कल पेड़ ब्लॉकचेन और अन्य वितरित प्रणालियों को लाभ पहुंचाते हैं, जहां कई कंप्यूटरों को बड़ी मात्रा में डेटा साझा करना और सत्यापित करना होता है। मर्कल पेड़ों का उपयोग करके, वे बैंडविड्थ, भंडारण और गणना समय बचा सकते हैं। यह दिखाने के लिए यहां एक त्वरित जावा उदाहरण दिया गया है कि आप अपना खुद का मर्कल ट्री कैसे बना सकते हैं: import java.nio.charset.StandardCharsets; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; class MerkleTree{ static class Node { String content; public Node(String content) { this.content = content; } public String getHash() throws NoSuchAlgorithmException { MessageDigest md = MessageDigest.getInstance("SHA-256"); byte[] hash = md.digest(content.getBytes(StandardCharsets.UTF_8)); StringBuilder buffer = new StringBuilder(); for (byte b : hash) { buffer.append(String.format("%02x", b)); } return buffer.toString(); } } public static void main(String[] args) throws NoSuchAlgorithmException{ Node cat = new Node("I am a cat, this is a cat file called cat.jpg"); Node dog = new Node("I am a dog, this is a dog file called dog.txt"); // we have two leaf nodes, in order to create a merkle root, // we simple need to get their individual hashes // and then combine those hashes and hash them again String HA = cat.getHash(); String HB = dog.getHash(); Node merkleRoot = new Node(HA + HB); String HAB = merkleRoot.getHash(); System.out.println("Merkle Root: " + merkleRoot.getHash()); // let's say we altered the cat file cat = new Node("I am a cat, this is a cat file called dog.jpg"); // notice we have changed the cat.jpg to dog.jpg String HA_MODIFIED = cat.getHash(); Node modifiedMerkleRoot = new Node(HA_MODIFIED + HB); String HAB_MODIFIED = modifiedMerkleRoot.getHash(); System.out.println("Merkle Root: " + HAB_MODIFIED); } } आउटपुट: Merkle Root: d1da3503d679f032134b4330768d31e67813fcfe2824fceed93f8185a405bdf9 Merkle Root: 1a898c7fee0e46647e55d5f9874f090e5ed76726acf39308527a0bba22a34b3e मेरे लेख को पढ़ने के लिए समय निकालने के लिए मैं आपको धन्यवाद देता हूं। पर मुझे फॉलो करके मेरा समर्थन करें ताकि जब भी मैं कोई लेख प्रकाशित करूं तो आपको सूचित किया जा सके। हैकरनून बहुत-बहुत धन्यवाद। विकेंद्रीकृत सिस्टम, तकनीक और एआई रुझानों पर व्यावहारिक लेखों में गोता लगाएँ: https://www.0xkisan.com . अपना समर्थन दिखाने के लिए अवश्य जाएँ। यहाँ भी प्रकाशित किया गया।