স্মার্ট চুক্তি শোডাউন: হাইপারলেজার ফ্যাব্রিক বনাম মাল্টিচেইন বনাম ইথেরিয়াম বনাম কর্ডা

উত্স নোড: 1585333

ব্লকচেইনে কোড রাখার একাধিক উপায় আছে

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

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

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

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

ব্লকচেইন বেসিক

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

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

নোডগুলি পিয়ার-টু-পিয়ার ফ্যাশনে একে অপরের সাথে সংযোগ স্থাপন করে, দ্রুত লেনদেন প্রচার করে এবং "ব্লক" যাতে তারা টাইমস্ট্যাম্প হয় এবং নেটওয়ার্ক জুড়ে নিশ্চিত হয়। ব্লকচেন নিজেই আক্ষরিক অর্থে এই ব্লকগুলির একটি চেইন, যা প্রতিটি ঐতিহাসিক লেনদেনের একটি অর্ডারযুক্ত লগ গঠন করে। কেন্দ্রীভূত নিয়ন্ত্রণের প্রয়োজন ছাড়াই ব্লকচেইনের বিষয়বস্তুতে সমস্ত নোড চুক্তিতে পৌঁছেছে তা নিশ্চিত করতে একটি "ঐক্যমত্য অ্যালগরিদম" ব্যবহার করা হয়। (উল্লেখ্য যে এই বর্ণনার কিছু অংশ Corda-তে প্রযোজ্য নয়, যেখানে প্রতিটি নোডে ডাটাবেসের একটি আংশিক কপি থাকে এবং সেখানে কোনো গ্লোবাল ব্লকচেইন নেই। আমরা সে সম্পর্কে পরে আরও কথা বলব।)

নীতিগতভাবে, যেকোনো ভাগ করা ডাটাবেস অ্যাপ্লিকেশনের মূল অংশে একটি ব্লকচেইন ব্যবহার করে আর্কিটেক্ট করা যেতে পারে। কিন্তু এটি করার ফলে অনেকগুলি প্রযুক্তিগত চ্যালেঞ্জ তৈরি হয় যা একটি কেন্দ্রীভূত পরিস্থিতিতে বিদ্যমান নেই:

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

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

আসুন লেনদেনের নিয়মগুলি দিয়ে শুরু করি, এই চ্যালেঞ্জগুলির মধ্যে প্রথমটি, এবং দেখুন কিভাবে সেগুলি যথাক্রমে Fabric, MultiChain, Ethereum এবং Corda-এ প্রকাশ করা হয়।

লেনদেনের নিয়ম

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

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

ইনপুট এবং আউটপুট

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

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

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

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

চুক্তি এবং বার্তা

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

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

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

উদাহরণ নিয়ম

এই দুটি মডেলের সাথে একটি একক-সম্পদ আর্থিক খাতার জন্য লেনদেনের নিয়মগুলি কীভাবে বাস্তবায়ন করা যায় তা দেখা যাক৷ আমাদের লেজারের ডাটাবেসের প্রতিটি সারিতে দুটি কলাম রয়েছে, যাতে মালিকের ঠিকানা এবং মালিকানাধীন সম্পদের পরিমাণ থাকে। ইনপুট-আউটপুট মডেলে, লেনদেন দুটি শর্ত পূরণ করতে হবে:

  1. একটি লেনদেনের আউটপুটে সম্পদের মোট পরিমাণ তার ইনপুটগুলির মোটের সাথে মিলতে হবে। এটি ব্যবহারকারীদের নির্বিচারে অর্থ তৈরি বা মুছে ফেলতে বাধা দেয়।
  2. প্রতিটি লেনদেনের প্রতিটি ইনপুটের মালিক দ্বারা স্বাক্ষরিত হতে হবে। এটি ব্যবহারকারীদের অনুমতি ছাড়া একে অপরের অর্থ ব্যয় করা থেকে বিরত করে।

