জাভাতে একটি সাধারণ ব্লকচেইন বাস্তবায়ন

01 October 2023

1 min read

ব্লকচেইন হচ্ছে তথ্যের একটি ডিসেন্ট্রালাইজড খাতা বা লেজার। ব্লকচেইনকে ক্রিপ্টোগ্রাফি ব্যবহার করে সংযুক্ত ডেটা ব্লক নিয়ে গঠিত একটি চেইন ও বলা যেতে পারে।

ব্লকচেইন এর কিছু গুরুত্বপূর্ণ বৈশিষ্ট্যঃ

✅টেম্পার-প্রুফঃ 

ব্লকচেইনের সর্বপ্রথম বৈশিষ্ট্য হলো, ব্লকের প্রতিটি ডেটা টেম্পার-প্রুফ। প্রতিটি ব্লককে একটি ক্রিপ্টোগ্রাফিক ডাইজেস্ট দ্বারা বর্ণনা করা হয়, যা একটি হ্যাশ নামেও পরিচিত। এই হ্যাশই  ব্লকটিকে টেম্পার-প্রুফ করে তোলে।

✅ডিসেন্ট্রালাইজডঃ

 ব্লকচেইনের পুরো নেটওয়ার্কটি সম্পূর্ণ ডিসেন্ট্রালাইজড । এর মানে হল যে কোনও মাস্টার নোড নেই এবং নেটওয়ার্কের প্রতিটি নোডের কাছেই একই অনুলিপি রয়েছে।

✅স্বচ্ছতাঃ

  নেটওয়ার্কে অংশগ্রহণকারী প্রতিটি নোড যাচাই করে এবং অন্যান্য নোডের সাথে কনসেন্সাস অ্যালগরিদমের মাধ্যমে একটি নতুন ব্লক যোগ করে । সুতরাং, প্রতিটি নোডের কাছেই সম্পূর্ণ ডেটা  দৃশ্যমান। 

ব্লকচেইনের মৌলিক একক হল ব্লক । একটি একক ব্লক বেশ কয়েকটি লেনদেন বা অন্যান্য মূল্যবান ডেটা নিজের মধ্যে রাখতে পারে। 

জাভাতে বেসিক ব্লকচেইন

একটি ব্লক বাস্তবায়ন

public class Block {

    private String hash;

    private String previousHash;

    private String data;

    private long timeStamp;

    private int nonce;

 

    public Block(String data, String previousHash, long timeStamp) {

        this.data = data;

        this.previousHash = previousHash;

        this.timeStamp = timeStamp;

        this.hash = calculateBlockHash();

    }

    // standard getters and setters

}

  • পূর্ববর্তী ব্লকের হ্যাশ, চেইন তৈরি করার জন্য একটি গুরুত্বপূর্ণ অংশ। 
  • এটি ব্লক তৈরির একটি টাইমস্ট্যাম্প। 
  • এখানে একটি নন্স(nonce) রয়েছে, যা ক্রিপ্টোগ্রাফিতে ব্যবহৃত একটি বিধিবহির্ভূত(arbitrary)সংখ্যা। 
  • এই ব্লকের হ্যাশ, অন্যান্য তথ্যের উপর ভিত্তি করে গণনা করা হয়। 

হ্যাশ গণনা করা

একটি হ্যাশ ফাংশন প্রথমে নির্দিষ্ট আকারের আউটপুট ডেটা থেকে ইচ্ছামত ইনপুট ডেটা ম্যাপ করে । মজার ব্যাপার হলো হ্যাশ, ইনপুট ডেটার যেকোনো পরিবর্তনের জন্য যথেষ্ট সংবেদনশীল, তা যতই ছোট হোক না কেন।

তাছাড়া, হ্যাশ থেকে ইনপুট ডেটা ফিরে পাওয়া অসম্ভব। এই বৈশিষ্ট্যগুলি হ্যাশ ফাংশনকে ক্রিপ্টোগ্রাফিতে বেশ উপযোগী করে তোলে।

