মূল কন্টেন্টে যান
Change page

ব্লক প্রপোজাল

পেজ সর্বশেষ আপডেট: ২৩ ফেব্রুয়ারী, ২০২৬

ব্লকস হলো ব্লকচেইনের মৌলিক একক। ব্লকস হলো তথ্যের বিচ্ছিন্ন একক যা নোডগুলোর মধ্যে আদান-প্রদান করা হয়, কনসেন্সাস বা ঐকমত্যে পৌঁছানো হয় এবং প্রতিটি নোডের ডাটাবেসে যুক্ত করা হয়। এই পৃষ্ঠায় ব্যাখ্যা করা হয়েছে কীভাবে এগুলো তৈরি হয়।

পূর্বশর্ত

ব্লক প্রপোজাল হলো প্রুফ-অফ-স্টেক প্রটোকলের একটি অংশ। এই পৃষ্ঠাটি ভালোভাবে বোঝার জন্য, আমরা আপনাকে প্রুফ-অফ-স্টেক এবং ব্লক আর্কিটেকচার সম্পর্কে পড়ার পরামর্শ দিচ্ছি।

কে ব্লক তৈরি করে?

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

র‍্যান্ডম নির্বাচন

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

যদিও ভ্যালিডেটরস প্রতিটি স্লটে RANDAO-তে যোগ করে, গ্লোবাল RANDAO মান প্রতি এপোকে মাত্র একবার আপডেট করা হয়। পরবর্তী ব্লক প্রপোজারের ইনডেক্স গণনা করার জন্য, RANDAO মানটিকে স্লট নম্বরের সাথে মিশ্রিত করে প্রতিটি স্লটে একটি অনন্য মান প্রদান করা হয়। কোনো একটি নির্দিষ্ট ভ্যালিডেটর নির্বাচিত হওয়ার সম্ভাবনা কেবল 1/N নয় (যেখানে N = মোট সক্রিয় ভ্যালিডেটরস)। এর পরিবর্তে, এটি প্রতিটি ভ্যালিডেটরের কার্যকরী ETH ব্যালেন্স দ্বারা ওয়েট বা পরিমাপ করা হয়। সর্বোচ্চ কার্যকরী ব্যালেন্স হলো 32 ETH (এর মানে হলো balance < 32 ETH হলে তা balance == 32 ETH-এর চেয়ে কম ওয়েট দেয়, কিন্তু balance > 32 ETH হলে তা balance == 32 ETH-এর চেয়ে বেশি ওয়েট দেয় না)।

প্রতিটি স্লটে শুধুমাত্র একজন ব্লক প্রপোজার নির্বাচিত হয়। সাধারণ পরিস্থিতিতে, একজন ব্লক প্রডিউসার তাদের নির্ধারিত স্লটে একটিমাত্র ব্লক তৈরি এবং রিলিজ করে। একই স্লটের জন্য দুটি ব্লক তৈরি করা একটি স্ল্যাশেবল অপরাধ, যা প্রায়শই "equivocation" বা দ্ব্যর্থতা হিসেবে পরিচিত।

ব্লক কীভাবে তৈরি হয়?

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

ব্লক প্রপোজার তার নিজস্ব লোকাল ডাটাবেস এবং চেইনের ভিউ থেকে ডাটা সংগ্রহ করে একটি ব্লক তৈরি করে। ব্লকের বিষয়বস্তু নিচের স্নিপেটে দেখানো হলো:

1class BeaconBlockBody(Container):
2 randao_reveal: BLSSignature
3 eth1_data: Eth1Data
4 graffiti: Bytes32
5 proposer_slashings: List[ProposerSlashing, MAX_PROPOSER_SLASHINGS]
6 attester_slashings: List[AttesterSlashing, MAX_ATTESTER_SLASHINGS]
7 attestations: List[Attestation, MAX_ATTESTATIONS]
8 deposits: List[Deposit, MAX_DEPOSITS]
9 voluntary_exits: List[SignedVoluntaryExit, MAX_VOLUNTARY_EXITS]
10 sync_aggregate: SyncAggregate
11 execution_payload: ExecutionPayload
সব দেখান