একত্রে নেওয়া, এই দুটি শর্ত যা একটি সহজ কিন্তু কার্যকর আর্থিক ব্যবস্থা তৈরি করার জন্য প্রয়োজন।

চুক্তি-বার্তা মডেলে, সম্পদের চুক্তি একটি "পেমেন্ট পাঠান" বার্তা সমর্থন করে, যা তিনটি পরামিতি নেয়: প্রেরকের ঠিকানা, প্রাপকের ঠিকানা এবং পাঠানোর পরিমাণ। প্রতিক্রিয়া হিসাবে, চুক্তিটি নিম্নলিখিত চারটি পদক্ষেপ সম্পাদন করে:

  1. লেনদেনটি প্রেরকের দ্বারা স্বাক্ষরিত হয়েছে তা যাচাই করুন৷
  2. প্রেরকের পর্যাপ্ত তহবিল আছে কিনা পরীক্ষা করুন।
  3. প্রেরকের সারি থেকে অনুরোধকৃত পরিমাণ কেটে নিন।
  4. প্রাপকের সারিতে সেই পরিমাণ যোগ করুন।

প্রথম দুটি ধাপের যেকোনো একটি চেক ব্যর্থ হলে, চুক্তি বাতিল হয়ে যাবে এবং কোনো অর্থপ্রদান করা হবে না।

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

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

অন্তর্নির্মিত নিয়ম

যখন লেনদেনের নিয়মের কথা আসে, তখন এমন একটি উপায় রয়েছে যেখানে মাল্টিচেইন বিশেষভাবে ফ্যাব্রিক, ইথেরিয়াম এবং কর্ডা থেকে আলাদা। এই অন্যান্য প্ল্যাটফর্মগুলির বিপরীতে, মাল্টিচেইনের বেশ কয়েকটি অন্তর্নির্মিত বিমূর্ততা রয়েছে যা ব্লকচেইন-চালিত অ্যাপ্লিকেশনগুলির জন্য কিছু মৌলিক বিল্ডিং ব্লক সরবরাহ করে প্রয়োজন বিকাশকারীরা তাদের নিজস্ব কোড লিখতে। এই বিমূর্ততা তিনটি ক্ষেত্র কভার করে যা সাধারণত প্রয়োজন হয়: (a) গতিশীল অনুমতি, (b) স্থানান্তরযোগ্য সম্পদ, এবং (c) ডেটা স্টোরেজ।

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

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

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

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

লেনদেনের নিয়ম ফ্যাব্রিক মাল্টিচেইন Ethereum দড়ি
মডেল চুক্তি-বার্তা ইনপুট আউটপুট চুক্তি-বার্তা ইনপুট আউটপুট
অন্তর্নির্মিত ইন না অনুমতি +
সম্পদ + প্রবাহ
না না

নিয়তিবাদ

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

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

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

এখন দেখা যাক চুক্তি-বার্তা মডেলে ঐকমত্য ভেঙ্গে গেলে কী হয়। যদি দুটি নোডের একটি নির্দিষ্ট বার্তায় একটি চুক্তির প্রতিক্রিয়া কেমন হওয়া উচিত সে সম্পর্কে ভিন্ন মতামত থাকে, তাহলে এটি তাদের ডাটাবেসের বিষয়বস্তুতে পার্থক্য সৃষ্টি করতে পারে। এটি পরিবর্তে ভবিষ্যতের বার্তাগুলিতে চুক্তির প্রতিক্রিয়াকে প্রভাবিত করতে পারে, এতে অন্যান্য চুক্তিতে পাঠানো বার্তাগুলি সহ। শেষ ফলাফল হল ডাটাবেসের অবস্থার বিভিন্ন নোডের দৃষ্টিভঙ্গির মধ্যে ক্রমবর্ধমান ভিন্নতা। (ইথেরিয়াম ব্লকের "স্টেট রুট" ক্ষেত্রটি নিশ্চিত করে যে চুক্তির প্রতিক্রিয়াগুলির কোনও পার্থক্য অবিলম্বে একটি সম্পূর্ণ বিপর্যয়মূলক ব্লকচেইন ফর্কের দিকে নিয়ে যায়, সময়ের জন্য লুকিয়ে থাকার ঝুঁকির পরিবর্তে।)