public String calculateBlockHash() {

    String dataToHash = previousHash 

      + Long.toString(timeStamp) 

      + Integer.toString(nonce) 

      + data;

    MessageDigest digest = null;

    byte[] bytes = null;

    try {

        digest = MessageDigest.getInstance("SHA-256");

        bytes = digest.digest(dataToHash.getBytes(UTF_8));

    } catch (NoSuchAlgorithmException | UnsupportedEncodingException ex) {

        logger.log(Level.SEVERE, ex.getMessage());

    }

    StringBuffer buffer = new StringBuffer();

    for (byte b : bytes) {

        buffer.append(String.format("%02x", b));

    }

    return buffer.toString();

}

  • প্রথমে, আমরা একটি হ্যাশ তৈরি করতে ব্লকের বিভিন্ন অংশ সংযুক্ত করব। 
  • তারপর, আমরা MessageDigest থেকে SHA-256 হ্যাশ ফাংশনের একটি উদাহরণ পেয়ে যাবো।
  • তারপর, ইনপুট ডেটার হ্যাশ মান তৈরি করা যেতে পারে , যা একটি বাইট অ্যারে (byte array)। 
  • অবশেষে, আমরা বাইট অ্যারেকে একটি হেক্স স্ট্রিং-এ রূপান্তরিত করবো, একটি হ্যাশকে সাধারণত ৩২-সংখ্যার হেক্স নম্বর (32-digit hex number) হিসাবে উপস্থাপিত হয়।

ব্লক মাইনিং 

ব্লক মাইনিং এর অর্থ একটি গণনাগতভাবে জটিল কাজ সমাধান করা। 

public String mineBlock(int prefix) {

    String prefixString = new String(new char[prefix]).replace('\0', '0');

    while (!hash.substring(0, prefix).equals(prefixString)) {

        nonce++;

        hash = calculateBlockHash();

    }

    return hash;

}

আমরা যে উপসর্গটি বা prefix খুঁজে পেতে চাই তা সংজ্ঞায়িত করবো। তারপর আমরা সমাধান খুঁজে পেয়েছি কিনা তা পরীক্ষা করে দেখবো।  যদি তা না পাই তাহলে আমরা ননস (nonce) বৃদ্ধি করবো যা লুপে হ্যাশ গণনা শুরু করবে, কাঙ্ক্ষিত ফলাফল না আসা পর্যন্ত লুপটি চলতে থাকবে।

কোডটি যেভাবে রান হয়

এখন যেহেতু আমরা আমাদের ব্লককে এর ফাংশন সহ সংজ্ঞায়িত করেছি, তাহলে আমরা একটি সাধারণ ব্লকচেইন তৈরি করতে এটি ব্যবহার করতে পারি। আমরা এটি একটি ArrayList এ সংরক্ষণ করব :

List blockchain = new ArrayList<>();

int prefix = 4;

String prefixString = new String(new char[prefix]).replace('\0', '0');

এবার দেখা যাক, কিভাবে আমরা এতে একটি ব্লক যোগ করতে পারি:

@Test

public void givenBlockchain_whenNewBlockAdded_thenSuccess() {

    Block newBlock = new Block(

      "The is a New Block."

      blockchain.get(blockchain.size() - 1).getHash(),

      new Date().getTime());

    newBlock.mineBlock(prefix);

    assertTrue(newBlock.getHash().substring(0, prefix).equals(prefixString));

    blockchain.add(newBlock);

}

 ব্লকচেইন যাচাইকরণ

@Test

public void givenBlockchain_whenValidated_thenSuccess() {

    boolean flag = true;

    for (int i = 0; i < blockchain.size(); i++) {

        String previousHash = i==0 ? "0" : blockchain.get(i - 1).getHash();

        flag = blockchain.get(i).getHash().equals(blockchain.get(i).calculateBlockHash())

          && previousHash.equals(blockchain.get(i).getPreviousHash())

          && blockchain.get(i).getHash().substring(0, prefix).equals(prefixString);

            if (!flag) break;

    }

    assertTrue(flag);

}

প্রতিটি ব্লকের জন্য আমাদের তিনটি বিষয়ে নিশ্চিত করতে হবে:

১.বর্তমান ব্লকের সংরক্ষিত হ্যাশ আসলেই এই মানটি গণনা করছে কিনা

২.বর্তমান ব্লকে সংরক্ষিত আগের ব্লকের হ্যাশটি কি আসলেই তার পূর্ববর্তী ব্লকের হ্যাশ কিনাজ

৩.বর্তমান ব্লকটি মাইন করা হয়েছে কিনাযা

