स्क्रैच से गोलांग में एक ब्लॉकचेन बनाएं

इस लेख में, हम खरोंच से गो ब्लॉकचेन के विकास पर ध्यान केंद्रित करेंगे। हालाँकि, इससे पहले कि हम शुरू करें, आपको यह सुनिश्चित कर लेना चाहिए कि आप गोलंग की मूल अवधारणाओं से परिचित हैं। यदि नहीं, तो यह समझदारी है कि यदि आप प्रारंभिक अवधारणाओं से गुजरते हैं और फिर ब्लॉकचेन पर वापस आते हैं। 

तो चलिए सीधे विषय पर आते हैं। 

एक नई निर्देशिका के साथ शुरू 

हम शुरुआत करने के लिए एक नई निर्देशिका बनाएंगे। आइए मान लें कि इस निर्देशिका का नाम "ब्लॉकचैन" है। हम कमांड प्रॉम्प्ट में कोड टाइप करेंगे (या यदि आप macOS या Linux का उपयोग कर रहे हैं, तो आपको टर्मिनल का उपयोग करना होगा)। इस प्रकार, हम टाइप करते हैं:

सीडी गो-कार्यक्षेत्र 

एमकेडीआईआर ब्लॉकचेन 

सीडी ब्लॉकचैन 

कोड.

जैसे ही वीएस कोड खुलता है, हम कमांड प्रॉम्प्ट में एक गो मॉड्यूल बनाएंगे। हम ऐसा कैसे करते हैं? खैर, हम टाइप करते हैं:

गो मॉड इनिट github.com/golang-company/blockchain

main.go . में कोडिंग 

इसके बाद, हम 'main.go' नाम की एक गो सोर्स फाइल बनाएंगे और उसमें कोड टाइप करेंगे। लेकिन पहले यह जान लेते हैं कि ब्लॉकचेन क्या है। ए blockchain एक सार्वजनिक डेटाबेस के रूप में परिभाषित किया जा सकता है जो विकेंद्रीकृत और कई साथियों के बीच वितरित किया जाता है। ब्लॉकचैन डेटाबेस को स्व-सुधार करने की अनुमति देता है, भले ही कोई नोड गलत डेटा का उत्पादन कर रहा हो। 

आमतौर पर, ब्लॉकचैन पर एक ब्लॉक में डेटा होता है जिसे हम डेटाबेस में साझा करते हैं, एक हैश और पिछले ब्लॉक का क्रिप्टोग्राफ़िक हैश। 

 तो, क्या आप तैयार हैं जाओ ब्लॉकचेन विकास? महान! आएँ शुरू करें। 

प्रोग्रामिंग भाग 

इस खंड में, हम main.go फ़ाइल को देखेंगे। 

पैकेज मुख्य

आयात करना(

"बाइट्स"

"क्रिप्टो/sha256" 

"एफएमटी" 

)

क्रिप्टोब्लॉक संरचना टाइप करें {

हैश [] बाइट 

डेटा [] बाइट 

PrevHash [] बाइट 

}

  • जैसा कि आप देख सकते हैं, एक संरचना केवल बनाई गई है। 

func (सी *क्रिप्टोब्लॉक) बिल्डहैश() {

विवरण: = बाइट्स। शामिल हों ([] [] बाइट {c. डेटा, c. PrevHash}, [] बाइट {}) 

हैश: = sha256.Sum256 (विवरण)

c.हैश = हैश[ : ]

}

  • अब हम एक ऐसी विधि का निर्माण करेंगे जो हमें डेटा और पिछले हैश के आधार पर हैश उत्पन्न करने में सक्षम बनाएगी। हम "बाइट्स" पुस्तकालय का आयात करेंगे क्योंकि हम इसका उपयोग करेंगे।
  • अगला चरण विवरण नामक एक चर बनाना और डेटा प्रकार बाइट्स का उपयोग करना है। हम बाइट्स के स्लाइस को जोड़ने के लिए ज्वाइन () का उपयोग करेंगे।