অনির্ধারণবাদের উৎস

তাই ব্লকচেইন কোডে অ-নির্ধারণবাদ স্পষ্টতই একটি সমস্যা। কিন্তু গণনার মৌলিক বিল্ডিং ব্লকগুলি, যেমন পাটিগণিত, যদি নির্ধারক হয়, তাহলে আমাদের চিন্তা করার কী আছে? ওয়েল, এটা সক্রিয় আউট, বেশ কিছু জিনিস:

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

আমাদের চারটি ব্লকচেইন প্ল্যাটফর্ম এই সমস্যাগুলি এড়াতে বিভিন্ন পদ্ধতি ব্যবহার করে।

নির্ধারক মৃত্যুদন্ড

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

মাল্টিচেইন ফিল্টার এবং কর্ডা চুক্তি বিদ্যমান প্রোগ্রামিং ভাষা এবং রানটাইম পরিবেশকে অভিযোজিত করে একটি ভিন্ন পদ্ধতি বেছে নেয়। মাল্টিচেইন গুগলে চলমান জাভাস্ক্রিপ্ট ব্যবহার করে V8 ইঞ্জিন, যা ক্রোম ব্রাউজার এবং Node.js প্ল্যাটফর্মের মূলও গঠন করে, কিন্তু অ-নির্ধারণবাদের উৎসগুলি অক্ষম করে। একইভাবে, কর্ডা জাভা বা ব্যবহার করে Kotlin, উভয়ই "জাভা বাইটকোড" এ কম্পাইল করা হয়েছে যা একটি জাভা ভার্চুয়াল মেশিন ("JVM") এর মধ্যে কার্যকর করে। আপাতত, কর্ডা ওরাকলের স্ট্যান্ডার্ড নন-ডিটারমিনিস্টিক জেভিএম ব্যবহার করে, তবে একটি সংহত করার জন্য কাজ চলছে নির্ধারক সংস্করণ. ইতিমধ্যে, Corda চুক্তির বিকাশকারীদের অবশ্যই তাদের কোডে অ-নির্ধারণবাদের অনুমতি না দেওয়ার যত্ন নিতে হবে।

মাল্টিচেইন এবং কর্ডা দ্বারা নেওয়া বিবর্তনীয় পদ্ধতির সাথে ইথেরিয়ামের বিশুদ্ধতা কীভাবে তুলনা করে? Ethereum-এর প্রধান সুবিধা হল ঝুঁকি কমানো - একটি বিল্ট-ফর-পার্স ভার্চুয়াল মেশিনে অনির্ধারণবাদের একটি অজান্তে উৎস থাকার সম্ভাবনা কম। যদিও এই ধরনের যেকোন তত্ত্বাবধান একটি সফ্টওয়্যার আপডেট দ্বারা স্থির করা যেতে পারে, এটি যে কোনও চেইনের জন্য বিঘ্নিত হবে যা এটির মুখোমুখি হওয়ার পক্ষে যথেষ্ট দুর্ভাগ্যজনক ছিল। ইথেরিয়ামের সমস্যা, তবে, প্রোগ্রামিং ভাষা এবং রানটাইম পরিবেশের বিস্তৃত প্রেক্ষাপটে সলিডিটি এবং ইভিএম একটি ক্ষুদ্র এবং নবজাতক ইকোসিস্টেম গঠন করে। তুলনা করে, জাভাস্ক্রিপ্ট এবং জাভা হল Github এ শীর্ষ দুটি ভাষা, কোটি কোটি ডিজিটাল ডিভাইসে চালিত হয় এবং কয়েক দশক ধরে অপ্টিমাইজ করা রানটাইম আছে। সম্ভবত এই কারণেই পাবলিক ইথেরিয়াম ব্লকচেইন একটি রূপান্তর বিবেচনা করছে eWASM, উদীয়মান WebAssembly স্ট্যান্ডার্ডের একটি নির্ধারক কাঁটা।

