নেটওয়ার্কিং লেয়ার
ইথেরিয়াম হলো হাজার হাজার নোড বিশিষ্ট একটি পিয়ার-টু-পিয়ার নেটওয়ার্ক, যেগুলোকে অবশ্যই প্রমিত প্রোটোকল ব্যবহার করে একে অপরের সাথে যোগাযোগ করতে সক্ষম হতে হবে। "নেটওয়ার্কিং লেয়ার" হলো প্রোটোকলের এমন একটি স্ট্যাক যা এই নোডগুলোকে একে অপরকে খুঁজে পেতে এবং তথ্য আদান-প্রদান করতে দেয়। এর মধ্যে নেটওয়ার্কের মাধ্যমে তথ্য "গসিপিং" (একের-সাথে-অনেকের যোগাযোগ) করার পাশাপাশি নির্দিষ্ট নোডগুলোর মধ্যে অনুরোধ এবং প্রতিক্রিয়া বিনিময় (একের-সাথে-একের যোগাযোগ) অন্তর্ভুক্ত রয়েছে। প্রতিটি নোড সঠিক তথ্য পাঠাচ্ছে এবং গ্রহণ করছে তা নিশ্চিত করতে তাদের নির্দিষ্ট নেটওয়ার্কিং নিয়ম মেনে চলতে হবে।
ক্লায়েন্ট সফটওয়্যারের দুটি অংশ রয়েছে (এক্সিকিউশন ক্লায়েন্ট এবং কনসেনসাস ক্লায়েন্ট), যার প্রতিটির নিজস্ব আলাদা নেটওয়ার্কিং স্ট্যাক রয়েছে। অন্যান্য ইথেরিয়াম নোডের সাথে যোগাযোগ করার পাশাপাশি, এক্সিকিউশন এবং কনসেনসাস ক্লায়েন্টদের একে অপরের সাথেও যোগাযোগ করতে হয়। এই পৃষ্ঠাটি সেই প্রোটোকলগুলোর একটি প্রাথমিক ব্যাখ্যা দেয় যা এই যোগাযোগকে সক্ষম করে।
এক্সিকিউশন ক্লায়েন্টরা এক্সিকিউশন লেয়ার পিয়ার-টু-পিয়ার নেটওয়ার্কের মাধ্যমে ট্রানজ্যাকশন গসিপ করে। এর জন্য প্রমাণীকৃত পিয়ারদের মধ্যে এনক্রিপ্ট করা যোগাযোগ প্রয়োজন। যখন কোনো ভ্যালিডেটরকে একটি ব্লক প্রস্তাব করার জন্য নির্বাচন করা হয়, তখন নোডের স্থানীয় লেনদেন পুল থেকে ট্রানজ্যাকশনগুলো একটি স্থানীয় RPC সংযোগের মাধ্যমে কনসেনসাস ক্লায়েন্টদের কাছে পাঠানো হবে, যা বিকন ব্লক-এ প্যাকেজ করা হবে। এরপর কনসেনসাস ক্লায়েন্টরা তাদের p2p নেটওয়ার্ক জুড়ে বিকন ব্লক গসিপ করবে। এর জন্য দুটি আলাদা p2p নেটওয়ার্ক প্রয়োজন: একটি ট্রানজ্যাকশন গসিপের জন্য এক্সিকিউশন ক্লায়েন্টদের সংযুক্ত করে এবং অন্যটি ব্লক গসিপের জন্য কনসেনসাস ক্লায়েন্টদের সংযুক্ত করে।
পূর্বশর্ত
এই পৃষ্ঠাটি বোঝার জন্য ইথেরিয়াম নোড এবং ক্লায়েন্ট সম্পর্কে কিছু জ্ঞান থাকা সহায়ক হবে।
এক্সিকিউশন লেয়ার
এক্সিকিউশন লেয়ারের নেটওয়ার্কিং প্রোটোকল দুটি স্ট্যাকে বিভক্ত:
-
ডিসকভারি স্ট্যাক: UDP-এর ওপর তৈরি এবং এটি একটি নতুন নোডকে সংযুক্ত হওয়ার জন্য পিয়ার খুঁজে পেতে দেয়
-
devp2p স্ট্যাক: TCP-এর ওপর থাকে এবং নোডগুলোকে তথ্য আদান-প্রদান করতে সক্ষম করে
উভয় স্ট্যাক সমান্তরালভাবে কাজ করে। ডিসকভারি স্ট্যাক নতুন নেটওয়ার্ক অংশগ্রহণকারীদের নেটওয়ার্কে যুক্ত করে এবং devp2p স্ট্যাক তাদের মিথস্ক্রিয়া সক্ষম করে।
ডিসকভারি
ডিসকভারি হলো নেটওয়ার্কে অন্যান্য নোড খুঁজে বের করার প্রক্রিয়া। এটি বুটনোড-এর একটি ছোট সেটের মাধ্যমে বুটস্ট্র্যাপ করা হয় (যে নোডগুলোর ঠিকানা ক্লায়েন্টে হার্ডকোড (একটি নতুন ট্যাবে খোলে) করা থাকে যাতে তাদের অবিলম্বে খুঁজে পাওয়া যায় এবং ক্লায়েন্টকে পিয়ারদের সাথে সংযুক্ত করা যায়)। এই বুটনোডগুলোর অস্তিত্ব কেবল একটি নতুন নোডকে একদল পিয়ারের সাথে পরিচয় করিয়ে দেওয়ার জন্যই থাকে - এটিই তাদের একমাত্র উদ্দেশ্য, তারা চেইন সিঙ্কিং-এর মতো সাধারণ ক্লায়েন্ট কাজগুলোতে অংশগ্রহণ করে না এবং এগুলো কেবল তখনই ব্যবহৃত হয় যখন কোনো ক্লায়েন্ট প্রথমবারের মতো চালু করা হয়।
নোড-বুটনোড মিথস্ক্রিয়ার জন্য ব্যবহৃত প্রোটোকলটি হলো Kademlia (একটি নতুন ট্যাবে খোলে)-এর একটি পরিবর্তিত রূপ যা নোডগুলোর তালিকা শেয়ার করতে একটি ডিস্ট্রিবিউটেড হ্যাশ টেবিল (একটি নতুন ট্যাবে খোলে) ব্যবহার করে। প্রতিটি নোডের কাছে এই টেবিলের একটি সংস্করণ থাকে যাতে এর নিকটতম পিয়ারদের সাথে সংযুক্ত হওয়ার জন্য প্রয়োজনীয় তথ্য থাকে। এই 'নৈকট্য' ভৌগোলিক নয় - দূরত্ব নোডের আইডির সাদৃশ্য দ্বারা সংজ্ঞায়িত করা হয়। নিরাপত্তা বৈশিষ্ট্য হিসেবে প্রতিটি নোডের টেবিল নিয়মিত রিফ্রেশ করা হয়। উদাহরণস্বরূপ, discv5 (একটি নতুন ট্যাবে খোলে)-এ, ডিসকভারি প্রোটোকল নোডগুলো 'বিজ্ঞাপন' পাঠাতেও সক্ষম যা ক্লায়েন্ট সমর্থন করে এমন সাবপ্রোটোকলগুলো প্রদর্শন করে, যার ফলে পিয়াররা এমন প্রোটোকলগুলো নিয়ে আলোচনা করতে পারে যা তারা উভয়েই যোগাযোগের জন্য ব্যবহার করতে পারে।
ডিসকভারি শুরু হয় PING-PONG-এর একটি খেলার মাধ্যমে। একটি সফল PING-PONG নতুন নোডটিকে একটি বুটনোডের সাথে "যুক্ত" (bond) করে। নেটওয়ার্কে প্রবেশ করা একটি নতুন নোডের অস্তিত্ব সম্পর্কে বুটনোডকে সতর্ক করার প্রাথমিক বার্তাটি হলো একটি PING। এই PING-এ নতুন নোড, বুটনোড এবং একটি মেয়াদোত্তীর্ণের টাইম-স্ট্যাম্প সম্পর্কে হ্যাশ করা তথ্য অন্তর্ভুক্ত থাকে। বুটনোড PING গ্রহণ করে এবং PING হ্যাশ ধারণকারী একটি PONG ফেরত দেয়। যদি PING এবং PONG হ্যাশ মিলে যায় তবে নতুন নোড এবং বুটনোডের মধ্যে সংযোগ যাচাই করা হয় এবং বলা হয় যে তারা "যুক্ত" হয়েছে।
একবার যুক্ত হয়ে গেলে, নতুন নোডটি বুটনোডে একটি FIND-NEIGHBOURS অনুরোধ পাঠাতে পারে। বুটনোড দ্বারা ফেরত দেওয়া ডেটাতে এমন পিয়ারদের একটি তালিকা অন্তর্ভুক্ত থাকে যাদের সাথে নতুন নোডটি সংযুক্ত হতে পারে। যদি নোডগুলো যুক্ত না হয়, তবে FIND-NEIGHBOURS অনুরোধটি ব্যর্থ হবে, তাই নতুন নোডটি নেটওয়ার্কে প্রবেশ করতে পারবে না।
একবার নতুন নোডটি বুটনোড থেকে প্রতিবেশীদের একটি তালিকা পেয়ে গেলে, এটি তাদের প্রত্যেকের সাথে একটি PING-PONG বিনিময় শুরু করে। সফল PING-PONG নতুন নোডটিকে তার প্রতিবেশীদের সাথে যুক্ত করে, যা বার্তা বিনিময় সক্ষম করে।
start client --> connect to bootnode --> bond to bootnode --> find neighbours --> bond to neighbours
এক্সিকিউশন ক্লায়েন্টরা বর্তমানে Discv4 (একটি নতুন ট্যাবে খোলে) ডিসকভারি প্রোটোকল ব্যবহার করছে এবং discv5 (একটি নতুন ট্যাবে খোলে) প্রোটোকলে স্থানান্তরিত হওয়ার জন্য একটি সক্রিয় প্রচেষ্টা চলছে।
ENR: ইথেরিয়াম নোড রেকর্ডস
ইথেরিয়াম নোড রেকর্ড (ENR) হলো এমন একটি অবজেক্ট যাতে তিনটি মৌলিক উপাদান থাকে: একটি স্বাক্ষর (কিছু সম্মত পরিচয় স্কিম অনুযায়ী তৈরি রেকর্ড বিষয়বস্তুর হ্যাশ), একটি সিকোয়েন্স নম্বর যা রেকর্ডের পরিবর্তনগুলো ট্র্যাক করে এবং key:value জোড়ার একটি ইচ্ছামতো তালিকা। এটি একটি ভবিষ্যৎ-প্রমাণিত (future-proof) ফর্ম্যাট যা নতুন পিয়ারদের মধ্যে শনাক্তকারী তথ্যের সহজ বিনিময়ের অনুমতি দেয় এবং এটি ইথেরিয়াম নোডগুলোর জন্য পছন্দের নেটওয়ার্ক ঠিকানা ফর্ম্যাট।
ডিসকভারি কেন UDP-এর ওপর তৈরি?
UDP কোনো ত্রুটি পরীক্ষা, ব্যর্থ প্যাকেট পুনরায় পাঠানো, বা গতিশীলভাবে সংযোগ খোলা এবং বন্ধ করা সমর্থন করে না - এর পরিবর্তে এটি কেবল একটি লক্ষ্যের দিকে তথ্যের একটি অবিচ্ছিন্ন প্রবাহ ছুঁড়ে দেয়, তা সফলভাবে গৃহীত হোক বা না হোক। এই ন্যূনতম কার্যকারিতা ন্যূনতম ওভারহেডেও রূপান্তরিত হয়, যা এই ধরনের সংযোগকে খুব দ্রুত করে তোলে। ডিসকভারির জন্য, যেখানে একটি নোড কেবল একটি পিয়ারের সাথে একটি আনুষ্ঠানিক সংযোগ স্থাপন করার জন্য তার উপস্থিতি জানাতে চায়, সেখানে UDP যথেষ্ট। তবে, নেটওয়ার্কিং স্ট্যাকের বাকি অংশের জন্য, UDP উপযুক্ত নয়। নোডগুলোর মধ্যে তথ্য বিনিময় বেশ জটিল এবং তাই এমন একটি আরও সম্পূর্ণ বৈশিষ্ট্যযুক্ত প্রোটোকল প্রয়োজন যা পুনরায় পাঠানো, ত্রুটি পরীক্ষা ইত্যাদি সমর্থন করতে পারে। TCP-এর সাথে যুক্ত অতিরিক্ত ওভারহেড অতিরিক্ত কার্যকারিতার জন্য সার্থক। তাই, P2P স্ট্যাকের বেশিরভাগ অংশ TCP-এর ওপর কাজ করে।
devp2p
devp2p নিজেই প্রোটোকলগুলোর একটি সম্পূর্ণ স্ট্যাক যা ইথেরিয়াম পিয়ার-টু-পিয়ার নেটওয়ার্ক স্থাপন এবং বজায় রাখার জন্য প্রয়োগ করে। নতুন নোডগুলো নেটওয়ার্কে প্রবেশ করার পর, তাদের মিথস্ক্রিয়াগুলো devp2p (একটি নতুন ট্যাবে খোলে) স্ট্যাকের প্রোটোকল দ্বারা নিয়ন্ত্রিত হয়। এগুলো সবই TCP-এর ওপর থাকে এবং এর মধ্যে RLPx ট্রান্সপোর্ট প্রোটোকল, ওয়্যার প্রোটোকল এবং বেশ কয়েকটি সাব-প্রোটোকল অন্তর্ভুক্ত রয়েছে। RLPx (একটি নতুন ট্যাবে খোলে) হলো নোডগুলোর মধ্যে সেশন শুরু, প্রমাণীকরণ এবং বজায় রাখার নিয়ন্ত্রক প্রোটোকল। RLPx RLP (Recursive Length Prefix) ব্যবহার করে বার্তা এনকোড করে যা নোডগুলোর মধ্যে পাঠানোর জন্য ডেটাকে একটি ন্যূনতম কাঠামোতে এনকোড করার একটি খুব স্থান-সাশ্রয়ী পদ্ধতি।
দুটি নোডের মধ্যে একটি RLPx সেশন একটি প্রাথমিক ক্রিপ্টোগ্রাফিক হ্যান্ডশেক দিয়ে শুরু হয়। এর মধ্যে নোডটি একটি প্রমাণীকরণ (auth) বার্তা পাঠায় যা পরে পিয়ার দ্বারা যাচাই করা হয়। সফল যাচাইকরণের পর, পিয়ার সূচনাকারী নোডে ফিরে যাওয়ার জন্য একটি প্রমাণীকরণ-স্বীকৃতি (auth-acknowledgement) বার্তা তৈরি করে। এটি একটি কী-বিনিময় প্রক্রিয়া যা নোডগুলোকে ব্যক্তিগতভাবে এবং নিরাপদে যোগাযোগ করতে সক্ষম করে। একটি সফল ক্রিপ্টোগ্রাফিক হ্যান্ডশেক এরপর উভয় নোডকে "অন দ্য ওয়্যার" একে অপরকে একটি "hello" বার্তা পাঠাতে ট্রিগার করে। ওয়্যার প্রোটোকলটি hello বার্তাগুলোর একটি সফল বিনিময়ের মাধ্যমে শুরু হয়।
hello বার্তাগুলোতে থাকে:
- প্রোটোকল সংস্করণ
- ক্লায়েন্ট আইডি
- পোর্ট
- নোড আইডি
- সমর্থিত সাব-প্রোটোকলগুলোর তালিকা
এটি একটি সফল মিথস্ক্রিয়ার জন্য প্রয়োজনীয় তথ্য কারণ এটি সংজ্ঞায়িত করে যে উভয় নোডের মধ্যে কোন ক্ষমতাগুলো শেয়ার করা হয়েছে এবং যোগাযোগ কনফিগার করে। সাব-প্রোটোকল আলোচনার একটি প্রক্রিয়া রয়েছে যেখানে প্রতিটি নোড দ্বারা সমর্থিত সাব-প্রোটোকলগুলোর তালিকা তুলনা করা হয় এবং যেগুলো উভয় নোডের জন্য সাধারণ সেগুলো সেশনে ব্যবহার করা যেতে পারে।
hello বার্তাগুলোর পাশাপাশি, ওয়্যার প্রোটোকল একটি "disconnect" বার্তাও পাঠাতে পারে যা একটি পিয়ারকে সতর্ক করে যে সংযোগটি বন্ধ হয়ে যাবে। ওয়্যার প্রোটোকলে PING এবং PONG বার্তাও অন্তর্ভুক্ত থাকে যা একটি সেশন খোলা রাখার জন্য পর্যায়ক্রমে পাঠানো হয়। তাই RLPx এবং ওয়্যার প্রোটোকল বিনিময় নোডগুলোর মধ্যে যোগাযোগের ভিত্তি স্থাপন করে, একটি নির্দিষ্ট সাব-প্রোটোকল অনুযায়ী দরকারী তথ্য বিনিময়ের জন্য কাঠামো প্রদান করে।
সাব-প্রোটোকল
ওয়্যার প্রোটোকল
একবার পিয়াররা সংযুক্ত হয়ে গেলে এবং একটি RLPx সেশন শুরু হলে, ওয়্যার প্রোটোকল সংজ্ঞায়িত করে যে পিয়াররা কীভাবে যোগাযোগ করবে। প্রাথমিকভাবে, ওয়্যার প্রোটোকল তিনটি প্রধান কাজ সংজ্ঞায়িত করেছিল: চেইন সিঙ্কিং, ব্লক সম্প্রসারণ এবং ট্রানজ্যাকশন বিনিময়। তবে, ইথেরিয়াম প্রুফ-অফ-স্টেক (PoS)-এ স্যুইচ করার পর, ব্লক সম্প্রসারণ এবং চেইন সিঙ্কিং কনসেনসাস লেয়ার-এর অংশ হয়ে ওঠে। ট্রানজ্যাকশন বিনিময় এখনও এক্সিকিউশন ক্লায়েন্টদের আওতাভুক্ত। ট্রানজ্যাকশন বিনিময় বলতে নোডগুলোর মধ্যে অপেক্ষমাণ ট্রানজ্যাকশন বিনিময় করা বোঝায় যাতে ব্লক নির্মাতারা পরবর্তী ব্লকে অন্তর্ভুক্তির জন্য সেগুলোর মধ্যে কিছু নির্বাচন করতে পারে। এই কাজগুলো সম্পর্কে বিস্তারিত তথ্য এখানে (একটি নতুন ট্যাবে খোলে) পাওয়া যায়। যে ক্লায়েন্টরা এই সাব-প্রোটোকলগুলো সমর্থন করে তারা সেগুলোকে জেসন-আরপিসি-এর মাধ্যমে প্রকাশ করে।
les (লাইট ইথেরিয়াম সাবপ্রোটোকল)
এটি লাইট ক্লায়েন্ট সিঙ্কিং করার জন্য একটি ন্যূনতম প্রোটোকল। ঐতিহ্যগতভাবে এই প্রোটোকলটি খুব কমই ব্যবহৃত হয়েছে কারণ ফুল নোডগুলোকে কোনো প্রণোদনা ছাড়াই লাইট ক্লায়েন্টদের ডেটা পরিবেশন করতে হয়। এক্সিকিউশন ক্লায়েন্টদের ডিফল্ট আচরণ হলো les-এর মাধ্যমে লাইট ক্লায়েন্ট ডেটা পরিবেশন না করা। আরও তথ্য les স্পেক (একটি নতুন ট্যাবে খোলে)-এ পাওয়া যায়।
স্ন্যাপ (Snap)
স্ন্যাপ প্রোটোকল (একটি নতুন ট্যাবে খোলে) হলো একটি ঐচ্ছিক এক্সটেনশন যা পিয়ারদের সাম্প্রতিক স্টেট-এর স্ন্যাপশট বিনিময় করতে দেয়, যার ফলে পিয়াররা মধ্যবর্তী মার্কেল ট্রাই (Merkle trie) নোডগুলো ডাউনলোড না করেই অ্যাকাউন্ট এবং স্টোরেজ ডেটা যাচাই করতে পারে।
Wit (সাক্ষী প্রোটোকল)
সাক্ষী প্রোটোকল (একটি নতুন ট্যাবে খোলে) হলো একটি ঐচ্ছিক এক্সটেনশন যা পিয়ারদের মধ্যে স্টেট সাক্ষী বিনিময় করতে সক্ষম করে, যা ক্লায়েন্টদের চেইনের টিপ-এ সিঙ্কিং করতে সাহায্য করে।
হুইস্পার (Whisper)
হুইস্পার ছিল এমন একটি প্রোটোকল যার লক্ষ্য ছিল ব্লকচেইন-এ কোনো তথ্য না লিখেই পিয়ারদের মধ্যে নিরাপদ মেসেজিং প্রদান করা। এটি devp2p ওয়্যার প্রোটোকলের অংশ ছিল কিন্তু এখন এটি বাতিল (deprecated) করা হয়েছে। একই ধরনের লক্ষ্য নিয়ে অন্যান্য সম্পর্কিত প্রকল্প (একটি নতুন ট্যাবে খোলে) বিদ্যমান রয়েছে।
কনসেনসাস লেয়ার
কনসেনসাস ক্লায়েন্টরা একটি ভিন্ন স্পেসিফিকেশন সহ একটি পৃথক পিয়ার-টু-পিয়ার নেটওয়ার্কে অংশগ্রহণ করে। কনসেনসাস ক্লায়েন্টদের ব্লক গসিপে অংশগ্রহণ করতে হয় যাতে তারা পিয়ারদের কাছ থেকে নতুন ব্লক গ্রহণ করতে পারে এবং যখন তাদের ব্লক প্রস্তাবক হওয়ার পালা আসে তখন সেগুলো সম্প্রচার করতে পারে। এক্সিকিউশন লেয়ারের মতো, এর জন্য প্রথমে একটি ডিসকভারি প্রোটোকল প্রয়োজন যাতে একটি নোড পিয়ার খুঁজে পেতে পারে এবং ব্লক, সত্যায়ন ইত্যাদি বিনিময়ের জন্য নিরাপদ সেশন স্থাপন করতে পারে।
ডিসকভারি
এক্সিকিউশন ক্লায়েন্টদের মতো, কনসেনসাস ক্লায়েন্টরা পিয়ার খোঁজার জন্য UDP-এর ওপর discv5 (একটি নতুন ট্যাবে খোলে) ব্যবহার করে। discv5-এর কনসেনসাস লেয়ার বাস্তবায়ন এক্সিকিউশন ক্লায়েন্টদের থেকে কেবল এই দিক থেকে আলাদা যে এটিতে discv5-কে একটি libp2p (একটি নতুন ট্যাবে খোলে) স্ট্যাকের সাথে সংযুক্ত করার জন্য একটি অ্যাডাপ্টর অন্তর্ভুক্ত থাকে, যা devp2p-কে বাতিল করে। এক্সিকিউশন লেয়ারের RLPx সেশনগুলো libp2p-এর নয়েজ সিকিউর চ্যানেল হ্যান্ডশেকের পক্ষে বাতিল করা হয়েছে।
ENRs
কনসেনসাস নোডগুলোর জন্য ENR-এ নোডের পাবলিক কী, আইপি ঠিকানা, UDP এবং TCP পোর্ট এবং দুটি কনসেনসাস-নির্দিষ্ট ফিল্ড অন্তর্ভুক্ত থাকে: সত্যায়ন সাবনেট বিটফিল্ড এবং eth2 কী। প্রথমটি নোডগুলোর জন্য নির্দিষ্ট সত্যায়ন গসিপ সাব-নেটওয়ার্কগুলোতে অংশগ্রহণকারী পিয়ারদের খুঁজে পাওয়া সহজ করে তোলে। eth2 কী-তে নোডটি কোন ইথেরিয়াম ফর্ক সংস্করণ ব্যবহার করছে সে সম্পর্কে তথ্য থাকে, যা নিশ্চিত করে যে পিয়াররা সঠিক ইথেরিয়ামের সাথে সংযুক্ত হচ্ছে।
libp2p
libp2p স্ট্যাক ডিসকভারির পর সমস্ত যোগাযোগ সমর্থন করে। ক্লায়েন্টরা তাদের ENR-এ সংজ্ঞায়িত অনুযায়ী IPv4 এবং/অথবা IPv6-এ ডায়াল করতে এবং শুনতে পারে। libp2p লেয়ারের প্রোটোকলগুলোকে গসিপ এবং req/resp (অনুরোধ/প্রতিক্রিয়া) ডোমেনে উপবিভক্ত করা যেতে পারে।
গসিপ
গসিপ ডোমেনে এমন সমস্ত তথ্য অন্তর্ভুক্ত থাকে যা নেটওয়ার্ক জুড়ে দ্রুত ছড়িয়ে পড়তে হয়। এর মধ্যে বিকন ব্লক, প্রমাণ, সত্যায়ন, প্রস্থান (exits) এবং স্ল্যাশিং (slashings) অন্তর্ভুক্ত রয়েছে। এটি libp2p gossipsub v1 ব্যবহার করে প্রেরণ করা হয় এবং প্রতিটি নোডে স্থানীয়ভাবে সংরক্ষিত বিভিন্ন মেটাডেটা-এর ওপর নির্ভর করে, যার মধ্যে গ্রহণ এবং প্রেরণ করার জন্য গসিপ পেলোডগুলোর সর্বোচ্চ আকার অন্তর্ভুক্ত। গসিপ ডোমেন সম্পর্কে বিস্তারিত তথ্য এখানে (একটি নতুন ট্যাবে খোলে) পাওয়া যায়।
অনুরোধ-প্রতিক্রিয়া
অনুরোধ-প্রতিক্রিয়া ডোমেনে ক্লায়েন্টদের তাদের পিয়ারদের কাছ থেকে নির্দিষ্ট তথ্যের অনুরোধ করার জন্য প্রোটোকল থাকে। উদাহরণগুলোর মধ্যে নির্দিষ্ট রুট হ্যাশগুলোর সাথে মিলে যাওয়া বা স্লটগুলোর একটি রেঞ্জের মধ্যে নির্দিষ্ট বিকন ব্লক-এর অনুরোধ করা অন্তর্ভুক্ত। প্রতিক্রিয়াগুলো সর্বদা স্ন্যাপি-কম্প্রেসড (snappy-compressed) SSZ এনকোড করা বাইট হিসেবে ফেরত দেওয়া হয়।
কনসেনসাস ক্লায়েন্ট কেন RLP-এর চেয়ে SSZ পছন্দ করে?
SSZ মানে হলো সিম্পল সিরিয়ালাইজেশন। এটি নির্দিষ্ট অফসেট ব্যবহার করে যা সম্পূর্ণ কাঠামো ডিকোড না করেই একটি এনকোড করা বার্তার পৃথক অংশগুলো ডিকোড করা সহজ করে তোলে, যা কনসেনসাস ক্লায়েন্ট-এর জন্য খুব দরকারী কারণ এটি এনকোড করা বার্তাগুলো থেকে দক্ষতার সাথে নির্দিষ্ট তথ্যের টুকরো সংগ্রহ করতে পারে। এটি বিশেষভাবে মার্কেল প্রোটোকলগুলোর সাথে একীভূত করার জন্যও ডিজাইন করা হয়েছে, যার ফলে মার্কেলিজেশনের (Merkleization) জন্য সম্পর্কিত দক্ষতার লাভ হয়। যেহেতু কনসেনসাস লেয়ার-এর সমস্ত হ্যাশ হলো মার্কেল রুট, তাই এটি একটি উল্লেখযোগ্য উন্নতি যোগ করে। SSZ মানগুলোর অনন্য উপস্থাপনারও নিশ্চয়তা দেয়।
এক্সিকিউশন এবং কনসেনসাস ক্লায়েন্টদের সংযুক্ত করা
কনসেনসাস এবং এক্সিকিউশন ক্লায়েন্ট উভয়ই সমান্তরালভাবে চলে। তাদের সংযুক্ত করা প্রয়োজন যাতে কনসেনসাস ক্লায়েন্ট এক্সিকিউশন ক্লায়েন্টকে নির্দেশাবলী প্রদান করতে পারে এবং এক্সিকিউশন ক্লায়েন্ট বিকন ব্লক-এ অন্তর্ভুক্ত করার জন্য কনসেনসাস ক্লায়েন্টের কাছে ট্রানজ্যাকশন-এর বান্ডিল পাঠাতে পারে। দুটি ক্লায়েন্টের মধ্যে যোগাযোগ একটি স্থানীয় RPC সংযোগ ব্যবহার করে অর্জন করা যেতে পারে। 'Engine-API' (একটি নতুন ট্যাবে খোলে) নামে পরিচিত একটি API দুটি ক্লায়েন্টের মধ্যে পাঠানো নির্দেশাবলী সংজ্ঞায়িত করে। যেহেতু উভয় ক্লায়েন্ট একটি একক নেটওয়ার্ক পরিচয়ের পিছনে থাকে, তাই তারা একটি ENR (ইথেরিয়াম নোড রেকর্ড) শেয়ার করে যাতে প্রতিটি ক্লায়েন্টের জন্য একটি পৃথক কী থাকে (ইথ১ কী এবং ইথ২ কী)।
যখন কনসেনসাস ক্লায়েন্ট ব্লক উৎপাদক নয়:
- কনসেনসাস ক্লায়েন্ট ব্লক গসিপ প্রোটোকলের (কনসেনসাস p2p) মাধ্যমে একটি ব্লক গ্রহণ করে
- কনসেনসাস ক্লায়েন্ট ব্লকটিকে প্রাক-যাচাই করে, অর্থাৎ, নিশ্চিত করে যে এটি সঠিক মেটাডেটা সহ একজন বৈধ প্রেরকের কাছ থেকে এসেছে
- ব্লকের ট্রানজ্যাকশনগুলো এক্সিকিউশন পেলোড হিসেবে এক্সিকিউশন লেয়ার-এ পাঠানো হয় (স্থানীয় RPC সংযোগ)
- এক্সিকিউশন লেয়ার ট্রানজ্যাকশনগুলো সম্পাদন করে এবং ব্লক হেডার-এ স্টেট যাচাই করে (অর্থাৎ, হ্যাশগুলো মেলে কিনা তা পরীক্ষা করে)
- এক্সিকিউশন লেয়ার যাচাইকরণ ডেটা কনসেনসাস লেয়ার-এ ফেরত পাঠায়, ব্লকটিকে এখন যাচাইকৃত বলে মনে করা হয় (স্থানীয় RPC সংযোগ)
- কনসেনসাস লেয়ার ব্লকটিকে তার নিজস্ব ব্লকচেইন-এর মাথায় যোগ করে এবং এটিকে সত্যায়ন করে, নেটওয়ার্কের মাধ্যমে সত্যায়ন সম্প্রচার করে (কনসেনসাস p2p)
যখন কনসেনসাস ক্লায়েন্ট ব্লক উৎপাদক হয়:
- কনসেনসাস ক্লায়েন্ট নোটিশ পায় যে এটি পরবর্তী ব্লক উৎপাদক (কনসেনসাস p2p)
- কনসেনসাস লেয়ার এক্সিকিউশন ক্লায়েন্টে
create blockমেথড কল করে (স্থানীয় RPC) - এক্সিকিউশন লেয়ার ট্রানজ্যাকশন মেমপুল অ্যাক্সেস করে যা ট্রানজ্যাকশন গসিপ প্রোটোকল দ্বারা পূর্ণ করা হয়েছে (এক্সিকিউশন p2p)
- এক্সিকিউশন ক্লায়েন্ট ট্রানজ্যাকশনগুলোকে একটি ব্লকে বান্ডিল করে, ট্রানজ্যাকশনগুলো সম্পাদন করে এবং একটি ব্লক হ্যাশ তৈরি করে
- কনসেনসাস ক্লায়েন্ট এক্সিকিউশন ক্লায়েন্ট থেকে ট্রানজ্যাকশন এবং ব্লক হ্যাশ সংগ্রহ করে এবং সেগুলোকে বিকন ব্লক-এ যোগ করে (স্থানীয় RPC)
- কনসেনসাস ক্লায়েন্ট ব্লক গসিপ প্রোটোকলের মাধ্যমে ব্লকটি সম্প্রচার করে (কনসেনসাস p2p)
- অন্যান্য ক্লায়েন্টরা ব্লক গসিপ প্রোটোকলের মাধ্যমে প্রস্তাবিত ব্লকটি গ্রহণ করে এবং উপরে বর্ণিত হিসাবে যাচাই করে (কনসেনসাস p2p)
একবার ব্লকটি পর্যাপ্ত ভ্যালিডেটর দ্বারা সত্যায়িত হয়ে গেলে এটি চেইনের মাথায় যোগ করা হয়, জাস্টিফাইড হয় এবং শেষ পর্যন্ত চূড়ান্তকৃত হয়।
কনসেনসাস এবং এক্সিকিউশন ক্লায়েন্টদের জন্য নেটওয়ার্ক লেয়ার স্কিম্যাটিক, ethresear.ch (একটি নতুন ট্যাবে খোলে) থেকে
আরও পড়ুন
devp2p (একটি নতুন ট্যাবে খোলে) libp2p (একটি নতুন ট্যাবে খোলে) কনসেনসাস লেয়ার নেটওয়ার্ক স্পেকস (একটি নতুন ট্যাবে খোলে) kademlia থেকে discv5 (একটি নতুন ট্যাবে খোলে) kademlia পেপার (একটি নতুন ট্যাবে খোলে) ইথেরিয়াম p2p পরিচিতি (একটি নতুন ট্যাবে খোলে) ইথ১/ইথ২ সম্পর্ক (একটি নতুন ট্যাবে খোলে) মার্জ এবং ইথ২ ক্লায়েন্ট বিস্তারিত ভিডিও (একটি নতুন ট্যাবে খোলে)

