বাচ্চাদের ব্লকচেইন (প্রথম কিস্তি)

বাচ্চাদের ব্লকচেইন(BlockChain) সেটা আবার কি জিনিস । ব্লকচেইন জিনিসটাই বা কি । খেতে হয় না তেল হিসাবে মাথায় দিতে হয় । আসলে এখন এই টেক নিয়ে একটা উন্মাদনা চলছে । যাইহোক এই লেখাট ব্লকচেইনের বেসিক জিনিস নিয়ে না । মানে হল আমি এর পিছনের ক্রিপ্টোগ্রাফির থিওরি নিয়ে কথা বলব না । সেজন্য আপনাকে কষ্ট করে পড়ে নিতে হবে । কোথা থেকে পড়বেন। গুগল আছে না ।

আমি আসলে ছোট একটা ব্লকচেইন গো(go) প্রোগ্রামিং ল্যাঙ্গুয়েজ দিয়ে ইমপ্লিমেন্ট করার চেষ্টা করব । তারপর হয়ত কোন একদিন থিওরি গুলো নিয়ে লেখে ফেলব । হয়ত সময় পেলে একটা ক্রিপোকারেঞ্চসি গো দিয়ে লেখে ফেলব ।

শুরুর কথাঃ

আমরা সবাই জানি ডাটাবেস একটা সেন্ট্রাল সার্ভারে থাকে । সেটার মধ্যে সব ইনফরমেশন রেকর্ড হিসাবে থাকে । সেই ডাটাবেজে কুয়ারি করে আমরা আমাদের দরকার মত ইনফরমেশন বের করে নিতে পারি । নতুন ডাটা ইনসার্ট করতে চাইলে সেটাও পারি । কিন্তু ব্লকচেইনের ব্যাপারটা এমন না । ব্লক চেইন ক্ষেত্রে এই ডাটা একজায়গায় থাকবে না । ডিস্ট্রিবিউটেড হয়ে থাকবে । একটা নেটওয়ার্কের মধ্যে যারা যারা থাকবে । তাদের সবার কাছে এই ডাটাগুলোর একটা কপি থাকবে । মনে করুন আপনারা চার বন্ধু । কার কাছে কত টাকা আছে সেটা একটা কাগজে লিখে চারজনের কাছে চার কপি দিয়ে দিলেন । এখন যদি কেউ যদি কাওকে টাকা দেয় । তাহলে সেটাও লেখতে হবে এই কাগজের মধ্যে । করিম যদি রহিমকে ১০০ টাকা দেয় ।তাহলে করিমের ১০০ টাকা কমে আর রহিমের ১০০ টাকা বাড়ে । এইটাকেও ওই চারটা কাগজের মধ্যে লেখে রাখতে হবে । এখন চিন্তা করেন তো এই জিনিসটা আমরা যদি কাগজ বাদ দিয়ে প্রোগ্রামিং দিয়ে করতে চাই ।তাহলে কি করতে হবে ?

ব্লকঃ

আচ্ছা ঐ কাগজগুলোকে আমরা এক একটা ইনফরমেশন ব্লক বলতে পারি না ? ব্লচকচেইনে আসলে যে ইনফরমেশন থাকে সেটা এই ব্লকগুলোর মধ্যে থাকে । যেমন বিট কয়েন এর মধ্যে যে টাকা পয়সার আদান প্রদান হয় সেটার ইনফরমেশন গুলো ব্লকের মাঝে থাকে । এছাড়াও একটা ব্লক আর কিছু টেকনিকাল ইনফরমেশন রাখে যেমনঃ এখনকার টাইমস্ট্যাম্প (TimeStamp) , আগের ব্লকের হ্যাশ(Hash)

যাই হোক আমাদের ব্লকে এ এত কিছু রাখব না । যেগুলো আসলে খুব দরকারি সেগুলোই রাখব । এইজন্য নাম দিয়েছি বাচ্চা ব্লক চেইন । আমাদের ব্লক দেখতে কেমন হবেঃ