অনুমোদন দ্বারা নির্ণয়বাদ

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

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

পার্থক্যটি স্পষ্ট করার জন্য, বেশিরভাগ ব্লকচেইন প্ল্যাটফর্মে নির্ণয়বাদ এই প্রশ্নের উপর ভিত্তি করে: "এই ডেটাতে এই কোড চালানোর ফলাফল কী?" - এবং আমাদের নিশ্চিত হওয়া দরকার যে প্রতিটি নোড একইভাবে এই প্রশ্নের উত্তর দেবে। বিপরীতে, ফ্যাব্রিকের নির্ণয়বাদ একটি ভিন্ন প্রশ্নের উপর ভিত্তি করে: "যথেষ্ট সমর্থনকারীরা কি এই ডেটাতে এই কোড চালানোর ফলাফলের সাথে একমত?" এটির উত্তর দেওয়া গণনার একটি সহজ বিষয়, এবং অ-নিয়ন্ত্রকতাবাদের জন্য কোনও জায়গা নেই।

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

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

নিয়তিবাদ ফ্যাব্রিক মাল্টিচেইন Ethereum দড়ি
মডেল প্রচারণাগুলির অভিযোজিত রানটাইম উদ্দেশ্য-নির্মিত VM অভিযোজিত রানটাইম
ভাষাসমূহ Go + Java + JavaScript জাভাস্ক্রিপ্ট ঘনত্ব জাভা + কোটলিন
কোড দৃশ্যমানতা প্রতিপক্ষ +
সমর্থনকারী
Blockchain Blockchain প্রতিপক্ষ +
নির্ভরশীল
জোরপূর্বক না হাঁ হাঁ না (আপাতত)

দ্বন্দ্ব প্রতিরোধ

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

দুটি মডেল

আমরা একসাথে এই সমস্যার জন্য MultiChain's এবং Corda এর পদ্ধতির গোষ্ঠীবদ্ধ করে শুরু করতে পারি। পূর্বে বর্ণিত হিসাবে, এই উভয়ই লেনদেন এবং তাদের নিয়মগুলি উপস্থাপনের জন্য একটি ইনপুট-আউটপুট মডেল ব্যবহার করে, যেখানে প্রতিটি লেনদেনের ইনপুট একটি পূর্ববর্তী লেনদেনের আউটপুট ব্যয় করে। এটি দ্বন্দ্ব প্রতিরোধের জন্য একটি সহজ নীতির দিকে নিয়ে যায়: প্রতিটি আউটপুট শুধুমাত্র একবার ব্যয় করা যেতে পারে। মাল্টিচেইন ফিল্টার এবং কর্ডা চুক্তিগুলি সম্পূর্ণরূপে এই বিধিনিষেধ প্রয়োগ করতে তাদের নিজ নিজ প্ল্যাটফর্মের উপর নির্ভর করতে পারে। যেহেতু অ্যালিসের $10 পূর্ববর্তী লেনদেন আউটপুট দ্বারা প্রতিনিধিত্ব করা হয়, এই একক-ব্যয় নিয়মটি স্বয়ংক্রিয়ভাবে তাকে বব এবং চার্লি উভয়ের কাছে পাঠানো বন্ধ করে দেয়।

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

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

আউটপুট বনাম চুক্তি