randao_reveal ফিল্ডটি একটি যাচাইযোগ্য র‍্যান্ডম মান গ্রহণ করে যা ব্লক প্রপোজার বর্তমান এপোক নম্বরে স্বাক্ষর করে তৈরি করে। eth1_data হলো ডিপোজিট কন্টাক্ট সম্পর্কে ব্লক প্রপোজারের ভিউয়ের জন্য একটি ভোট, যার মধ্যে ডিপোজিট মার্কেল ট্রাইয়ের রুট এবং মোট ডিপোজিটের সংখ্যা অন্তর্ভুক্ত থাকে যা নতুন ডিপোজিট যাচাই করতে সক্ষম করে। graffiti হলো একটি ঐচ্ছিক ফিল্ড যা ব্লকে কোনো মেসেজ যোগ করতে ব্যবহার করা যেতে পারে। proposer_slashings এবং attester_slashings হলো এমন ফিল্ড যেখানে প্রমাণ থাকে যে প্রপোজারের চেইন ভিউ অনুযায়ী নির্দিষ্ট ভ্যালিডেটরস স্ল্যাশেবল অপরাধ করেছে। deposits হলো নতুন ভ্যালিডেটর ডিপোজিটের একটি তালিকা যা সম্পর্কে ব্লক প্রপোজার অবগত, এবং voluntary_exits হলো এমন ভ্যালিডেটরদের তালিকা যারা প্রস্থান করতে চায় এবং যাদের সম্পর্কে ব্লক প্রপোজার কনসেন্সাস লেয়ার গসিপ নেটওয়ার্কে শুনেছে। sync_aggregate হলো একটি ভেক্টর যা দেখায় কোন ভ্যালিডেটরদের আগে একটি সিঙ্ক কমিটিতে (ভ্যালিডেটরদের একটি সাবসেট যা লাইট ক্লায়েন্ট ডাটা পরিবেশন করে) নিযুক্ত করা হয়েছিল এবং ডাটা স্বাক্ষরে অংশগ্রহণ করেছিল।

execution_payload লেনদেন সম্পর্কিত তথ্য এক্সিকিউশন ক্লায়েন্ট এবং কনসেন্সাস ক্লায়েন্টের মধ্যে আদান-প্রদান করতে সক্ষম করে। execution_payload হলো এক্সিকিউশন ডাটার একটি ব্লক যা একটি বিকন চেইন ব্লকের ভেতরে নেস্টেড থাকে। execution_payload-এর ভেতরের ফিল্ডগুলো ইথিরিয়াম ইয়েলো পেপারে বর্ণিত ব্লক স্ট্রাকচারকে প্রতিফলিত করে, তবে এতে কোনো ওমার্স (ommers) নেই এবং difficulty-এর জায়গায় prev_randao বিদ্যমান। এক্সিকিউশন ক্লায়েন্টের কাছে লেনদেনের একটি লোকাল পুলের এক্সেস থাকে যা সে তার নিজস্ব গসিপ নেটওয়ার্কে শুনেছে। এই লেনদেনগুলো লোকালি এক্সিকিউট করে একটি আপডেট করা স্টেট ট্রাই তৈরি করা হয় যা পোস্ট-স্টেট হিসেবে পরিচিত। লেনদেনগুলো execution_payload-এ transactions নামক একটি তালিকা হিসেবে অন্তর্ভুক্ত করা হয় এবং পোস্ট-স্টেটটি state-root ফিল্ডে প্রদান করা হয়।

এই সমস্ত ডাটা একটি বিকন চেইন ব্লকে সংগ্রহ করা হয়, স্বাক্ষর করা হয় এবং ব্লক প্রপোজারের পিয়ারদের কাছে ব্রডকাস্ট করা হয়, যারা এটি তাদের পিয়ারদের কাছে প্রচার করে, ইত্যাদি।

ব্লকের অ্যানাটমি সম্পর্কে আরও পড়ুন।

ব্লকের কী হয়?

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

ব্লক রিওয়ার্ড

ব্লক প্রপোজার তাদের কাজের জন্য পেমেন্ট পায়। সক্রিয় ভ্যালিডেটরস এবং তাদের কার্যকরী ব্যালেন্সের সংখ্যার ওপর ভিত্তি করে একটি base_reward গণনা করা হয়। এরপর ব্লক প্রপোজার ব্লকে অন্তর্ভুক্ত প্রতিটি বৈধ এটেস্টেশনের জন্য base_reward-এর একটি ভগ্নাংশ পায়; যত বেশি ভ্যালিডেটরস ব্লকে এটেস্ট করে, ব্লক প্রপোজারের রিওয়ার্ড তত বেশি হয়। যেসব ভ্যালিডেটরদের স্ল্যাশ করা উচিত তাদের রিপোর্ট করার জন্যও একটি রিওয়ার্ড রয়েছে, যা প্রতিটি স্ল্যাশড ভ্যালিডেটরের জন্য 1/512 * effective balance-এর সমান।

রিওয়ার্ড এবং পেনাল্টি সম্পর্কে আরও জানুন

আরও পড়ুন

এই আর্টিকেলটি কি সহায়ক ছিল?