জাভার টুকটাক জ্ঞান থাকলে কিন্তু, আপনিও ঠিক এভাবেই কোড লিখে একটি ব্লকচেইন তৈরি করে ফেলতে পারেন। 

Share this article

RELATED ARTICLES

যেভাবে সিভি/ রেজিউমে বানালে তা আপনাকে চাকরির নিশ্চয়তা দেবে

ডিজাইন সিভি তৈরি করে কঠিন হলে ও অসম্ভব নয় কিন্তু! -----লার্ন ডিজাইন// “প্রথমেই বলে নেয়া ভালো চাকরি পাওয়ার জন্য কোনো জটিল কিংবা দুর্বোধ্য সিভি বা রেজিউমে বানানোর প্রয়োজন নেই। একটি সিম্পল এবং রেলেভেন্ট সিভি হায়ারিং ম্যানেজারদের ইম্প্রেস করার জন্য যথেষ্ট। ডিজাইনার হিসেবে আপনি হয়তো মনযোগ আকর্ষনের জন্য কমপ্লেক্স এবং ইউনিক ডিজাইনের সিভসি/রেজিউমে বানানোর কথা ভাবছেন।কিন্তু সিভিটি যথাসম্ভব সিম্পল ও রেলেভেন্ট করা ভালো। কারণ যিনি প্রথমে আপনার সিভিটি দেখবেন তিনি হয়তো ডিজাইনার নাও হতে পারেন। একট

02 October 2023

শীর্ষস্থানীয় ম্যানেজড ব্লকচেইন সলিউশন

ব্লকচেইন প্রযুক্তি তার ডিসেন্ট্রালাইজেশন প্রকৃতির কারণে সাম্প্রতিক সময়ে বেশ জনপ্রিয়তা অর্জন করেছে। লেনদেন এবং অর্থ স্থানান্তরের জন্য, এটি একটি অপরিবর্তনীয় এবং নিরাপদ খাতা বা লেজার তৈরি করে। প্রতিনিয়ত বিভিন্ন শিল্পে এই প্রযুক্তির ব্যবহার বাড়ছে। বর্তমানে ব্লকচেইন সাপ্লাই চেইন ম্যানেজমেন্ট এবং অনলাইন পেমেন্ট ও স্ট্রিমলাইন করছে। কিন্তু এই সুবিশাল প্রযুক্তিকে দক্ষতার সাথে পরিচালনার জন্য দরকার দক্ষ ডেভেলপারদের একটি দল।  মাথায় রাখতে হবে, ব্লকচেইন ডেভেলপমেন্ট কিন্তু এতো সহজ নয়, এখানে আপনাকে অনেক জটিল

01 October 2023

1 min read

শিক্ষার্থীদের জন্য ১০টি আকর্ষণীয় ব্লকচেইন প্রোজেক্টের ধারণা (২০২৩)

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

01 October 2023

ব্লকচেইনে আগ্রহীদের জন্য কিছু ফ্রি রিসোর্স

ব্লকচেইন এবং ক্রিপ্টোর ক্রমবর্ধমান বিকাশের ফলে এই ফিল্ডে ক্যারিয়ার সন্ধানকারী ব্যক্তির সংখ্যাও দিন দিন বাড়ছে। ব্লকচেইন ডেভেলপমেন্টে ক্যারিয়ার বিবেচনা করার অনেক কারণের মধ্যে এই সেক্টরের প্রত্যাশিত বৃদ্ধি এবং বর্তমানে তুলনামূলক কম প্রতিযোগিতা অন্যতম। সৌভাগ্যবশত, নতুনদের ব্লকচেইন এবং ক্রিপ্টোকারেন্সি সম্পর্কে শেখাতে এবং অভিজ্ঞ ডেভেলপার হতে অনেক অনলাইন সংস্থা উপলব্ধ আছে। আজকের ব্লগে কিছু ফ্রি রিসোর্স নিয়ে কথা বলবো যেখান থেকে আপনি বিনামূল্যে ব্লকচেইন সম্পর্কে অনেককিছু জানতে ও শিখতে পারবেন।  আপনি

01 October 2023

অনলাইন লাইভ স্কিল ডেভেলপমেন্ট প্ল্যাটফর্ম।

ডাউনলোড করুন ওস্তাদ অ্যাপ

কমিউনিটি -এর সাথে কানেক্টেড থাকতে