এখন পর্যন্ত আমরা বিরোধপূর্ণ লেনদেন প্রতিরোধ করার জন্য দুটি ভিন্ন কৌশল দেখেছি - মাল্টিচেইন এবং কর্ডা-এ একক-ব্যয় আউটপুট এবং ইথেরিয়ামে চুক্তি-ভিত্তিক যাচাইকরণ। তাই কোনটা ভালো?

এই প্রশ্নের উত্তর দিতে সাহায্য করার জন্য, আসুন একটি উদাহরণ বিবেচনা করা যাক "1-এর-2 মাল্টিসিগনেচার" অ্যাকাউন্ট যা গ্যাভিন এবং হেলেনের পক্ষে $100 ধারণ করে, এবং তাদের যে কোনো একটিকে সেই অর্থ স্বাধীনভাবে ব্যয় করার অনুমতি দেয়। গেভিন তার আবেদন ডোনাকে $80 দিতে নির্দেশ দেয় এবং কয়েক সেকেন্ড পরে, হেলেন এডওয়ার্ডকে $40 পাঠাতে চায়। যেহেতু উভয় অর্থপ্রদানের জন্য পর্যাপ্ত তহবিল নেই, তাই এই লেনদেন অনিবার্যভাবে বিরোধপূর্ণ হবে। ঘটনা যে উভয় লেনদেন সম্প্রচার করা হয়, ফলাফল যেটি প্রথমে চেইনের মধ্যে তৈরি করবে তার দ্বারা নির্ধারিত হবে। উল্লেখ্য যে অ্যালিসের উদাহরণের বিপরীতে, এই দ্বন্দ্ব আপতিক, যেহেতু কেউ আবেদনের নিয়ম ভঙ্গ করার চেষ্টা করছে না - তাদের কেবল দুর্ভাগ্যজনক সময় ছিল।

এই সংঘাত ঘটার সম্ভাবনা বিবেচনা করে, মূল প্রশ্নটি হল: গ্যাভিন তার লেনদেন প্রেরণ করার পরে, হেলেনের নোডটি জানতে কতক্ষণ সময় লাগবে যে তার অর্থপ্রদান ব্যর্থ হতে পারে? এই সময়কাল যত কম হবে, হেলেনকে সেই অর্থপ্রদানের প্রচেষ্টা থেকে বিরত করার সম্ভাবনা তত বেশি, তাকে এবং তার আবেদনকে পরবর্তী চমক থেকে বাঁচাতে হবে।

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

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

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

পড়া-লেখার সেট

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

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

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

দ্বন্দ্ব প্রতিরোধ ফ্যাব্রিক মাল্টিচেইন Ethereum দড়ি
মডেল পড়া-লেখার সেট একক খরচ চুক্তি চেক একক খরচ
প্রতিপাদন স্বাধীন স্বাধীন স্বাধীন বিশ্বস্ত নোটারি
গতি ~10s (নিশ্চিতকরণ) ~1s (প্রচার) ~10s (নিশ্চিতকরণ) 0~5s (নোটারি)

একটি জটিল পছন্দ

এই অংশে, আমরা Corda, Ethereum, Fabric এবং MultiChain "স্মার্ট চুক্তি" বা ব্লকচেইনে এমবেড করা অ্যাপ্লিকেশন কোডের মূল চ্যালেঞ্জগুলিকে মোকাবেলা করার বিভিন্ন উপায়ের অনেকগুলি পর্যালোচনা করেছি। এবং প্রতিটি প্ল্যাটফর্মে আমাদের তিনটি মূল প্রশ্নের বিভিন্ন উত্তর রয়েছে: লেনদেনের নিয়মগুলি কীভাবে উপস্থাপন করা হয়? কিভাবে কোড নির্ধারকভাবে নির্বাহ করা হয়? এবং কিভাবে আমরা দ্বন্দ্ব প্রতিরোধ করতে পারি?

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

কোন মন্তব্য পোস্ট করুন লিঙ্কডইন উপর.

সময় স্ট্যাম্প:

থেকে আরো মাল্টিচেইন