আমরা Block নামে একটা নতুন একটা struct টাইপ ডিফাইন করব । এর মধ্যে Timestamp ঠিক যেই সময় ব্লকটা তৈরি সেই সময়টাকে ধরে রাখে । Data এর মধ্যে আমাদের যে ইনফরমেশন গুলো এই ব্লকে থাকবে সেগুলো থাকে । PrevBlockHash আগের ব্লককে হ্যাশ করলে যে হ্যাশ ভ্যালু পাওয়া যায় সেটাকে স্টোর করে । আর Hash এই নতুন তৈরি হওয়া ব্লকের হ্যাশ ভ্যালু সেভ করে । Hash কে ব্লকের হেডার (Header) বলে ।

এখন কথা হল আমরা কিভাবে হ্যাশ গুলো বের করব । ব্লক চেইনের আসল কারিকুরি এখানেই । ব্লক চেইনের সিকিউরিটি এই হ্যাশিং এর উপর নির্ভর করে । কেন ? আবারো অনেক কথা বার্তা । এখন আপাতত সেগুলো না জানলেও চলবে । আমরা গো এর কিছু ফাংশন দিয়ে হ্যাশিং এর কাজ গুলো করব ।

আমরা ব্লকের মধ্যে যে ফিল্ড গুলো আছে সেগুলোকে নিয়ে কনকেটিনেট করব । তারপর SHA-256 এপ্লাই করব সেই কনকেটিনেটেড ডাটার উপর । দেখা যাক সেটা কিভাবে করব । এটা কিন্তু আমরা Block এর একটা মেথড দিয়ে করব ।

হ্যাশ বের করা শেষ । এখন আমরা নতুন ব্লক বানানোর ফাংশন লিখতে হবে ।

আমরা একটা নতুন ব্লক বানানো শিখে ফেললাম । এখন এর পরের ধাপ ।

ব্লকচেইনঃ

ব্লচকচেইনকে আমরা লিঙ্কড লিস্টের সাথে তুলনা করতে পারি । প্রতিটা ব্লকের সাথে আগের ব্লকের একটা লিঙ্ক থাকে । তাই লিঙ্ক লিস্ট ডাটা স্ট্রাকচার ব্যবহার আমাদের ব্লক চেইন ট্রাভারস করা অনেক সহজ হবে ।

তবে আমরা এখানে লিঙ্ক লিস্ট ব্যবহার করব না । ইমপ্লিমেন্টশন সহজ করার জন্য আমরা অ্যারে ব্যবহার করব । এই অ্যারে ব্লকগুলোর এড্রেস সেভ করে রাখবে । তার মানে আমরা অ্যারের ইনডেক্স ব্যবহার করে খুব সহজেই যেকোন ব্লকে জেতে পারবে ।

এখন ব্লক এড করার ফাংশনটা লিখে ফেলি ।

ব্লক এড করার ফাংশন

ব্লক চেইনের একটা ব্লকের সাথে নতুন ব্লক এড করতে হলে আগের ব্লকের ডাটার হ্যাশ ভ্যালু লাগে । কিন্তু কথা হল সবার প্রথম যে ব্লকটা তৈরি করতে হবে সেটার জন্য আগের ব্লক বলতে কিছু নেই । তাহলে সেটার হ্যাশ ভ্যালু আসবে কোথা থেকে । এই জন্য ব্লক চেইনের প্রথম ব্লকটার একটা নাম আছে । জেনেসিস ব্লক ।

সেই জেনেসিস ব্লক তৈরি করার ফাংশন লিখে ফেলি ।

জেনেসিস ব্লক তৈরি করার ফাংশন

এখন নতুন কোন ব্লক চেইন তৈরির আগে আমরা জেনেসসি ব্লকটাকে ব্যবহার করব।

নতুন ব্লক চেইন তৈরি

এইবার মেইন ফাংশনটা লেখে ফেলি ।

খুব সিম্পল একটা জিনিস । এখন মাত্র ব্লকচেইনের স্ট্রাকচার দাঁড়ালো । এর পরে আর অনেক কাজ আছে । সামনে সেগুলো নিয়ে আরো পাঁচ থেকে ছয়টা টিউটোরিয়াল লিখব । এইটা লিখতেই হবে নাহলে চাকরি থাকবে না । 😀😀😀😀😀

--

--