ইথিরিয়াম বুঝতে চাইছেন?
এই হোয়াইটপেপারটি 2014 সালে প্রকাশিত হয়েছিল, ইথিরিয়াম চালু হওয়ার আগে। 10+ বছরের উন্নয়ন, বড় ধরনের আপগ্রেড এবং ইকোসিস্টেমের বৃদ্ধির পর, আসল হোয়াইটপেপারটি ইথিরিয়ামের বর্তমান অবস্থাকে আর প্রতিফলিত করে না।
2014 সালের পর থেকে কী পরিবর্তন হয়েছে?
কয়েক বছরের পুরোনো হওয়া সত্ত্বেও, আমরা নিচের মূল পেপারটি সংরক্ষণ করেছি কারণ এটি এখনও একটি দরকারী রেফারেন্স এবং ইথিরিয়াম ও এর লক্ষ্যের একটি সঠিক উপস্থাপনা হিসেবে কাজ করে।
ইথিরিয়াম হোয়াইটপেপার
একটি নেক্সট-জেনারেশন স্মার্ট কন্ট্রাক্ট এবং ডিসেন্ট্রালাইজড এপ্লিকেশন প্ল্যাটফর্ম
2009 সালে সাতোশি নাকামোতোর (Satoshi Nakamoto) তৈরি করা Bitcoin-কে প্রায়শই অর্থ এবং মুদ্রার ক্ষেত্রে একটি যুগান্তকারী উদ্ভাবন হিসেবে প্রশংসা করা হয়, যা এমন একটি ডিজিটাল সম্পদের প্রথম উদাহরণ যার একই সাথে কোনো ব্যাকিং বা "অন্তর্নিহিত মূল্য (intrinsic value) (opens in a new tab)" নেই এবং কোনো কেন্দ্রীভূত ইস্যুকারী বা নিয়ন্ত্রক নেই। তবে, Bitcoin পরীক্ষার আরেকটি, এবং তর্কসাপেক্ষে আরও গুরুত্বপূর্ণ অংশ হলো ডিস্ট্রিবিউটেড কনসেন্সাস-এর একটি টুল হিসেবে এর অন্তর্নিহিত ব্লকচেইন প্রযুক্তি, এবং মানুষের মনোযোগ দ্রুত Bitcoin-এর এই অন্য দিকটির দিকে সরে যেতে শুরু করেছে। ব্লকচেইন প্রযুক্তির সাধারণত উল্লেখিত বিকল্প প্রয়োগগুলোর মধ্যে রয়েছে কাস্টম মুদ্রা এবং আর্থিক উপকরণগুলোকে উপস্থাপন করার জন্য অন-ব্লকচেইন ডিজিটাল সম্পদের ব্যবহার ("কালারড কয়েন (colored coins) (opens in a new tab)"), একটি অন্তর্নিহিত ফিজিক্যাল ডিভাইসের মালিকানা ("স্মার্ট প্রপার্টি (smart property) (opens in a new tab)"), ডোমেইন নামের মতো নন-ফাঞ্জিবল সম্পদ ("Namecoin (opens in a new tab)"), সেইসাথে আরও জটিল প্রয়োগ যেখানে ডিজিটাল সম্পদগুলো সরাসরি এমন এক টুকরো কোড দ্বারা নিয়ন্ত্রিত হয় যা ইচ্ছামতো নিয়ম বাস্তবায়ন করে ("স্মার্ট কন্ট্রাক্ট (opens in a new tab)") অথবা এমনকি ব্লকচেইন-ভিত্তিক "ডিসেন্ট্রালাইজড অটোনোমাস সংস্থা (opens in a new tab)" (DAOs)। Ethereum যা প্রদান করতে চায় তা হলো একটি অন্তর্নিহিত সম্পূর্ণ টুরিং-কমপ্লিট (Turing-complete) প্রোগ্রামিং ভাষা সহ একটি ব্লকচেইন, যা "কন্ট্রাক্ট" তৈরি করতে ব্যবহার করা যেতে পারে, যা ইচ্ছামতো স্টেট ট্রানজিশন ফাংশনগুলোকে এনকোড করতে ব্যবহার করা যেতে পারে, যার ফলে ব্যবহারকারীরা উপরে বর্ণিত যেকোনো সিস্টেম তৈরি করতে পারে, সেইসাথে আরও অনেক কিছু যা আমরা এখনও কল্পনা করিনি, শুধুমাত্র কয়েক লাইন কোডে লজিক লিখে।
বিটকয়েন এবং বিদ্যমান ধারণার পরিচিতি
ইতিহাস
ডিসেন্ট্রালাইজড ডিজিটাল কারেন্সি, সেইসাথে প্রপার্টি রেজিস্ট্রির মতো বিকল্প অ্যাপ্লিকেশনগুলির ধারণা কয়েক দশক ধরে চলে আসছে। ১৯৮০ এবং ১৯৯০-এর দশকের বেনামী ই-ক্যাশ প্রটোকলগুলি, যা মূলত Chaumian blinding নামে পরিচিত একটি ক্রিপ্টোগ্রাফিক প্রিমিটিভের উপর নির্ভরশীল ছিল, উচ্চ মাত্রার গোপনীয়তা সহ একটি মুদ্রা প্রদান করেছিল, কিন্তু একটি কেন্দ্রীভূত মধ্যস্থতাকারীর উপর নির্ভরতার কারণে প্রটোকলগুলি মূলত জনপ্রিয়তা পেতে ব্যর্থ হয়েছিল। ১৯৯৮ সালে, Wei Dai-এর b-money (opens in a new tab) কম্পিউটেশনাল পাজল সমাধানের মাধ্যমে অর্থ তৈরি করার পাশাপাশি ডিসেন্ট্রালাইজড কনসেন্সাস-এর ধারণা প্রবর্তনকারী প্রথম প্রস্তাব হয়ে ওঠে, কিন্তু ডিসেন্ট্রালাইজড কনসেন্সাস আসলে কীভাবে বাস্তবায়ন করা যেতে পারে সে সম্পর্কে প্রস্তাবে বিস্তারিত তথ্যের অভাব ছিল। ২০০৫ সালে, Hal Finney "reusable proofs of work (opens in a new tab)"-এর একটি ধারণা প্রবর্তন করেন, এমন একটি সিস্টেম যা b-money-এর ধারণার সাথে Adam Back-এর কম্পিউটেশনালি কঠিন Hashcash পাজল ব্যবহার করে একটি ক্রিপটোকারেন্সি-এর ধারণা তৈরি করে, কিন্তু ব্যাকএন্ড হিসেবে বিশ্বস্ত কম্পিউটিংয়ের উপর নির্ভর করার কারণে এটি আবারও আদর্শ থেকে পিছিয়ে পড়ে। ২০০৯ সালে, Satoshi Nakamoto প্রথমবারের মতো একটি ডিসেন্ট্রালাইজড মুদ্রা বাস্তবে প্রয়োগ করেন, যা পাবলিক কি ক্রিপ্টোগ্রাফি-এর মাধ্যমে মালিকানা পরিচালনার জন্য প্রতিষ্ঠিত প্রিমিটিভগুলিকে কয়েনের মালিক কে তা ট্র্যাক করার জন্য একটি কনসেন্সাস এ্যালগরিদম-এর সাথে একত্রিত করে, যা "প্রুফ-অফ-ওয়ার্ক" নামে পরিচিত।
প্রুফ-অফ-ওয়ার্ক-এর পিছনের মেকানিজমটি এই ক্ষেত্রে একটি যুগান্তকারী আবিষ্কার ছিল কারণ এটি একই সাথে দুটি সমস্যার সমাধান করেছিল। প্রথমত, এটি একটি সহজ এবং মোটামুটি কার্যকর কনসেন্সাস এ্যালগরিদম প্রদান করেছিল, যা নেটওয়ার্ক-এর নোড-গুলিকে বিটকয়েন লেজার-এর স্টেট-এর ক্যানোনিকাল আপডেটের একটি সেটে সম্মিলিতভাবে একমত হতে দেয়। দ্বিতীয়ত, এটি কনসেন্সাস প্রক্রিয়ায় অবাধ প্রবেশের অনুমতি দেওয়ার জন্য একটি মেকানিজম প্রদান করেছিল, যা কনসেন্সাস-কে কে প্রভাবিত করতে পারবে তা নির্ধারণ করার রাজনৈতিক সমস্যার সমাধান করে এবং একই সাথে সাইবিল এ্যাটাক প্রতিরোধ করে। এটি অংশগ্রহণের জন্য একটি আনুষ্ঠানিক বাধা, যেমন একটি নির্দিষ্ট তালিকায় একটি অনন্য সত্তা হিসাবে নিবন্ধিত হওয়ার প্রয়োজনীয়তাকে একটি অর্থনৈতিক বাধা দিয়ে প্রতিস্থাপন করে এটি করে - কনসেন্সাস ভোটিং প্রক্রিয়ায় একটি একক নোড-এর ওজন নোড-টি যে কম্পিউটিং শক্তি নিয়ে আসে তার সরাসরি সমানুপাতিক। তারপর থেকে, প্রুফ-অফ-স্টেক নামক একটি বিকল্প পদ্ধতির প্রস্তাব করা হয়েছে, যা একটি নোড-এর ওজনকে তার কারেন্সি হোল্ডিংয়ের সমানুপাতিক হিসাবে গণনা করে, কম্পিউটেশনাল রিসোর্সের নয়; দুটি পদ্ধতির আপেক্ষিক গুণাগুণের আলোচনা এই পেপারের সুযোগের বাইরে তবে এটি লক্ষ করা উচিত যে উভয় পদ্ধতিই একটি ক্রিপটোকারেন্সি-এর মেরুদণ্ড হিসাবে কাজ করতে ব্যবহার করা যেতে পারে।
একটি স্টেট ট্রানজিশন সিস্টেম হিসাবে বিটকয়েন
প্রযুক্তিগত দৃষ্টিকোণ থেকে, বিটকয়েনের মতো একটি ক্রিপটোকারেন্সি-এর লেজার-কে একটি স্টেট ট্রানজিশন সিস্টেম হিসাবে ভাবা যেতে পারে, যেখানে সমস্ত বিদ্যমান বিটকয়েনের মালিকানার স্থিতি নিয়ে গঠিত একটি "স্টেট" রয়েছে এবং একটি "স্টেট ট্রানজিশন ফাংশন" রয়েছে যা একটি স্টেট এবং একটি লেনদেন গ্রহণ করে এবং ফলাফল হিসাবে একটি নতুন স্টেট আউটপুট দেয়। উদাহরণস্বরূপ, একটি স্ট্যান্ডার্ড ব্যাঙ্কিং সিস্টেমে, স্টেট হলো একটি ব্যালেন্স শিট, একটি লেনদেন হলো A থেকে B তে $X সরানোর একটি অনুরোধ, এবং স্টেট ট্রানজিশন ফাংশন A-এর একাউন্ট-এ $X মান হ্রাস করে এবং B-এর একাউন্ট-এ $X মান বৃদ্ধি করে। যদি শুরুতেই A-এর একাউন্ট-এ $X এর কম থাকে, তবে স্টেট ট্রানজিশন ফাংশন একটি ত্রুটি প্রদান করে। অতএব, কেউ আনুষ্ঠানিকভাবে সংজ্ঞায়িত করতে পারে:
APPLY(S,TX) -> S' or ERROR
উপরে সংজ্ঞায়িত ব্যাঙ্কিং সিস্টেমে:
APPLY({ Alice: $50, Bob: $50 },"send $20 from Alice to Bob") = { Alice: $30, Bob: $70 }
কিন্তু:
APPLY({ Alice: $50, Bob: $50 },"send $70 from Alice to Bob") = ERROR
বিটকয়েনে "স্টেট" হলো সমস্ত কয়েনের সংগ্রহ (প্রযুক্তিগতভাবে, "আনস্পেন্ট ট্রানজেকশন আউটপুট" বা UTXO) যা মিন্ট করা হয়েছে এবং এখনও ব্যয় করা হয়নি, প্রতিটি UTXO-এর একটি ডিনোমিনেশন এবং একজন মালিক থাকে (একটি 20-বাইট এডড্রেস দ্বারা সংজ্ঞায়িত যা মূলত একটি ক্রিপ্টোগ্রাফিক পাবলিক কিfn1)। একটি লেনদেন-এ এক বা একাধিক ইনপুট থাকে, প্রতিটি ইনপুটে একটি বিদ্যমান UTXO-এর রেফারেন্স এবং মালিকের এডড্রেস-এর সাথে যুক্ত প্রাইভেট কি দ্বারা তৈরি একটি ক্রিপ্টোগ্রাফিক সিগনেচার থাকে, এবং এক বা একাধিক আউটপুট থাকে, প্রতিটি আউটপুটে স্টেট-এ যোগ করার জন্য একটি নতুন UTXO থাকে।
স্টেট ট্রানজিশন ফাংশন APPLY(S,TX) -> S' মোটামুটি নিম্নরূপ সংজ্ঞায়িত করা যেতে পারে:
TX-এর প্রতিটি ইনপুটের জন্য:- যদি রেফারেন্স করা UTXO
S-এ না থাকে, তবে একটি ত্রুটি প্রদান করুন। - যদি প্রদত্ত সিগনেচার UTXO-এর মালিকের সাথে না মেলে, তবে একটি ত্রুটি প্রদান করুন।
- যদি রেফারেন্স করা UTXO
- যদি সমস্ত ইনপুট UTXO-এর ডিনোমিনেশনের যোগফল সমস্ত আউটপুট UTXO-এর ডিনোমিনেশনের যোগফলের চেয়ে কম হয়, তবে একটি ত্রুটি প্রদান করুন।
- সমস্ত ইনপুট UTXO সরিয়ে এবং সমস্ত আউটপুট UTXO যোগ করে
Sপ্রদান করুন।
প্রথম ধাপের প্রথমার্ধ লেনদেন প্রেরকদের অস্তিত্বহীন কয়েন ব্যয় করতে বাধা দেয়, প্রথম ধাপের দ্বিতীয়ার্ধ লেনদেন প্রেরকদের অন্য লোকেদের কয়েন ব্যয় করতে বাধা দেয় এবং দ্বিতীয় ধাপ মূল্যের সংরক্ষণ প্রয়োগ করে। পেমেন্টের জন্য এটি ব্যবহার করার জন্য, প্রটোকল-টি নিম্নরূপ। ধরা যাক Alice Bob-কে 11.7 BTC পাঠাতে চায়। প্রথমে, Alice তার মালিকানাধীন উপলব্ধ UTXO-এর একটি সেট খুঁজবে যার মোট পরিমাণ কমপক্ষে 11.7 BTC। বাস্তবসম্মতভাবে, Alice ঠিক 11.7 BTC পাবে না; ধরা যাক সে সবচেয়ে ছোট যা পেতে পারে তা হলো 6+4+2=12। সে তারপর সেই তিনটি ইনপুট এবং দুটি আউটপুট দিয়ে একটি লেনদেন তৈরি করে। প্রথম আউটপুট হবে 11.7 BTC যার মালিক হিসেবে Bob-এর এডড্রেস থাকবে, এবং দ্বিতীয় আউটপুট হবে অবশিষ্ট 0.3 BTC "খুচরা", যার মালিক হবে স্বয়ং Alice।
মাইনিং
যদি আমাদের একটি বিশ্বস্ত কেন্দ্রীভূত পরিষেবাতে অ্যাক্সেস থাকত, তবে এই সিস্টেমটি বাস্তবায়ন করা খুব সহজ হতো; স্টেট-এর ট্র্যাক রাখতে একটি কেন্দ্রীভূত সার্ভারের হার্ড ড্রাইভ ব্যবহার করে এটিকে ঠিক বর্ণিত হিসাবে কোড করা যেতে পারে। যাইহোক, বিটকয়েনের সাথে আমরা একটি ডিসেন্ট্রালাইজড কারেন্সি সিস্টেম তৈরি করার চেষ্টা করছি, তাই লেনদেন-এর ক্রম সম্পর্কে সবাই একমত তা নিশ্চিত করার জন্য আমাদের স্টেট ট্রানজিশন সিস্টেমটিকে একটি কনসেন্সাস সিস্টেমের সাথে একত্রিত করতে হবে। বিটকয়েনের ডিসেন্ট্রালাইজড কনসেন্সাস প্রক্রিয়ার জন্য নেটওয়ার্ক-এর নোড-গুলিকে ক্রমাগত "ব্লকস" নামক লেনদেন-এর প্যাকেজ তৈরি করার চেষ্টা করতে হয়। নেটওয়ার্ক-টি প্রতি দশ মিনিটে মোটামুটি একটি ব্লক তৈরি করার উদ্দেশ্যে তৈরি, প্রতিটি ব্লক-এ একটি টাইমস্ট্যাম্প, একটি নন্স, পূর্ববর্তী ব্লক-এর একটি রেফারেন্স (অর্থাৎ, হ্যাস) এবং পূর্ববর্তী ব্লক-এর পর থেকে সংঘটিত সমস্ত লেনদেন-এর একটি তালিকা থাকে। সময়ের সাথে সাথে, এটি একটি স্থায়ী, চির-বর্ধমান, "ব্লকচেইন" তৈরি করে যা বিটকয়েন লেজার-এর সর্বশেষ স্টেট-কে উপস্থাপন করতে ক্রমাগত আপডেট হয়।
একটি ব্লক বৈধ কিনা তা পরীক্ষা করার এ্যালগরিদম, এই প্যারাডাইমে প্রকাশ করা হয়েছে, তা নিম্নরূপ:
- ব্লক দ্বারা রেফারেন্স করা পূর্ববর্তী ব্লক-টি বিদ্যমান এবং বৈধ কিনা তা পরীক্ষা করুন।
- পরীক্ষা করুন যে ব্লক-এর টাইমস্ট্যাম্প পূর্ববর্তী ব্লক-এরfn2 চেয়ে বেশি এবং ভবিষ্যতের 2 ঘন্টার কম।
- পরীক্ষা করুন যে ব্লক-এর প্রুফ-অফ-ওয়ার্ক বৈধ।
- ধরা যাক
S[0]হলো পূর্ববর্তী ব্লক-এর শেষে স্টেট। - ধরা যাক
TXহলোnলেনদেন সহ ব্লক-এর লেনদেন তালিকা।0...n-1-এর সমস্তi-এর জন্য,S[i+1] = APPLY(S[i],TX[i])সেট করুন। যদি কোনো অ্যাপ্লিকেশন একটি ত্রুটি প্রদান করে, তবে প্রস্থান করুন এবং false প্রদান করুন। - true প্রদান করুন, এবং এই ব্লক-এর শেষে স্টেট হিসাবে
S[n]নিবন্ধন করুন।
মূলত, ব্লক-এর প্রতিটি লেনদেন-কে লেনদেন কার্যকর হওয়ার আগে ক্যানোনিকাল স্টেট যা ছিল তা থেকে কিছু নতুন স্টেট-এ একটি বৈধ স্টেট ট্রানজিশন প্রদান করতে হবে। লক্ষ্য করুন যে স্টেট-টি কোনোভাবেই ব্লক-এ এনকোড করা নেই; এটি সম্পূর্ণরূপে একটি বিমূর্ততা যা ভ্যালিডেটিং নোড দ্বারা মনে রাখা হয় এবং জেনেসিস স্টেট থেকে শুরু করে এবং প্রতিটি ব্লক-এর প্রতিটি লেনদেন ক্রমানুসারে প্রয়োগ করে যেকোনো ব্লক-এর জন্য শুধুমাত্র (নিরাপদভাবে) গণনা করা যেতে পারে। অতিরিক্তভাবে, লক্ষ্য করুন যে মাইনার যে ক্রমে ব্লক-এ লেনদেন অন্তর্ভুক্ত করে তা গুরুত্বপূর্ণ; যদি একটি ব্লক-এ দুটি লেনদেন A এবং B থাকে যাতে B, A দ্বারা তৈরি একটি UTXO ব্যয় করে, তবে ব্লক-টি বৈধ হবে যদি A, B এর আগে আসে কিন্তু অন্যথায় নয়।
উপরের তালিকায় উপস্থিত একটি বৈধতার শর্ত যা অন্যান্য সিস্টেমে পাওয়া যায় না তা হলো "প্রুফ-অফ-ওয়ার্ক"-এর প্রয়োজনীয়তা। সুনির্দিষ্ট শর্তটি হলো যে প্রতিটি ব্লক-এর ডাবল-SHA256 হ্যাস, একটি 256-বিট সংখ্যা হিসাবে বিবেচিত, একটি গতিশীলভাবে সামঞ্জস্যপূর্ণ লক্ষ্যের চেয়ে কম হতে হবে, যা এই লেখার সময় প্রায় 2187। এর উদ্দেশ্য হলো ব্লক তৈরিকে কম্পিউটেশনালি "কঠিন" করা, যার ফলে সাইবিল এ্যাটাক-কারীদের তাদের পক্ষে সম্পূর্ণ ব্লকচেইন পুনরায় তৈরি করতে বাধা দেওয়া। যেহেতু SHA256 একটি সম্পূর্ণ অপ্রত্যাশিত সিউডো-র্যান্ডম ফাংশন হওয়ার জন্য ডিজাইন করা হয়েছে, তাই একটি বৈধ ব্লক তৈরি করার একমাত্র উপায় হলো ট্রায়াল এবং এরর, বারবার নন্স বৃদ্ধি করা এবং নতুন হ্যাস মেলে কিনা তা দেখা।
~2187 এর বর্তমান লক্ষ্যে, একটি বৈধ ব্লক খুঁজে পাওয়ার আগে নেটওয়ার্ক-টিকে গড়ে ~269 বার চেষ্টা করতে হবে; সাধারণভাবে, লক্ষ্যটি প্রতি 2016 ব্লকস-এ নেটওয়ার্ক দ্বারা পুনরায় ক্যালিব্রেট করা হয় যাতে গড়ে প্রতি দশ মিনিটে নেটওয়ার্ক-এর কোনো নোড দ্বারা একটি নতুন ব্লক তৈরি হয়। এই কম্পিউটেশনাল কাজের জন্য মাইনারদের ক্ষতিপূরণ দেওয়ার জন্য, প্রতিটি ব্লক-এর মাইনার নিজেদেরকে শূন্য থেকে 25 BTC দেওয়ার একটি লেনদেন অন্তর্ভুক্ত করার অধিকারী। অতিরিক্তভাবে, যদি কোনো লেনদেন-এর আউটপুটের চেয়ে ইনপুটে মোট ডিনোমিনেশন বেশি থাকে, তবে পার্থক্যটিও "ট্রানজেকশন ফি" হিসাবে মাইনারের কাছে যায়। ঘটনাক্রমে, এটিই একমাত্র মেকানিজম যার মাধ্যমে BTC ইস্যু করা হয়; জেনেসিস স্টেট-এ কোনো কয়েন ছিল না।
মাইনিং-এর উদ্দেশ্য আরও ভালোভাবে বোঝার জন্য, আসুন পরীক্ষা করে দেখি একটি ক্ষতিকারক আক্রমণকারীর ক্ষেত্রে কী ঘটে। যেহেতু বিটকয়েনের অন্তর্নিহিত ক্রিপ্টোগ্রাফি নিরাপদ বলে পরিচিত, তাই আক্রমণকারী বিটকয়েন সিস্টেমের সেই অংশটিকে লক্ষ্য করবে যা সরাসরি ক্রিপ্টোগ্রাফি দ্বারা সুরক্ষিত নয়: লেনদেন-এর ক্রম। আক্রমণকারীর কৌশলটি সহজ:
- কিছু পণ্যের (বিশেষত একটি দ্রুত-ডেলিভারি ডিজিটাল পণ্য) বিনিময়ে একজন ব্যবসায়ীকে 100 BTC পাঠান
- পণ্য সরবরাহের জন্য অপেক্ষা করুন
- একই 100 BTC নিজেকে পাঠানোর আরেকটি লেনদেন তৈরি করুন
- নেটওয়ার্ক-কে বোঝানোর চেষ্টা করুন যে নিজের কাছে তার লেনদেন-টিই প্রথমে এসেছিল।
একবার ধাপ (1) সম্পন্ন হওয়ার পর, কয়েক মিনিট পরে কোনো মাইনার লেনদেন-টিকে একটি ব্লক-এ অন্তর্ভুক্ত করবে, ধরা যাক ব্লক নম্বর 270000। প্রায় এক ঘন্টা পরে, সেই ব্লক-এর পরে চেইনে আরও পাঁচটি ব্লকস যোগ করা হবে, যার প্রতিটি ব্লকস পরোক্ষভাবে লেনদেন-টিকে নির্দেশ করবে এবং এইভাবে এটিকে "নিশ্চিত" করবে। এই সময়ে, ব্যবসায়ী পেমেন্টটিকে চূড়ান্ত হিসাবে গ্রহণ করবে এবং পণ্যটি সরবরাহ করবে; যেহেতু আমরা ধরে নিচ্ছি এটি একটি ডিজিটাল পণ্য, তাই ডেলিভারি তাৎক্ষণিক। এখন, আক্রমণকারী 100 BTC নিজেকে পাঠানোর আরেকটি লেনদেন তৈরি করে। যদি আক্রমণকারী এটিকে কেবল উন্মুক্ত করে দেয়, তবে লেনদেন-টি প্রক্রিয়া করা হবেবিধা হবে না; মাইনাররা APPLY(S,TX) চালানোর চেষ্টা করবে এবং লক্ষ্য করবে যে TX এমন একটি UTXO ব্যবহার করে যা আর স্টেট-এ নেই। তাই এর পরিবর্তে, আক্রমণকারী ব্লকচেইন-এর একটি "ফর্ক" তৈরি করে, ব্লক 270000 এর আরেকটি সংস্করণ মাইনিং করে শুরু করে যা একই ব্লক 269999 কে প্যারেন্ট হিসাবে নির্দেশ করে কিন্তু পুরানোটির জায়গায় নতুন লেনদেন সহ। যেহেতু ব্লক ডেটা আলাদা, তাই এর জন্য প্রুফ-অফ-ওয়ার্ক পুনরায় করা প্রয়োজন। অধিকন্তু, আক্রমণকারীর ব্লক 270000 এর নতুন সংস্করণে একটি ভিন্ন হ্যাস রয়েছে, তাই মূল ব্লকস 270001 থেকে 270005 এটিকে "নির্দেশ" করে না; এইভাবে, মূল চেইন এবং আক্রমণকারীর নতুন চেইন সম্পূর্ণ আলাদা। নিয়ম হলো যে একটি ফর্ক-এ দীর্ঘতম ব্লকচেইন-কে সত্য বলে ধরে নেওয়া হয়, এবং তাই বৈধ মাইনাররা 270005 চেইনে কাজ করবে যখন আক্রমণকারী একাই 270000 চেইনে কাজ করছে। আক্রমণকারীকে তার ব্লকচেইন-কে দীর্ঘতম করার জন্য, তাকে ধরার জন্য বাকি নেটওয়ার্ক-এর সম্মিলিত শক্তির চেয়ে বেশি কম্পিউটেশনাল শক্তি থাকতে হবে (তাই, "৫১% এ্যাটাক")।
মার্কেল ট্রি
বাম: একটি শাখার বৈধতার প্রমাণ দেওয়ার জন্য একটি মার্কেল ট্রিতে শুধুমাত্র অল্প সংখ্যক নোড উপস্থাপন করাই যথেষ্ট।
ডান: মার্কেল ট্রির কোনো অংশ পরিবর্তন করার যেকোনো প্রচেষ্টা শেষ পর্যন্ত চেইনের উপরের কোথাও একটি অসঙ্গতির দিকে নিয়ে যাবে।
বিটকয়েনের একটি গুরুত্বপূর্ণ স্কেলেবিলিটি বৈশিষ্ট্য হলো যে ব্লক-টি একটি মাল্টি-লেভেল ডেটা স্ট্রাকচারে সংরক্ষণ করা হয়। একটি ব্লক-এর "হ্যাস" আসলে শুধুমাত্র ব্লক হেডারের হ্যাস, প্রায় 200-বাইট ডেটার একটি অংশ যাতে টাইমস্ট্যাম্প, নন্স, পূর্ববর্তী ব্লক হ্যাস এবং ব্লক-এর সমস্ত লেনদেন সংরক্ষণকারী মার্কেল ট্রি নামক একটি ডেটা স্ট্রাকচারের রুট হ্যাস থাকে। একটি মার্কেল ট্রি হলো এক ধরণের বাইনারি ট্রি, যা অন্তর্নিহিত ডেটা ধারণকারী ট্রির নীচে বিপুল সংখ্যক লিফ নোড সহ নোড-এর একটি সেট, ইন্টারমিডিয়েট নোড-এর একটি সেট যেখানে প্রতিটি নোড তার দুটি চাইল্ডের হ্যাস, এবং অবশেষে একটি একক রুট নোড, যা তার দুটি চাইল্ডের হ্যাস থেকেও গঠিত, ট্রির "শীর্ষ" উপস্থাপন করে। মার্কেল ট্রির উদ্দেশ্য হলো একটি ব্লক-এর ডেটা খণ্ড খণ্ডভাবে সরবরাহ করার অনুমতি দেওয়া: একটি নোড একটি উৎস থেকে শুধুমাত্র একটি ব্লক-এর হেডার ডাউনলোড করতে পারে, অন্য উৎস থেকে তাদের সাথে প্রাসঙ্গিক ট্রির ছোট অংশ ডাউনলোড করতে পারে এবং তবুও নিশ্চিত হতে পারে যে সমস্ত ডেটা সঠিক। এটি কাজ করার কারণ হলো হ্যাস-গুলি উপরের দিকে প্রসারিত হয়: যদি কোনো ক্ষতিকারক ব্যবহারকারী একটি মার্কেল ট্রির নীচে একটি জাল লেনদেন অদলবদল করার চেষ্টা করে, তবে এই পরিবর্তনটি উপরের নোড-এ একটি পরিবর্তন ঘটাবে, এবং তারপরে তার উপরের নোড-এ একটি পরিবর্তন ঘটাবে, অবশেষে ট্রির রুট এবং সেইজন্য ব্লক-এর হ্যাস পরিবর্তন করবে, যার ফলে প্রটোকল এটিকে সম্পূর্ণ ভিন্ন ব্লক হিসাবে নিবন্ধন করবে (প্রায় নিশ্চিতভাবেই একটি অবৈধ প্রুফ-অফ-ওয়ার্ক সহ)।
মার্কেল ট্রি প্রটোকল দীর্ঘমেয়াদী স্থায়িত্বের জন্য তর্কযোগ্যভাবে অপরিহার্য। বিটকয়েন নেটওয়ার্ক-এ একটি "ফুল নোড", যা প্রতিটি ব্লক-এর সম্পূর্ণতা সংরক্ষণ করে এবং প্রক্রিয়া করে, এপ্রিল 2014 পর্যন্ত বিটকয়েন নেটওয়ার্ক-এ প্রায় 15 GB ডিস্ক স্পেস নেয় এবং প্রতি মাসে এক গিগাবাইটের বেশি বৃদ্ধি পাচ্ছে। বর্তমানে, এটি কিছু ডেস্কটপ কম্পিউটারের জন্য কার্যকর এবং ফোনের জন্য নয়, এবং ভবিষ্যতে শুধুমাত্র ব্যবসা এবং শখকারীরা অংশগ্রহণ করতে সক্ষম হবে। "সিমপ্লিফাইড পেমেন্ট ভেরিফিকেশন" (SPV) নামে পরিচিত একটি প্রটোকল "লাইট নোড" নামক নোড-এর আরেকটি শ্রেণীকে বিদ্যমান থাকার অনুমতি দেয়, যা ব্লক হেডারগুলি ডাউনলোড করে, ব্লক হেডারগুলিতে প্রুফ-অফ-ওয়ার্ক যাচাই করে এবং তারপরে শুধুমাত্র তাদের সাথে প্রাসঙ্গিক লেনদেন-এর সাথে যুক্ত "শাখাগুলি" ডাউনলোড করে। এটি লাইট নোড-গুলিকে সম্পূর্ণ ব্লকচেইন-এর একটি খুব ছোট অংশ ডাউনলোড করার সময় যেকোনো বিটকয়েন লেনদেন-এর স্থিতি এবং তাদের বর্তমান ব্যালেন্স কী তা নিরাপত্তার একটি শক্তিশালী গ্যারান্টি সহ নির্ধারণ করতে দেয়।
বিকল্প ব্লকচেইন অ্যাপ্লিকেশন
অন্তর্নিহিত ব্লকচেইন ধারণা গ্রহণ এবং এটিকে অন্যান্য ধারণায় প্রয়োগ করার ধারণারও একটি দীর্ঘ ইতিহাস রয়েছে। ২০০৫ সালে, Nick Szabo "secure property titles with owner authority (opens in a new tab)" ধারণা নিয়ে আসেন, একটি নথি যা বর্ণনা করে যে কীভাবে "রেপ্লিকেটেড ডেটাবেস প্রযুক্তিতে নতুন অগ্রগতি" কার কোন জমির মালিকানা রয়েছে তার একটি রেজিস্ট্রি সংরক্ষণের জন্য একটি ব্লকচেইন-ভিত্তিক সিস্টেমের অনুমতি দেবে, যা হোমস্টেডিং, অ্যাডভার্স পজেশন এবং জর্জিয়ান ল্যান্ড ট্যাক্সের মতো ধারণাগুলি সহ একটি বিস্তৃত কাঠামো তৈরি করবে। যাইহোক, দুর্ভাগ্যবশত সেই সময়ে কোনো কার্যকর রেপ্লিকেটেড ডেটাবেস সিস্টেম উপলব্ধ ছিল না, এবং তাই প্রটোকল-টি বাস্তবে কখনও প্রয়োগ করা হয়নি। ২০০৯ সালের পরে, যাইহোক, একবার বিটকয়েনের ডিসেন্ট্রালাইজড কনসেন্সাস তৈরি হওয়ার পরে বেশ কয়েকটি বিকল্প অ্যাপ্লিকেশন দ্রুত আবির্ভূত হতে শুরু করে।
- Namecoin - ২০১০ সালে তৈরি, Namecoin (opens in a new tab)-কে একটি ডিসেন্ট্রালাইজড নাম নিবন্ধন ডেটাবেস হিসাবে সবচেয়ে ভালোভাবে বর্ণনা করা যায়। Tor, Bitcoin এবং BitMessage-এর মতো ডিসেন্ট্রালাইজড প্রটোকল-গুলিতে, একাউন্ট-গুলি সনাক্ত করার কিছু উপায় থাকা দরকার যাতে অন্য লোকেরা তাদের সাথে যোগাযোগ করতে পারে, কিন্তু সমস্ত বিদ্যমান সমাধানগুলিতে উপলব্ধ একমাত্র ধরণের শনাক্তকারী হলো
1LW79wp5ZBqaHW1jL5TCiBCrhQYtHagUWy-এর মতো একটি সিউডো-র্যান্ডম হ্যাস। আদর্শভাবে, কেউ "george"-এর মতো নামের একটি একাউন্ট রাখতে সক্ষম হতে চাইবে। যাইহোক, সমস্যা হলো যে যদি একজন ব্যক্তি "george" নামে একটি একাউন্ট তৈরি করতে পারে তবে অন্য কেউ একই প্রক্রিয়া ব্যবহার করে নিজেদের জন্য "george" নিবন্ধন করতে পারে এবং তাদের ছদ্মবেশ ধারণ করতে পারে। একমাত্র সমাধান হলো একটি ফার্স্ট-টু-ফাইল প্যারাডাইম, যেখানে প্রথম নিবন্ধনকারী সফল হয় এবং দ্বিতীয়টি ব্যর্থ হয় - একটি সমস্যা যা বিটকয়েন কনসেন্সাস প্রটোকল-এর জন্য পুরোপুরি উপযুক্ত। Namecoin হলো এই ধরনের ধারণা ব্যবহার করে একটি নাম নিবন্ধন সিস্টেমের প্রাচীনতম এবং সবচেয়ে সফল বাস্তবায়ন। - Colored coins - colored coins (opens in a new tab)-এর উদ্দেশ্য হলো এমন একটি প্রটোকল হিসাবে কাজ করা যা লোকেদের তাদের নিজস্ব ডিজিটাল মুদ্রা তৈরি করতে দেয় - অথবা, এক ইউনিট সহ একটি মুদ্রার গুরুত্বপূর্ণ তুচ্ছ ক্ষেত্রে, বিটকয়েন ব্লকচেইন-এ ডিজিটাল টোকেন তৈরি করতে দেয়। কালারড কয়েন প্রটোকল-এ, কেউ একটি নির্দিষ্ট বিটকয়েন UTXO-তে সর্বজনীনভাবে একটি রঙ বরাদ্দ করে একটি নতুন মুদ্রা "ইস্যু" করে, এবং প্রটোকল-টি পুনরাবৃত্তিমূলকভাবে অন্যান্য UTXO-এর রঙকে সেই ইনপুটগুলির রঙের সমান হিসাবে সংজ্ঞায়িত করে যা তাদের তৈরি করা লেনদেন ব্যয় করেছে (মিশ্র-রঙের ইনপুটগুলির ক্ষেত্রে কিছু বিশেষ নিয়ম প্রযোজ্য)। এটি ব্যবহারকারীদের শুধুমাত্র একটি নির্দিষ্ট রঙের UTXO ধারণকারী ওয়ালেট বজায় রাখতে এবং নিয়মিত বিটকয়েনের মতো সেগুলিকে পাঠাতে দেয়, তারা যে কোনো UTXO পায় তার রঙ নির্ধারণ করতে ব্লকচেইন-এর মাধ্যমে ব্যাকট্র্যাক করে।
- Metacoins - একটি মেটাকয়েনের পিছনের ধারণাটি হলো এমন একটি প্রটোকল থাকা যা বিটকয়েনের উপরে থাকে, মেটাকয়েন লেনদেন সংরক্ষণ করতে বিটকয়েন লেনদেন ব্যবহার করে কিন্তু একটি ভিন্ন স্টেট ট্রানজিশন ফাংশন,
APPLY'থাকে। যেহেতু মেটাকয়েন প্রটোকল বিটকয়েন ব্লকচেইন-এ অবৈধ মেটাকয়েন লেনদেন উপস্থিত হওয়া থেকে আটকাতে পারে না, তাই একটি নিয়ম যোগ করা হয়েছে যে যদিAPPLY'(S,TX)একটি ত্রুটি প্রদান করে, তবে প্রটোকল-টি ডিফল্টরূপেAPPLY'(S,TX) = Sহয়। এটি একটি নির্বিচার ক্রিপটোকারেন্সি প্রটোকল তৈরি করার জন্য একটি সহজ মেকানিজম প্রদান করে, সম্ভাব্যভাবে উন্নত বৈশিষ্ট্যগুলির সাথে যা বিটকয়েনের ভিতরে প্রয়োগ করা যায় না, তবে খুব কম উন্নয়ন খরচের সাথে যেহেতু মাইনিং এবং নেটওয়ার্কিং-এর জটিলতাগুলি ইতিমধ্যেই বিটকয়েন প্রটোকল দ্বারা পরিচালিত হয়। মেটাকয়েনগুলি কিছু শ্রেণীর আর্থিক চুক্তি, নাম নিবন্ধন এবং ডিসেন্ট্রালাইজড এক্সচেঞ্জ বাস্তবায়নের জন্য ব্যবহৃত হয়েছে।
সুতরাং, সাধারণভাবে, একটি কনসেন্সাস প্রটোকল তৈরির দিকে দুটি পদ্ধতি রয়েছে: একটি স্বাধীন নেটওয়ার্ক তৈরি করা এবং বিটকয়েনের উপরে একটি প্রটোকল তৈরি করা। পূর্ববর্তী পদ্ধতিটি, Namecoin-এর মতো অ্যাপ্লিকেশনগুলির ক্ষেত্রে যুক্তিসঙ্গতভাবে সফল হলেও, বাস্তবায়ন করা কঠিন; প্রতিটি পৃথক বাস্তবায়নের জন্য একটি স্বাধীন ব্লকচেইন বুটস্ট্র্যাপ করার পাশাপাশি সমস্ত প্রয়োজনীয় স্টেট ট্রানজিশন এবং নেটওয়ার্কিং কোড তৈরি এবং পরীক্ষা করা প্রয়োজন। অতিরিক্তভাবে, আমরা ভবিষ্যদ্বাণী করি যে ডিসেন্ট্রালাইজড কনসেন্সাস প্রযুক্তির জন্য অ্যাপ্লিকেশনগুলির সেট একটি পাওয়ার ল ডিস্ট্রিবিউশন অনুসরণ করবে যেখানে বেশিরভাগ অ্যাপ্লিকেশন তাদের নিজস্ব ব্লকচেইন-এর নিশ্চয়তা দেওয়ার জন্য খুব ছোট হবে, এবং আমরা লক্ষ্য করি যে ডিসেন্ট্রালাইজড এপ্লিকেশন-এর বড় শ্রেণী রয়েছে, বিশেষ করে ডিসেন্ট্রালাইজড অটোনোমাস সংস্থা, যাদের একে অপরের সাথে যোগাযোগ করা প্রয়োজন।
অন্যদিকে, বিটকয়েন-ভিত্তিক পদ্ধতির ত্রুটি রয়েছে যে এটি বিটকয়েনের সিমপ্লিফাইড পেমেন্ট ভেরিফিকেশন বৈশিষ্ট্যগুলির উত্তরাধিকারী হয় না। SPV বিটকয়েনের জন্য কাজ করে কারণ এটি বৈধতার প্রক্সি হিসাবে ব্লকচেইন গভীরতা ব্যবহার করতে পারে; কোনো এক পর্যায়ে, একবার কোনো লেনদেন-এর পূর্বপুরুষরা যথেষ্ট পিছনে চলে গেলে, এটা বলা নিরাপদ যে তারা বৈধভাবে স্টেট-এর অংশ ছিল। অন্যদিকে, ব্লকচেইন-ভিত্তিক মেটা-প্রটোকলগুলি ব্লকচেইন-কে এমন লেনদেন অন্তর্ভুক্ত না করতে বাধ্য করতে পারে না যা তাদের নিজস্ব প্রটোকল-এর প্রেক্ষাপটে বৈধ নয়। অতএব, একটি সম্পূর্ণ সুরক্ষিত SPV মেটা-প্রটোকল বাস্তবায়নের জন্য নির্দিষ্ট লেনদেন বৈধ কিনা তা নির্ধারণ করতে বিটকয়েন ব্লকচেইন-এর শুরু পর্যন্ত ব্যাকওয়ার্ড স্ক্যান করতে হবে। বর্তমানে, বিটকয়েন-ভিত্তিক মেটা-প্রটোকলগুলির সমস্ত "লাইট" বাস্তবায়ন ডেটা সরবরাহ করার জন্য একটি বিশ্বস্ত সার্ভারের উপর নির্ভর করে, যা তর্কযোগ্যভাবে একটি অত্যন্ত সাবঅপ্টিমাল ফলাফল বিশেষ করে যখন একটি ক্রিপটোকারেন্সি-এর প্রাথমিক উদ্দেশ্যগুলির মধ্যে একটি হলো আস্থার প্রয়োজনীয়তা দূর করা।
স্ক্রিপ্টিং
এমনকি কোনো এক্সটেনশন ছাড়াই, বিটকয়েন প্রটোকল আসলে "স্মার্ট কন্ট্রাক্ট"-এর ধারণার একটি দুর্বল সংস্করণকে সহজতর করে। বিটকয়েনে UTXO শুধুমাত্র একটি পাবলিক কি দ্বারা নয়, বরং একটি সাধারণ স্ট্যাক-ভিত্তিক প্রোগ্রামিং ভাষায় প্রকাশিত আরও জটিল স্ক্রিপ্ট দ্বারাও মালিকানাধীন হতে পারে। এই প্যারাডাইমে, সেই UTXO ব্যয়কারী একটি লেনদেন-কে অবশ্যই এমন ডেটা সরবরাহ করতে হবে যা স্ক্রিপ্টটিকে সন্তুষ্ট করে। প্রকৃতপক্ষে, এমনকি মৌলিক পাবলিক কি মালিকানা মেকানিজম একটি স্ক্রিপ্টের মাধ্যমে প্রয়োগ করা হয়: স্ক্রিপ্টটি ইনপুট হিসাবে একটি উপবৃত্তাকার বক্ররেখা সিগনেচার নেয়, লেনদেন এবং UTXO-এর মালিক এডড্রেস-এর বিপরীতে এটি যাচাই করে এবং যাচাইকরণ সফল হলে 1 এবং অন্যথায় 0 প্রদান করে। বিভিন্ন অতিরিক্ত ব্যবহারের ক্ষেত্রে অন্যান্য, আরও জটিল, স্ক্রিপ্ট বিদ্যমান। উদাহরণস্বরূপ, কেউ এমন একটি স্ক্রিপ্ট তৈরি করতে পারে যার যাচাই করার জন্য প্রদত্ত তিনটি প্রাইভেট কি-এর মধ্যে দুটির সিগনেচার প্রয়োজন ("মাল্টিসিগ"), কর্পোরেট একাউন্ট, সুরক্ষিত সেভিংস একাউন্ট এবং কিছু মার্চেন্ট এসক্রো পরিস্থিতির জন্য দরকারী একটি সেটআপ। কম্পিউটেশনাল সমস্যার সমাধানের জন্য বাউন্টি প্রদানের জন্যও স্ক্রিপ্ট ব্যবহার করা যেতে পারে, এবং কেউ এমন একটি স্ক্রিপ্টও তৈরি করতে পারে যা বলে "এই বিটকয়েন UTXO আপনার যদি আপনি একটি SPV প্রমাণ দিতে পারেন যে আপনি আমাকে এই ডিনোমিনেশনের একটি Dogecoin লেনদেন পাঠিয়েছেন", যা মূলত ডিসেন্ট্রালাইজড ক্রস-ক্রিপটোকারেন্সি এক্সচেঞ্জ-এর অনুমতি দেয়।
যাইহোক, বিটকয়েনে প্রয়োগ করা স্ক্রিপ্টিং ভাষার বেশ কয়েকটি গুরুত্বপূর্ণ সীমাবদ্ধতা রয়েছে:
- টুরিং-সম্পূর্ণতার অভাব - অর্থাৎ, যদিও বিটকয়েন স্ক্রিপ্টিং ভাষা সমর্থন করে এমন গণনার একটি বড় উপসেট রয়েছে, এটি প্রায় সবকিছু সমর্থন করে না। যে প্রধান বিভাগটি অনুপস্থিত তা হলো লুপ। লেনদেন যাচাইকরণের সময় অসীম লুপ এড়াতে এটি করা হয়; তাত্ত্বিকভাবে এটি স্ক্রিপ্ট প্রোগ্রামারদের জন্য একটি অতিক্রমযোগ্য বাধা, যেহেতু যেকোনো লুপকে একটি if স্টেটমেন্টের সাথে অন্তর্নিহিত কোডটি বহুবার পুনরাবৃত্তি করে অনুকরণ করা যেতে পারে, তবে এটি এমন স্ক্রিপ্টগুলির দিকে নিয়ে যায় যা খুব স্পেস-অদক্ষ। উদাহরণস্বরূপ, একটি বিকল্প উপবৃত্তাকার বক্ররেখা সিগনেচার এ্যালগরিদম বাস্তবায়নের জন্য সম্ভবত 256 বার পুনরাবৃত্তিমূলক গুণন রাউন্ডের প্রয়োজন হবে যা সবগুলি পৃথকভাবে কোডে অন্তর্ভুক্ত।
- ভ্যালু-ব্লাইন্ডনেস - একটি UTXO স্ক্রিপ্টের জন্য যে পরিমাণ প্রত্যাহার করা যেতে পারে তার উপর সূক্ষ্ম নিয়ন্ত্রণ প্রদান করার কোনো উপায় নেই। উদাহরণস্বরূপ, একটি ওরাকল কন্ট্রাক্টের একটি শক্তিশালী ব্যবহারের ক্ষেত্রে একটি হেজিং চুক্তি হবে, যেখানে A এবং B $1000 মূল্যের BTC রাখে এবং 30 দিন পরে স্ক্রিপ্টটি A-কে $1000 মূল্যের BTC এবং বাকিটা B-কে পাঠায়। এর জন্য USD-তে 1 BTC-এর মান নির্ধারণ করার জন্য একটি ওরাকল প্রয়োজন হবে, তবে তারপরেও এটি এখন উপলব্ধ সম্পূর্ণ কেন্দ্রীভূত সমাধানগুলির তুলনায় বিশ্বাস এবং পরিকাঠামোর প্রয়োজনীয়তার ক্ষেত্রে একটি বিশাল উন্নতি। যাইহোক, যেহেতু UTXO অল-অর-নাথিং, এটি অর্জন করার একমাত্র উপায় হলো বিভিন্ন ডিনোমিনেশনের অনেক UTXO থাকার (যেমন, 30 পর্যন্ত প্রতিটি k এর জন্য 2k এর একটি UTXO) খুব অদক্ষ হ্যাকের মাধ্যমে এবং ওরাকল-কে বেছে নিতে দেওয়া যে কোন UTXO A-কে পাঠাতে হবে এবং কোনটি B-কে।
- স্টেট-এর অভাব - UTXO হয় ব্যয় করা যেতে পারে বা অব্যয়িত হতে পারে; মাল্টি-স্টেজ কন্ট্রাক্ট বা স্ক্রিপ্টগুলির জন্য কোনো সুযোগ নেই যা এর বাইরে অন্য কোনো অভ্যন্তরীণ স্টেট রাখে। এটি মাল্টি-স্টেজ অপশন কন্ট্রাক্ট, ডিসেন্ট্রালাইজড এক্সচেঞ্জ অফার বা টু-স্টেজ ক্রিপ্টোগ্রাফিক কমিটমেন্ট প্রটোকল (নিরাপদ কম্পিউটেশনাল বাউন্টির জন্য প্রয়োজনীয়) তৈরি করা কঠিন করে তোলে। এর মানে হলো যে UTXO শুধুমাত্র সহজ, এককালীন চুক্তি তৈরি করতে ব্যবহার করা যেতে পারে এবং ডিসেন্ট্রালাইজড সংস্থাগুলির মতো আরও জটিল "স্টেটফুল" চুক্তি নয়, এবং মেটা-প্রটোকলগুলি বাস্তবায়ন করা কঠিন করে তোলে। ভ্যালু-ব্লাইন্ডনেসের সাথে মিলিত বাইনারি স্টেট-এর অর্থ হলো আরেকটি গুরুত্বপূর্ণ অ্যাপ্লিকেশন, প্রত্যাহারের সীমা, অসম্ভব।
- ব্লকচেইন-ব্লাইন্ডনেস - UTXO ব্লকচেইন ডেটা যেমন নন্স, টাইমস্ট্যাম্প এবং পূর্ববর্তী ব্লক হ্যাস-এর প্রতি অন্ধ। এটি স্ক্রিপ্টিং ভাষাকে র্যান্ডমনেসের একটি সম্ভাব্য মূল্যবান উৎস থেকে বঞ্চিত করে জুয়া এবং অন্যান্য বেশ কয়েকটি বিভাগে অ্যাপ্লিকেশনগুলিকে মারাত্মকভাবে সীমাবদ্ধ করে।
সুতরাং, আমরা ক্রিপটোকারেন্সি-এর উপরে উন্নত অ্যাপ্লিকেশন তৈরির তিনটি পদ্ধতি দেখতে পাচ্ছি: একটি নতুন ব্লকচেইন তৈরি করা, বিটকয়েনের উপরে স্ক্রিপ্টিং ব্যবহার করা এবং বিটকয়েনের উপরে একটি মেটা-প্রটোকল তৈরি করা। একটি নতুন ব্লকচেইন তৈরি করা একটি বৈশিষ্ট্য সেট তৈরিতে সীমাহীন স্বাধীনতার অনুমতি দেয়, তবে বিকাশের সময়, বুটস্ট্র্যাপিং প্রচেষ্টা এবং সুরক্ষার মূল্যে। স্ক্রিপ্টিং ব্যবহার করা বাস্তবায়ন এবং মানক করা সহজ, তবে এর ক্ষমতা খুব সীমিত, এবং মেটা-প্রটোকলগুলি, সহজ হলেও, স্কেলেবিলিটিতে ত্রুটির শিকার হয়। ইথিরিয়াম-এর সাথে, আমরা একটি বিকল্প কাঠামো তৈরি করতে চাই যা বিকাশের সহজতার পাশাপাশি আরও শক্তিশালী লাইট ক্লায়েন্ট বৈশিষ্ট্যগুলিতে আরও বেশি লাভ প্রদান করে, একই সাথে অ্যাপ্লিকেশনগুলিকে একটি অর্থনৈতিক পরিবেশ এবং ব্লকচেইন সুরক্ষা ভাগ করার অনুমতি দেয়।
ইথিরিয়াম
ইথিরিয়ামের উদ্দেশ্য হলো ডিসেন্ট্রালাইজড এপ্লিকেশন তৈরির জন্য একটি বিকল্প প্রটোকল তৈরি করা, যা এমন কিছু ভিন্ন ট্রেডঅফ প্রদান করে যা আমরা বিশ্বাস করি যে একটি বড় শ্রেণীর ডিসেন্ট্রালাইজড এপ্লিকেশনের জন্য খুব দরকারী হবে, বিশেষ করে এমন পরিস্থিতিতে যেখানে দ্রুত ডেভেলপমেন্ট সময়, ছোট এবং খুব কম ব্যবহৃত এপ্লিকেশনগুলোর জন্য নিরাপত্তা, এবং বিভিন্ন এপ্লিকেশনের খুব দক্ষতার সাথে ইন্টারঅ্যাক্ট করার ক্ষমতা গুরুত্বপূর্ণ। ইথিরিয়াম এটি করে মূলত চূড়ান্ত অ্যাবস্ট্রাক্ট ফাউন্ডেশনাল লেয়ার তৈরি করার মাধ্যমে: একটি বিল্ট-ইন টুরিং-কমপ্লিট প্রোগ্রামিং ল্যাঙ্গুয়েজ সহ একটি ব্লকচেইন, যা যে কাউকে স্মার্ট কন্ট্রাক্ট এবং ডিসেন্ট্রালাইজড এপ্লিকেশন লিখতে দেয় যেখানে তারা মালিকানা, লেনদেন ফরম্যাট এবং স্টেট ট্রানজিশন ফাংশনগুলোর জন্য তাদের নিজস্ব ইচ্ছামতো নিয়ম তৈরি করতে পারে। Namecoin-এর একটি সাধারণ সংস্করণ মাত্র দুই লাইনের কোডে লেখা যেতে পারে, এবং কারেন্সি ও রেপুটেশন সিস্টেমের মতো অন্যান্য প্রটোকলগুলো বিশ লাইনেরও কম কোডে তৈরি করা যেতে পারে। স্মার্ট কন্ট্রাক্ট, ক্রিপ্টোগ্রাফিক "বক্স" যা ভ্যালু ধারণ করে এবং শুধুমাত্র নির্দিষ্ট শর্ত পূরণ হলেই তা আনলক করে, প্ল্যাটফর্মের উপরেও তৈরি করা যেতে পারে, যা টুরিং-কমপ্লিটনেস, ভ্যালু-অ্যাওয়ারনেস, ব্লকচেইন-অ্যাওয়ারনেস এবং স্টেটের অতিরিক্ত ক্ষমতার কারণে Bitcoin স্ক্রিপ্টিংয়ের দেওয়া ক্ষমতার চেয়ে অনেক বেশি শক্তিশালী।
ইথিরিয়াম একাউন্ট
ইথিরিয়ামে, স্টেট "একাউন্ট" নামক অবজেক্ট দিয়ে গঠিত, যেখানে প্রতিটি একাউন্টের একটি 20-বাইট এডড্রেস থাকে এবং স্টেট ট্রানজিশন হলো একাউন্টগুলোর মধ্যে ভ্যালু এবং তথ্যের সরাসরি ট্রান্সফার। একটি ইথিরিয়াম একাউন্টে চারটি ফিল্ড থাকে:
- নন্স, একটি কাউন্টার যা নিশ্চিত করতে ব্যবহৃত হয় যে প্রতিটি লেনদেন শুধুমাত্র একবার প্রসেস করা যেতে পারে
- একাউন্টের বর্তমান ইথার ব্যালেন্স
- একাউন্টের কন্ট্রাক্ট কোড, যদি থাকে
- একাউন্টের স্টোরেজ (ডিফল্টভাবে খালি থাকে)
"ইথার" হলো ইথিরিয়ামের প্রধান অভ্যন্তরীণ ক্রিপ্টো-জ্বালানি, এবং এটি ট্রানজেকশন ফি প্রদান করতে ব্যবহৃত হয়। সাধারণভাবে, দুই ধরনের একাউন্ট রয়েছে: এক্সটার্নালি ওনড একাউন্ট, যা প্রাইভেট কি দ্বারা নিয়ন্ত্রিত হয়, এবং কন্ট্রাক্ট একাউন্ট, যা তাদের কন্ট্রাক্ট কোড দ্বারা নিয়ন্ত্রিত হয়। একটি এক্সটার্নালি ওনড একাউন্টে কোনো কোড থাকে না, এবং কেউ একটি লেনদেন তৈরি এবং সাইন করার মাধ্যমে একটি এক্সটার্নালি ওনড একাউন্ট থেকে মেসেজ পাঠাতে পারে; একটি কন্ট্রাক্ট একাউন্টে, প্রতিবার যখন কন্ট্রাক্ট একাউন্টটি একটি মেসেজ গ্রহণ করে তখন এর কোড সক্রিয় হয়, যা এটিকে অভ্যন্তরীণ স্টোরেজে পড়তে এবং লিখতে এবং অন্যান্য মেসেজ পাঠাতে বা এর পরিবর্তে কন্ট্রাক্ট তৈরি করতে দেয়।
মনে রাখবেন যে ইথিরিয়ামে "কন্ট্রাক্ট" গুলোকে এমন কিছু হিসেবে দেখা উচিত নয় যা "পূরণ" বা "মেনে চলা" উচিত; বরং, এগুলো অনেকটা "স্বায়ত্তশাসিত এজেন্ট" এর মতো যা ইথিরিয়াম এক্সিকিউশন এনভায়রনমেন্টের ভেতরে থাকে, যখন কোনো মেসেজ বা লেনদেন দ্বারা "পোক" করা হয় তখন সর্বদা একটি নির্দিষ্ট কোড এক্সিকিউট করে, এবং তাদের নিজস্ব ইথার ব্যালেন্স এবং পারসিস্টেন্ট ভেরিয়েবলগুলোর ট্র্যাক রাখতে তাদের নিজস্ব কি/ভ্যালু স্টোরের উপর সরাসরি নিয়ন্ত্রণ থাকে।
মেসেজ এবং লেনদেন
ইথিরিয়ামে "লেনদেন" শব্দটি সাইন করা ডাটা প্যাকেজকে বোঝাতে ব্যবহৃত হয় যা একটি এক্সটার্নালি ওনড একাউন্ট থেকে পাঠানোর জন্য একটি মেসেজ স্টোর করে। লেনদেনে থাকে:
- মেসেজের প্রাপক
- প্রেরককে শনাক্তকারী একটি সিগনেচার
- প্রেরক থেকে প্রাপকের কাছে ট্রান্সফার করার জন্য ইথারের পরিমাণ
- একটি ঐচ্ছিক ডাটা ফিল্ড
- একটি
STARTGASভ্যালু, যা লেনদেন এক্সিকিউশনের জন্য অনুমোদিত সর্বোচ্চ সংখ্যক কম্পিউটেশনাল ধাপকে উপস্থাপন করে - একটি
GASPRICEভ্যালু, যা প্রেরক প্রতি কম্পিউটেশনাল ধাপে যে ফি প্রদান করে তা উপস্থাপন করে
প্রথম তিনটি হলো যেকোনো ক্রিপটোকারেন্সিতে প্রত্যাশিত স্ট্যান্ডার্ড ফিল্ড। ডাটা ফিল্ডের ডিফল্টভাবে কোনো কাজ নেই, তবে ভার্চুয়াল মেশিনের একটি অপকোড রয়েছে যা ব্যবহার করে একটি কন্ট্রাক্ট ডাটা অ্যাক্সেস করতে পারে; উদাহরণস্বরূপ, যদি একটি কন্ট্রাক্ট অন-ব্লকচেইন ডোমেইন রেজিস্ট্রেশন সার্ভিস হিসেবে কাজ করে, তবে এটি এর কাছে পাঠানো ডাটাকে দুটি "ফিল্ড" ধারণকারী হিসেবে ব্যাখ্যা করতে চাইতে পারে, প্রথম ফিল্ডটি হলো রেজিস্টার করার জন্য একটি ডোমেইন এবং দ্বিতীয় ফিল্ডটি হলো যে আইপি এডড্রেসটিতে এটি রেজিস্টার করা হবে। কন্ট্রাক্টটি মেসেজ ডাটা থেকে এই ভ্যালুগুলো পড়বে এবং সেগুলোকে যথাযথভাবে স্টোরেজে রাখবে।
ইথিরিয়ামের অ্যান্টি-ডিনায়াল অফ সার্ভিস মডেলের জন্য STARTGAS এবং GASPRICE ফিল্ডগুলো অত্যন্ত গুরুত্বপূর্ণ। কোডে দুর্ঘটনাবশত বা ক্ষতিকারক ইনফিনিট লুপ বা অন্যান্য কম্পিউটেশনাল অপচয় রোধ করার জন্য, প্রতিটি লেনদেনের জন্য এটি কতগুলো কম্পিউটেশনাল ধাপের কোড এক্সিকিউশন ব্যবহার করতে পারে তার একটি সীমা নির্ধারণ করা প্রয়োজন। কম্পিউটেশনের মৌলিক একক হলো "গ্যাস"; সাধারণত, একটি কম্পিউটেশনাল ধাপের খরচ 1 গ্যাস, তবে কিছু অপারেশনে বেশি পরিমাণ গ্যাস খরচ হয় কারণ সেগুলো কম্পিউটেশনালি বেশি ব্যয়বহুল, অথবা স্টেটের অংশ হিসেবে স্টোর করতে হবে এমন ডাটার পরিমাণ বাড়িয়ে দেয়। লেনদেনের ডাটার প্রতিটি বাইটের জন্য 5 গ্যাস ফিও রয়েছে। ফি সিস্টেমের উদ্দেশ্য হলো একজন আক্রমণকারীকে কম্পিউটেশন, ব্যান্ডউইথ এবং স্টোরেজ সহ তাদের ব্যবহৃত প্রতিটি রিসোর্সের জন্য আনুপাতিক হারে অর্থ প্রদান করতে বাধ্য করা; তাই, যেকোনো লেনদেন যা নেটওয়ার্ককে এই রিসোর্সগুলোর যেকোনোটির বেশি পরিমাণ ব্যবহার করতে পরিচালিত করে, তার একটি গ্যাস ফি থাকতে হবে যা বৃদ্ধির প্রায় সমানুপাতিক।
মেসেজ
কন্ট্রাক্টগুলোর অন্যান্য কন্ট্রাক্টে "মেসেজ" পাঠানোর ক্ষমতা রয়েছে। মেসেজগুলো হলো ভার্চুয়াল অবজেক্ট যা কখনো সিরিয়ালাইজ করা হয় না এবং শুধুমাত্র ইথিরিয়াম এক্সিকিউশন এনভায়রনমেন্টে বিদ্যমান থাকে। একটি মেসেজে থাকে:
- মেসেজের প্রেরক (অন্তর্নিহিত)
- মেসেজের প্রাপক
- মেসেজের পাশাপাশি ট্রান্সফার করার জন্য ইথারের পরিমাণ
- একটি ঐচ্ছিক ডাটা ফিল্ড
- একটি
STARTGASভ্যালু
মূলত, একটি মেসেজ একটি লেনদেনের মতোই, তবে এটি একটি কন্ট্রাক্ট দ্বারা তৈরি হয়, কোনো এক্সটার্নাল অ্যাক্টর দ্বারা নয়। একটি মেসেজ তৈরি হয় যখন বর্তমানে কোড এক্সিকিউট করা একটি কন্ট্রাক্ট CALL অপকোড এক্সিকিউট করে, যা একটি মেসেজ তৈরি এবং এক্সিকিউট করে। একটি লেনদেনের মতো, একটি মেসেজ প্রাপক একাউন্টকে তার কোড রান করতে পরিচালিত করে। সুতরাং, এক্সটার্নাল অ্যাক্টররা যেভাবে পারে ঠিক সেভাবেই কন্ট্রাক্টগুলো অন্যান্য কন্ট্রাক্টের সাথে সম্পর্ক রাখতে পারে।
মনে রাখবেন যে একটি লেনদেন বা কন্ট্রাক্ট দ্বারা নির্ধারিত গ্যাস অ্যালাউন্স সেই লেনদেন এবং সমস্ত সাব-এক্সিকিউশন দ্বারা ব্যবহৃত মোট গ্যাসের ক্ষেত্রে প্রযোজ্য। উদাহরণস্বরূপ, যদি একজন এক্সটার্নাল অ্যাক্টর A 1000 গ্যাস সহ B-কে একটি লেনদেন পাঠায়, এবং B C-কে একটি মেসেজ পাঠানোর আগে 600 গ্যাস ব্যবহার করে, এবং C-এর অভ্যন্তরীণ এক্সিকিউশন ফিরে আসার আগে 300 গ্যাস ব্যবহার করে, তবে গ্যাস শেষ হওয়ার আগে B আরও 100 গ্যাস খরচ করতে পারে।
ইথিরিয়াম স্টেট ট্রানজিশন ফাংশন
ইথিরিয়াম স্টেট ট্রানজিশন ফাংশন, APPLY(S,TX) -> S' কে নিম্নরূপ সংজ্ঞায়িত করা যেতে পারে:
- লেনদেনটি সুগঠিত কিনা (অর্থাৎ, সঠিক সংখ্যক ভ্যালু আছে কিনা), সিগনেচারটি ভ্যালিড কিনা এবং নন্সটি প্রেরকের একাউন্টের নন্সের সাথে মেলে কিনা তা চেক করুন। যদি না হয়, তবে একটি এরর রিটার্ন করুন।
- ট্রানজেকশন ফি
STARTGAS * GASPRICEহিসেবে হিসাব করুন এবং সিগনেচার থেকে প্রেরকের এডড্রেস নির্ধারণ করুন। প্রেরকের একাউন্ট ব্যালেন্স থেকে ফি বিয়োগ করুন এবং প্রেরকের নন্স বৃদ্ধি করুন। যদি খরচ করার মতো পর্যাপ্ত ব্যালেন্স না থাকে, তবে একটি এরর রিটার্ন করুন। GAS = STARTGASইনিশিয়ালাইজ করুন, এবং লেনদেনের বাইটগুলোর জন্য পে করতে প্রতি বাইটে একটি নির্দিষ্ট পরিমাণ গ্যাস কেটে নিন।- প্রেরকের একাউন্ট থেকে প্রাপকের একাউন্টে লেনদেনের ভ্যালু ট্রান্সফার করুন। যদি প্রাপকের একাউন্টটি এখনও বিদ্যমান না থাকে, তবে এটি তৈরি করুন। যদি প্রাপকের একাউন্টটি একটি কন্ট্রাক্ট হয়, তবে কন্ট্রাক্টের কোডটি সম্পূর্ণ হওয়া পর্যন্ত বা এক্সিকিউশনে গ্যাস শেষ না হওয়া পর্যন্ত রান করুন।
- যদি প্রেরকের কাছে পর্যাপ্ত অর্থ না থাকার কারণে ভ্যালু ট্রান্সফার ব্যর্থ হয়, অথবা কোড এক্সিকিউশনে গ্যাস শেষ হয়ে যায়, তবে ফি প্রদান ছাড়া সমস্ত স্টেট পরিবর্তন রিভার্ট করুন এবং ফিগুলো মাইনারের একাউন্টে যোগ করুন।
- অন্যথায়, অবশিষ্ট সমস্ত গ্যাসের জন্য ফি প্রেরককে রিফান্ড করুন এবং ব্যবহৃত গ্যাসের জন্য প্রদান করা ফি মাইনারকে পাঠান।
উদাহরণস্বরূপ, ধরুন যে কন্ট্রাক্টের কোডটি হলো:
if !self.storage[calldataload(0)]:
self.storage[calldataload(0)] = calldataload(32)
মনে রাখবেন যে বাস্তবে কন্ট্রাক্ট কোড লো-লেভেল EVM কোডে লেখা হয়; এই উদাহরণটি স্পষ্টতার জন্য আমাদের অন্যতম হাই-লেভেল ল্যাঙ্গুয়েজ Serpent-এ লেখা হয়েছে, এবং এটি EVM কোডে কম্পাইল করা যেতে পারে। ধরুন যে কন্ট্রাক্টের স্টোরেজ খালি অবস্থায় শুরু হয়, এবং 10 ইথার ভ্যালু, 2000 গ্যাস, 0.001 ইথার গ্যাস প্রাইস এবং 64 বাইট ডাটা সহ একটি লেনদেন পাঠানো হয়, যেখানে 0-31 বাইট 2 সংখ্যাটিকে উপস্থাপন করে এবং 32-63 বাইট CHARLIE স্ট্রিংটিকে উপস্থাপন করে। এই ক্ষেত্রে স্টেট ট্রানজিশন ফাংশনের প্রক্রিয়াটি নিম্নরূপ:
- লেনদেনটি ভ্যালিড এবং সুগঠিত কিনা তা চেক করুন।
- লেনদেনের প্রেরকের কাছে কমপক্ষে 2000 * 0.001 = 2 ইথার আছে কিনা তা চেক করুন। যদি থাকে, তবে প্রেরকের একাউন্ট থেকে 2 ইথার বিয়োগ করুন।
- গ্যাস = 2000 ইনিশিয়ালাইজ করুন; ধরে নিচ্ছি লেনদেনটি 170 বাইট দীর্ঘ এবং বাইট-ফি 5, 850 বিয়োগ করুন যাতে 1150 গ্যাস অবশিষ্ট থাকে।
- প্রেরকের একাউন্ট থেকে আরও 10 ইথার বিয়োগ করুন এবং এটি কন্ট্রাক্টের একাউন্টে যোগ করুন।
- কোডটি রান করুন। এই ক্ষেত্রে, এটি সহজ: এটি চেক করে যে ইনডেক্স
2-এ কন্ট্রাক্টের স্টোরেজ ব্যবহার করা হয়েছে কিনা, লক্ষ্য করে যে এটি হয়নি, এবং তাই এটি ইনডেক্স2-এর স্টোরেজকেCHARLIEভ্যালুতে সেট করে। ধরুন এতে 187 গ্যাস লাগে, তাই অবশিষ্ট গ্যাসের পরিমাণ হলো 1150 - 187 = 963 - প্রেরকের একাউন্টে 963 * 0.001 = 0.963 ইথার ফেরত যোগ করুন এবং ফলাফলস্বরূপ স্টেটটি রিটার্ন করুন।
যদি লেনদেনের প্রাপক প্রান্তে কোনো কন্ট্রাক্ট না থাকে, তবে মোট ট্রানজেকশন ফি কেবল প্রদত্ত GASPRICE-কে বাইটে লেনদেনের দৈর্ঘ্য দিয়ে গুণ করার সমান হবে, এবং লেনদেনের পাশাপাশি পাঠানো ডাটা অপ্রাসঙ্গিক হবে।
মনে রাখবেন যে রিভার্টের ক্ষেত্রে মেসেজগুলো লেনদেনের সমতুল্যভাবে কাজ করে: যদি কোনো মেসেজ এক্সিকিউশনে গ্যাস শেষ হয়ে যায়, তবে সেই মেসেজের এক্সিকিউশন এবং সেই এক্সিকিউশন দ্বারা ট্রিগার হওয়া অন্যান্য সমস্ত এক্সিকিউশন রিভার্ট হয়, তবে প্যারেন্ট এক্সিকিউশনগুলোর রিভার্ট হওয়ার প্রয়োজন নেই। এর মানে হলো একটি কন্ট্রাক্টের জন্য অন্য একটি কন্ট্রাক্টকে কল করা "নিরাপদ", যেমন A যদি G গ্যাস দিয়ে B-কে কল করে তবে A-এর এক্সিকিউশন সর্বোচ্চ G গ্যাস হারানোর নিশ্চয়তা দেয়। পরিশেষে, মনে রাখবেন যে একটি অপকোড রয়েছে, CREATE, যা একটি কন্ট্রাক্ট তৈরি করে; এর এক্সিকিউশন মেকানিক্স সাধারণত CALL-এর মতোই, ব্যতিক্রম হলো এক্সিকিউশনের আউটপুট একটি নতুন তৈরি করা কন্ট্রাক্টের কোড নির্ধারণ করে।
কোড এক্সিকিউশন
ইথিরিয়াম কন্ট্রাক্টের কোড একটি লো-লেভেল, স্ট্যাক-ভিত্তিক বাইটকোড ল্যাঙ্গুয়েজে লেখা হয়, যাকে "ইথিরিয়াম ভার্চুয়াল মেশিন কোড" বা "EVM কোড" বলা হয়। কোডটি বাইটের একটি সিরিজ নিয়ে গঠিত, যেখানে প্রতিটি বাইট একটি অপারেশনকে উপস্থাপন করে। সাধারণভাবে, কোড এক্সিকিউশন হলো একটি ইনফিনিট লুপ যা বর্তমান প্রোগ্রাম কাউন্টারে (যা শূন্য থেকে শুরু হয়) বারবার অপারেশনটি সম্পাদন করে এবং তারপর প্রোগ্রাম কাউন্টারকে এক করে বৃদ্ধি করে, যতক্ষণ না কোডের শেষ প্রান্তে পৌঁছায় বা কোনো এরর বা STOP বা RETURN ইনস্ট্রাকশন শনাক্ত হয়। ডাটা স্টোর করার জন্য অপারেশনগুলোর তিন ধরনের স্পেসে অ্যাক্সেস রয়েছে:
- স্ট্যাক, একটি লাস্ট-ইন-ফার্স্ট-আউট কন্টেইনার যেখানে ভ্যালু পুশ এবং পপ করা যায়
- মেমরি, একটি অসীমভাবে সম্প্রসারণযোগ্য বাইট অ্যারে
- কন্ট্রাক্টের দীর্ঘমেয়াদী স্টোরেজ, একটি কি/ভ্যালু স্টোর। স্ট্যাক এবং মেমরির বিপরীতে, যা কম্পিউটেশন শেষ হওয়ার পরে রিসেট হয়ে যায়, স্টোরেজ দীর্ঘমেয়াদে টিকে থাকে।
কোডটি ইনকামিং মেসেজের ভ্যালু, প্রেরক এবং ডাটা, সেইসাথে ব্লক হেডার ডাটা অ্যাক্সেস করতে পারে এবং কোডটি আউটপুট হিসেবে ডাটার একটি বাইট অ্যারেও রিটার্ন করতে পারে।
EVM কোডের ফর্মাল এক্সিকিউশন মডেলটি আশ্চর্যজনকভাবে সহজ। ইথিরিয়াম ভার্চুয়াল মেশিন চলাকালীন, এর সম্পূর্ণ কম্পিউটেশনাল স্টেটকে (block_state, transaction, message, code, memory, stack, pc, gas) টুপল দ্বারা সংজ্ঞায়িত করা যেতে পারে, যেখানে block_state হলো গ্লোবাল স্টেট যা সমস্ত একাউন্ট ধারণ করে এবং এতে ব্যালেন্স ও স্টোরেজ অন্তর্ভুক্ত থাকে। এক্সিকিউশনের প্রতিটি রাউন্ডের শুরুতে, code-এর pc তম বাইট (অথবা 0 যদি pc >= len(code) হয়) নিয়ে বর্তমান ইনস্ট্রাকশনটি পাওয়া যায়, এবং প্রতিটি ইনস্ট্রাকশনের নিজস্ব সংজ্ঞা রয়েছে যে এটি কীভাবে টুপলকে প্রভাবিত করে। উদাহরণস্বরূপ, ADD স্ট্যাক থেকে দুটি আইটেম পপ করে এবং তাদের যোগফল পুশ করে, gas 1 কমায় এবং pc 1 বাড়ায়, এবং SSTORE স্ট্যাক থেকে শীর্ষ দুটি আইটেম পপ করে এবং প্রথম আইটেম দ্বারা নির্দিষ্ট করা ইনডেক্সে কন্ট্রাক্টের স্টোরেজে দ্বিতীয় আইটেমটি ইনসার্ট করে। যদিও জাস্ট-ইন-টাইম কম্পাইলেশনের মাধ্যমে ইথিরিয়াম ভার্চুয়াল মেশিন এক্সিকিউশন অপ্টিমাইজ করার অনেক উপায় রয়েছে, ইথিরিয়ামের একটি বেসিক ইমপ্লিমেন্টেশন কয়েকশ লাইনের কোডেই করা যেতে পারে।
ব্লকচেইন এবং মাইনিং
ইথিরিয়াম ব্লকচেইন অনেক দিক থেকেই Bitcoin ব্লকচেইনের মতো, যদিও এর কিছু পার্থক্য রয়েছে। ব্লকচেইন আর্কিটেকচারের ক্ষেত্রে ইথিরিয়াম এবং Bitcoin-এর মধ্যে প্রধান পার্থক্য হলো, Bitcoin-এর বিপরীতে, ইথিরিয়াম ব্লকগুলোতে লেনদেনের তালিকা এবং সবচেয়ে সাম্প্রতিক স্টেট উভয়েরই একটি কপি থাকে। এছাড়া, আরও দুটি ভ্যালু, ব্লক নম্বর এবং ডিফিকাল্টি, ব্লকে স্টোর করা হয়। ইথিরিয়ামে বেসিক ব্লক ভ্যালিডেশন এ্যালগরিদম নিম্নরূপ:
- রেফারেন্স করা আগের ব্লকটি বিদ্যমান এবং ভ্যালিড কিনা তা চেক করুন।
- চেক করুন যে ব্লকের টাইমস্ট্যাম্প রেফারেন্স করা আগের ব্লকের চেয়ে বেশি এবং ভবিষ্যতের 15 মিনিটের চেয়ে কম
- চেক করুন যে ব্লক নম্বর, ডিফিকাল্টি, লেনদেনের রুট, আঙ্কেল রুট এবং গ্যাস লিমিট (বিভিন্ন লো-লেভেল ইথিরিয়াম-নির্দিষ্ট কনসেপ্ট) ভ্যালিড কিনা।
- ব্লকের প্রুফ-অফ-ওয়ার্ক ভ্যালিড কিনা তা চেক করুন।
- ধরি
S[0]হলো আগের ব্লকের শেষের স্টেট। - ধরি
TXহলো ব্লকের লেনদেনের তালিকা, যেখানেnটি লেনদেন রয়েছে।0...n-1এর মধ্যে সমস্তiএর জন্য,S[i+1] = APPLY(S[i],TX[i])সেট করুন। যদি কোনো অ্যাপ্লিকেশন একটি এরর রিটার্ন করে, অথবা যদি এই পয়েন্ট পর্যন্ত ব্লকে ব্যবহৃত মোট গ্যাসGASLIMITঅতিক্রম করে, তবে একটি এরর রিটার্ন করুন। - ধরি
S_FINALহলোS[n], তবে মাইনারকে দেওয়া ব্লক রিওয়ার্ড যোগ করে। - চেক করুন যে স্টেট
S_FINAL-এর মার্কেল ট্রি রুট ব্লক হেডারে দেওয়া চূড়ান্ত স্টেট রুটের সমান কিনা। যদি হয়, তবে ব্লকটি ভ্যালিড; অন্যথায়, এটি ভ্যালিড নয়।
প্রথম দেখায় এই পদ্ধতিটি অত্যন্ত অদক্ষ মনে হতে পারে, কারণ প্রতিটি ব্লকের সাথে সম্পূর্ণ স্টেট স্টোর করতে হয়, তবে বাস্তবে দক্ষতা Bitcoin-এর তুলনীয় হওয়া উচিত। এর কারণ হলো স্টেটটি ট্রি স্ট্রাকচারে স্টোর করা হয়, এবং প্রতিটি ব্লকের পরে ট্রির শুধুমাত্র একটি ছোট অংশ পরিবর্তন করতে হয়। সুতরাং, সাধারণভাবে, দুটি সংলগ্ন ব্লকের মধ্যে ট্রির বিশাল অংশ একই হওয়া উচিত, এবং তাই ডাটা একবার স্টোর করা যেতে পারে এবং পয়েন্টার (অর্থাৎ, সাবট্রির হ্যাসগুলো) ব্যবহার করে দুবার রেফারেন্স করা যেতে পারে। এটি সম্পন্ন করার জন্য "প্যাট্রিসিয়া ট্রি" নামে পরিচিত একটি বিশেষ ধরনের ট্রি ব্যবহার করা হয়, যার মধ্যে মার্কেল ট্রি কনসেপ্টের একটি পরিবর্তন অন্তর্ভুক্ত রয়েছে যা নোডগুলোকে দক্ষতার সাথে ইনসার্ট এবং ডিলিট করার অনুমতি দেয়, শুধু পরিবর্তন নয়। উপরন্তু, যেহেতু সমস্ত স্টেট তথ্য শেষ ব্লকের অংশ, তাই সম্পূর্ণ ব্লকচেইন ইতিহাস স্টোর করার কোনো প্রয়োজন নেই - এমন একটি কৌশল যা, যদি Bitcoin-এ প্রয়োগ করা যেত, তবে স্পেসে 5-20 গুণ সাশ্রয় প্রদান করতে পারে বলে হিসাব করা যায়।
ফিজিক্যাল হার্ডওয়্যারের ক্ষেত্রে একটি সাধারণভাবে জিজ্ঞাসিত প্রশ্ন হলো কন্ট্রাক্ট কোড "কোথায়" এক্সিকিউট করা হয়। এর একটি সহজ উত্তর রয়েছে: কন্ট্রাক্ট কোড এক্সিকিউট করার প্রক্রিয়াটি স্টেট ট্রানজিশন ফাংশনের সংজ্ঞার অংশ, যা ব্লক ভ্যালিডেশন এ্যালগরিদমের অংশ, তাই যদি কোনো লেনদেন ব্লক B-তে যোগ করা হয় তবে সেই লেনদেন দ্বারা তৈরি কোড এক্সিকিউশনটি বর্তমান এবং ভবিষ্যতের সমস্ত নোড দ্বারা এক্সিকিউট করা হবে, যারা ব্লক B ডাউনলোড এবং ভ্যালিডেট করে।
অ্যাপ্লিকেশন
সাধারণত, ইথিরিয়ামের উপর তিন ধরনের অ্যাপ্লিকেশন রয়েছে। প্রথম বিভাগটি হলো আর্থিক অ্যাপ্লিকেশন, যা ব্যবহারকারীদের তাদের অর্থ ব্যবহার করে চুক্তি পরিচালনা এবং চুক্তিতে প্রবেশ করার আরও শক্তিশালী উপায় প্রদান করে। এর মধ্যে রয়েছে সাব-কারেন্সি, আর্থিক ডেরিভেটিভস, হেজিং চুক্তি, সেভিংস ওয়ালেট, উইল এবং শেষ পর্যন্ত কিছু পূর্ণাঙ্গ কর্মসংস্থান চুক্তিও। দ্বিতীয় বিভাগটি হলো আধা-আর্থিক অ্যাপ্লিকেশন, যেখানে অর্থ জড়িত থাকে তবে যা করা হচ্ছে তার একটি ভারী অ-আর্থিক দিকও রয়েছে; একটি নিখুঁত উদাহরণ হলো কম্পিউটেশনাল সমস্যার সমাধানের জন্য সেলফ-এনফোর্সিং বাউন্টি। অবশেষে, অনলাইন ভোটিং এবং ডিসেন্ট্রালাইজড গভর্নেন্স এর মতো অ্যাপ্লিকেশন রয়েছে যা মোটেও আর্থিক নয়।
টোকেন সিস্টেম
অন-ব্লকচেইন টোকেন সিস্টেমের অনেক অ্যাপ্লিকেশন রয়েছে, যার মধ্যে রয়েছে USD বা সোনার মতো সম্পদ উপস্থাপনকারী সাব-কারেন্সি থেকে শুরু করে কোম্পানির স্টক, স্মার্ট প্রপার্টি উপস্থাপনকারী পৃথক টোকেন, সুরক্ষিত আনফোরজেবল কুপন এবং এমনকি প্রচলিত মূল্যের সাথে কোনো সম্পর্ক নেই এমন টোকেন সিস্টেম, যা ইনসেন্টিভের জন্য পয়েন্ট সিস্টেম হিসেবে ব্যবহৃত হয়। ইথিরিয়ামে টোকেন সিস্টেম বাস্তবায়ন করা আশ্চর্যজনকভাবে সহজ। বোঝার মূল বিষয়টি হলো একটি কারেন্সি বা টোকেন সিস্টেম মৌলিকভাবে একটি ডাটাবেস যার একটি অপারেশন রয়েছে: A থেকে X ইউনিট বিয়োগ করুন এবং B কে X ইউনিট দিন, এই শর্তে যে (i) লেনদেন এর আগে A এর কাছে কমপক্ষে X ইউনিট ছিল এবং (2) লেনদেন টি A দ্বারা অনুমোদিত। একটি টোকেন সিস্টেম বাস্তবায়নের জন্য যা প্রয়োজন তা হলো এই লজিকটি একটি চুক্তিতে বাস্তবায়ন করা।
Serpent-এ একটি টোকেন সিস্টেম বাস্তবায়নের জন্য বেসিক কোডটি নিচের মতো:
def send(to, value):
if self.storage[msg.sender] >= value:
self.storage[msg.sender] = self.storage[msg.sender] - value
self.storage[to] = self.storage[to] + value
এটি মূলত এই নথির উপরে বর্ণিত "ব্যাংকিং সিস্টেম" স্টেট ট্রানজিশন ফাংশনের একটি আক্ষরিক বাস্তবায়ন। প্রথম স্থানে কারেন্সি ইউনিট বিতরণের প্রাথমিক ধাপ এবং অন্যান্য কয়েকটি এজ কেস প্রদান করার জন্য কোডের কয়েকটি অতিরিক্ত লাইন যোগ করতে হবে এবং আদর্শভাবে একটি ফাংশন যোগ করা হবে যাতে অন্যান্য চুক্তিগুলি একটি এডড্রেস এর ব্যালেন্স জানতে পারে। তবে এটাই সব। তাত্ত্বিকভাবে, সাব-কারেন্সি হিসেবে কাজ করা ইথিরিয়াম-ভিত্তিক টোকেন সিস্টেমগুলি সম্ভাব্যভাবে আরেকটি গুরুত্বপূর্ণ বৈশিষ্ট্য অন্তর্ভুক্ত করতে পারে যা অনচেইন বিটকয়েন-ভিত্তিক মেটা-কারেন্সিগুলিতে নেই: সরাসরি সেই কারেন্সিতে ট্রানজেকশন ফি প্রদান করার ক্ষমতা। এটি যেভাবে বাস্তবায়িত হবে তা হলো চুক্তিটি একটি ইথার ব্যালেন্স বজায় রাখবে যার মাধ্যমে এটি প্রেরককে ফি প্রদানের জন্য ব্যবহৃত ইথার ফেরত দেবে এবং এটি ফি হিসেবে নেওয়া অভ্যন্তরীণ কারেন্সি ইউনিট সংগ্রহ করে এবং একটি ধ্রুবক চলমান নিলামে পুনরায় বিক্রি করে এই ব্যালেন্সটি পুনরায় পূরণ করবে। ব্যবহারকারীদের এইভাবে ইথার দিয়ে তাদের একাউন্ট "সক্রিয়" করতে হবে, তবে একবার ইথার সেখানে থাকলে এটি পুনরায় ব্যবহারযোগ্য হবে কারণ চুক্তিটি প্রতিবার এটি ফেরত দেবে।
আর্থিক ডেরিভেটিভস এবং স্টেবল-ভ্যালু কারেন্সি
আর্থিক ডেরিভেটিভস হলো একটি "স্মার্ট কন্ট্রাক্ট" এর সবচেয়ে সাধারণ অ্যাপ্লিকেশন এবং কোডে বাস্তবায়ন করা সবচেয়ে সহজগুলোর মধ্যে একটি। আর্থিক চুক্তি বাস্তবায়নের প্রধান চ্যালেঞ্জ হলো এগুলোর বেশিরভাগেরই একটি বাহ্যিক প্রাইস টিকারের রেফারেন্স প্রয়োজন; উদাহরণস্বরূপ, একটি অত্যন্ত কাঙ্ক্ষিত অ্যাপ্লিকেশন হলো একটি স্মার্ট কন্ট্রাক্ট যা মার্কিন ডলারের সাপেক্ষে ইথার (বা অন্য ক্রিপটোকারেন্সি) এর অস্থিরতার বিরুদ্ধে হেজ করে, তবে এটি করার জন্য চুক্তিটিকে ETH/USD এর মান কত তা জানতে হবে। এটি করার সবচেয়ে সহজ উপায় হলো একটি নির্দিষ্ট পক্ষের (যেমন, NASDAQ) দ্বারা পরিচালিত একটি "ডাটা ফিড" চুক্তির মাধ্যমে, যা এমনভাবে ডিজাইন করা হয়েছে যাতে সেই পক্ষের প্রয়োজন অনুযায়ী চুক্তিটি আপডেট করার ক্ষমতা থাকে এবং এমন একটি ইন্টারফেস প্রদান করে যা অন্যান্য চুক্তিগুলিকে সেই চুক্তিতে একটি বার্তা পাঠাতে এবং মূল্য প্রদানকারী একটি প্রতিক্রিয়া ফিরে পেতে দেয়।
সেই গুরুত্বপূর্ণ উপাদানটি বিবেচনা করে, হেজিং চুক্তিটি নিচের মতো দেখাবে:
- পক্ষ A এর 1000 ইথার ইনপুট করার জন্য অপেক্ষা করুন।
- পক্ষ B এর 1000 ইথার ইনপুট করার জন্য অপেক্ষা করুন।
- ডাটা ফিড চুক্তিতে কোয়েরি করে গণনা করা 1000 ইথারের USD মান স্টোরেজে রেকর্ড করুন, ধরুন এটি $x।
- 30 দিন পর, A বা B কে চুক্তিটি "পুনরায় সক্রিয়" করার অনুমতি দিন যাতে A কে $x মূল্যের ইথার (নতুন মূল্য পেতে ডাটা ফিড চুক্তিতে আবার কোয়েরি করে গণনা করা) এবং বাকিটা B কে পাঠানো যায়।
ক্রিপ্টো-কমার্সে এই ধরনের চুক্তির উল্লেখযোগ্য সম্ভাবনা থাকবে। ক্রিপটোকারেন্সি সম্পর্কে উল্লিখিত প্রধান সমস্যাগুলির মধ্যে একটি হলো এটি অস্থির; যদিও অনেক ব্যবহারকারী এবং ব্যবসায়ী ক্রিপ্টোগ্রাফিক সম্পদ লেনদেনের নিরাপত্তা এবং সুবিধা চাইতে পারেন, তারা একদিনে তাদের তহবিলের মূল্যের 23% হারানোর সম্ভাবনার মুখোমুখি হতে নাও চাইতে পারেন। এখন পর্যন্ত, সবচেয়ে বেশি প্রস্তাবিত সমাধান হলো ইস্যুকারী-সমর্থিত সম্পদ; ধারণাটি হলো যে একজন ইস্যুকারী একটি সাব-কারেন্সি তৈরি করে যেখানে তাদের ইউনিট ইস্যু এবং বাতিল করার অধিকার থাকে এবং যে কেউ তাদের (অফলাইনে) একটি নির্দিষ্ট অন্তর্নিহিত সম্পদের (যেমন, সোনা, USD) এক ইউনিট প্রদান করে তাকে কারেন্সির এক ইউনিট প্রদান করে। ইস্যুকারী তখন প্রতিশ্রুতি দেয় যে যে কেউ ক্রিপ্টো-সম্পদের এক ইউনিট ফেরত পাঠাবে তাকে অন্তর্নিহিত সম্পদের এক ইউনিট প্রদান করবে। এই মেকানিজমটি যেকোনো অ-ক্রিপ্টোগ্রাফিক সম্পদকে একটি ক্রিপ্টোগ্রাফিক সম্পদে "উন্নত" করার অনুমতি দেয়, যদি ইস্যুকারীকে বিশ্বাস করা যায়।
তবে বাস্তবে, ইস্যুকারীরা সবসময় বিশ্বস্ত হয় না এবং কিছু ক্ষেত্রে ব্যাংকিং অবকাঠামো এই ধরনের পরিষেবাগুলির অস্তিত্বের জন্য খুব দুর্বল বা খুব প্রতিকূল। আর্থিক ডেরিভেটিভস একটি বিকল্প প্রদান করে। এখানে, একটি সম্পদকে সমর্থন করার জন্য তহবিল প্রদানকারী একক ইস্যুকারীর পরিবর্তে, স্পেকুলেটরদের একটি ডিসেন্ট্রালাইজড বাজার, যারা বাজি ধরে যে একটি ক্রিপ্টোগ্রাফিক রেফারেন্স সম্পদের (যেমন, ETH) দাম বাড়বে, সেই ভূমিকা পালন করে। ইস্যুকারীদের বিপরীতে, স্পেকুলেটরদের তাদের চুক্তির দিকে খেলাপি হওয়ার কোনো বিকল্প নেই কারণ হেজিং চুক্তি তাদের তহবিল এসক্রোতে রাখে। লক্ষ্য করুন যে এই পদ্ধতিটি সম্পূর্ণ ডিসেন্ট্রালাইজড নয়, কারণ প্রাইস টিকার প্রদানের জন্য এখনও একটি বিশ্বস্ত উৎসের প্রয়োজন, যদিও যুক্তিযুক্তভাবে এটি এখনও অবকাঠামোগত প্রয়োজনীয়তা হ্রাস করার ক্ষেত্রে একটি বিশাল উন্নতি (ইস্যুকারী হওয়ার বিপরীতে, প্রাইস ফিড ইস্যু করার জন্য কোনো লাইসেন্সের প্রয়োজন নেই এবং সম্ভবত এটি বাকস্বাধীনতা হিসেবে শ্রেণীবদ্ধ করা যেতে পারে) এবং জালিয়াতির সম্ভাবনা হ্রাস করে।
পরিচয় এবং রেপুটেশন সিস্টেম
সবচেয়ে পুরনো বিকল্প ক্রিপটোকারেন্সি, Namecoin (opens in a new tab), একটি নাম নিবন্ধন সিস্টেম প্রদান করার জন্য বিটকয়েনের মতো একটি ব্লকচেইন ব্যবহার করার চেষ্টা করেছিল, যেখানে ব্যবহারকারীরা অন্যান্য ডাটার পাশাপাশি একটি পাবলিক ডাটাবেসে তাদের নাম নিবন্ধন করতে পারে। প্রধান উল্লিখিত ব্যবহারের ক্ষেত্রটি হলো একটি DNS (opens in a new tab) সিস্টেমের জন্য, যা "bitcoin.org" (বা, Namecoin এর ক্ষেত্রে, "bitcoin.bit") এর মতো ডোমেইন নামগুলিকে একটি IP এডড্রেস এ ম্যাপ করে। অন্যান্য ব্যবহারের ক্ষেত্রগুলির মধ্যে রয়েছে ইমেইল প্রমাণীকরণ এবং সম্ভাব্য আরও উন্নত রেপুটেশন সিস্টেম। ইথিরিয়ামে Namecoin-এর মতো নাম নিবন্ধন সিস্টেম প্রদান করার জন্য বেসিক চুক্তিটি এখানে দেওয়া হলো:
def register(name, value):
if !self.storage[name]:
self.storage[name] = value
চুক্তিটি খুব সহজ; এটি ইথিরিয়াম নেটওয়ার্ক এর ভেতরের একটি ডাটাবেস যেখানে তথ্য যোগ করা যায়, কিন্তু পরিবর্তন বা মুছে ফেলা যায় না। যে কেউ কিছু মান দিয়ে একটি নাম নিবন্ধন করতে পারে এবং সেই নিবন্ধনটি চিরকাল থেকে যায়। একটি আরও পরিশীলিত নাম নিবন্ধন চুক্তিতে একটি "ফাংশন ক্লজ" থাকবে যা অন্যান্য চুক্তিগুলিকে এটি কোয়েরি করার অনুমতি দেয়, সেইসাথে একটি নামের "মালিক" (অর্থাৎ, প্রথম নিবন্ধনকারী) এর জন্য ডাটা পরিবর্তন বা মালিকানা হস্তান্তর করার একটি মেকানিজম থাকবে। কেউ চাইলে এর উপরে রেপুটেশন এবং ওয়েব-অফ-ট্রাস্ট কার্যকারিতাও যোগ করতে পারে।
ডিসেন্ট্রালাইজড ফাইল স্টোরেজ
গত কয়েক বছরে, বেশ কয়েকটি জনপ্রিয় অনলাইন ফাইল স্টোরেজ স্টার্টআপ আবির্ভূত হয়েছে, যার মধ্যে সবচেয়ে বিশিষ্ট হলো Dropbox, যা ব্যবহারকারীদের তাদের হার্ড ড্রাইভের একটি ব্যাকআপ আপলোড করার অনুমতি দেয় এবং পরিষেবাটি ব্যাকআপ সংরক্ষণ করে এবং মাসিক ফি এর বিনিময়ে ব্যবহারকারীকে এটি অ্যাক্সেস করার অনুমতি দেয়। তবে, এই সময়ে ফাইল স্টোরেজ বাজারটি মাঝে মাঝে তুলনামূলকভাবে অদক্ষ; বিভিন্ন বিদ্যমান সমাধানগুলির দিকে এক নজর তাকালে দেখা যায় যে, বিশেষ করে "আনক্যানি ভ্যালি" 20-200 GB স্তরে যেখানে বিনামূল্যে কোটা বা এন্টারপ্রাইজ-স্তরের ছাড় কোনোটিই কাজ করে না, মূলধারার ফাইল স্টোরেজ খরচের মাসিক মূল্য এমন যে আপনি এক মাসে পুরো হার্ড ড্রাইভের খরচের চেয়ে বেশি অর্থ প্রদান করছেন। ইথিরিয়াম চুক্তিগুলি একটি ডিসেন্ট্রালাইজড ফাইল স্টোরেজ ইকোসিস্টেমের বিকাশের অনুমতি দিতে পারে, যেখানে পৃথক ব্যবহারকারীরা তাদের নিজস্ব হার্ড ড্রাইভ ভাড়া দিয়ে অল্প পরিমাণ অর্থ উপার্জন করতে পারে এবং অব্যবহৃত স্থান ফাইল স্টোরেজের খরচ আরও কমাতে ব্যবহার করা যেতে পারে।
এই ধরনের ডিভাইসের মূল ভিত্তি হবে যাকে আমরা "ডিসেন্ট্রালাইজড ড্রপবক্স চুক্তি" বলে অভিহিত করেছি। এই চুক্তিটি নিচের মতো কাজ করে। প্রথমত, কাঙ্ক্ষিত ডাটাকে ব্লকস এ বিভক্ত করা হয়, গোপনীয়তার জন্য প্রতিটি ব্লক এনক্রিপ্ট করা হয় এবং এটি থেকে একটি মার্কেল ট্রি তৈরি করা হয়। এরপর এমন একটি নিয়ম দিয়ে একটি চুক্তি তৈরি করা হয় যে, প্রতি N ব্লকস পর, চুক্তিটি মার্কেল ট্রিতে একটি র্যান্ডম ইনডেক্স বেছে নেবে (পূর্ববর্তী ব্লক হ্যাস ব্যবহার করে, যা চুক্তির কোড থেকে অ্যাক্সেসযোগ্য, র্যান্ডমনেসের উৎস হিসেবে), এবং ট্রির সেই নির্দিষ্ট ইনডেক্সে ব্লকের মালিকানার একটি সরলীকৃত পেমেন্ট ভেরিফিকেশন-এর মতো প্রমাণ সহ একটি লেনদেন সরবরাহকারী প্রথম সত্তাকে X ইথার দেবে। যখন কোনো ব্যবহারকারী তাদের ফাইল পুনরায় ডাউনলোড করতে চায়, তখন তারা ফাইলটি পুনরুদ্ধার করতে একটি মাইক্রোপেমেন্ট চ্যানেল প্রটোকল (যেমন, প্রতি 32 কিলোবাইটের জন্য 1 szabo প্রদান করা) ব্যবহার করতে পারে; সবচেয়ে ফি-সাশ্রয়ী পদ্ধতি হলো প্রদানকারী শেষ পর্যন্ত লেনদেন টি প্রকাশ না করে, এর পরিবর্তে প্রতি 32 কিলোবাইট পর একই নন্স সহ লেনদেন টিকে সামান্য বেশি লাভজনক লেনদেন দিয়ে প্রতিস্থাপন করা।
প্রটোকল এর একটি গুরুত্বপূর্ণ বৈশিষ্ট্য হলো, যদিও মনে হতে পারে যে কেউ ফাইলটি ভুলে না যাওয়ার জন্য অনেক র্যান্ডম নোড এর উপর বিশ্বাস করছে, তবে সিক্রেট শেয়ারিংয়ের মাধ্যমে ফাইলটিকে অনেক টুকরোতে বিভক্ত করে এবং প্রতিটি টুকরো এখনও কোনো নোড এর দখলে আছে কিনা তা দেখার জন্য চুক্তিগুলি পর্যবেক্ষণ করে সেই ঝুঁকি প্রায় শূন্যে নামিয়ে আনা যায়। যদি কোনো চুক্তি এখনও অর্থ প্রদান করে, তবে এটি একটি ক্রিপ্টোগ্রাফিক প্রমাণ প্রদান করে যে বাইরের কেউ এখনও ফাইলটি সংরক্ষণ করছে।
ডিসেন্ট্রালাইজড অটোনোমাস সংস্থা
একটি "ডিসেন্ট্রালাইজড অটোনোমাস সংস্থা" এর সাধারণ ধারণা হলো একটি ভার্চুয়াল সত্তা যার একটি নির্দিষ্ট সংখ্যক সদস্য বা শেয়ারহোল্ডার রয়েছে, যাদের সম্ভবত 67% সংখ্যাগরিষ্ঠতার সাথে সত্তার তহবিল ব্যয় করার এবং এর কোড পরিবর্তন করার অধিকার রয়েছে। সদস্যরা সম্মিলিতভাবে সিদ্ধান্ত নেবে যে সংস্থাটি কীভাবে তার তহবিল বরাদ্দ করবে। একটি DAO-এর তহবিল বরাদ্দের পদ্ধতিগুলি বাউন্টি, বেতন থেকে শুরু করে কাজের পুরষ্কার দেওয়ার জন্য একটি অভ্যন্তরীণ কারেন্সির মতো আরও অভিনব মেকানিজম পর্যন্ত হতে পারে। এটি মূলত একটি ঐতিহ্যবাহী কোম্পানি বা অলাভজনক সংস্থার আইনি কাঠামোকে প্রতিলিপি করে তবে প্রয়োগের জন্য শুধুমাত্র ক্রিপ্টোগ্রাফিক ব্লকচেইন প্রযুক্তি ব্যবহার করে। এখন পর্যন্ত DAO-কে ঘিরে বেশিরভাগ আলোচনাই লভ্যাংশ-গ্রহণকারী শেয়ারহোল্ডার এবং ট্রেডযোগ্য শেয়ার সহ একটি "ডিসেন্ট্রালাইজড অটোনোমাস কর্পোরেশন" (DAC) এর "পুঁজিবাদী" মডেলকে ঘিরে হয়েছে; একটি বিকল্প, যাকে সম্ভবত "ডিসেন্ট্রালাইজড অটোনোমাস কমিউনিটি" হিসেবে বর্ণনা করা যেতে পারে, সেখানে সিদ্ধান্ত গ্রহণে সকল সদস্যের সমান অংশ থাকবে এবং কোনো সদস্য যোগ করতে বা সরাতে বিদ্যমান সদস্যদের 67% এর সম্মতি প্রয়োজন হবে। একজন ব্যক্তির কেবল একটি সদস্যপদ থাকতে পারে এমন প্রয়োজনীয়তা তখন গ্রুপ দ্বারা সম্মিলিতভাবে প্রয়োগ করতে হবে।
কীভাবে একটি DAO কোড করতে হয় তার একটি সাধারণ রূপরেখা নিচে দেওয়া হলো। সবচেয়ে সহজ ডিজাইন হলো সেলফ-মডিফাইং কোডের একটি অংশ যা দুই-তৃতীয়াংশ সদস্য কোনো পরিবর্তনে সম্মত হলে পরিবর্তিত হয়। যদিও কোড তাত্ত্বিকভাবে ইমমিউটেবল, কেউ সহজেই এটি এড়িয়ে যেতে পারে এবং আলাদা চুক্তিতে কোডের অংশগুলি রেখে এবং কোন চুক্তিগুলিকে কল করতে হবে তার এডড্রেস পরিবর্তনযোগ্য স্টোরেজে সংরক্ষণ করে ডি-ফ্যাক্টো মিউটেবিলিটি পেতে পারে। এই ধরনের একটি DAO চুক্তির একটি সহজ বাস্তবায়নে, লেনদেন এ প্রদত্ত ডাটা দ্বারা আলাদা করা তিনটি লেনদেন এর ধরন থাকবে:
[0,i,K,V]স্টোরেজ ইনডেক্সK-এ এডড্রেস কেVমানে পরিবর্তন করার জন্য ইনডেক্সiসহ একটি প্রস্তাব নিবন্ধন করতে[1,i]প্রস্তাবiএর পক্ষে একটি ভোট নিবন্ধন করতে[2,i]পর্যাপ্ত ভোট দেওয়া হলে প্রস্তাবiচূড়ান্ত করতে
চুক্তিতে তখন এগুলোর প্রতিটির জন্য ক্লজ থাকবে। এটি সমস্ত উন্মুক্ত স্টোরেজ পরিবর্তনের একটি রেকর্ড বজায় রাখবে, সাথে কারা তাদের জন্য ভোট দিয়েছে তার একটি তালিকা থাকবে। এতে সকল সদস্যের একটি তালিকাও থাকবে। যখন কোনো স্টোরেজ পরিবর্তন দুই-তৃতীয়াংশ সদস্যের ভোট পায়, তখন একটি চূড়ান্ত লেনদেন পরিবর্তনটি কার্যকর করতে পারে। একটি আরও পরিশীলিত কঙ্কালে লেনদেন পাঠানো, সদস্য যোগ করা এবং সদস্য সরানোর মতো বৈশিষ্ট্যগুলির জন্য অন্তর্নির্মিত ভোটিং ক্ষমতাও থাকবে এবং এমনকি Liquid Democracy (opens in a new tab)-স্টাইলের ভোট অর্পণের ব্যবস্থাও করতে পারে (অর্থাৎ, যে কেউ তাদের জন্য ভোট দেওয়ার জন্য কাউকে নিয়োগ করতে পারে এবং নিয়োগটি ট্রানজিটিভ, তাই যদি A, B কে নিয়োগ করে এবং B, C কে নিয়োগ করে তবে C, A এর ভোট নির্ধারণ করে)। এই ডিজাইনটি DAO-কে একটি ডিসেন্ট্রালাইজড কমিউনিটি হিসেবে অর্গানিকভাবে বৃদ্ধি পেতে দেবে, যা মানুষকে শেষ পর্যন্ত কে সদস্য তা ফিল্টার করার কাজটি বিশেষজ্ঞদের কাছে অর্পণ করার অনুমতি দেয়, যদিও "বর্তমান সিস্টেমের" বিপরীতে বিশেষজ্ঞরা সময়ের সাথে সাথে সহজেই আবির্ভূত এবং অদৃশ্য হতে পারে কারণ পৃথক কমিউনিটি সদস্যরা তাদের অ্যালাইনমেন্ট পরিবর্তন করে।
একটি বিকল্প মডেল হলো একটি ডিসেন্ট্রালাইজড কর্পোরেশনের জন্য, যেখানে যেকোনো একাউন্ট এ শূন্য বা তার বেশি শেয়ার থাকতে পারে এবং সিদ্ধান্ত নেওয়ার জন্য দুই-তৃতীয়াংশ শেয়ারের প্রয়োজন হয়। একটি সম্পূর্ণ কঙ্কালে সম্পদ ব্যবস্থাপনা কার্যকারিতা, শেয়ার কেনা বা বিক্রি করার প্রস্তাব দেওয়ার ক্ষমতা এবং প্রস্তাব গ্রহণ করার ক্ষমতা (পছন্দসইভাবে চুক্তির ভেতরে একটি অর্ডার-ম্যাচিং মেকানিজম সহ) জড়িত থাকবে। অর্পণও Liquid Democracy-স্টাইলে বিদ্যমান থাকবে, যা "পরিচালনা পর্ষদ" এর ধারণাকে সাধারণীকরণ করবে।
আরও অ্যাপ্লিকেশন
1. সেভিংস ওয়ালেট। ধরা যাক যে অ্যালিস তার তহবিল সুরক্ষিত রাখতে চায়, কিন্তু চিন্তিত যে সে তার প্রাইভেট কি হারিয়ে ফেলবে বা কেউ হ্যাক করবে। সে বব নামক একটি ব্যাংকের সাথে একটি চুক্তিতে নিচের মতো করে ইথার রাখে:
- অ্যালিস একা প্রতিদিন সর্বোচ্চ 1% তহবিল তুলতে পারবে।
- বব একা প্রতিদিন সর্বোচ্চ 1% তহবিল তুলতে পারবে, তবে অ্যালিসের তার কি দিয়ে একটি লেনদেন করার ক্ষমতা রয়েছে যা এই ক্ষমতাটি বন্ধ করে দেয়।
- অ্যালিস এবং বব একসাথে যেকোনো পরিমাণ তুলতে পারবে।
সাধারণত, অ্যালিসের জন্য প্রতিদিন 1% যথেষ্ট এবং যদি অ্যালিস আরও তুলতে চায় তবে সে সাহায্যের জন্য ববের সাথে যোগাযোগ করতে পারে। যদি অ্যালিসের কি হ্যাক হয়ে যায়, তবে সে তহবিলটি একটি নতুন চুক্তিতে স্থানান্তর করতে ববের কাছে ছুটে যায়। যদি সে তার কি হারিয়ে ফেলে, তবে বব শেষ পর্যন্ত তহবিলটি বের করে আনবে। যদি বব ক্ষতিকারক বলে প্রমাণিত হয়, তবে সে তার তোলার ক্ষমতা বন্ধ করে দিতে পারে।
2. শস্য বীমা। যে কেউ সহজেই একটি আর্থিক ডেরিভেটিভস চুক্তি তৈরি করতে পারে তবে কোনো মূল্য সূচকের পরিবর্তে আবহাওয়ার একটি ডাটা ফিড ব্যবহার করে। যদি আইওয়ার একজন কৃষক এমন একটি ডেরিভেটিভ কেনেন যা আইওয়ার বৃষ্টিপাতের উপর ভিত্তি করে বিপরীতভাবে অর্থ প্রদান করে, তবে যদি খরা হয়, কৃষক স্বয়ংক্রিয়ভাবে অর্থ পাবেন এবং যদি পর্যাপ্ত বৃষ্টি হয় তবে কৃষক খুশি হবেন কারণ তাদের ফসল ভালো হবে। এটি সাধারণত প্রাকৃতিক দুর্যোগ বীমা পর্যন্ত প্রসারিত করা যেতে পারে।
3. একটি ডিসেন্ট্রালাইজড ডাটা ফিড। পার্থক্যের জন্য আর্থিক চুক্তির ক্ষেত্রে, "SchellingCoin (opens in a new tab)" নামক একটি প্রটোকল এর মাধ্যমে ডাটা ফিডকে ডিসেন্ট্রালাইজড করা আসলে সম্ভব হতে পারে। SchellingCoin মূলত নিচের মতো কাজ করে: N সংখ্যক পক্ষ সবাই সিস্টেমে একটি প্রদত্ত ডাটার মান (যেমন, ETH/USD মূল্য) ইনপুট করে, মানগুলি সাজানো হয় এবং 25 তম এবং 75 তম পার্সেন্টাইলের মধ্যে থাকা প্রত্যেকে পুরস্কার হিসেবে একটি টোকেন পায়। প্রত্যেকেরই এমন উত্তর দেওয়ার ইনসেন্টিভ রয়েছে যা অন্য সবাই প্রদান করবে এবং বিপুল সংখ্যক খেলোয়াড় বাস্তবসম্মতভাবে যে একমাত্র মানটিতে একমত হতে পারে তা হলো সুস্পষ্ট ডিফল্ট: সত্য। এটি একটি ডিসেন্ট্রালাইজড প্রটোকল তৈরি করে যা তাত্ত্বিকভাবে ETH/USD মূল্য, বার্লিনের তাপমাত্রা বা এমনকি একটি নির্দিষ্ট কঠিন গণনার ফলাফল সহ যেকোনো সংখ্যক মান প্রদান করতে পারে।
4. স্মার্ট মাল্টিসিগ এসক্রো। বিটকয়েন মাল্টিসিগনেচার লেনদেন চুক্তির অনুমতি দেয় যেখানে, উদাহরণস্বরূপ, প্রদত্ত পাঁচটি কি-এর মধ্যে তিনটি তহবিল ব্যয় করতে পারে। ইথিরিয়াম আরও গ্রানুলারিটির অনুমতি দেয়; উদাহরণস্বরূপ, পাঁচজনের মধ্যে চারজন সবকিছু ব্যয় করতে পারে, পাঁচজনের মধ্যে তিনজন প্রতিদিন 10% পর্যন্ত ব্যয় করতে পারে এবং পাঁচজনের মধ্যে দুইজন প্রতিদিন 0.5% পর্যন্ত ব্যয় করতে পারে। অতিরিক্তভাবে, ইথিরিয়াম মাল্টিসিগ হলো অ্যাসিঙ্ক্রোনাস - দুটি পক্ষ বিভিন্ন সময়ে ব্লকচেইন এ তাদের স্বাক্ষর নিবন্ধন করতে পারে এবং শেষ স্বাক্ষরটি স্বয়ংক্রিয়ভাবে লেনদেন টি পাঠাবে।
5. ক্লাউড কম্পিউটিং। EVM প্রযুক্তি একটি যাচাইযোগ্য কম্পিউটিং পরিবেশ তৈরি করতেও ব্যবহার করা যেতে পারে, যা ব্যবহারকারীদের অন্যদের গণনা সম্পাদন করতে বলতে এবং তারপর ঐচ্ছিকভাবে প্রমাণ চাইতে দেয় যে নির্দিষ্ট র্যান্ডমভাবে নির্বাচিত চেকপয়েন্টগুলিতে গণনাগুলি সঠিকভাবে করা হয়েছিল। এটি একটি ক্লাউড কম্পিউটিং বাজার তৈরির অনুমতি দেয় যেখানে যেকোনো ব্যবহারকারী তাদের ডেস্কটপ, ল্যাপটপ বা বিশেষায়িত সার্ভার নিয়ে অংশগ্রহণ করতে পারে এবং সিস্টেমটি বিশ্বস্ত (অর্থাৎ, নোড গুলি লাভজনকভাবে প্রতারণা করতে পারে না) তা নিশ্চিত করতে সিকিউরিটি ডিপোজিটের সাথে স্পট-চেকিং ব্যবহার করা যেতে পারে। যদিও এই ধরনের সিস্টেম সব কাজের জন্য উপযুক্ত নাও হতে পারে; উদাহরণস্বরূপ, যে কাজগুলিতে উচ্চ স্তরের আন্তঃ-প্রক্রিয়া যোগাযোগের প্রয়োজন হয়, সেগুলি নোড এর একটি বড় ক্লাউডে সহজে করা যায় না। তবে অন্যান্য কাজগুলি সমান্তরাল করা অনেক সহজ; SETI@home, folding@home এবং জেনেটিক অ্যালগরিদমের মতো প্রকল্পগুলি সহজেই এই ধরনের প্ল্যাটফর্মের উপরে বাস্তবায়ন করা যেতে পারে।
6. পিয়ার-টু-পিয়ার জুয়া। যেকোনো সংখ্যক পিয়ার-টু-পিয়ার জুয়া প্রটোকল, যেমন ফ্র্যাঙ্ক স্টাজানো এবং রিচার্ড ক্লেটনের Cyberdice (opens in a new tab), ইথিরিয়াম ব্লকচেইন এ বাস্তবায়ন করা যেতে পারে। সবচেয়ে সহজ জুয়া প্রটোকল হলো আসলে পরবর্তী ব্লক হ্যাস এর পার্থক্যের জন্য একটি চুক্তি এবং সেখান থেকে আরও উন্নত প্রটোকল তৈরি করা যেতে পারে, যা প্রায় শূন্য ফি সহ জুয়া পরিষেবা তৈরি করে যাদের প্রতারণা করার কোনো ক্ষমতা নেই।
7. প্রেডিকশন মার্কেট। একটি ওরাকল বা SchellingCoin প্রদান করা হলে, প্রেডিকশন মার্কেটগুলিও বাস্তবায়ন করা সহজ এবং SchellingCoin এর সাথে প্রেডিকশন মার্কেটগুলি ডিসেন্ট্রালাইজড সংস্থাগুলির জন্য একটি গভর্নেন্স প্রটোকল হিসেবে futarchy (opens in a new tab)-এর প্রথম মূলধারার অ্যাপ্লিকেশন হিসেবে প্রমাণিত হতে পারে।
8. অনচেইন ডিসেন্ট্রালাইজড মার্কেটপ্লেস, পরিচয় এবং রেপুটেশন সিস্টেমকে ভিত্তি হিসেবে ব্যবহার করে।
বিবিধ এবং উদ্বেগ
সংশোধিত GHOST ইমপ্লিমেন্টেশন
"Greedy Heaviest Observed Subtree" (GHOST) প্রটোকল হলো একটি উদ্ভাবন যা প্রথম December 2013 (opens in a new tab)-এ Yonatan Sompolinsky এবং Aviv Zohar দ্বারা প্রবর্তিত হয়েছিল। GHOST-এর পেছনের মূল কারণ হলো দ্রুত কনফার্মেশন সময়যুক্ত ব্লকচেইনগুলো বর্তমানে উচ্চ স্টেল রেটের (stale rate) কারণে কম নিরাপত্তার শিকার হয় - কারণ ব্লকগুলো নেটওয়ার্ক-এর মাধ্যমে ছড়াতে একটি নির্দিষ্ট সময় নেয়, যদি মাইনার A একটি ব্লক মাইন করে এবং তারপর মাইনার A-এর ব্লক B-তে পৌঁছানোর আগেই মাইনার B আরেকটি ব্লক মাইন করে ফেলে, তবে মাইনার B-এর ব্লকটি নষ্ট হয়ে যাবে এবং নেটওয়ার্ক নিরাপত্তায় কোনো অবদান রাখবে না। অধিকন্তু, এখানে একটি সেন্ট্রালাইজেশন বা কেন্দ্রীকরণের সমস্যা রয়েছে: যদি মাইনার A 30% হ্যাশপাওয়ার সহ একটি মাইনিং পুল হয় এবং B-এর 10% হ্যাশপাওয়ার থাকে, তবে A-এর 70% সময় একটি স্টেল ব্লক তৈরি করার ঝুঁকি থাকবে (যেহেতু বাকি 30% সময় A শেষ ব্লকটি তৈরি করেছে এবং তাই অবিলম্বে মাইনিং ডেটা পাবে) যেখানে B-এর 90% সময় একটি স্টেল ব্লক তৈরি করার ঝুঁকি থাকবে। সুতরাং, যদি ব্লক ইন্টারভাল স্টেল রেট বেশি হওয়ার জন্য যথেষ্ট ছোট হয়, তবে A শুধুমাত্র তার আকারের কারণে উল্লেখযোগ্যভাবে বেশি দক্ষ হবে। এই দুটি প্রভাব একত্রিত হলে, যে ব্লকচেইনগুলো দ্রুত ব্লকস তৈরি করে সেগুলোর ক্ষেত্রে একটি মাইনিং পুলের নেটওয়ার্ক হ্যাশপাওয়ারের এত বড় শতাংশ থাকার সম্ভাবনা খুব বেশি থাকে যা মাইনিং প্রক্রিয়ার ওপর কার্যত নিয়ন্ত্রণ প্রতিষ্ঠা করতে পারে।
Sompolinsky এবং Zohar-এর বর্ণনা অনুযায়ী, GHOST কোন চেইনটি "সবচেয়ে দীর্ঘ" তার গণনায় স্টেল ব্লকস অন্তর্ভুক্ত করে নেটওয়ার্ক নিরাপত্তা হারানোর প্রথম সমস্যাটির সমাধান করে; অর্থাৎ, শুধুমাত্র একটি ব্লকের প্যারেন্ট এবং পূর্বপুরুষদের নয়, বরং ব্লকের পূর্বপুরুষের স্টেল বংশধরদেরও (Ethereum-এর পরিভাষায়, "uncles") কোন ব্লকের পেছনে সবচেয়ে বড় মোট প্রুফ-অফ-ওয়ার্ক সমর্থন রয়েছে তার গণনায় যোগ করা হয়। কেন্দ্রীকরণ পক্ষপাতের দ্বিতীয় সমস্যাটি সমাধান করার জন্য, আমরা Sompolinsky এবং Zohar দ্বারা বর্ণিত প্রটোকল-এর বাইরে যাই এবং স্টেলগুলোর জন্যও ব্লক রিওয়ার্ড প্রদান করি: একটি স্টেল ব্লক তার বেস রিওয়ার্ড-এর 87.5% পায় এবং যে নেফিউ (nephew) স্টেল ব্লকটিকে অন্তর্ভুক্ত করে সে বাকি 12.5% পায়। তবে, ট্রানজেকশন ফি আঙ্কেলদের (uncles) দেওয়া হয় না।
Ethereum GHOST-এর একটি সরলীকৃত সংস্করণ বাস্তবায়ন করে যা শুধুমাত্র সাতটি স্তর পর্যন্ত নিচে যায়। নির্দিষ্টভাবে, এটি নিম্নরূপ সংজ্ঞায়িত করা হয়েছে:
- একটি ব্লক-কে অবশ্যই একটি প্যারেন্ট নির্দিষ্ট করতে হবে এবং এটিকে অবশ্যই 0 বা তার বেশি আঙ্কেল নির্দিষ্ট করতে হবে
- ব্লক B-তে অন্তর্ভুক্ত একটি আঙ্কেলের অবশ্যই নিম্নলিখিত বৈশিষ্ট্যগুলো থাকতে হবে:
- এটি অবশ্যই B-এর k-তম প্রজন্মের পূর্বপুরুষের সরাসরি সন্তান হতে হবে, যেখানে
2 <= k <= 7। - এটি B-এর পূর্বপুরুষ হতে পারবে না
- একটি আঙ্কেলকে অবশ্যই একটি বৈধ ব্লক হেডার হতে হবে, তবে এটি পূর্বে যাচাইকৃত বা এমনকি বৈধ ব্লক হওয়ার প্রয়োজন নেই
- একটি আঙ্কেলকে অবশ্যই পূর্ববর্তী ব্লকস-এ অন্তর্ভুক্ত সমস্ত আঙ্কেল এবং একই ব্লকে অন্তর্ভুক্ত অন্যান্য সমস্ত আঙ্কেল থেকে আলাদা হতে হবে (নন-ডাবল-ইনক্লুশন)
- এটি অবশ্যই B-এর k-তম প্রজন্মের পূর্বপুরুষের সরাসরি সন্তান হতে হবে, যেখানে
- ব্লক B-তে প্রতিটি আঙ্কেল U-এর জন্য, B-এর মাইনার তার কয়েনবেস রিওয়ার্ড-এ অতিরিক্ত 3.125% যোগ পায় এবং U-এর মাইনার একটি স্ট্যান্ডার্ড কয়েনবেস রিওয়ার্ড-এর 93.75% পায়।
GHOST-এর এই সীমিত সংস্করণটি, যেখানে আঙ্কেলদের শুধুমাত্র 7 প্রজন্ম পর্যন্ত অন্তর্ভুক্ত করা যায়, দুটি কারণে ব্যবহার করা হয়েছিল। প্রথমত, আনলিমিটেড GHOST একটি নির্দিষ্ট ব্লকের জন্য কোন আঙ্কেলগুলো বৈধ তার গণনায় অনেক বেশি জটিলতা অন্তর্ভুক্ত করবে। দ্বিতীয়ত, Ethereum-এ ব্যবহৃত ক্ষতিপূরণসহ আনলিমিটেড GHOST একজন মাইনারের জন্য মেইন চেইনে মাইন করার এবং কোনো পাবলিক আক্রমণকারীর চেইনে মাইন না করার প্রণোদনা দূর করে দেয়।
ফি
যেহেতু ব্লকচেইন-এ প্রকাশিত প্রতিটি লেনদেন নেটওয়ার্ক-এর ওপর এটি ডাউনলোড এবং যাচাই করার খরচ চাপিয়ে দেয়, তাই অপব্যবহার রোধ করার জন্য সাধারণত ট্রানজেকশন ফি জড়িত কিছু নিয়ন্ত্রক মেকানিজমের প্রয়োজন হয়। Bitcoin-এ ব্যবহৃত ডিফল্ট পদ্ধতিটি হলো সম্পূর্ণ স্বেচ্ছামূলক ফি রাখা, যেখানে মাইনারদের ওপর গেটকিপার হিসেবে কাজ করার এবং ডায়নামিক ন্যূনতম মান নির্ধারণ করার জন্য নির্ভর করা হয়। এই পদ্ধতিটি Bitcoin কমিউনিটিতে খুব অনুকূলভাবে গৃহীত হয়েছে বিশেষ করে কারণ এটি "বাজার-ভিত্তিক", যা মাইনার এবং লেনদেন প্রেরকদের মধ্যে সরবরাহ এবং চাহিদাকে মূল্য নির্ধারণ করতে দেয়। তবে, এই যুক্তির সমস্যাটি হলো যে লেনদেন প্রক্রিয়াকরণ কোনো বাজার নয়; যদিও লেনদেন প্রক্রিয়াকরণকে এমন একটি পরিষেবা হিসেবে ব্যাখ্যা করা স্বজ্ঞাতভাবে আকর্ষণীয় যা মাইনার প্রেরককে অফার করছে, বাস্তবে একজন মাইনার যে প্রতিটি লেনদেন অন্তর্ভুক্ত করে তা নেটওয়ার্ক-এর প্রতিটি নোড দ্বারা প্রক্রিয়া করা প্রয়োজন হবে, তাই লেনদেন প্রক্রিয়াকরণের খরচের বিশাল অংশ তৃতীয় পক্ষ বহন করে এবং সেই মাইনার নয় যে এটি অন্তর্ভুক্ত করবে কি না সেই সিদ্ধান্ত নিচ্ছে। অতএব, ট্র্যাজেডি-অফ-দ্য-কমন্স (tragedy-of-the-commons) সমস্যাগুলো ঘটার সম্ভাবনা খুব বেশি।
তবে, দেখা যাচ্ছে যে বাজার-ভিত্তিক মেকানিজমের এই ত্রুটিটি, যখন একটি নির্দিষ্ট ভুল সরলীকরণ অনুমান দেওয়া হয়, তখন জাদুকরীভাবে নিজেই বাতিল হয়ে যায়। যুক্তিটি নিম্নরূপ। ধরুন যে:
- একটি লেনদেন
kঅপারেশনের দিকে নিয়ে যায়, যা এটিকে অন্তর্ভুক্তকারী যেকোনো মাইনারকেkRরিওয়ার্ড অফার করে যেখানেRপ্রেরক দ্বারা সেট করা হয় এবংkওRমাইনারের কাছে আগে থেকেই (মোটামুটি) দৃশ্যমান থাকে। - একটি অপারেশনের যেকোনো নোড-এর জন্য
Cপ্রক্রিয়াকরণ খরচ রয়েছে (অর্থাৎ, সমস্ত নোড-এর সমান দক্ষতা রয়েছে) Nসংখ্যক মাইনিং নোড রয়েছে, প্রতিটির ঠিক সমান প্রক্রিয়াকরণ ক্ষমতা রয়েছে (অর্থাৎ, মোটের1/N)- কোনো নন-মাইনিং ফুল নোড নেই।
একজন মাইনার একটি লেনদেন প্রক্রিয়া করতে ইচ্ছুক হবে যদি প্রত্যাশিত রিওয়ার্ড খরচের চেয়ে বেশি হয়। সুতরাং, প্রত্যাশিত রিওয়ার্ড হলো kR/N যেহেতু মাইনারের পরবর্তী ব্লক প্রক্রিয়া করার 1/N সম্ভাবনা রয়েছে এবং মাইনারের জন্য প্রক্রিয়াকরণ খরচ হলো কেবল kC। অতএব, মাইনাররা সেই লেনদেনগুলো অন্তর্ভুক্ত করবে যেখানে kR/N > kC, বা R > NC। মনে রাখবেন যে R হলো প্রেরক দ্বারা প্রদত্ত প্রতি-অপারেশন ফি, এবং এটি লেনদেন থেকে প্রেরক যে সুবিধা পায় তার একটি নিম্ন সীমা, এবং NC হলো একটি অপারেশন প্রক্রিয়া করার জন্য পুরো নেটওয়ার্ক-এর একসাথে খরচ। অতএব, মাইনারদের শুধুমাত্র সেই লেনদেনগুলো অন্তর্ভুক্ত করার প্রণোদনা রয়েছে যার জন্য মোট উপযোগবাদী সুবিধা খরচের চেয়ে বেশি হয়।
তবে, বাস্তবে সেই অনুমানগুলো থেকে বেশ কয়েকটি গুরুত্বপূর্ণ বিচ্যুতি রয়েছে:
- মাইনার অন্যান্য যাচাইকারী নোড-এর তুলনায় লেনদেন প্রক্রিয়া করার জন্য বেশি খরচ প্রদান করে, যেহেতু অতিরিক্ত যাচাইকরণের সময় ব্লক প্রসারণকে বিলম্বিত করে এবং এইভাবে ব্লকটি স্টেল হওয়ার সম্ভাবনা বাড়িয়ে দেয়।
- নন-মাইনিং ফুল নোডগুলোর অস্তিত্ব রয়েছে।
- মাইনিং পাওয়ার ডিস্ট্রিবিউশন বাস্তবে আমূল অসমতাপূর্ণ হতে পারে।
- স্পেকুলেটর, রাজনৈতিক শত্রু এবং উন্মাদ ব্যক্তিরা যাদের ইউটিলিটি ফাংশনের মধ্যে নেটওয়ার্ক-এর ক্ষতি করা অন্তর্ভুক্ত রয়েছে তাদের অস্তিত্ব রয়েছে এবং তারা চতুরতার সাথে এমন কন্ট্রাক্ট স্থাপন করতে পারে যেখানে তাদের খরচ অন্যান্য যাচাইকারী নোডগুলোর দ্বারা প্রদত্ত খরচের চেয়ে অনেক কম।
(1) মাইনারের কম লেনদেন অন্তর্ভুক্ত করার প্রবণতা প্রদান করে এবং (2) NC বাড়ায়; অতএব, এই দুটি প্রভাব অন্তত আংশিকভাবে একে অপরকে বাতিল করে দেয়।কীভাবে? (opens in a new tab) (3) এবং (4) হলো প্রধান সমস্যা; এগুলো সমাধান করার জন্য আমরা কেবল একটি ফ্লোটিং ক্যাপ (floating cap) স্থাপন করি: কোনো ব্লকে দীর্ঘমেয়াদী এক্সপোনেনশিয়াল মুভিং এভারেজের BLK_LIMIT_FACTOR গুণের বেশি অপারেশন থাকতে পারে না। নির্দিষ্টভাবে:
blk.oplimit = floor((blk.parent.oplimit \* (EMAFACTOR - 1) +
floor(parent.opcount \* BLK\_LIMIT\_FACTOR)) / EMA\_FACTOR)
BLK_LIMIT_FACTOR এবং EMA_FACTOR হলো ধ্রুবক যা আপাতত 65536 এবং 1.5-এ সেট করা হবে, তবে আরও বিশ্লেষণের পরে সম্ভবত পরিবর্তন করা হবে।
Bitcoin-এ বড় ব্লক আকারকে নিরুৎসাহিত করার আরেকটি কারণ রয়েছে: যে ব্লকস বড় সেগুলো ছড়াতে বেশি সময় নেবে এবং এইভাবে স্টেল হওয়ার সম্ভাবনা বেশি থাকে। Ethereum-এ, উচ্চ গ্যাস-গ্রাহক ব্লকস ছড়াতেও বেশি সময় নিতে পারে কারণ সেগুলো শারীরিকভাবে বড় এবং যাচাই করার জন্য লেনদেন স্টেট ট্রানজিশন প্রক্রিয়া করতে বেশি সময় নেয়। এই বিলম্বের নিরুৎসাহন Bitcoin-এ একটি উল্লেখযোগ্য বিবেচনা, তবে GHOST প্রটোকল-এর কারণে Ethereum-এ এটি কম; অতএব, নিয়ন্ত্রিত ব্লক সীমার ওপর নির্ভর করা আরও স্থিতিশীল বেসলাইন প্রদান করে।
কম্পিউটেশন এবং টুরিং-কমপ্লিটনেস
একটি গুরুত্বপূর্ণ বিষয় হলো যে ইথিরিয়াম ভার্চুয়াল মেশিন টুরিং-কমপ্লিট (Turing-complete); এর মানে হলো যে EVM কোড যেকোনো কম্পিউটেশন এনকোড করতে পারে যা কল্পনাযোগ্যভাবে সম্পন্ন করা যেতে পারে, যার মধ্যে অসীম লুপও (infinite loops) অন্তর্ভুক্ত। EVM কোড দুটি উপায়ে লুপিং করার অনুমতি দেয়। প্রথমত, একটি JUMP নির্দেশ রয়েছে যা প্রোগ্রামটিকে কোডের পূর্ববর্তী স্থানে ফিরে যেতে দেয় এবং শর্তসাপেক্ষ জাম্পিং করার জন্য একটি JUMPI নির্দেশ রয়েছে, যা while x < 27: x = x * 2-এর মতো স্টেটমেন্টের অনুমতি দেয়। দ্বিতীয়ত, কন্ট্রাক্টগুলো অন্যান্য কন্ট্রাক্টগুলোকে কল করতে পারে, যা সম্ভাব্যভাবে রিকার্শনের মাধ্যমে লুপিং করার অনুমতি দেয়। এটি স্বাভাবিকভাবেই একটি সমস্যার দিকে নিয়ে যায়: ক্ষতিকারক ব্যবহারকারীরা কি মাইনার এবং ফুল নোডগুলোকে একটি অসীম লুপে প্রবেশ করতে বাধ্য করে মূলত বন্ধ করে দিতে পারে? সমস্যাটি দেখা দেয় কম্পিউটার বিজ্ঞানের একটি সমস্যার কারণে যা হল্টিং প্রবলেম (halting problem) হিসেবে পরিচিত: সাধারণ ক্ষেত্রে, কোনো প্রদত্ত প্রোগ্রাম কখনো থামবে কি না তা বলার কোনো উপায় নেই।
স্টেট ট্রানজিশন বিভাগে বর্ণিত হিসাবে, আমাদের সমাধানটি একটি লেনদেনকে সর্বাধিক সংখ্যক কম্পিউটেশনাল ধাপ সেট করার প্রয়োজন করে কাজ করে যা এটি নিতে অনুমোদিত, এবং যদি এক্সিকিউশন বেশি সময় নেয় তবে কম্পিউটেশন ফিরিয়ে দেওয়া হয় তবে ফি এখনও প্রদান করা হয়। মেসেজগুলো একইভাবে কাজ করে। আমাদের সমাধানের পেছনের কারণ দেখানোর জন্য, নিম্নলিখিত উদাহরণগুলো বিবেচনা করুন:
- একজন আক্রমণকারী একটি কন্ট্রাক্ট তৈরি করে যা একটি অসীম লুপ চালায় এবং তারপর সেই লুপটি সক্রিয় করে মাইনারের কাছে একটি লেনদেন পাঠায়। মাইনার লেনদেনটি প্রক্রিয়া করবে, অসীম লুপ চালাবে এবং গ্যাস ফুরিয়ে যাওয়ার জন্য অপেক্ষা করবে। যদিও এক্সিকিউশন-এর গ্যাস ফুরিয়ে যায় এবং মাঝপথে থেমে যায়, লেনদেনটি এখনও বৈধ এবং মাইনার এখনও প্রতিটি কম্পিউটেশনাল ধাপের জন্য আক্রমণকারীর কাছ থেকে ফি দাবি করে।
- একজন আক্রমণকারী মাইনারকে এত দীর্ঘ সময়ের জন্য কম্পিউটিং চালিয়ে যেতে বাধ্য করার উদ্দেশ্যে একটি খুব দীর্ঘ অসীম লুপ তৈরি করে যে কম্পিউটেশন শেষ হওয়ার সময় আরও কয়েকটি ব্লকস বেরিয়ে আসবে এবং মাইনারের পক্ষে ফি দাবি করার জন্য লেনদেনটি অন্তর্ভুক্ত করা সম্ভব হবে না। তবে, আক্রমণকারীকে এক্সিকিউশন নিতে পারে এমন কম্পিউটেশনাল ধাপের সংখ্যা সীমিত করে
STARTGAS-এর জন্য একটি মান জমা দিতে হবে, তাই মাইনার আগে থেকেই জানতে পারবে যে কম্পিউটেশনটি অত্যধিক সংখ্যক ধাপ নেবে। - একজন আক্রমণকারী
send(A,contract.storage[A]); contract.storage[A] = 0-এর মতো কোনো ফর্মের কোডসহ একটি কন্ট্রাক্ট দেখে এবং প্রথম ধাপটি চালানোর জন্য পর্যাপ্ত গ্যাসসহ একটি লেনদেন পাঠায় তবে দ্বিতীয়টি নয় (অর্থাৎ, একটি প্রত্যাহার করা কিন্তু ব্যালেন্স কমতে না দেওয়া)। কন্ট্রাক্টের লেখককে এই ধরনের আক্রমণ থেকে রক্ষা করার বিষয়ে চিন্তা করার দরকার নেই, কারণ যদি এক্সিকিউশন মাঝপথে থেমে যায় তবে পরিবর্তনগুলো ফিরিয়ে দেওয়া হয়। - একটি আর্থিক কন্ট্রাক্ট ঝুঁকি কমানোর জন্য নয়টি মালিকানাধীন ডেটা ফিডের মধ্যমা নিয়ে কাজ করে। একজন আক্রমণকারী ডেটা ফিডগুলোর একটির নিয়ন্ত্রণ নেয়, যা DAO-এর বিভাগে বর্ণিত ভেরিয়েবল-অ্যাড্রেস-কল মেকানিজমের মাধ্যমে পরিবর্তনযোগ্য হওয়ার জন্য ডিজাইন করা হয়েছে এবং এটিকে একটি অসীম লুপ চালানোর জন্য রূপান্তর করে, যার ফলে আর্থিক কন্ট্রাক্ট থেকে তহবিল দাবি করার যেকোনো প্রচেষ্টাকে গ্যাস ফুরিয়ে যেতে বাধ্য করার চেষ্টা করে। তবে, আর্থিক কন্ট্রাক্ট এই সমস্যাটি প্রতিরোধ করার জন্য মেসেজে একটি গ্যাস লিমিট সেট করতে পারে।
টুরিং-কমপ্লিটনেসের বিকল্প হলো টুরিং-ইনকমপ্লিটনেস, যেখানে JUMP এবং JUMPI বিদ্যমান নেই এবং যেকোনো নির্দিষ্ট সময়ে কল স্ট্যাকে প্রতিটি কন্ট্রাক্টের শুধুমাত্র একটি কপি থাকার অনুমতি দেওয়া হয়। এই সিস্টেমের সাথে, বর্ণিত ফি সিস্টেম এবং আমাদের সমাধানের কার্যকারিতা নিয়ে অনিশ্চয়তাগুলোর প্রয়োজন নাও হতে পারে, কারণ একটি কন্ট্রাক্ট কার্যকর করার খরচ এর আকার দ্বারা সীমাবদ্ধ হবে। উপরন্তু, টুরিং-ইনকমপ্লিটনেস এত বড় কোনো সীমাবদ্ধতাও নয়; অভ্যন্তরীণভাবে আমরা যে সমস্ত কন্ট্রাক্টের উদাহরণগুলো কল্পনা করেছি তার মধ্যে, এ পর্যন্ত শুধুমাত্র একটির জন্য একটি লুপের প্রয়োজন ছিল এবং এমনকি সেই লুপটিও এক লাইনের কোডের 26 বার পুনরাবৃত্তি করে সরানো যেতে পারে। টুরিং-কমপ্লিটনেসের গুরুতর প্রভাব এবং সীমিত সুবিধার কথা বিবেচনা করে, কেন কেবল একটি টুরিং-ইনকমপ্লিট ভাষা রাখা হবে না? বাস্তবে, তবে, টুরিং-ইনকমপ্লিটনেস সমস্যার একটি পরিচ্ছন্ন সমাধান থেকে অনেক দূরে। কেন তা দেখতে, নিম্নলিখিত কন্ট্রাক্টগুলো বিবেচনা করুন:
C0: call(C1); call(C1);
C1: call(C2); call(C2);
C2: call(C3); call(C3);
...
C49: call(C50); call(C50);
C50: (run one step of a program and record the change in storage)
এখন, A-তে একটি লেনদেন পাঠান। সুতরাং, 51টি লেনদেনে, আমাদের কাছে এমন একটি কন্ট্রাক্ট রয়েছে যা 250 কম্পিউটেশনাল ধাপ নেয়। মাইনাররা প্রতিটি কন্ট্রাক্টের পাশাপাশি একটি মান বজায় রেখে সময়ের আগেই এই ধরনের লজিক বোমাগুলো সনাক্ত করার চেষ্টা করতে পারে যা এটি নিতে পারে এমন সর্বাধিক সংখ্যক কম্পিউটেশনাল ধাপ নির্দিষ্ট করে এবং রিকার্সিভভাবে অন্যান্য কন্ট্রাক্টগুলোকে কল করা কন্ট্রাক্টগুলোর জন্য এটি গণনা করে, তবে এর জন্য মাইনারদের অন্যান্য কন্ট্রাক্ট তৈরি করে এমন কন্ট্রাক্টগুলোকে নিষিদ্ধ করতে হবে (যেহেতু উপরের সমস্ত 26টি কন্ট্রাক্টের তৈরি এবং এক্সিকিউশন সহজেই একটি একক কন্ট্রাক্টে পরিণত করা যেতে পারে)। আরেকটি সমস্যাযুক্ত বিষয় হলো যে একটি মেসেজের অ্যাড্রেস ফিল্ড একটি ভেরিয়েবল, তাই সাধারণভাবে এটি সময়ের আগেই বলা সম্ভব নাও হতে পারে যে একটি প্রদত্ত কন্ট্রাক্ট কোন অন্যান্য কন্ট্রাক্টগুলোকে কল করবে। অতএব, সব মিলিয়ে, আমাদের একটি আশ্চর্যজনক উপসংহার রয়েছে: টুরিং-কমপ্লিটনেস পরিচালনা করা আশ্চর্যজনকভাবে সহজ এবং টুরিং-কমপ্লিটনেসের অভাব পরিচালনা করা সমানভাবে আশ্চর্যজনকভাবে কঠিন যদি না ঠিক একই নিয়ন্ত্রণগুলো থাকে - তবে সেই ক্ষেত্রে কেন প্রটোকল-কে টুরিং-কমপ্লিট হতে দেওয়া হবে না?
কারেন্সি এবং ইস্যুয়েন্স
Ethereum নেটওয়ার্ক-এ এর নিজস্ব বিল্ট-ইন কারেন্সি, ইথার অন্তর্ভুক্ত রয়েছে, যা বিভিন্ন ধরণের ডিজিটাল সম্পদের মধ্যে দক্ষ বিনিময়ের অনুমতি দেওয়ার জন্য একটি প্রাথমিক তারল্য স্তর প্রদান করার এবং আরও গুরুত্বপূর্ণভাবে, ট্রানজেকশন ফি প্রদানের জন্য একটি মেকানিজম প্রদান করার দ্বৈত উদ্দেশ্য পরিবেশন করে। সুবিধার জন্য এবং ভবিষ্যতের যুক্তি এড়াতে (Bitcoin-এ বর্তমান mBTC/uBTC/satoshi বিতর্ক দেখুন), ডিনোমিনেশনগুলো আগে থেকেই লেবেল করা হবে:
- 1: wei
- 1012: szabo
- 1015: finney
- 1018: ether
এটিকে "ডলার" এবং "সেন্ট" বা "BTC" এবং "সাতোশি" ধারণার একটি সম্প্রসারিত সংস্করণ হিসেবে নেওয়া উচিত। অদূর ভবিষ্যতে, আমরা আশা করি সাধারণ লেনদেনের জন্য "ইথার", মাইক্রোট্রানজেকশনের জন্য "ফিনি" এবং ফি ও প্রটোকল বাস্তবায়নের চারপাশে প্রযুক্তিগত আলোচনার জন্য "সাজাবো" এবং "ওয়েই" ব্যবহার করা হবে; বাকি ডিনোমিনেশনগুলো পরে কার্যকর হতে পারে এবং এই মুহূর্তে ক্লায়েন্ট-এ অন্তর্ভুক্ত করা উচিত নয়।
ইস্যুয়েন্স মডেলটি নিম্নরূপ হবে:
- ইথার প্রতি BTC-তে 1000-2000 ইথার মূল্যে একটি কারেন্সি বিক্রয়ে প্রকাশ করা হবে, এটি এমন একটি মেকানিজম যা Ethereum সংস্থাকে অর্থায়ন করার এবং উন্নয়নের জন্য অর্থ প্রদান করার উদ্দেশ্যে তৈরি করা হয়েছে যা Mastercoin এবং NXT-এর মতো অন্যান্য প্ল্যাটফর্মগুলো দ্বারা সাফল্যের সাথে ব্যবহার করা হয়েছে। আগের ক্রেতারা বড় ছাড় থেকে উপকৃত হবেন। বিক্রয় থেকে প্রাপ্ত BTC সম্পূর্ণভাবে ডেভেলপারদের বেতন এবং বাউন্টি প্রদানের জন্য ব্যবহার করা হবে এবং Ethereum এবং ক্রিপটোকারেন্সি ইকোসিস্টেমে বিভিন্ন লাভজনক এবং অলাভজনক প্রকল্পগুলোতে বিনিয়োগ করা হবে।
- জেনেসিস ব্লকের আগে প্রাথমিক অবদানকারীদের ক্ষতিপূরণ দিতে এবং ETH-নির্ধারিত খরচ মেটাতে বিক্রি হওয়া মোট পরিমাণের 0.099x (60102216 ETH) সংস্থাকে বরাদ্দ করা হবে।
- বিক্রি হওয়া মোট পরিমাণের 0.099x দীর্ঘমেয়াদী রিজার্ভ হিসেবে বজায় রাখা হবে।
- বিক্রি হওয়া মোট পরিমাণের 0.26x সেই বিন্দুর পর থেকে চিরতরে প্রতি বছর মাইনারদের জন্য বরাদ্দ করা হবে।
| গ্রুপ | লঞ্চের সময় | 1 বছর পর | 5 বছর পর |
|---|---|---|---|
| কারেন্সি ইউনিট | 1.198X | 1.458X | 2.498X |
| ক্রেতা | 83.5% | 68.6% | 40.0% |
| প্রি-সেলে ব্যয়িত রিজার্ভ | 8.26% | 6.79% | 3.96% |
| পোস্ট-সেলে ব্যবহৃত রিজার্ভ | 8.26% | 6.79% | 3.96% |
| মাইনার | 0% | 17.8% | 52.0% |
দীর্ঘমেয়াদী সাপ্লাই বৃদ্ধির হার (শতাংশ)
লিনিয়ার কারেন্সি ইস্যুয়েন্স থাকা সত্ত্বেও, সময়ের সাথে সাথে Bitcoin-এর মতোই সাপ্লাই বৃদ্ধির হার শূন্যের দিকে ঝোঁকে।
উপরের মডেলে দুটি প্রধান পছন্দ হলো (1) একটি এনডাউমেন্ট পুলের অস্তিত্ব এবং আকার এবং (2) Bitcoin-এর মতো ক্যাপড সাপ্লাইয়ের বিপরীতে একটি স্থায়ীভাবে ক্রমবর্ধমান লিনিয়ার সাপ্লাইয়ের অস্তিত্ব। এনডাউমেন্ট পুলের যৌক্তিকতা নিম্নরূপ। যদি এনডাউমেন্ট পুলের অস্তিত্ব না থাকত এবং একই মুদ্রাস্ফীতির হার প্রদান করার জন্য লিনিয়ার ইস্যুয়েন্স 0.217x-এ হ্রাস পেত, তবে ইথারের মোট পরিমাণ 16.5% কম হতো এবং তাই প্রতিটি ইউনিট 19.8% বেশি মূল্যবান হতো। অতএব, ভারসাম্যে বিক্রয়ে 19.8% বেশি ইথার কেনা হবে, তাই প্রতিটি ইউনিট আবারও আগের মতোই মূল্যবান হবে। সংস্থাটির কাছে তখন 1.198x পরিমাণ BTC থাকবে, যা দুটি স্লাইসে বিভক্ত বলে বিবেচনা করা যেতে পারে: আসল BTC এবং অতিরিক্ত 0.198x। অতএব, এই পরিস্থিতিটি এনডাউমেন্টের ঠিক সমতুল্য, তবে একটি গুরুত্বপূর্ণ পার্থক্য রয়েছে: সংস্থাটি বিশুদ্ধভাবে BTC ধারণ করে এবং তাই ইথার ইউনিটের মান সমর্থন করতে উৎসাহিত হয় না।
স্থায়ী লিনিয়ার সাপ্লাই বৃদ্ধির মডেলটি Bitcoin-এ অত্যধিক সম্পদ কেন্দ্রীকরণ হিসেবে যা দেখা হয় তার ঝুঁকি হ্রাস করে এবং বর্তমান ও ভবিষ্যতের যুগে বসবাসকারী ব্যক্তিদের কারেন্সি ইউনিট অর্জনের একটি ন্যায্য সুযোগ দেয়, একই সাথে ইথার অর্জন এবং ধরে রাখার একটি শক্তিশালী প্রণোদনা বজায় রাখে কারণ শতাংশ হিসেবে "সাপ্লাই বৃদ্ধির হার" এখনও সময়ের সাথে সাথে শূন্যের দিকে ঝোঁকে। আমরা আরও তাত্ত্বিকীকরণ করি যে যেহেতু অসাবধানতা, মৃত্যু ইত্যাদির কারণে সময়ের সাথে সাথে কয়েনগুলো সর্বদা হারিয়ে যায় এবং কয়েন হারানোকে প্রতি বছর মোট সাপ্লাইয়ের শতাংশ হিসেবে মডেল করা যেতে পারে, তাই প্রচলনে থাকা মোট কারেন্সি সাপ্লাই আসলে শেষ পর্যন্ত বার্ষিক ইস্যুয়েন্সকে হারানোর হার দ্বারা ভাগ করলে যে মান পাওয়া যায় তাতে স্থিতিশীল হবে (যেমন, 1% হারানোর হারে, একবার সাপ্লাই 26X-এ পৌঁছালে প্রতি বছর 0.26X মাইন করা হবে এবং 0.26X হারিয়ে যাবে, যা একটি ভারসাম্য তৈরি করবে)।
মনে রাখবেন যে ভবিষ্যতে, এটি সম্ভবত যে Ethereum নিরাপত্তার জন্য একটি প্রুফ-অফ-স্টেক মডেলে স্যুইচ করবে, যা ইস্যুয়েন্স প্রয়োজনীয়তাকে প্রতি বছর শূন্য থেকে 0.05X-এর মধ্যে কমিয়ে দেবে। যদি Ethereum সংস্থা তহবিল হারায় বা অন্য কোনো কারণে অদৃশ্য হয়ে যায়, তবে আমরা একটি "সামাজিক চুক্তি" খোলা রাখি: যে কারো কাছে Ethereum-এর একটি ভবিষ্যৎ প্রার্থী সংস্করণ তৈরি করার অধিকার রয়েছে, একমাত্র শর্ত হলো যে ইথারের পরিমাণ সর্বাধিক 60102216 * (1.198 + 0.26 * n)-এর সমান হতে হবে যেখানে n হলো জেনেসিস ব্লকের পরের বছরের সংখ্যা। নির্মাতারা উন্নয়নের জন্য অর্থ প্রদানের জন্য PoS-চালিত সাপ্লাই সম্প্রসারণ এবং সর্বাধিক অনুমোদিত সাপ্লাই সম্প্রসারণের মধ্যে পার্থক্যের কিছু বা সমস্ত ক্রাউড-সেল বা অন্যথায় বরাদ্দ করতে স্বাধীন। সামাজিক চুক্তির সাথে সঙ্গতিপূর্ণ নয় এমন প্রার্থী আপগ্রেডগুলো ন্যায়সঙ্গতভাবে কমপ্লায়েন্ট সংস্করণগুলোতে ফর্ক করা যেতে পারে।
মাইনিং কেন্দ্রীকরণ
Bitcoin মাইনিং এ্যালগরিদম মাইনারদের ব্লক হেডারের সামান্য পরিবর্তিত সংস্করণগুলোতে লক্ষ লক্ষ বার বারবার SHA256 গণনা করার মাধ্যমে কাজ করে, যতক্ষণ না শেষ পর্যন্ত একটি নোড এমন একটি সংস্করণ নিয়ে আসে যার হ্যাস লক্ষ্যের চেয়ে কম (বর্তমানে প্রায় 2192)। তবে, এই মাইনিং এ্যালগরিদম দুটি ধরণের কেন্দ্রীকরণের জন্য ঝুঁকিপূর্ণ। প্রথমত, মাইনিং ইকোসিস্টেমটি ASIC (অ্যাপ্লিকেশন-স্পেসিফিক ইন্টিগ্রেটেড সার্কিট) দ্বারা আধিপত্য বিস্তার করেছে, যা কম্পিউটার চিপগুলো Bitcoin মাইনিংয়ের নির্দিষ্ট কাজের জন্য ডিজাইন করা হয়েছে এবং তাই হাজার গুণ বেশি দক্ষ। এর মানে হলো যে Bitcoin মাইনিং আর একটি অত্যন্ত ডিসেন্ট্রালাইজড এবং সমতাবাদী সাধনা নয়, কার্যকরভাবে অংশগ্রহণ করার জন্য লক্ষ লক্ষ ডলার মূলধনের প্রয়োজন। দ্বিতীয়ত, বেশিরভাগ Bitcoin মাইনাররা আসলে স্থানীয়ভাবে ব্লক বৈধতা সম্পাদন করে না; পরিবর্তে, তারা ব্লক হেডারগুলো প্রদান করার জন্য একটি কেন্দ্রীভূত মাইনিং পুলের ওপর নির্ভর করে। এই সমস্যাটি যুক্তিযুক্তভাবে আরও খারাপ: এই লেখার সময় পর্যন্ত, শীর্ষ তিনটি মাইনিং পুল পরোক্ষভাবে Bitcoin নেটওয়ার্ক-এ প্রক্রিয়াকরণ ক্ষমতার প্রায় 50% নিয়ন্ত্রণ করে, যদিও এটি এই সত্য দ্বারা প্রশমিত হয় যে মাইনাররা অন্যান্য মাইনিং পুলগুলোতে স্যুইচ করতে পারে যদি কোনো পুল বা জোট 51% এ্যাটাক করার চেষ্টা করে।
Ethereum-এ বর্তমান উদ্দেশ্য হলো এমন একটি মাইনিং এ্যালগরিদম ব্যবহার করা যেখানে মাইনারদের স্টেট থেকে র্যান্ডম ডেটা আনতে হবে, ব্লকচেইন-এর শেষ N ব্লকস থেকে কিছু র্যান্ডমভাবে নির্বাচিত লেনদেন গণনা করতে হবে এবং ফলাফলের হ্যাস ফেরত দিতে হবে। এর দুটি গুরুত্বপূর্ণ সুবিধা রয়েছে। প্রথমত, Ethereum কন্ট্রাক্টগুলোতে যেকোনো ধরণের কম্পিউটেশন অন্তর্ভুক্ত থাকতে পারে, তাই একটি Ethereum ASIC মূলত সাধারণ কম্পিউটেশনের জন্য একটি ASIC হবে - অর্থাৎ, একটি ভালো CPU। দ্বিতীয়ত, মাইনিংয়ের জন্য পুরো ব্লকচেইন-এ অ্যাক্সেস প্রয়োজন, যা মাইনারদের পুরো ব্লকচেইন সংরক্ষণ করতে এবং অন্তত প্রতিটি লেনদেন যাচাই করতে সক্ষম হতে বাধ্য করে। এটি কেন্দ্রীভূত মাইনিং পুলের প্রয়োজনীয়তা দূর করে; যদিও মাইনিং পুলগুলো এখনও রিওয়ার্ড বিতরণের র্যান্ডমনেস সমান করার বৈধ ভূমিকা পালন করতে পারে, এই ফাংশনটি কোনো কেন্দ্রীয় নিয়ন্ত্রণ ছাড়াই পিয়ার-টু-পিয়ার পুলগুলো দ্বারা সমানভাবে ভালোভাবে পরিবেশন করা যেতে পারে।
এই মডেলটি পরীক্ষিত নয় এবং মাইনিং এ্যালগরিদম হিসেবে কন্ট্রাক্ট এক্সিকিউশন ব্যবহার করার সময় নির্দিষ্ট চতুর অপ্টিমাইজেশনগুলো এড়াতে পথে অসুবিধা হতে পারে। তবে, এই এ্যালগরিদম-এর একটি উল্লেখযোগ্যভাবে আকর্ষণীয় বৈশিষ্ট্য হলো যে এটি যে কাউকে "কূপ বিষাক্ত" (poison the well) করার অনুমতি দেয়, ব্লকচেইন-এ নির্দিষ্ট ASIC-গুলোকে বাধা দেওয়ার জন্য বিশেষভাবে ডিজাইন করা বিপুল সংখ্যক কন্ট্রাক্ট প্রবর্তন করে। ASIC নির্মাতাদের একে অপরকে আক্রমণ করার জন্য এই ধরনের কৌশল ব্যবহার করার অর্থনৈতিক প্রণোদনা রয়েছে। সুতরাং, আমরা যে সমাধানটি তৈরি করছি তা শেষ পর্যন্ত একটি অভিযোজিত অর্থনৈতিক মানব সমাধান, বিশুদ্ধভাবে প্রযুক্তিগত নয়।
স্কেলেবিলিটি
Ethereum সম্পর্কে একটি সাধারণ উদ্বেগ হলো স্কেলেবিলিটির সমস্যা। Bitcoin-এর মতো, Ethereum-ও এই ত্রুটিতে ভোগে যে প্রতিটি লেনদেন নেটওয়ার্ক-এর প্রতিটি নোড দ্বারা প্রক্রিয়া করা প্রয়োজন। Bitcoin-এর সাথে, বর্তমান ব্লকচেইন-এর আকার প্রায় 15 GB-তে রয়েছে, যা প্রতি ঘণ্টায় প্রায় 1 MB করে বাড়ছে। যদি Bitcoin নেটওয়ার্ক প্রতি সেকেন্ডে Visa-এর 2000 লেনদেন প্রক্রিয়া করে, তবে এটি প্রতি তিন সেকেন্ডে 1 MB (প্রতি ঘণ্টায় 1 GB, প্রতি বছর 8 TB) বৃদ্ধি পাবে। Ethereum-এরও একই রকম বৃদ্ধির ধরণ ভোগার সম্ভাবনা রয়েছে, যা এই কারণে আরও খারাপ হয়েছে যে Bitcoin-এর মতো শুধুমাত্র একটি কারেন্সির পরিবর্তে Ethereum ব্লকচেইন-এর ওপর অনেক অ্যাপ্লিকেশন থাকবে, তবে এই কারণে উন্নত হয়েছে যে Ethereum ফুল নোডগুলোকে পুরো ব্লকচেইন ইতিহাসের পরিবর্তে শুধুমাত্র স্টেট সংরক্ষণ করতে হবে।
এত বড় ব্লকচেইন আকারের সমস্যা হলো কেন্দ্রীকরণের ঝুঁকি। যদি ব্লকচেইন-এর আকার বেড়ে, ধরা যাক, 100 TB হয়, তবে সম্ভাব্য পরিস্থিতি হবে যে শুধুমাত্র খুব অল্প সংখ্যক বড় ব্যবসাই ফুল নোড চালাবে, যেখানে সমস্ত নিয়মিত ব্যবহারকারীরা লাইট SPV নোড ব্যবহার করবে। এমন পরিস্থিতিতে, সম্ভাব্য উদ্বেগ দেখা দেয় যে ফুল নোডগুলো একত্রিত হতে পারে এবং সবাই কোনো লাভজনক উপায়ে প্রতারণা করতে সম্মত হতে পারে (যেমন, ব্লক রিওয়ার্ড পরিবর্তন করা, নিজেদেরকে BTC দেওয়া)। লাইট নোডগুলোর এটি অবিলম্বে সনাক্ত করার কোনো উপায় থাকবে না। অবশ্যই, অন্তত একটি সৎ ফুল নোড সম্ভবত বিদ্যমান থাকবে এবং কয়েক ঘণ্টা পরে Reddit-এর মতো চ্যানেলগুলোর মাধ্যমে জালিয়াতির তথ্য বেরিয়ে আসবে, তবে সেই সময়ে অনেক দেরি হয়ে যাবে: প্রদত্ত ব্লকস-কে কালো তালিকাভুক্ত করার জন্য একটি প্রচেষ্টা সংগঠিত করা সাধারণ ব্যবহারকারীদের ওপর নির্ভর করবে, যা একটি সফল 51% এ্যাটাক করার মতো একই স্কেলে একটি বিশাল এবং সম্ভবত অবাস্তব সমন্বয় সমস্যা। Bitcoin-এর ক্ষেত্রে, এটি বর্তমানে একটি সমস্যা, তবে Peter Todd দ্বারা প্রস্তাবিত (opens in a new tab) একটি ব্লকচেইন পরিবর্তন রয়েছে যা এই সমস্যাটি উপশম করবে।
নিকটবর্তী মেয়াদে, Ethereum এই সমস্যাটি মোকাবেলা করার জন্য দুটি অতিরিক্ত কৌশল ব্যবহার করবে। প্রথমত, ব্লকচেইন-ভিত্তিক মাইনিং এ্যালগরিদম-এর কারণে, অন্তত প্রতিটি মাইনারকে একটি ফুল নোড হতে বাধ্য করা হবে, যা ফুল নোডগুলোর সংখ্যার ওপর একটি নিম্ন সীমা তৈরি করবে। দ্বিতীয়ত এবং আরও গুরুত্বপূর্ণভাবে, তবে, আমরা প্রতিটি লেনদেন প্রক্রিয়া করার পরে ব্লকচেইন-এ একটি মধ্যবর্তী স্টেট ট্রি রুট অন্তর্ভুক্ত করব। এমনকি যদি ব্লক বৈধতা কেন্দ্রীভূত হয়, যতক্ষণ পর্যন্ত একটি সৎ যাচাইকারী নোড বিদ্যমান থাকে, কেন্দ্রীকরণ সমস্যাটি একটি যাচাইকরণ প্রটোকল-এর মাধ্যমে এড়ানো যেতে পারে। যদি একজন মাইনার একটি অবৈধ ব্লক প্রকাশ করে, তবে সেই ব্লকটি হয় খারাপভাবে ফর্ম্যাট করা হতে হবে, অথবা স্টেট S[n] ভুল। যেহেতু S[0] সঠিক বলে জানা যায়, তাই অবশ্যই কিছু প্রথম স্টেট S[i] থাকতে হবে যা ভুল যেখানে S[i-1] সঠিক। যাচাইকারী নোডটি APPLY(S[i-1],TX[i]) -> S[i] প্রক্রিয়া করার জন্য প্রয়োজনীয় প্যাট্রিসিয়া ট্রি নোডগুলোর সাবসেট নিয়ে গঠিত একটি "অবৈধতার প্রমাণ" (proof of invalidity) সহ সূচক i প্রদান করবে। নোডগুলো কম্পিউটেশনের সেই অংশটি চালানোর জন্য সেই নোডগুলো ব্যবহার করতে সক্ষম হবে এবং দেখতে পাবে যে তৈরি করা S[i] প্রদত্ত S[i]-এর সাথে মেলে না।
আরেকটি, আরও পরিশীলিত, আক্রমণে ক্ষতিকারক মাইনাররা অসম্পূর্ণ ব্লকস প্রকাশ করতে পারে, তাই ব্লকস বৈধ কি না তা নির্ধারণ করার জন্য সম্পূর্ণ তথ্যও বিদ্যমান থাকে না। এর সমাধান হলো একটি চ্যালেঞ্জ-রেসপন্স প্রটোকল: যাচাইকরণ নোডগুলো লক্ষ্য লেনদেন সূচকগুলোর আকারে "চ্যালেঞ্জ" জারি করে এবং একটি নোড পাওয়ার পরে একটি লাইট নোড ব্লকটিকে অবিশ্বস্ত হিসেবে বিবেচনা করে যতক্ষণ না অন্য কোনো নোড, তা মাইনার হোক বা অন্য কোনো যাচাইকারী, বৈধতার প্রমাণ হিসেবে প্যাট্রিসিয়া নোডগুলোর একটি সাবসেট প্রদান করে।
উপসংহার
ইথিরিয়াম প্রটোকল প্রাথমিকভাবে একটি ক্রিপটোকারেন্সি-এর আপগ্রেড করা সংস্করণ হিসেবে কল্পনা করা হয়েছিল, যা একটি অত্যন্ত সাধারণ প্রোগ্রামিং ভাষার মাধ্যমে অন-ব্লকচেইন এসক্রো, উত্তোলনের সীমা, আর্থিক চুক্তি, জুয়ার বাজার এবং এই জাতীয় অন্যান্য উন্নত বৈশিষ্ট্য প্রদান করে। ইথিরিয়াম প্রটোকল সরাসরি কোনো অ্যাপ্লিকেশনকে "সমর্থন" করবে না, তবে একটি টুরিং-কমপ্লিট (Turing-complete) প্রোগ্রামিং ভাষার অস্তিত্বের অর্থ হলো তাত্ত্বিকভাবে যেকোনো ধরনের লেনদেন বা অ্যাপ্লিকেশনের জন্য ইচ্ছামতো চুক্তি তৈরি করা যেতে পারে। তবে, ইথিরিয়াম সম্পর্কে আরও আকর্ষণীয় বিষয় হলো, ইথিরিয়াম প্রটোকল শুধুমাত্র মুদ্রার ধারণার চেয়ে অনেক দূর এগিয়ে গেছে। ডিসেন্ট্রালাইজড ফাইল স্টোরেজ, ডিসেন্ট্রালাইজড কম্পিউটেশন এবং ডিসেন্ট্রালাইজড প্রেডিকশন মার্কেট সম্পর্কিত প্রটোকলগুলো, এই ধরনের আরও ডজন খানেক ধারণার পাশাপাশি, কম্পিউটেশনাল শিল্পের দক্ষতা উল্লেখযোগ্যভাবে বৃদ্ধি করার সম্ভাবনা রাখে এবং প্রথমবারের মতো একটি অর্থনৈতিক স্তর যুক্ত করার মাধ্যমে অন্যান্য পিয়ার-টু-পিয়ার প্রটোকলগুলোকে ব্যাপকভাবে উৎসাহিত করতে পারে। পরিশেষে, এমন অনেক অ্যাপ্লিকেশন রয়েছে যেগুলোর সাথে অর্থের কোনো সম্পর্কই নেই।
ইথিরিয়াম প্রটোকল দ্বারা বাস্তবায়িত একটি ইচ্ছামতো স্টেট ট্রানজিশন ফাংশনের ধারণা অনন্য সম্ভাবনাময় একটি প্ল্যাটফর্ম প্রদান করে; ডেটা স্টোরেজ, জুয়া বা অর্থের ক্ষেত্রে নির্দিষ্ট কিছু অ্যাপ্লিকেশনের জন্য উদ্দিষ্ট একটি ক্লোজড-এন্ডেড, একক-উদ্দেশ্যমূলক প্রটোকল হওয়ার পরিবর্তে, ইথিরিয়াম ডিজাইনগতভাবেই ওপেন-এন্ডেড, এবং আমরা বিশ্বাস করি যে আগামী বছরগুলোতে বিপুল সংখ্যক আর্থিক এবং অ-আর্থিক উভয় প্রটোকলের জন্য একটি ভিত্তি স্তর হিসেবে কাজ করার ক্ষেত্রে এটি অত্যন্ত উপযুক্ত।
নোট এবং আরও পড়ার জন্য
নোট
- একজন অভিজ্ঞ পাঠক লক্ষ্য করতে পারেন যে আসলে একটি Bitcoin ঠিকানা (address) হলো এলিপটিক কার্ভ (elliptic curve) পাবলিক কি-এর হ্যাস, এবং এটি নিজে কোনো পাবলিক কি নয়। তবে, ক্রিপ্টোগ্রাফিক পরিভাষায় পাবকি (pubkey) হ্যাস-কে একটি পাবলিক কি হিসেবে উল্লেখ করা সম্পূর্ণ বৈধ। এর কারণ হলো Bitcoin-এর ক্রিপ্টোগ্রাফি-কে একটি কাস্টম ডিজিটাল সিগনেচার এ্যালগরিদম হিসেবে বিবেচনা করা যেতে পারে, যেখানে পাবলিক কি গঠিত হয় ECC পাবকি-এর হ্যাস দিয়ে, সিগনেচার গঠিত হয় ECC পাবকি এবং ECC সিগনেচারের সমন্বয়ে, এবং ভেরিফিকেশন এ্যালগরিদম-এ সিগনেচারের মধ্যে থাকা ECC পাবকি-কে পাবলিক কি হিসেবে দেওয়া ECC পাবকি হ্যাসের সাথে মিলিয়ে দেখা হয় এবং তারপর ECC পাবকি-এর বিপরীতে ECC সিগনেচার যাচাই করা হয়।
- প্রযুক্তিগতভাবে, আগের 11 টি ব্লকস-এর মধ্যমা (median)।
- অভ্যন্তরীণভাবে, 2 এবং "CHARLIE" উভয়ই সংখ্যাfn3, যার মধ্যে শেষেরটি বিগ-এন্ডিয়ান (big-endian) বেস 256 উপস্থাপনায় রয়েছে। সংখ্যাগুলো কমপক্ষে 0 এবং সর্বোচ্চ 2256-1 হতে পারে।
আরও পড়ার জন্য
- ইন্ট্রিনসিক ভ্যালু (Intrinsic value) (opens in a new tab)
- স্মার্ট প্রপার্টি (Smart property) (opens in a new tab)
- স্মার্ট কন্ট্রাক্ট (Smart contracts) (opens in a new tab)
- বি-মানি (B-money) (opens in a new tab)
- রিইউজেবল প্রুফ-অফ-ওয়ার্ক (Reusable proofs of work) (opens in a new tab)
- মালিকের কর্তৃত্বসহ সুরক্ষিত সম্পত্তির শিরোনাম (Secure property titles with owner authority) (opens in a new tab)
- Bitcoin হোয়াইটপেপার (opens in a new tab)
- Namecoin (opens in a new tab)
- জুকো'স ট্রায়াঙ্গেল (Zooko's triangle) (opens in a new tab)
- কালারড কয়েনস হোয়াইটপেপার (Colored coins whitepaper) (opens in a new tab)
- Mastercoin হোয়াইটপেপার (opens in a new tab)
- ডিসেন্ট্রালাইজড অটোনোমাস কর্পোরেশনস, Bitcoin Magazine (opens in a new tab)
- সিমপ্লিফাইড পেমেন্ট ভেরিফিকেশন (Simplified payment verification) (opens in a new tab)
- মার্কেল ট্রি (Merkle trees) (opens in a new tab)
- প্যাট্রিসিয়া ট্রি (Patricia trees) (opens in a new tab)
- GHOST (opens in a new tab)
- StorJ এবং অটোনোমাস এজেন্টস, জেফ গারজিক (Jeff Garzik) (opens in a new tab)
- টুরিং ফেস্টিভ্যালে স্মার্ট প্রপার্টি নিয়ে মাইক হার্ন (Mike Hearn) (opens in a new tab)
- Ethereum RLP
- Ethereum মার্কেল প্যাট্রিসিয়া ট্রি
- মার্কেল সাম ট্রি নিয়ে পিটার টড (Peter Todd) (opens in a new tab)
হোয়াইটপেপারের ইতিহাসের জন্য, এই উইকি (opens in a new tab) দেখুন।
Ethereum, অন্যান্য অনেক কমিউনিটি-চালিত, ওপেন-সোর্স সফটওয়্যার প্রজেক্টের মতো, এর প্রাথমিক সূচনা থেকে বিবর্তিত হয়েছে। Ethereum-এর সর্বশেষ উন্নয়ন এবং প্রটোকল-এ কীভাবে পরিবর্তন আনা হয় সে সম্পর্কে জানতে, আমরা এই গাইডটি পড়ার পরামর্শ দিই।