विवरण: = बाइट्स। शामिल हों ([] [] बाइट {c. डेटा, c. PrevHash}, [] बाइट {}) 

यहां, हम बाइट्स का 2D स्लाइस ले रहे हैं, हम c.Data और पिछले हैश को ट्रांसमिट करते हैं। फिर हम बाइट्स के खाली स्लाइस को मिला देंगे। 

  • इसके बाद, हम विवरण पर sum256 हैशिंग फ़ंक्शन की मदद से वास्तविक हैश बना रहे हैं। हम इसका उपयोग कर सकते हैं क्योंकि हम sha256 पुस्तकालय आयात करेंगे। 
  • अगला, हम बनाए गए हैश को ब्लॉक के लिए हैश फ़ील्ड में धकेलते हैं। 

func बिल्डब्लॉक (डेटा स्ट्रिंग, prevHash [] बाइट) * क्रिप्टोब्लॉक {

ब्लॉक: = और क्रिप्टोब्लॉक {[] बाइट {}, [] बाइट (डेटा), prevHash}

ब्लॉक। बिल्डहैश ()

वापसी ब्लॉक

  • अब हम एक ऐसा फंक्शन बनाएंगे जो ब्लॉक के निर्माण को सक्षम बनाता है। फ़ंक्शन इनपुट के रूप में डेटा की एक स्ट्रिंग को स्वीकार करता है, पिछले ब्लॉक से इनपुट के रूप में prevHash, और फिर क्रिप्टोब्लॉक के संदर्भ को आउटपुट करता है। हम ब्लॉक कंस्ट्रक्टर का उपयोग करके ब्लॉक का निर्माण करेंगे। 
  • &Cryptoblock ब्लॉक के संदर्भ के रूप में कार्य करता है। हैश फ़ील्ड के लिए, हम बाइट्स का एक खाली टुकड़ा शामिल करते हैं। डेटा फ़ील्ड के लिए, हम डेटा स्ट्रिंग लेते हैं और इसे बाइट्स के स्लाइस में परिवर्तित करते हैं। और हम PrevHash को PrevHash फील्ड में शामिल करते हैं। 
  • अंत में, हम BuildHash() को ब्लॉक पर कॉल करते हैं और हम ब्लॉक को वापस कर देते हैं। 

ब्लॉकचैन संरचना टाइप करें {

ब्लॉक []*क्रिप्टोब्लॉक

}

  • एक प्रकार जो ब्लॉकचेन को व्यक्त करने में मदद करेगा, की आवश्यकता है। और हमने इसे पूरा करने के लिए एक संरचना लागू की। प्रकार ब्लॉकचैन संरचना क्रिप्टोब्लॉक के लिए पॉइंटर्स की एक सरणी से बना है।

func (श्रृंखला * ब्लॉकचैन) AddBlock (डेटा स्ट्रिंग) {

पिछलाब्लॉक: = चेन.ब्लॉक [लेन (चेन.ब्लॉक) -1]

नया: = बिल्डब्लॉक (डेटा, प्रीवब्लॉक। हैश)

चेन.ब्लॉक्स = एपेंड (चेन.ब्लॉक्स, नया)

}

  • यहां, हम एक ऐसी विधि बना रहे हैं जो हमें एक ब्लॉक को श्रृंखला में शामिल करने में सक्षम बनाती है। विधि ब्लॉकचेन पॉइंटर को पुनः प्राप्त करती है। इसके बाद, यह एक डेटा स्ट्रिंग स्वीकार करता है। 
  • चेन.ब्लॉक को कॉल करते हुए, हम ब्लॉकचैन में पिछले ब्लॉक में जाते हैं। इसके बाद, हमने ब्लॉकचेन की लंबाई [लेन (चेन.ब्लॉक्स) -1] पारित की।
  • नए चर में, हम बिल्डब्लॉक फ़ंक्शन को कॉल कर रहे हैं और हम डेटा स्ट्रिंग और prevBlock.Hash पास कर रहे हैं।
  • एपेंड फ़ंक्शन का उपयोग करके, इसे चेन.ब्लॉक में जोड़कर, हम फिर नए ब्लॉक को ब्लॉकचेन से जोड़ते हैं।

func इंसेप्शन () * क्रिप्टोब्लॉक {

रिटर्न बिल्डब्लॉक ("इंसेप्शन", [] बाइट {})

}

  • अगला कदम इंसेप्शन नामक एक फ़ंक्शन बनाना है जो ब्लॉकचेन के पहले ब्लॉक का वर्णन करेगा। और हम पहले ब्लॉक में डेटा के साथ, फ़ंक्शन में एक नया बिल्डब्लॉक लौटाएंगे। यहां। मैंने "इंसेप्शन" और बाइट्स का एक टुकड़ा शामिल किया है जो एक खाली पिछले हैश का प्रतिनिधित्व करता है। 

func InitBlockChain () * ब्लॉकचैन {

वापसी और ब्लॉकचैन{[]*क्रिप्टोब्लॉक {इंसेप्शन ()}}

}

  • पहला ब्लॉकचेन बनाने के लिए, मैंने InitBlockChain फ़ंक्शन पेश किया है। यहां, मैं केवल ब्लॉकचैन के विशेष संदर्भ को वापस कर रहा हूं। इसके बाद, हम क्रिप्टोब्लॉक की एक सरणी बनाते हैं, जहां हम इंसेप्शन फ़ंक्शन पर कॉल करते हैं। 

func मुख्य () {

श्रृंखला: = InitBlockChain ()

chain.AddBlock ("इंसेप्शन के बाद पहला ब्लॉक")

chain.AddBlock ("इंसेप्शन के बाद दूसरा ब्लॉक")

chain.AddBlock ("इंसेप्शन के बाद तीसरा ब्लॉक")

_ के लिए, ब्लॉक: = श्रेणी श्रृंखला। ब्लॉक {

fmt.Printf ("पिछला हैश: %x\n", ब्लॉक। PrevHash)

fmt.Printf ("ब्लॉक में डेटा:% s \ n", ब्लॉक। डेटा)

fmt.Printf ("हैश:% x \ n", ब्लॉक। हैश)

}

}

  • अंत में, हम मुख्य समारोह में आ गए हैं। जैसा कि आप देख सकते हैं कि हमने InitBlockChain() को कॉल किया है और हमने इसे चेन वेरिएबल को असाइन किया है। 
  • अगला, हम चेन के माध्यम से चेन में ब्लॉक जोड़ रहे हैं। AddBlock, और हम आवश्यक डेटा पास करते हैं। 
  • इसके बाद, हम ब्लॉकचैन की जांच के लिए लूप के लिए चलाते हैं। फिर हम प्रत्येक ब्लॉक को सिंगल करते हैं और प्रत्येक ब्लॉक के अंदर फ़ील्ड प्रिंट करते हैं। हम बस टाइप करते हैं:

fmt.Printf ("पिछला हैश: %x\n", ब्लॉक। PrevHash)

fmt.Printf ("ब्लॉक में डेटा:% s \ n", ब्लॉक। डेटा)

fmt.Printf ("हैश:% x \ n", ब्लॉक। हैश)

आउटपुट: 

अतः हम कह सकते हैं कि कार्यक्रम सफल रहा। मुझे आशा है कि आप गोलंग में ब्लॉकचेन की अवधारणा के कार्यान्वयन को समझने में सक्षम थे। बस अभ्यास करते रहें और आप जटिल परियोजनाओं को संभालने में सक्षम होंगे। 

आपका क्रिप्टो सबसे अच्छी सुरक्षा का हकदार है। प्राप्त लेजर हार्डवेयर वॉलेट मात्र $79 में!

स्रोत: https://coinfomania.com/build-a-blockchain-in-golang/