ইথেরিয়াম বুঝতে চাইছেন?
এই শ্বেতপত্রটি ইথেরিয়াম চালু হওয়ার আগে 2014 সালে প্রকাশিত হয়েছিল। 10+ বছরের উন্নয়ন, বড় ধরনের আপগ্রেড এবং ইকোসিস্টেমের বৃদ্ধির পর, মূল শ্বেতপত্রটি আর আজকের ইথেরিয়ামকে প্রতিফলিত করে না।
কয়েক বছরের পুরোনো হলেও, আমরা নিচে মূল পত্রটি রেখেছি কারণ এটি এখনও একটি দরকারী রেফারেন্স হিসেবে কাজ করে এবং ইথেরিয়াম ও এর লক্ষ্যের একটি সঠিক উপস্থাপনা প্রদান করে।
একটি নেক্সট-জেনারেশন স্মার্ট কন্ট্রাক্ট এবং বিকেন্দ্রীকৃত অ্যাপ্লিকেশন প্ল্যাটফর্ম
2009 সালে সাতোশি নাকামোতোর বিটকয়েন তৈরিকে প্রায়শই অর্থ এবং মুদ্রার ক্ষেত্রে একটি যুগান্তকারী বিকাশ হিসাবে প্রশংসা করা হয়, যা এমন একটি ডিজিটাল সম্পদের প্রথম উদাহরণ যার একই সাথে কোনো ব্যাকিং বা "অন্তর্নিহিত মূল্য (opens in a new tab)" নেই এবং কোনো কেন্দ্রীভূত ইস্যুকারী বা নিয়ন্ত্রক নেই। যাইহোক, বিটকয়েন পরীক্ষার আরেকটি, এবং তর্কসাপেক্ষে আরও গুরুত্বপূর্ণ অংশ হলো ডিস্ট্রিবিউটেড ঐক্যমতের একটি হাতিয়ার হিসেবে এর অন্তর্নিহিত ব্লকচেইন প্রযুক্তি, এবং মনোযোগ দ্রুত বিটকয়েনের এই অন্য দিকটির দিকে সরে যেতে শুরু করেছে। ব্লকচেইন প্রযুক্তির সাধারণত উল্লেখিত বিকল্প অ্যাপ্লিকেশনগুলোর মধ্যে রয়েছে কাস্টম মুদ্রা এবং আর্থিক উপকরণ ("কালারড কয়েন (opens in a new tab)") উপস্থাপন করতে অন-ব্লকচেইন ডিজিটাল সম্পদের ব্যবহার, একটি অন্তর্নিহিত ভৌত ডিভাইসের মালিকানা ("স্মার্ট প্রপার্টি (opens in a new tab)"), ডোমেইন নামের মতো নন-ফাঞ্জিবল সম্পদ ("Namecoin (opens in a new tab)"), সেইসাথে আরও জটিল অ্যাপ্লিকেশন যেখানে ডিজিটাল সম্পদগুলো সরাসরি এমন এক টুকরো কোড দ্বারা নিয়ন্ত্রিত হয় যা নির্বিচার নিয়ম ("স্মার্ট কন্ট্রাক্ট (opens in a new tab)") বা এমনকি ব্লকচেইন-ভিত্তিক "বিকেন্দ্রীকৃত স্বায়ত্তশাসিত সংস্থা (opens in a new tab)" (DAOs) বাস্তবায়ন করে। ইথেরিয়াম যা প্রদান করতে চায় তা হলো একটি অন্তর্নির্মিত পূর্ণাঙ্গ টুরিং-কমপ্লিট প্রোগ্রামিং ভাষাসহ একটি ব্লকচেইন, যা এমন "কন্ট্রাক্ট" তৈরি করতে ব্যবহার করা যেতে পারে যা নির্বিচার স্টেট ট্রানজিশন ফাংশনগুলোকে এনকোড করতে পারে, যা ব্যবহারকারীদের উপরে বর্ণিত যেকোনো সিস্টেম তৈরি করার অনুমতি দেয়, সেইসাথে আরও অনেক কিছু যা আমরা এখনও কল্পনাও করিনি, শুধুমাত্র কয়েক লাইন কোডে লজিক লিখে।
বিটকয়েন এবং বিদ্যমান ধারণার পরিচিতি
ইতিহাস
বিকেন্দ্রীকৃত ডিজিটাল মুদ্রার ধারণা, সেইসাথে সম্পত্তি নিবন্ধনের মতো বিকল্প অ্যাপ্লিকেশনগুলি কয়েক দশক ধরে বিদ্যমান। 1980 এবং 1990-এর দশকের বেনামী ই-ক্যাশ প্রোটোকলগুলি, যা মূলত Chaumian blinding নামে পরিচিত একটি ক্রিপ্টোগ্রাফিক প্রিমিটিভের উপর নির্ভরশীল ছিল, উচ্চ মাত্রার গোপনীয়তা সহ একটি মুদ্রা প্রদান করেছিল, কিন্তু একটি কেন্দ্রীভূত মধ্যস্থতাকারীর উপর নির্ভরতার কারণে প্রোটোকলগুলি মূলত জনপ্রিয়তা পেতে ব্যর্থ হয়েছিল। 1998 সালে, Wei Dai-এর b-money (opens in a new tab) কম্পিউটেশনাল পাজল সমাধানের মাধ্যমে অর্থ তৈরি করার পাশাপাশি বিকেন্দ্রীকৃত ঐক্যমতের ধারণা প্রবর্তনকারী প্রথম প্রস্তাব হয়ে ওঠে, কিন্তু বিকেন্দ্রীকৃত ঐক্যমত আসলে কীভাবে বাস্তবায়ন করা যেতে পারে সে সম্পর্কে প্রস্তাবে বিস্তারিত তথ্যের অভাব ছিল। 2005 সালে, Hal Finney "পুনর্ব্যবহারযোগ্য প্রুফ-অফ-ওয়ার্ক (reusable proofs of work) (opens in a new tab)"-এর একটি ধারণা প্রবর্তন করেন, এটি এমন একটি সিস্টেম যা b-money-এর ধারণার সাথে Adam Back-এর কম্পিউটেশনালভাবে কঠিন Hashcash পাজল ব্যবহার করে একটি ক্রিপ্টোকারেন্সির ধারণা তৈরি করে, কিন্তু ব্যাকএন্ড হিসেবে বিশ্বস্ত কম্পিউটিংয়ের উপর নির্ভর করার কারণে এটি আবারও আদর্শ থেকে পিছিয়ে পড়ে। 2009 সালে, Satoshi Nakamoto প্রথমবারের মতো বাস্তবে একটি বিকেন্দ্রীকৃত মুদ্রা বাস্তবায়ন করেন, যা পাবলিক কী ক্রিপ্টোগ্রাফির মাধ্যমে মালিকানা পরিচালনার জন্য প্রতিষ্ঠিত প্রিমিটিভগুলোকে "প্রুফ-অফ-ওয়ার্ক (PoW)" নামে পরিচিত একটি ঐক্যমত অ্যালগরিদমের সাথে যুক্ত করে, যা কার কাছে কয়েন আছে তার হিসাব রাখে।
প্রুফ-অফ-ওয়ার্ক (PoW)-এর পেছনের মেকানিজমটি এই ক্ষেত্রে একটি যুগান্তকারী আবিষ্কার ছিল কারণ এটি একই সাথে দুটি সমস্যার সমাধান করেছিল। প্রথমত, এটি একটি সহজ এবং মোটামুটি কার্যকর ঐক্যমত অ্যালগরিদম প্রদান করেছিল, যা নেটওয়ার্কের নোডগুলোকে বিটকয়েন লেজারের স্টেটের ক্যানোনিকাল আপডেটের একটি সেটের বিষয়ে সম্মিলিতভাবে একমত হতে দেয়। দ্বিতীয়ত, এটি ঐক্যমত প্রক্রিয়ায় অবাধ প্রবেশের অনুমতি দেওয়ার জন্য একটি মেকানিজম প্রদান করেছিল, যা ঐক্যমতকে কে প্রভাবিত করতে পারবে তা নির্ধারণ করার রাজনৈতিক সমস্যার সমাধান করে এবং একই সাথে সিবিল (sybil) আক্রমণ প্রতিরোধ করে। এটি অংশগ্রহণের ক্ষেত্রে একটি আনুষ্ঠানিক বাধা, যেমন একটি নির্দিষ্ট তালিকায় একটি অনন্য সত্তা হিসেবে নিবন্ধিত হওয়ার প্রয়োজনীয়তাকে একটি অর্থনৈতিক বাধা দিয়ে প্রতিস্থাপন করে এটি করে - ঐক্যমত ভোটিং প্রক্রিয়ায় একটি একক নোডের ওজন নোডটি যে কম্পিউটিং শক্তি নিয়ে আসে তার সরাসরি সমানুপাতিক। এরপর থেকে, প্রুফ-অফ-স্টেক (PoS) নামে একটি বিকল্প পদ্ধতির প্রস্তাব করা হয়েছে, যা একটি নোডের ওজনকে তার কম্পিউটেশনাল সম্পদের পরিবর্তে তার মুদ্রা ধারণের সমানুপাতিক হিসেবে গণনা করে; এই দুটি পদ্ধতির আপেক্ষিক সুবিধা নিয়ে আলোচনা করা এই পেপারের আওতার বাইরে, তবে এটি উল্লেখ করা উচিত যে উভয় পদ্ধতিই একটি ক্রিপ্টোকারেন্সির মেরুদণ্ড হিসেবে কাজ করতে ব্যবহার করা যেতে পারে।
একটি স্টেট ট্রানজিশন সিস্টেম হিসেবে বিটকয়েন
প্রযুক্তিগত দৃষ্টিকোণ থেকে, বিটকয়েনের মতো একটি ক্রিপ্টোকারেন্সির লেজারকে একটি স্টেট ট্রানজিশন সিস্টেম হিসেবে ভাবা যেতে পারে, যেখানে একটি "স্টেট" থাকে যা বিদ্যমান সমস্ত বিটকয়েনের মালিকানার স্ট্যাটাস নিয়ে গঠিত এবং একটি "স্টেট ট্রানজিশন ফাংশন" থাকে যা একটি স্টেট এবং একটি ট্রানজ্যাকশন গ্রহণ করে এবং ফলাফল হিসেবে একটি নতুন স্টেট আউটপুট দেয়। উদাহরণস্বরূপ, একটি সাধারণ ব্যাংকিং সিস্টেমে, স্টেট হলো একটি ব্যালেন্স শিট, একটি ট্রানজ্যাকশন হলো A থেকে B-তে $X স্থানান্তর করার একটি অনুরোধ, এবং স্টেট ট্রানজিশন ফাংশন A-এর অ্যাকাউন্টের মান $X কমিয়ে দেয় এবং B-এর অ্যাকাউন্টের মান $X বাড়িয়ে দেয়। যদি শুরুতেই A-এর অ্যাকাউন্টে $X-এর কম থাকে, তবে স্টেট ট্রানজিশন ফাংশন একটি এরর (error) রিটার্ন করে। অতএব, কেউ আনুষ্ঠানিকভাবে সংজ্ঞায়িত করতে পারে:
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 "খুচরা (change)", যার মালিক হবে স্বয়ং Alice।
মাইনিং
যদি আমাদের একটি বিশ্বস্ত কেন্দ্রীভূত পরিষেবায় অ্যাক্সেস থাকত, তবে এই সিস্টেমটি বাস্তবায়ন করা খুব সহজ হতো; স্টেটের হিসাব রাখার জন্য একটি কেন্দ্রীভূত সার্ভারের হার্ড ড্রাইভ ব্যবহার করে এটিকে ঠিক বর্ণনা অনুযায়ী কোড করা যেত। তবে, বিটকয়েনের মাধ্যমে আমরা একটি বিকেন্দ্রীকৃত মুদ্রা ব্যবস্থা তৈরি করার চেষ্টা করছি, তাই ট্রানজ্যাকশনের ক্রম সম্পর্কে সবাই একমত তা নিশ্চিত করার জন্য আমাদের স্টেট ট্রানজ্যাকশন সিস্টেমটিকে একটি ঐক্যমত সিস্টেমের সাথে যুক্ত করতে হবে। বিটকয়েনের বিকেন্দ্রীকৃত ঐক্যমত প্রক্রিয়ায় নেটওয়ার্কের নোডগুলোকে ক্রমাগত "ব্লক" নামক ট্রানজ্যাকশনের প্যাকেজ তৈরি করার চেষ্টা করতে হয়। নেটওয়ার্কটির লক্ষ্য হলো প্রতি দশ মিনিটে মোটামুটি একটি ব্লক তৈরি করা, যেখানে প্রতিটি ব্লকে একটি টাইমস্ট্যাম্প, একটি নন্স, পূর্ববর্তী ব্লকের একটি রেফারেন্স (অর্থাৎ, হ্যাশ) এবং পূর্ববর্তী ব্লকের পর থেকে সংঘটিত সমস্ত ট্রানজ্যাকশনের একটি তালিকা থাকে। সময়ের সাথে সাথে, এটি একটি স্থায়ী, সর্বদা বর্ধনশীল "ব্লকচেইন" তৈরি করে যা বিটকয়েন লেজারের সর্বশেষ স্টেটকে উপস্থাপন করতে ক্রমাগত আপডেট হয়।
এই প্যারাডাইমে প্রকাশিত একটি ব্লক বৈধ কিনা তা পরীক্ষা করার অ্যালগরিদমটি নিম্নরূপ:
- ব্লক দ্বারা রেফারেন্স করা পূর্ববর্তী ব্লকটির অস্তিত্ব আছে কিনা এবং সেটি বৈধ কিনা তা পরীক্ষা করুন।
- পরীক্ষা করুন যে ব্লকের টাইমস্ট্যাম্পটি পূর্ববর্তী ব্লকের টাইমস্ট্যাম্পের চেয়ে বড়fn2 এবং ভবিষ্যতের 2 ঘণ্টার চেয়ে কম।
- ব্লকের প্রুফ-অফ-ওয়ার্ক (PoW) বৈধ কিনা তা পরীক্ষা করুন।
- ধরা যাক
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-এর আগে আসে, অন্যথায় নয়।
উপরের তালিকায় উপস্থিত একটি বৈধতার শর্ত যা অন্য সিস্টেমে পাওয়া যায় না তা হলো "প্রুফ-অফ-ওয়ার্ক (PoW)"-এর প্রয়োজনীয়তা। সুনির্দিষ্ট শর্তটি হলো প্রতিটি ব্লকের ডাবল-SHA256 হ্যাশ, যাকে একটি 256-বিট সংখ্যা হিসেবে বিবেচনা করা হয়, তা অবশ্যই একটি গতিশীলভাবে সামঞ্জস্য করা লক্ষ্যের চেয়ে কম হতে হবে, যা এই লেখা পর্যন্ত প্রায় 2187। এর উদ্দেশ্য হলো ব্লক তৈরিকে কম্পিউটেশনালভাবে "কঠিন" করা, যার ফলে সিবিল (sybil) আক্রমণকারীরা তাদের পক্ষে পুরো ব্লকচেইনটি পুনরায় তৈরি করতে বাধা পায়। যেহেতু SHA256-কে একটি সম্পূর্ণ অপ্রত্যাশিত সিউডো-র্যান্ডম ফাংশন হিসেবে ডিজাইন করা হয়েছে, তাই একটি বৈধ ব্লক তৈরি করার একমাত্র উপায় হলো ট্রায়াল অ্যান্ড এরর (trial and error), বারবার নন্স বাড়ানো এবং নতুন হ্যাশটি মেলে কিনা তা দেখা।
~2187-এর বর্তমান লক্ষ্যে, একটি বৈধ ব্লক খুঁজে পাওয়ার আগে নেটওয়ার্কটিকে গড়ে ~269 বার চেষ্টা করতে হবে; সাধারণভাবে, নেটওয়ার্ক দ্বারা প্রতি 2016 ব্লকে লক্ষ্যটি পুনরায় ক্যালিব্রেট করা হয় যাতে গড়ে প্রতি দশ মিনিটে নেটওয়ার্কের কোনো নোড দ্বারা একটি নতুন ব্লক তৈরি হয়। এই কম্পিউটেশনাল কাজের জন্য মাইনারদের ক্ষতিপূরণ দিতে, প্রতিটি ব্লকের মাইনার শূন্য থেকে নিজেদেরকে 25 BTC দেওয়ার একটি ট্রানজ্যাকশন অন্তর্ভুক্ত করার অধিকারী। উপরন্তু, যদি কোনো ট্রানজ্যাকশনের আউটপুটের চেয়ে ইনপুটে মোট ডিনোমিনেশন বেশি থাকে, তবে পার্থক্যটিও "লেনদেন ফি" হিসেবে মাইনারের কাছে যায়। ঘটনাক্রমে, এটিই একমাত্র মেকানিজম যার মাধ্যমে BTC ইস্যু করা হয়; জেনেসিস স্টেটে কোনো কয়েনই ছিল না।
মাইনিংয়ের উদ্দেশ্য আরও ভালোভাবে বোঝার জন্য, আসুন পরীক্ষা করে দেখি একজন ক্ষতিকারক আক্রমণকারীর ক্ষেত্রে কী ঘটে। যেহেতু বিটকয়েনের অন্তর্নিহিত ক্রিপ্টোগ্রাফি নিরাপদ বলে পরিচিত, তাই আক্রমণকারী বিটকয়েন সিস্টেমের এমন একটি অংশকে লক্ষ্য করবে যা সরাসরি ক্রিপ্টোগ্রাফি দ্বারা সুরক্ষিত নয়: ট্রানজ্যাকশনের ক্রম। আক্রমণকারীর কৌশলটি সহজ:
- কোনো পণ্যের (বিশেষত দ্রুত-ডেলিভারিযোগ্য ডিজিটাল পণ্য) বিনিময়ে একজন ব্যবসায়ীকে 100 BTC পাঠান
- পণ্যটি ডেলিভারির জন্য অপেক্ষা করুন
- একই 100 BTC নিজেকে পাঠানোর জন্য আরেকটি ট্রানজ্যাকশন তৈরি করুন
- নেটওয়ার্ককে বোঝানোর চেষ্টা করুন যে নিজেকে পাঠানো তার ট্রানজ্যাকশনটিই প্রথমে এসেছিল।
একবার ধাপ (1) সম্পন্ন হওয়ার পর, কয়েক মিনিট পরে কোনো মাইনার ট্রানজ্যাকশনটিকে একটি ব্লকে অন্তর্ভুক্ত করবে, ধরা যাক ব্লক নম্বর 270000। প্রায় এক ঘণ্টা পর, সেই ব্লকের পর চেইনে আরও পাঁচটি ব্লক যোগ করা হবে, যার প্রতিটি ব্লক পরোক্ষভাবে ট্রানজ্যাকশনটিকে নির্দেশ করবে এবং এইভাবে এটিকে "নিশ্চিত" করবে। এই পর্যায়ে, ব্যবসায়ী পেমেন্টটিকে চূড়ান্তকৃত হিসেবে গ্রহণ করবে এবং পণ্যটি ডেলিভারি করবে; যেহেতু আমরা ধরে নিচ্ছি এটি একটি ডিজিটাল পণ্য, তাই ডেলিভারি তাৎক্ষণিক হবে। এখন, আক্রমণকারী 100 BTC নিজেকে পাঠানোর জন্য আরেকটি ট্রানজ্যাকশন তৈরি করে। যদি আক্রমণকারী এটিকে কেবল নেটওয়ার্কে ছেড়ে দেয়, তবে ট্রানজ্যাকশনটি প্রক্রিয়া করা হবে না; মাইনাররা APPLY(S,TX) চালানোর চেষ্টা করবে এবং লক্ষ্য করবে যে TX এমন একটি UTXO ব্যবহার করে যা আর স্টেটে নেই। তাই এর পরিবর্তে, আক্রমণকারী ব্লকচেইনের একটি "ফর্ক" তৈরি করে, যা একই ব্লক 269999-কে প্যারেন্ট হিসেবে নির্দেশ করে ব্লক 270000-এর আরেকটি সংস্করণ মাইনিং করার মাধ্যমে শুরু হয়, কিন্তু এতে পুরানো ট্রানজ্যাকশনের জায়গায় নতুন ট্রানজ্যাকশনটি থাকে। যেহেতু ব্লকের ডেটা আলাদা, তাই এর জন্য প্রুফ-অফ-ওয়ার্ক (PoW) পুনরায় করার প্রয়োজন হয়। উপরন্তু, আক্রমণকারীর ব্লক 270000-এর নতুন সংস্করণের একটি ভিন্ন হ্যাশ রয়েছে, তাই মূল ব্লক 270001 থেকে 270005 এটিকে "নির্দেশ" করে না; এইভাবে, মূল চেইন এবং আক্রমণকারীর নতুন চেইন সম্পূর্ণ আলাদা হয়ে যায়। নিয়মটি হলো একটি ফর্কে দীর্ঘতম ব্লকচেইনটিকে সত্য হিসেবে গ্রহণ করা হয়, এবং তাই বৈধ মাইনাররা 270005 চেইনে কাজ করবে যখন আক্রমণকারী একাই 270000 চেইনে কাজ করছে। আক্রমণকারীকে তার ব্লকচেইনটিকে দীর্ঘতম করার জন্য, তাকে বাকি নেটওয়ার্কের সম্মিলিত শক্তির চেয়ে বেশি কম্পিউটেশনাল শক্তির অধিকারী হতে হবে যাতে সে তাদের ধরতে পারে (তাই, "৫১% আক্রমণ")।
মার্কেল ট্রি
বাম: একটি শাখার বৈধতার প্রমাণ দেওয়ার জন্য একটি মার্কেল ট্রিতে শুধুমাত্র অল্প সংখ্যক নোড উপস্থাপন করাই যথেষ্ট।
ডান: মার্কেল ট্রির কোনো অংশ পরিবর্তন করার যেকোনো প্রচেষ্টা শেষ পর্যন্ত চেইনের উপরের দিকে কোথাও না কোথাও অসামঞ্জস্যতার দিকে নিয়ে যাবে।
বিটকয়েনের একটি গুরুত্বপূর্ণ স্কেলেবিলিটি বৈশিষ্ট্য হলো ব্লকটি একটি মাল্টি-লেভেল ডেটা স্ট্রাকচারে সংরক্ষিত থাকে। একটি ব্লকের "হ্যাশ" আসলে শুধুমাত্র ব্লক হেডারের হ্যাশ, যা প্রায় 200-বাইটের একটি ডেটা যেখানে টাইমস্ট্যাম্প, নন্স, পূর্ববর্তী ব্লকের হ্যাশ এবং ব্লকের সমস্ত ট্রানজ্যাকশন সংরক্ষণকারী মার্কেল ট্রি নামক একটি ডেটা স্ট্রাকচারের রুট হ্যাশ থাকে। একটি মার্কেল ট্রি হলো এক ধরনের বাইনারি ট্রি, যা নোডের একটি সেট নিয়ে গঠিত যার ট্রির নিচের দিকে অন্তর্নিহিত ডেটা ধারণকারী বিপুল সংখ্যক লিফ নোড থাকে, ইন্টারমিডিয়েট নোডের একটি সেট থাকে যেখানে প্রতিটি নোড তার দুটি চাইল্ডের হ্যাশ, এবং সবশেষে একটি একক রুট নোড থাকে, যা তার দুটি চাইল্ডের হ্যাশ থেকেও গঠিত হয় এবং ট্রির "শীর্ষ" উপস্থাপন করে। মার্কেল ট্রির উদ্দেশ্য হলো একটি ব্লকের ডেটাকে খণ্ড খণ্ডভাবে সরবরাহ করার অনুমতি দেওয়া: একটি নোড একটি উৎস থেকে শুধুমাত্র একটি ব্লকের হেডার ডাউনলোড করতে পারে, অন্য একটি উৎস থেকে তাদের সাথে প্রাসঙ্গিক ট্রির ছোট অংশটি ডাউনলোড করতে পারে এবং তারপরও নিশ্চিত হতে পারে যে সমস্ত ডেটা সঠিক। এটি কাজ করার কারণ হলো হ্যাশগুলো উপরের দিকে প্রসারিত হয়: যদি কোনো ক্ষতিকারক ব্যবহারকারী একটি মার্কেল ট্রির নিচের দিকে একটি জাল ট্রানজ্যাকশন অদলবদল করার চেষ্টা করে, তবে এই পরিবর্তনটি উপরের নোডে একটি পরিবর্তন ঘটাবে, এবং তারপর তার উপরের নোডে একটি পরিবর্তন ঘটাবে, শেষ পর্যন্ত ট্রির রুট এবং সেই কারণে ব্লকের হ্যাশ পরিবর্তন করবে, যার ফলে প্রোটোকল এটিকে সম্পূর্ণ ভিন্ন একটি ব্লক হিসেবে নিবন্ধন করবে (প্রায় নিশ্চিতভাবেই একটি অবৈধ প্রুফ-অফ-ওয়ার্ক (PoW) সহ)।
মার্কেল ট্রি প্রোটোকলটি দীর্ঘমেয়াদী স্থায়িত্বের জন্য তর্কসাপেক্ষভাবে অপরিহার্য। বিটকয়েন নেটওয়ার্কে একটি "ফুল নোড", যা প্রতিটি ব্লকের সম্পূর্ণ অংশ সংরক্ষণ এবং প্রক্রিয়া করে, এপ্রিল 2014 পর্যন্ত বিটকয়েন নেটওয়ার্কে প্রায় 15 GB ডিস্ক স্পেস নেয় এবং প্রতি মাসে এক গিগাবাইটেরও বেশি হারে বাড়ছে। বর্তমানে, এটি কিছু ডেস্কটপ কম্পিউটারের জন্য কার্যকর এবং ফোনের জন্য নয়, এবং ভবিষ্যতে শুধুমাত্র ব্যবসা প্রতিষ্ঠান এবং শৌখিন ব্যক্তিরাই অংশগ্রহণ করতে সক্ষম হবে। "simplified payment verification" (SPV) নামে পরিচিত একটি প্রোটোকল "লাইট নোড" নামক অন্য এক শ্রেণীর নোডের অস্তিত্বের অনুমতি দেয়, যা ব্লক হেডারগুলো ডাউনলোড করে, ব্লক হেডারগুলোতে প্রুফ-অফ-ওয়ার্ক (PoW) যাচাই করে এবং তারপর শুধুমাত্র তাদের সাথে প্রাসঙ্গিক ট্রানজ্যাকশনগুলোর সাথে যুক্ত "শাখাগুলো" ডাউনলোড করে। এটি লাইট নোডগুলোকে সম্পূর্ণ ব্লকচেইনের একটি খুব ছোট অংশ ডাউনলোড করার সময় যেকোনো বিটকয়েন ট্রানজ্যাকশনের স্ট্যাটাস এবং তাদের বর্তমান ব্যালেন্স কী তা নিরাপত্তার একটি শক্তিশালী গ্যারান্টি সহ নির্ধারণ করতে দেয়।
বিকল্প ব্লকচেইন অ্যাপ্লিকেশন
অন্তর্নিহিত ব্লকচেইন ধারণাটি গ্রহণ করে এটিকে অন্যান্য ধারণায় প্রয়োগ করার ধারণারও একটি দীর্ঘ ইতিহাস রয়েছে। 2005 সালে, নিক সাবো "মালিকের কর্তৃত্ব সহ সুরক্ষিত সম্পত্তির শিরোনাম (secure property titles with owner authority) (opens in a new tab)"-এর ধারণা নিয়ে আসেন, এটি এমন একটি নথি যা বর্ণনা করে যে কীভাবে "রেপ্লিকেটেড ডেটাবেস প্রযুক্তিতে নতুন অগ্রগতি" কার কোন জমির মালিকানা রয়েছে তার একটি রেজিস্ট্রি সংরক্ষণের জন্য একটি ব্লকচেইন-ভিত্তিক সিস্টেমের অনুমতি দেবে, যা হোমস্টেডিং, অ্যাডভার্স পজেশন এবং জর্জিয়ান ল্যান্ড ট্যাক্সের মতো ধারণাগুলো সহ একটি বিস্তৃত ফ্রেমওয়ার্ক তৈরি করবে। তবে, দুর্ভাগ্যবশত সেই সময়ে কোনো কার্যকর রেপ্লিকেটেড ডেটাবেস সিস্টেম উপলব্ধ ছিল ছিল না, এবং তাই প্রোটোকলটি বাস্তবে কখনোই বাস্তবায়িত হয়নি। তবে 2009 সালের পর, একবার বিটকয়েনের বিকেন্দ্রীকৃত ঐক্যমত তৈরি হওয়ার পর দ্রুত বেশ কয়েকটি বিকল্প অ্যাপ্লিকেশন আবির্ভূত হতে শুরু করে।
- Namecoin - 2010 সালে তৈরি, Namecoin (opens in a new tab)-কে একটি বিকেন্দ্রীকৃত নাম নিবন্ধন ডেটাবেস হিসেবে সবচেয়ে ভালোভাবে বর্ণনা করা যায়। Tor, বিটকয়েন এবং BitMessage-এর মতো বিকেন্দ্রীকৃত প্রোটোকলগুলোতে, অ্যাকাউন্টগুলো শনাক্ত করার কোনো উপায় থাকা দরকার যাতে অন্য লোকেরা তাদের সাথে ইন্টারঅ্যাক্ট করতে পারে, কিন্তু বিদ্যমান সমস্ত সমাধানে উপলব্ধ একমাত্র শনাক্তকারী হলো
1LW79wp5ZBqaHW1jL5TCiBCrhQYtHagUWy-এর মতো একটি সিউডো-র্যান্ডম হ্যাশ। আদর্শভাবে, কেউ "george"-এর মতো নামের একটি অ্যাকাউন্ট রাখতে চাইবে। তবে, সমস্যা হলো যদি একজন ব্যক্তি "george" নামের একটি অ্যাকাউন্ট তৈরি করতে পারে তবে অন্য কেউ একই প্রক্রিয়া ব্যবহার করে নিজেদের জন্যও "george" নিবন্ধন করতে পারে এবং তাদের ছদ্মবেশ ধারণ করতে পারে। একমাত্র সমাধান হলো একটি ফার্স্ট-টু-ফাইল (first-to-file) প্যারাডাইম, যেখানে প্রথম নিবন্ধনকারী সফল হয় এবং দ্বিতীয়জন ব্যর্থ হয় - এটি এমন একটি সমস্যা যা বিটকয়েন ঐক্যমত প্রোটোকলের জন্য পুরোপুরি উপযুক্ত। Namecoin হলো এমন একটি ধারণা ব্যবহার করে একটি নাম নিবন্ধন সিস্টেমের প্রাচীনতম এবং সবচেয়ে সফল বাস্তবায়ন। - কালারড কয়েন (Colored coins) - কালারড কয়েন (opens in a new tab)-এর উদ্দেশ্য হলো এমন একটি প্রোটোকল হিসেবে কাজ করা যা লোকেদের বিটকয়েন ব্লকচেইনে তাদের নিজস্ব ডিজিটাল মুদ্রা - অথবা, এক ইউনিটের মুদ্রার গুরুত্বপূর্ণ সাধারণ ক্ষেত্রে, ডিজিটাল টোকেন তৈরি করতে দেয়। কালারড কয়েন প্রোটোকলে, কেউ একটি নির্দিষ্ট বিটকয়েন UTXO-তে সর্বজনীনভাবে একটি রঙ নির্ধারণ করে একটি নতুন মুদ্রা "ইস্যু" করে, এবং প্রোটোকলটি রিকার্সিভভাবে অন্যান্য UTXO-এর রঙকে সেই ইনপুটগুলোর রঙের মতোই সংজ্ঞায়িত করে যা তাদের তৈরি করা ট্রানজ্যাকশনটি ব্যয় করেছিল (মিশ্র-রঙের ইনপুটগুলোর ক্ষেত্রে কিছু বিশেষ নিয়ম প্রযোজ্য)। এটি ব্যবহারকারীদের শুধুমাত্র একটি নির্দিষ্ট রঙের UTXO ধারণকারী ওয়ালেট বজায় রাখতে এবং সেগুলোকে নিয়মিত বিটকয়েনের মতোই পাঠাতে দেয়, তারা যে কোনো UTXO গ্রহণ করে তার রঙ নির্ধারণ করতে ব্লকচেইনের মাধ্যমে ব্যাকট্র্যাক করে।
- মেটাকয়েন (Metacoins) - একটি মেটাকয়েনের পেছনের ধারণাটি হলো এমন একটি প্রোটোকল থাকা যা বিটকয়েনের উপরে থাকে, মেটাকয়েন ট্রানজ্যাকশনগুলো সংরক্ষণ করতে বিটকয়েন ট্রানজ্যাকশন ব্যবহার করে কিন্তু এর একটি ভিন্ন স্টেট ট্রানজিশন ফাংশন,
APPLY'থাকে। যেহেতু মেটাকয়েন প্রোটোকল অবৈধ মেটাকয়েন ট্রানজ্যাকশনগুলোকে বিটকয়েন ব্লকচেইনে উপস্থিত হওয়া থেকে আটকাতে পারে না, তাই একটি নিয়ম যোগ করা হয় যে যদিAPPLY'(S,TX)একটি এরর রিটার্ন করে, তবে প্রোটোকলটি ডিফল্টরূপেAPPLY'(S,TX) = S-এ চলে যায়। এটি একটি ইচ্ছামতো ক্রিপ্টোকারেন্সি প্রোটোকল তৈরি করার জন্য একটি সহজ মেকানিজম প্রদান করে, সম্ভাব্যভাবে উন্নত বৈশিষ্ট্যগুলো সহ যা বিটকয়েনের ভেতরে বাস্তবায়ন করা যায় না, তবে খুব কম ডেভেলপমেন্ট খরচে কারণ মাইনিং এবং নেটওয়ার্কিংয়ের জটিলতাগুলো ইতিমধ্যেই বিটকয়েন প্রোটোকল দ্বারা পরিচালিত হয়। মেটাকয়েনগুলো কিছু শ্রেণীর আর্থিক চুক্তি, নাম নিবন্ধন এবং বিকেন্দ্রীকৃত এক্সচেঞ্জ বাস্তবায়নের জন্য ব্যবহৃত হয়েছে।
সুতরাং, সাধারণভাবে, একটি ঐক্যমত প্রোটোকল তৈরির দিকে দুটি পদ্ধতি রয়েছে: একটি স্বাধীন নেটওয়ার্ক তৈরি করা এবং বিটকয়েনের উপরে একটি প্রোটোকল তৈরি করা। পূর্ববর্তী পদ্ধতিটি, যদিও Namecoin-এর মতো অ্যাপ্লিকেশনগুলোর ক্ষেত্রে যুক্তিসঙ্গতভাবে সফল, তবে এটি বাস্তবায়ন করা কঠিন; প্রতিটি পৃথক বাস্তবায়নের জন্য একটি স্বাধীন ব্লকচেইন বুটস্ট্র্যাপ করার পাশাপাশি সমস্ত প্রয়োজনীয় স্টেট ট্রানজিশন এবং নেটওয়ার্কিং কোড তৈরি এবং পরীক্ষা করা প্রয়োজন। উপরন্তু, আমরা ভবিষ্যদ্বাণী করি যে বিকেন্দ্রীকৃত ঐক্যমত প্রযুক্তির জন্য অ্যাপ্লিকেশনগুলোর সেট একটি পাওয়ার ল (power law) ডিস্ট্রিবিউশন অনুসরণ করবে যেখানে বেশিরভাগ অ্যাপ্লিকেশন তাদের নিজস্ব ব্লকচেইনের নিশ্চয়তা দেওয়ার জন্য খুব ছোট হবে, এবং আমরা লক্ষ্য করি যে বিকেন্দ্রীকৃত অ্যাপ্লিকেশনগুলোর বড় শ্রেণী রয়েছে, বিশেষ করে বিকেন্দ্রীকৃত স্বায়ত্তশাসিত সংস্থাগুলো, যাদের একে অপরের সাথে ইন্টারঅ্যাক্ট করা প্রয়োজন।
অন্যদিকে, বিটকয়েন-ভিত্তিক পদ্ধতির ত্রুটি হলো এটি বিটকয়েনের simplified payment verification বৈশিষ্ট্যগুলোর উত্তরাধিকারী হয় না। SPV বিটকয়েনের জন্য কাজ করে কারণ এটি ব্লকচেইনের গভীরতাকে বৈধতার প্রক্সি হিসেবে ব্যবহার করতে পারে; কোনো এক পর্যায়ে, একবার কোনো ট্রানজ্যাকশনের পূর্বসূরিরা যথেষ্ট পেছনে চলে গেলে, এটি বলা নিরাপদ যে তারা বৈধভাবে স্টেটের অংশ ছিল। অন্যদিকে, ব্লকচেইন-ভিত্তিক মেটা-প্রোটোকলগুলো ব্লকচেইনকে এমন ট্রানজ্যাকশনগুলো অন্তর্ভুক্ত না করতে বাধ্য করতে পারে না যা তাদের নিজস্ব প্রোটোকলের প্রেক্ষাপটে বৈধ নয়। অতএব, একটি সম্পূর্ণ সুরক্ষিত SPV মেটা-প্রোটোকল বাস্তবায়নের জন্য নির্দিষ্ট ট্রানজ্যাকশনগুলো বৈধ কিনা তা নির্ধারণ করতে বিটকয়েন ব্লকচেইনের শুরু পর্যন্ত ব্যাকওয়ার্ড স্ক্যান করার প্রয়োজন হবে। বর্তমানে, বিটকয়েন-ভিত্তিক মেটা-প্রোটোকলগুলোর সমস্ত "লাইট" বাস্তবায়ন ডেটা প্রদানের জন্য একটি বিশ্বস্ত সার্ভারের উপর নির্ভর করে, যা তর্কসাপেক্ষভাবে একটি অত্যন্ত সাবঅপ্টিমাল ফলাফল বিশেষ করে যখন একটি ক্রিপ্টোকারেন্সির প্রাথমিক উদ্দেশ্যগুলোর মধ্যে একটি হলো আস্থার প্রয়োজনীয়তা দূর করা।
স্ক্রিপ্টিং
এমনকি কোনো এক্সটেনশন ছাড়াই, বিটকয়েন প্রোটোকল আসলে "স্মার্ট কন্ট্রাক্ট"-এর ধারণার একটি দুর্বল সংস্করণকে সহজতর করে। বিটকয়েনে UTXO-এর মালিকানা শুধুমাত্র একটি পাবলিক কী-এর মাধ্যমেই নয়, বরং একটি সাধারণ স্ট্যাক-ভিত্তিক প্রোগ্রামিং ভাষায় প্রকাশিত আরও জটিল স্ক্রিপ্টের মাধ্যমেও হতে পারে। এই প্যারাডাইমে, সেই UTXO ব্যয়কারী একটি ট্রানজ্যাকশনকে অবশ্যই এমন ডেটা প্রদান করতে হবে যা স্ক্রিপ্টটিকে সন্তুষ্ট করে। প্রকৃতপক্ষে, এমনকি মৌলিক পাবলিক কী মালিকানা মেকানিজমটিও একটি স্ক্রিপ্টের মাধ্যমে বাস্তবায়িত হয়: স্ক্রিপ্টটি ইনপুট হিসেবে একটি উপবৃত্তাকার বক্ররেখা (elliptic curve) স্বাক্ষর গ্রহণ করে, ট্রানজ্যাকশন এবং UTXO-এর মালিকানার ঠিকানার বিপরীতে এটি যাচাই করে এবং যাচাইকরণ সফল হলে 1 এবং অন্যথায় 0 রিটার্ন করে। বিভিন্ন অতিরিক্ত ব্যবহারের ক্ষেত্রের জন্য অন্যান্য, আরও জটিল স্ক্রিপ্ট বিদ্যমান। উদাহরণস্বরূপ, কেউ এমন একটি স্ক্রিপ্ট তৈরি করতে পারে যার বৈধতার জন্য প্রদত্ত তিনটি প্রাইভেট কী-এর মধ্যে দুটির স্বাক্ষর প্রয়োজন ("মাল্টিসিগ"), এটি কর্পোরেট অ্যাকাউন্ট, সুরক্ষিত সেভিংস অ্যাকাউন্ট এবং কিছু মার্চেন্ট এসক্রো পরিস্থিতির জন্য দরকারী একটি সেটআপ। কম্পিউটেশনাল সমস্যার সমাধানের জন্য বাউন্টি প্রদান করতেও স্ক্রিপ্ট ব্যবহার করা যেতে পারে, এবং কেউ এমন একটি স্ক্রিপ্টও তৈরি করতে পারে যা বলে "এই বিটকয়েন UTXO-টি আপনার যদি আপনি একটি SPV প্রমাণ দিতে পারেন যে আপনি আমাকে এই ডিনোমিনেশনের একটি Dogecoin ট্রানজ্যাকশন পাঠিয়েছেন", যা মূলত বিকেন্দ্রীকৃত ক্রস-ক্রিপ্টোকারেন্সি এক্সচেঞ্জের অনুমতি দেয়।
তবে, বিটকয়েনে বাস্তবায়িত স্ক্রিপ্টিং ভাষার বেশ কয়েকটি গুরুত্বপূর্ণ সীমাবদ্ধতা রয়েছে:
- টুরিং-কমপ্লিটনেসের অভাব - অর্থাৎ, যদিও বিটকয়েন স্ক্রিপ্টিং ভাষা কম্পিউটেশনের একটি বড় সাবসেট সমর্থন করে, এটি প্রায় সবকিছু সমর্থন করে না। যে প্রধান ক্যাটাগরিটি অনুপস্থিত তা হলো লুপ (loops)। ট্রানজ্যাকশন যাচাইকরণের সময় অসীম লুপ এড়াতে এটি করা হয়; তাত্ত্বিকভাবে এটি স্ক্রিপ্ট প্রোগ্রামারদের জন্য একটি অতিক্রমযোগ্য বাধা, কারণ যেকোনো লুপকে কেবল একটি if স্টেটমেন্টের সাহায্যে অন্তর্নিহিত কোডটি বারবার পুনরাবৃত্তি করে অনুকরণ করা যেতে পারে, তবে এটি এমন স্ক্রিপ্টগুলোর দিকে নিয়ে যায় যা স্পেসের দিক থেকে খুব অদক্ষ। উদাহরণস্বরূপ, একটি বিকল্প উপবৃত্তাকার বক্ররেখা স্বাক্ষর অ্যালগরিদম বাস্তবায়নের জন্য সম্ভবত 256টি পুনরাবৃত্তিমূলক গুণন রাউন্ডের প্রয়োজন হবে যা সবগুলো পৃথকভাবে কোডে অন্তর্ভুক্ত থাকবে।
- ভ্যালু-ব্লাইন্ডনেস (Value-blindness) - একটি UTXO স্ক্রিপ্টের জন্য উত্তোলনের পরিমাণের উপর সূক্ষ্ম নিয়ন্ত্রণ প্রদান করার কোনো উপায় নেই। উদাহরণস্বরূপ, একটি ওরাকল কন্ট্রাক্টের একটি শক্তিশালী ব্যবহারের ক্ষেত্র হতে পারে একটি হেজিং কন্ট্রাক্ট, যেখানে A এবং B $1000 মূল্যের BTC রাখে এবং 30 দিন পর স্ক্রিপ্টটি A-কে $1000 মূল্যের BTC এবং বাকিটা B-কে পাঠায়। এর জন্য USD-তে 1 BTC-এর মান নির্ধারণ করতে একটি ওরাকলের প্রয়োজন হবে, তবে তা সত্ত্বেও এটি বর্তমানে উপলব্ধ সম্পূর্ণ কেন্দ্রীভূত সমাধানগুলোর তুলনায় আস্থা এবং পরিকাঠামোর প্রয়োজনীয়তার ক্ষেত্রে একটি বিশাল উন্নতি। তবে, যেহেতু UTXO হলো অল-অর-নাথিং (all-or-nothing), তাই এটি অর্জন করার একমাত্র উপায় হলো বিভিন্ন ডিনোমিনেশনের অনেক UTXO (যেমন, 30 পর্যন্ত প্রতিটি k-এর জন্য 2k-এর একটি UTXO) রাখার অত্যন্ত অদক্ষ হ্যাকের মাধ্যমে এবং ওরাকলকে বেছে নিতে দেওয়া যে কোন UTXO-টি A-কে এবং কোনটি B-কে পাঠাতে হবে।
- স্টেটের অভাব - UTXO হয় ব্যয় করা যেতে পারে বা অব্যয়িত থাকতে পারে; মাল্টি-স্টেজ কন্ট্রাক্ট বা স্ক্রিপ্টগুলোর জন্য কোনো সুযোগ নেই যা এর বাইরে অন্য কোনো অভ্যন্তরীণ স্টেট রাখে। এটি মাল্টি-স্টেজ অপশন কন্ট্রাক্ট, বিকেন্দ্রীকৃত এক্সচেঞ্জ অফার বা টু-স্টেজ ক্রিপ্টোগ্রাফিক কমিটমেন্ট প্রোটোকল (নিরাপদ কম্পিউটেশনাল বাউন্টির জন্য প্রয়োজনীয়) তৈরি করা কঠিন করে তোলে। এর মানে হলো UTXO শুধুমাত্র সহজ, ওয়ান-অফ (one-off) কন্ট্রাক্ট তৈরি করতে ব্যবহার করা যেতে পারে এবং বিকেন্দ্রীকৃত সংস্থাগুলোর মতো আরও জটিল "স্টেটফুল" কন্ট্রাক্ট নয়, এবং এটি মেটা-প্রোটোকলগুলো বাস্তবায়ন করা কঠিন করে তোলে। ভ্যালু-ব্লাইন্ডনেসের সাথে যুক্ত বাইনারি স্টেটের মানে হলো আরেকটি গুরুত্বপূর্ণ অ্যাপ্লিকেশন, উত্তোলনের সীমা, অসম্ভব।
- ব্লকচেইন-ব্লাইন্ডনেস (Blockchain-blindness) - UTXO ব্লকচেইন ডেটা যেমন নন্স, টাইমস্ট্যাম্প এবং পূর্ববর্তী ব্লকের হ্যাশের প্রতি অন্ধ। এটি স্ক্রিপ্টিং ভাষাকে র্যান্ডমনেসের একটি সম্ভাব্য মূল্যবান উৎস থেকে বঞ্চিত করে জুয়া এবং অন্যান্য বেশ কয়েকটি ক্যাটাগরিতে অ্যাপ্লিকেশনগুলোকে মারাত্মকভাবে সীমাবদ্ধ করে।
সুতরাং, আমরা ক্রিপ্টোকারেন্সির উপরে উন্নত অ্যাপ্লিকেশন তৈরির তিনটি পদ্ধতি দেখতে পাই: একটি নতুন ব্লকচেইন তৈরি করা, বিটকয়েনের উপরে স্ক্রিপ্টিং ব্যবহার করা এবং বিটকয়েনের উপরে একটি মেটা-প্রোটোকল তৈরি করা। একটি নতুন ব্লকচেইন তৈরি করা একটি ফিচার সেট তৈরিতে সীমাহীন স্বাধীনতার অনুমতি দেয়, তবে ডেভেলপমেন্টের সময়, বুটস্ট্র্যাপিং প্রচেষ্টা এবং নিরাপত্তার মূল্যে। স্ক্রিপ্টিং ব্যবহার করা বাস্তবায়ন এবং প্রমিত করা সহজ, তবে এর ক্ষমতা খুবই সীমিত, এবং মেটা-প্রোটোকলগুলো, যদিও সহজ, স্কেলেবিলিটির ত্রুটিতে ভোগে। ইথেরিয়ামের মাধ্যমে, আমরা এমন একটি বিকল্প ফ্রেমওয়ার্ক তৈরি করতে চাই যা ডেভেলপমেন্টের সহজতার পাশাপাশি আরও শক্তিশালী লাইট ক্লায়েন্ট বৈশিষ্ট্যগুলোতে আরও বড় লাভ প্রদান করে, এবং একই সাথে অ্যাপ্লিকেশনগুলোকে একটি অর্থনৈতিক পরিবেশ এবং ব্লকচেইন নিরাপত্তা শেয়ার করার অনুমতি দেয়।
ইথেরিয়াম
ইথেরিয়ামের উদ্দেশ্য হলো বিকেন্দ্রীকৃত অ্যাপ্লিকেশন (dapp) তৈরির জন্য একটি বিকল্প প্রোটোকল তৈরি করা, যা এমন একটি ভিন্ন সেট ট্রেডঅফ প্রদান করে যা আমরা বিশ্বাস করি যে বিকেন্দ্রীকৃত অ্যাপ্লিকেশনগুলির একটি বড় শ্রেণীর জন্য খুব দরকারী হবে, বিশেষ করে এমন পরিস্থিতিতে যেখানে দ্রুত বিকাশের সময়, ছোট এবং খুব কম ব্যবহৃত অ্যাপ্লিকেশনগুলির জন্য নিরাপত্তা এবং বিভিন্ন অ্যাপ্লিকেশনের খুব দক্ষতার সাথে যোগাযোগ করার ক্ষমতা গুরুত্বপূর্ণ। ইথেরিয়াম এটি করে মূলত চূড়ান্ত বিমূর্ত ভিত্তি স্তর তৈরি করে: একটি অন্তর্নির্মিত টুরিং-সম্পূর্ণ (Turing-complete) প্রোগ্রামিং ভাষা সহ একটি ব্লকচেইন, যা যে কাউকে স্মার্ট কন্ট্রাক্ট এবং বিকেন্দ্রীকৃত অ্যাপ্লিকেশন লিখতে দেয় যেখানে তারা মালিকানা, ট্রানজ্যাকশন বিন্যাস এবং স্টেট রূপান্তর ফাংশনগুলির জন্য তাদের নিজস্ব ইচ্ছামতো নিয়ম তৈরি করতে পারে। Namecoin-এর একটি সাধারণ সংস্করণ মাত্র দুই লাইনের কোডে লেখা যেতে পারে এবং মুদ্রা ও রেপুটেশন সিস্টেমের মতো অন্যান্য প্রোটোকল 20 লাইনেরও কম কোডে তৈরি করা যেতে পারে। স্মার্ট কন্ট্রাক্ট, ক্রিপ্টোগ্রাফিক "বাক্স" যা মান ধারণ করে এবং শুধুমাত্র নির্দিষ্ট শর্ত পূরণ হলেই এটি আনলক করে, প্ল্যাটফর্মের উপরেও তৈরি করা যেতে পারে, যা টুরিং-সম্পূর্ণতা, মান-সচেতনতা, ব্লকচেইন-সচেতনতা এবং স্টেটের অতিরিক্ত ক্ষমতার কারণে বিটকয়েন স্ক্রিপ্টিং দ্বারা অফার করা ক্ষমতার চেয়ে অনেক বেশি শক্তিশালী।
ইথেরিয়াম অ্যাকাউন্ট
ইথেরিয়ামে, স্টেট "অ্যাকাউন্ট" নামক অবজেক্ট দ্বারা গঠিত, যেখানে প্রতিটি অ্যাকাউন্টের একটি 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 স্ট্রিংটিকে উপস্থাপন করেfn3। এই ক্ষেত্রে স্টেট রূপান্তর ফাংশনের প্রক্রিয়াটি নিম্নরূপ:
- ট্রানজ্যাকশনটি বৈধ এবং সুগঠিত কিনা তা পরীক্ষা করুন।
- ট্রানজ্যাকশন প্রেরকের কাছে কমপক্ষে 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 স্ট্যাক থেকে শীর্ষ দুটি আইটেম পপ করে এবং প্রথম আইটেম দ্বারা নির্দিষ্ট সূচকে কন্ট্রাক্টের স্টোরেজে দ্বিতীয় আইটেমটি সন্নিবেশ করে। যদিও জাস্ট-ইন-টাইম কম্পাইলেশনের মাধ্যমে ইথেরিয়াম ভার্চুয়াল মেশিন সম্পাদন অপ্টিমাইজ করার অনেক উপায় রয়েছে, ইথেরিয়ামের একটি মৌলিক বাস্তবায়ন কয়েকশ লাইনের কোডে করা যেতে পারে।
ব্লকচেইন এবং মাইনিং
ইথেরিয়াম ব্লকচেইন অনেক দিক থেকে বিটকয়েন ব্লকচেইনের মতোই, যদিও এর কিছু পার্থক্য রয়েছে। ব্লকচেইন আর্কিটেকচারের ক্ষেত্রে ইথেরিয়াম এবং বিটকয়েনের মধ্যে প্রধান পার্থক্য হলো, বিটকয়েনের বিপরীতে, ইথেরিয়াম ব্লকে ট্রানজ্যাকশন তালিকা এবং সাম্প্রতিকতম স্টেট উভয়ের একটি অনুলিপি থাকে। তা ছাড়াও, আরও দুটি মান, ব্লক নম্বর এবং কাঠিন্য, ব্লকে সংরক্ষণ করা হয়। ইথেরিয়ামে মৌলিক ব্লক যাচাইকরণ অ্যালগরিদম নিম্নরূপ:
- রেফারেন্স করা পূর্ববর্তী ব্লকটি বিদ্যমান এবং বৈধ কিনা তা পরীক্ষা করুন।
- ব্লকের টাইমস্ট্যাম্প রেফারেন্স করা পূর্ববর্তী ব্লকের চেয়ে বেশি এবং ভবিষ্যতের 15 মিনিটের কম কিনা তা পরীক্ষা করুন
- ব্লক নম্বর, কাঠিন্য, ট্রানজ্যাকশন রুট, আঙ্কেল রুট এবং গ্যাস লিমিট (বিভিন্ন লো-লেভেল ইথেরিয়াম-নির্দিষ্ট ধারণা) বৈধ কিনা তা পরীক্ষা করুন।
- ব্লকে প্রুফ-অফ-ওয়ার্ক (PoW) বৈধ কিনা তা পরীক্ষা করুন।
- ধরি
S[0]হলো পূর্ববর্তী ব্লকের শেষের স্টেট। - ধরি
TXহলো ব্লকের ট্রানজ্যাকশন তালিকা, যেখানেnট্রানজ্যাকশন রয়েছে।0...n-1এর সমস্তiএর জন্য,S[i+1] = APPLY(S[i],TX[i])সেট করুন। যদি কোনো অ্যাপ্লিকেশন একটি ত্রুটি প্রদান করে, বা যদি এই বিন্দু পর্যন্ত ব্লকে ব্যবহৃত মোট গ্যাসGASLIMITঅতিক্রম করে, তবে একটি ত্রুটি প্রদান করুন। - ধরি
S_FINALহলোS[n], তবে মাইনারকে দেওয়া ব্লক পুরস্কার যোগ করে। - স্টেট
S_FINALএর মার্কেল ট্রি রুট ব্লক হেডারে প্রদত্ত চূড়ান্ত স্টেট রুটের সমান কিনা তা পরীক্ষা করুন। যদি এটি হয়, তবে ব্লকটি বৈধ; অন্যথায়, এটি বৈধ নয়।
পদ্ধতিটি প্রথম নজরে অত্যন্ত অদক্ষ বলে মনে হতে পারে, কারণ এটি প্রতিটি ব্লকের সাথে সম্পূর্ণ স্টেট সংরক্ষণ করতে হয়, তবে বাস্তবে দক্ষতা বিটকয়েনের সাথে তুলনীয় হওয়া উচিত। কারণ হলো স্টেটটি ট্রি স্ট্রাকচারে সংরক্ষণ করা হয় এবং প্রতিটি ব্লকের পরে ট্রির শুধুমাত্র একটি ছোট অংশ পরিবর্তন করতে হয়। সুতরাং, সাধারণভাবে, দুটি সংলগ্ন ব্লকের মধ্যে ট্রির বিশাল সংখ্যাগরিষ্ঠ অংশ একই হওয়া উচিত এবং তাই ডেটা একবার সংরক্ষণ করা যেতে পারে এবং পয়েন্টার (অর্থাৎ, সাবট্রির হ্যাশ) ব্যবহার করে দুবার রেফারেন্স করা যেতে পারে। এটি সম্পন্ন করার জন্য "প্যাট্রিসিয়া ট্রি" নামে পরিচিত একটি বিশেষ ধরনের ট্রি ব্যবহার করা হয়, যার মধ্যে মার্কেল ট্রি ধারণার একটি পরিবর্তন অন্তর্ভুক্ত রয়েছে যা নোডগুলিকে দক্ষতার সাথে সন্নিবেশ এবং মুছে ফেলার অনুমতি দেয়, এবং শুধুমাত্র পরিবর্তন নয়। উপরন্তু, যেহেতু সমস্ত স্টেট তথ্য শেষ ব্লকের অংশ, তাই সম্পূর্ণ ব্লকচেইন ইতিহাস সংরক্ষণ করার কোনো প্রয়োজন নেই - একটি কৌশল যা, যদি এটি বিটকয়েনে প্রয়োগ করা যায়, তবে স্পেসে 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 সাবো প্রদান করুন) ব্যবহার করতে পারে; সবচেয়ে ফি-সাশ্রয়ী পদ্ধতি হলো প্রদানকারীর শেষ পর্যন্ত ট্রানজ্যাকশনটি প্রকাশ না করা, এর পরিবর্তে প্রতি 32 কিলোবাইট পর একই নন্স সহ ট্রানজ্যাকশনটিকে সামান্য বেশি লাভজনক ট্রানজ্যাকশন দিয়ে প্রতিস্থাপন করা।
প্রোটোকলের একটি গুরুত্বপূর্ণ বৈশিষ্ট্য হলো, যদিও মনে হতে পারে যে কেউ ফাইলটি ভুলে যাওয়ার সিদ্ধান্ত না নেওয়ার জন্য অনেক র্যান্ডম নোডকে বিশ্বাস করছে, তবে কেউ সিক্রেট শেয়ারিংয়ের মাধ্যমে ফাইলটিকে অনেক টুকরোতে বিভক্ত করে এবং প্রতিটি টুকরো এখনও কোনো নোডের দখলে আছে কিনা তা দেখতে কন্ট্রাক্টগুলো পর্যবেক্ষণ করে সেই ঝুঁকি প্রায় শূন্যে নামিয়ে আনতে পারে। যদি কোনো কন্ট্রাক্ট এখনও অর্থ প্রদান করে, তবে এটি একটি ক্রিপ্টোগ্রাফিক প্রমাণ প্রদান করে যে বাইরের কেউ এখনও ফাইলটি সংরক্ষণ করছে।
বিকেন্দ্রীকৃত স্বায়ত্তশাসিত সংস্থা
একটি "বিকেন্দ্রীকৃত স্বায়ত্তশাসিত সংস্থা"-এর সাধারণ ধারণা হলো একটি ভার্চুয়াল সত্তা যার একটি নির্দিষ্ট সংখ্যক সদস্য বা শেয়ারহোল্ডার রয়েছে যাদের, সম্ভবত 67% সংখ্যাগরিষ্ঠতার সাথে, সত্তার তহবিল ব্যয় করার এবং এর কোড পরিবর্তন করার অধিকার রয়েছে। সদস্যরা সম্মিলিতভাবে সিদ্ধান্ত নেবে যে সংস্থাটি কীভাবে তার তহবিল বরাদ্দ করবে। একটি DAO-এর তহবিল বরাদ্দের পদ্ধতিগুলো বাউন্টি, বেতন থেকে শুরু করে কাজের পুরস্কার দেওয়ার জন্য একটি অভ্যন্তরীণ কারেন্সির মতো আরও অভিনব প্রক্রিয়া পর্যন্ত হতে পারে। এটি মূলত একটি ঐতিহ্যবাহী কোম্পানি বা অলাভজনক সংস্থার আইনি ফাঁদগুলোর প্রতিলিপি তৈরি করে তবে প্রয়োগের জন্য শুধুমাত্র ক্রিপ্টোগ্রাফিক ব্লকচেইন প্রযুক্তি ব্যবহার করে। এখন পর্যন্ত DAO-কে ঘিরে বেশিরভাগ আলোচনাই লভ্যাংশ-গ্রহণকারী শেয়ারহোল্ডার এবং লেনদেনযোগ্য শেয়ারসহ একটি "বিকেন্দ্রীকৃত স্বায়ত্তশাসিত কর্পোরেশন" (DAC)-এর "পুঁজিবাদী" মডেলকে ঘিরে হয়েছে; একটি বিকল্প, যাকে সম্ভবত "বিকেন্দ্রীকৃত স্বায়ত্তশাসিত সম্প্রদায়" হিসেবে বর্ণনা করা যেতে পারে, সেখানে সিদ্ধান্ত গ্রহণে সকল সদস্যের সমান অংশ থাকবে এবং একজন সদস্য যোগ করতে বা সরাতে বিদ্যমান সদস্যদের 67%-এর সম্মতি প্রয়োজন হবে। একজন ব্যক্তির কেবল একটি সদস্যপদ থাকতে পারে এমন প্রয়োজনীয়তা তখন গ্রুপ দ্বারা সম্মিলিতভাবে প্রয়োগ করতে হবে।
কীভাবে একটি DAO কোড করতে হয় তার একটি সাধারণ রূপরেখা নিচে দেওয়া হলো। সবচেয়ে সহজ ডিজাইনটি হলো স্ব-পরিবর্তনকারী কোডের একটি অংশ যা পরিবর্তিত হয় যদি দুই-তৃতীয়াংশ সদস্য কোনো পরিবর্তনে সম্মত হয়। যদিও কোড তাত্ত্বিকভাবে অপরিবর্তনীয়, কেউ সহজেই এটি এড়িয়ে যেতে পারে এবং কোডের অংশগুলোকে আলাদা কন্ট্রাক্টে রেখে এবং কোন কন্ট্রাক্টগুলোকে কল করতে হবে তার ঠিকানা পরিবর্তনযোগ্য স্টোরেজে সংরক্ষণ করে ডি-ফ্যাক্টো পরিবর্তনশীলতা পেতে পারে। এই ধরনের একটি DAO কন্ট্রাক্টের একটি সহজ বাস্তবায়নে, ট্রানজ্যাকশনে প্রদত্ত ডেটা দ্বারা আলাদা করা তিনটি ট্রানজ্যাকশন প্রকার থাকবে:
- স্টোরেজ সূচক
K-এর ঠিকানাকেVমানে পরিবর্তন করার জন্য সূচকiসহ একটি প্রস্তাব নিবন্ধন করতে[0,i,K,V] - প্রস্তাব
i-এর পক্ষে একটি ভোট নিবন্ধন করতে[1,i] - পর্যাপ্ত ভোট দেওয়া হলে প্রস্তাব
iচূড়ান্ত করতে[2,i]
কন্ট্রাক্টটিতে তখন এগুলোর প্রতিটির জন্য ক্লজ থাকবে। এটি সমস্ত উন্মুক্ত স্টোরেজ পরিবর্তনের একটি রেকর্ড বজায় রাখবে, সাথে কারা তাদের জন্য ভোট দিয়েছে তার একটি তালিকাও থাকবে। এতে সকল সদস্যের একটি তালিকাও থাকবে। যখন কোনো স্টোরেজ পরিবর্তনের পক্ষে দুই-তৃতীয়াংশ সদস্য ভোট দেয়, তখন একটি চূড়ান্তকরণ ট্রানজ্যাকশন পরিবর্তনটি কার্যকর করতে পারে। একটি আরও পরিশীলিত কাঠামোতে ট্রানজ্যাকশন পাঠানো, সদস্য যোগ করা এবং সদস্য অপসারণ করার মতো বৈশিষ্ট্যগুলোর জন্য অন্তর্নির্মিত ভোটিং ক্ষমতাও থাকবে এবং এমনকি লিকুইড ডেমোক্রেসি (opens in a new tab)-শৈলীর ভোট অর্পণ (অর্থাৎ, যে কেউ তাদের জন্য ভোট দেওয়ার জন্য কাউকে নিয়োগ করতে পারে এবং নিয়োগটি ট্রানজিটিভ তাই যদি A, B-কে নিয়োগ করে এবং B, C-কে নিয়োগ করে তবে C, A-এর ভোট নির্ধারণ করে) প্রদান করতে পারে। এই ডিজাইনটি DAO-কে একটি বিকেন্দ্রীকৃত সম্প্রদায় হিসেবে জৈবিকভাবে বৃদ্ধি পেতে দেবে, যা মানুষকে শেষ পর্যন্ত কে সদস্য তা ফিল্টার করার কাজটি বিশেষজ্ঞদের কাছে অর্পণ করার অনুমতি দেবে, যদিও "বর্তমান সিস্টেম"-এর বিপরীতে বিশেষজ্ঞরা সময়ের সাথে সাথে সহজেই অস্তিত্বে আসতে এবং যেতে পারে কারণ পৃথক সম্প্রদায়ের সদস্যরা তাদের জোট পরিবর্তন করে।
একটি বিকল্প মডেল হলো একটি বিকেন্দ্রীকৃত কর্পোরেশনের জন্য, যেখানে যেকোনো অ্যাকাউন্টে শূন্য বা তার বেশি শেয়ার থাকতে পারে এবং সিদ্ধান্ত নেওয়ার জন্য দুই-তৃতীয়াংশ শেয়ারের প্রয়োজন হয়। একটি সম্পূর্ণ কাঠামোতে সম্পদ ব্যবস্থাপনা কার্যকারিতা, শেয়ার কেনা বা বিক্রি করার প্রস্তাব দেওয়ার ক্ষমতা এবং প্রস্তাব গ্রহণ করার ক্ষমতা (পছন্দসইভাবে কন্ট্রাক্টের ভেতরে একটি অর্ডার-ম্যাচিং প্রক্রিয়ার সাথে) জড়িত থাকবে। অর্পণ লিকুইড ডেমোক্রেসি-শৈলীতেও বিদ্যমান থাকবে, যা "পরিচালনা পর্ষদ"-এর ধারণাকে সাধারণীকরণ করবে।
আরও অ্যাপ্লিকেশন
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) প্রোটোকল হলো একটি উদ্ভাবন যা প্রথম ডিসেম্বর 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 শুধুমাত্র তার আকারের কারণে উল্লেখযোগ্যভাবে বেশি দক্ষ হবে। এই দুটি প্রভাব একত্রিত হলে, যে ব্লকচেইনগুলো দ্রুত ব্লক তৈরি করে সেগুলোর ক্ষেত্রে একটি মাইনিং পুলের নেটওয়ার্ক হ্যাশপাওয়ারের এত বড় শতাংশ থাকার সম্ভাবনা খুব বেশি থাকে যা মাইনিং প্রক্রিয়ার উপর তাদের ডি ফ্যাক্টো (de facto) নিয়ন্ত্রণ প্রতিষ্ঠা করে।
সোমপোলিনস্কি এবং জোহারের বর্ণনা অনুযায়ী, GHOST কোন চেইনটি "সবচেয়ে দীর্ঘ" তার গণনায় স্টেল ব্লকগুলোকে অন্তর্ভুক্ত করে নেটওয়ার্ক নিরাপত্তা হারানোর প্রথম সমস্যাটির সমাধান করে; অর্থাৎ, শুধুমাত্র একটি ব্লকের প্যারেন্ট এবং পূর্বপুরুষদেরই নয়, বরং ব্লকের পূর্বপুরুষের স্টেল বংশধরদেরও (ইথেরিয়াম পরিভাষায়, "আঙ্কেল" বা "uncles") কোন ব্লকটির পেছনে সবচেয়ে বড় মোট প্রুফ-অফ-ওয়ার্ক (PoW) রয়েছে তার গণনায় যোগ করা হয়। কেন্দ্রীকরণ পক্ষপাতের দ্বিতীয় সমস্যাটি সমাধান করার জন্য, আমরা সোমপোলিনস্কি এবং জোহার দ্বারা বর্ণিত প্রোটোকলের বাইরে গিয়ে স্টেলগুলোকেও ব্লক পুরস্কার প্রদান করি: একটি স্টেল ব্লক তার মূল পুরস্কারের 87.5% পায় এবং যে নেফিউ (nephew) স্টেল ব্লকটিকে অন্তর্ভুক্ত করে সে বাকি 12.5% পায়। তবে, লেনদেন ফি আঙ্কেলদের দেওয়া হয় না।
ইথেরিয়াম GHOST-এর একটি সরলীকৃত সংস্করণ বাস্তবায়ন করে যা শুধুমাত্র সাতটি স্তর পর্যন্ত নিচে যায়। নির্দিষ্টভাবে, এটি নিম্নরূপ সংজ্ঞায়িত করা হয়েছে:
- একটি ব্লককে অবশ্যই একটি প্যারেন্ট নির্দিষ্ট করতে হবে এবং এটিকে অবশ্যই 0 বা ততোধিক আঙ্কেল নির্দিষ্ট করতে হবে
- ব্লক B-তে অন্তর্ভুক্ত একটি আঙ্কেলের অবশ্যই নিম্নলিখিত বৈশিষ্ট্যগুলো থাকতে হবে:
- এটিকে অবশ্যই B-এর k-তম প্রজন্মের পূর্বপুরুষের সরাসরি চাইল্ড হতে হবে, যেখানে
2 <= k <= 7। - এটি B-এর পূর্বপুরুষ হতে পারবে না
- একটি আঙ্কেলকে অবশ্যই একটি বৈধ ব্লক হেডার হতে হবে, তবে এটিকে পূর্বে যাচাইকৃত বা এমনকি বৈধ ব্লক হওয়ার প্রয়োজন নেই
- একটি আঙ্কেলকে অবশ্যই পূর্ববর্তী ব্লকগুলোতে অন্তর্ভুক্ত সমস্ত আঙ্কেল এবং একই ব্লকে অন্তর্ভুক্ত অন্যান্য সমস্ত আঙ্কেল থেকে আলাদা হতে হবে (নন-ডাবল-ইনক্লুশন)
- এটিকে অবশ্যই B-এর k-তম প্রজন্মের পূর্বপুরুষের সরাসরি চাইল্ড হতে হবে, যেখানে
- ব্লক B-এর প্রতিটি আঙ্কেল U-এর জন্য, B-এর মাইনার তার কয়েনবেস পুরস্কারের সাথে অতিরিক্ত 3.125% যোগ করে পায় এবং U-এর মাইনার একটি স্ট্যান্ডার্ড কয়েনবেস পুরস্কারের 93.75% পায়।
GHOST-এর এই সীমিত সংস্করণটি, যেখানে আঙ্কেলদের শুধুমাত্র 7 প্রজন্ম পর্যন্ত অন্তর্ভুক্ত করা যায়, দুটি কারণে ব্যবহার করা হয়েছিল। প্রথমত, আনলিমিটেড GHOST একটি নির্দিষ্ট ব্লকের জন্য কোন আঙ্কেলগুলো বৈধ তার গণনায় অনেক বেশি জটিলতা অন্তর্ভুক্ত করবে। দ্বিতীয়ত, ইথেরিয়াম-এ ব্যবহৃত ক্ষতিপূরণ সহ আনলিমিটেড GHOST একজন মাইনারের জন্য মূল চেইনে মাইন করার এবং কোনো পাবলিক আক্রমণকারীর চেইনে মাইন না করার প্রণোদনা দূর করে।
ফি
যেহেতু ব্লকচেইন-এ প্রকাশিত প্রতিটি ট্রানজ্যাকশন নেটওয়ার্কের উপর এটি ডাউনলোড এবং যাচাই করার খরচ চাপিয়ে দেয়, তাই অপব্যবহার রোধ করার জন্য সাধারণত লেনদেন ফি জড়িত কিছু নিয়ন্ত্রক ব্যবস্থার প্রয়োজন হয়। বিটকয়েন-এ ব্যবহৃত ডিফল্ট পদ্ধতিটি হলো সম্পূর্ণ স্বেচ্ছাসেবী ফি রাখা, যেখানে মাইনারদের গেটকিপার হিসেবে কাজ করার এবং ডায়নামিক ন্যূনতম মান নির্ধারণ করার ওপর নির্ভর করা হয়। এই পদ্ধতিটি বিটকয়েন কমিউনিটিতে খুব অনুকূলভাবে গৃহীত হয়েছে বিশেষ করে কারণ এটি "বাজার-ভিত্তিক", যা মাইনার এবং ট্রানজ্যাকশন প্রেরকদের মধ্যে সরবরাহ এবং চাহিদাকে মূল্য নির্ধারণ করতে দেয়। তবে, এই যুক্তির সমস্যাটি হলো ট্রানজ্যাকশন প্রসেসিং কোনো বাজার নয়; যদিও ট্রানজ্যাকশন প্রসেসিংকে মাইনার কর্তৃক প্রেরককে দেওয়া একটি পরিষেবা হিসেবে ব্যাখ্যা করা স্বজ্ঞাতভাবে আকর্ষণীয়, বাস্তবে একজন মাইনার যে ট্রানজ্যাকশনটি অন্তর্ভুক্ত করে তা নেটওয়ার্কের প্রতিটি নোড দ্বারা প্রসেস করতে হবে, তাই ট্রানজ্যাকশন প্রসেসিংয়ের খরচের বিশাল অংশ তৃতীয় পক্ষ বহন করে, সেই মাইনার নয় যে এটি অন্তর্ভুক্ত করবে কি না সেই সিদ্ধান্ত নিচ্ছে। অতএব, ট্র্যাজেডি-অফ-দ্য-কমন্স (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 এ সেট করা হবে, তবে আরও বিশ্লেষণের পরে সম্ভবত পরিবর্তন করা হবে।
বিটকয়েন-এ বড় ব্লকের আকারকে নিরুৎসাহিত করার আরেকটি কারণ রয়েছে: বড় ব্লকগুলো সম্প্রসারিত হতে বেশি সময় নেবে এবং তাই স্টেল হওয়ার সম্ভাবনা বেশি থাকে। ইথেরিয়াম-এ, উচ্চ গ্যাস-গ্রাহক ব্লকগুলো সম্প্রসারিত হতে বেশি সময় নিতে পারে কারণ সেগুলো শারীরিকভাবে বড় এবং যাচাই করার জন্য ট্রানজ্যাকশন স্টেট ট্রানজিশনগুলো প্রসেস করতে বেশি সময় নেয়। এই বিলম্বের নিরুৎসাহ বিটকয়েন-এ একটি উল্লেখযোগ্য বিবেচ্য বিষয়, তবে GHOST প্রোটোকলের কারণে ইথেরিয়াম-এ এটি কম; অতএব, নিয়ন্ত্রিত ব্লক সীমার ওপর নির্ভর করা আরও স্থিতিশীল বেসলাইন প্রদান করে।
কম্পিউটেশন এবং টুরিং-কমপ্লিটনেস
একটি গুরুত্বপূর্ণ বিষয় হলো ইথেরিয়াম ভার্চুয়াল মেশিন টুরিং-কমপ্লিট (Turing-complete); এর মানে হলো EVM কোড অসীম লুপসহ যেকোনো কম্পিউটেশন এনকোড করতে পারে যা কল্পনাযোগ্যভাবে সম্পন্ন করা যেতে পারে। EVM কোড দুটি উপায়ে লুপিংয়ের অনুমতি দেয়। প্রথমত, একটি JUMP নির্দেশ রয়েছে যা প্রোগ্রামটিকে কোডের পূর্ববর্তী স্থানে ফিরে যেতে দেয় এবং শর্তসাপেক্ষ জাম্পিং করার জন্য একটি JUMPI নির্দেশ রয়েছে, যা while x < 27: x = x * 2 এর মতো স্টেটমেন্টের অনুমতি দেয়। দ্বিতীয়ত, কন্ট্রাক্টগুলো অন্যান্য কন্ট্রাক্টকে কল করতে পারে, যা সম্ভাব্যভাবে রিকার্শনের মাধ্যমে লুপিংয়ের অনুমতি দেয়। এটি স্বাভাবিকভাবেই একটি সমস্যার দিকে নিয়ে যায়: ক্ষতিকারক ব্যবহারকারীরা কি মাইনার এবং ফুল নোডগুলোকে একটি অসীম লুপে প্রবেশ করতে বাধ্য করে মূলত বন্ধ করে দিতে পারে? কম্পিউটার বিজ্ঞানে হল্টিং প্রবলেম (halting problem) নামে পরিচিত একটি সমস্যার কারণে এই সমস্যাটি দেখা দেয়: সাধারণ ক্ষেত্রে, একটি প্রদত্ত প্রোগ্রাম কখনো থামবে কি না তা বলার কোনো উপায় নেই।
স্টেট ট্রানজিশন বিভাগে বর্ণিত হিসাবে, আমাদের সমাধানটি একটি ট্রানজ্যাকশনকে সর্বাধিক সংখ্যক কম্পিউটেশনাল ধাপ সেট করার রিকোয়ার করে কাজ করে যা এটি নিতে অনুমোদিত, এবং যদি এক্সিকিউশন বেশি সময় নেয় তবে কম্পিউটেশন রিভার্ট করা হয় কিন্তু ফি তবুও প্রদান করা হয়। বার্তাগুলোও একইভাবে কাজ করে। আমাদের সমাধানের পেছনের উদ্দেশ্য দেখানোর জন্য, নিম্নলিখিত উদাহরণগুলো বিবেচনা করুন:
- একজন আক্রমণকারী একটি কন্ট্রাক্ট তৈরি করে যা একটি অসীম লুপ চালায় এবং তারপর মাইনারের কাছে সেই লুপটি সক্রিয় করার জন্য একটি ট্রানজ্যাকশন পাঠায়। মাইনার ট্রানজ্যাকশনটি প্রসেস করবে, অসীম লুপটি চালাবে এবং গ্যাস শেষ হওয়ার জন্য অপেক্ষা করবে। যদিও এক্সিকিউশনের গ্যাস শেষ হয়ে যায় এবং মাঝপথে থেমে যায়, ট্রানজ্যাকশনটি এখনও বৈধ থাকে এবং মাইনার এখনও প্রতিটি কম্পিউটেশনাল ধাপের জন্য আক্রমণকারীর কাছ থেকে ফি দাবি করে।
- একজন আক্রমণকারী মাইনারকে এত দীর্ঘ সময়ের জন্য কম্পিউটিং চালিয়ে যেতে বাধ্য করার উদ্দেশ্যে একটি খুব দীর্ঘ অসীম লুপ তৈরি করে যে কম্পিউটেশন শেষ হওয়ার সময় আরও কয়েকটি ব্লক বেরিয়ে আসবে এবং মাইনারের পক্ষে ফি দাবি করার জন্য ট্রানজ্যাকশনটি অন্তর্ভুক্ত করা সম্ভব হবে নাস। তবে, আক্রমণকারীকে এক্সিকিউশন নিতে পারে এমন কম্পিউটেশনাল ধাপের সংখ্যা সীমিত করে
STARTGASএর জন্য একটি মান জমা দিতে হবে, তাই মাইনার আগে থেকেই জানতে পারবে যে কম্পিউটেশনটি অত্যধিক সংখ্যক ধাপ নেবে। - একজন আক্রমণকারী
send(A,contract.storage[A]); contract.storage[A] = 0এর মতো কোনো ফর্মের কোড সহ একটি কন্ট্রাক্ট দেখে এবং প্রথম ধাপটি চালানোর জন্য পর্যাপ্ত গ্যাস সহ একটি ট্রানজ্যাকশন পাঠায় কিন্তু দ্বিতীয়টির জন্য নয় (অর্থাৎ, একটি উত্তোলন করা কিন্তু ব্যালেন্স কমতে না দেওয়া)। কন্ট্রাক্ট লেখকের এই ধরনের আক্রমণ থেকে রক্ষা পাওয়ার বিষয়ে চিন্তা করার দরকার নেই, কারণ যদি এক্সিকিউশন মাঝপথে থেমে যায় তবে পরিবর্তনগুলো রিভার্ট হয়ে যায়। - একটি আর্থিক কন্ট্রাক্ট ঝুঁকি কমানোর জন্য নয়টি মালিকানাধীন ডেটা ফিডের মধ্যমা (median) নিয়ে কাজ করে। একজন আক্রমণকারী ডেটা ফিডগুলোর একটির নিয়ন্ত্রণ নেয়, যা 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টি কন্ট্রাক্টের তৈরি এবং এক্সিকিউশন সহজেই একটি একক কন্ট্রাক্টে পরিণত করা যেতে পারে)। আরেকটি সমস্যাযুক্ত বিষয় হলো একটি বার্তার ঠিকানা ক্ষেত্রটি একটি ভেরিয়েবল, তাই সাধারণভাবে একটি নির্দিষ্ট কন্ট্রাক্ট সময়ের আগে কোন অন্যান্য কন্ট্রাক্টগুলোকে কল করবে তা বলাও সম্ভব নাও হতে পারে। অতএব, সব মিলিয়ে, আমাদের একটি আশ্চর্যজনক উপসংহার রয়েছে: টুরিং-কমপ্লিটনেস পরিচালনা করা আশ্চর্যজনকভাবে সহজ, এবং টুরিং-কমপ্লিটনেসের অভাব পরিচালনা করা সমানভাবে আশ্চর্যজনকভাবে কঠিন যদি না ঠিক একই নিয়ন্ত্রণগুলো থাকে - তবে সেই ক্ষেত্রে কেন প্রোটোকলটিকে টুরিং-কমপ্লিট হতে দেওয়া হবে না?
মুদ্রা এবং ইস্যুয়েন্স
ইথেরিয়াম নেটওয়ার্ক-এ এর নিজস্ব বিল্ট-ইন মুদ্রা, ইথার অন্তর্ভুক্ত রয়েছে, যা বিভিন্ন ধরণের ডিজিটাল সম্পদের মধ্যে দক্ষ বিনিময়ের অনুমতি দেওয়ার জন্য একটি প্রাথমিক তারল্য স্তর প্রদান করার এবং আরও গুরুত্বপূর্ণভাবে, লেনদেন ফি প্রদানের জন্য একটি প্রক্রিয়া প্রদান করার দ্বৈত উদ্দেশ্য পরিবেশন করে। সুবিধার জন্য এবং ভবিষ্যতের যুক্তি এড়াতে (বিটকয়েন-এ বর্তমান mBTC/uBTC/satoshi বিতর্ক দেখুন), ডিনোমিনেশনগুলো (denominations) আগে থেকেই লেবেল করা হবে:
- 1: Wei
- 1012: সাবো
- 1015: ফিনি
- 1018: ইথার
এটিকে "ডলার" এবং "সেন্ট" বা "BTC" এবং "সাতোশি" ধারণার একটি সম্প্রসারিত সংস্করণ হিসেবে নেওয়া উচিত। অদূর ভবিষ্যতে, আমরা আশা করি সাধারণ ট্রানজ্যাকশনের জন্য "ইথার", মাইক্রোট্রানজ্যাকশনের জন্য "ফিনি" এবং ফি ও প্রোটোকল বাস্তবায়নের প্রযুক্তিগত আলোচনার জন্য "সাবো" এবং "Wei" ব্যবহৃত হবে; বাকি ডিনোমিনেশনগুলো পরে কার্যকর হতে পারে এবং এই মুহূর্তে ক্লায়েন্টদের মধ্যে অন্তর্ভুক্ত করা উচিত নয়।
ইস্যুয়েন্স মডেলটি নিম্নরূপ হবে:
- ইথার প্রতি BTC-তে 1000-2000 ইথার মূল্যে একটি মুদ্রা বিক্রয়ে প্রকাশ করা হবে, এটি এমন একটি প্রক্রিয়া যা ইথেরিয়াম সংস্থাকে অর্থায়ন করতে এবং উন্নয়নের জন্য অর্থ প্রদানের উদ্দেশ্যে তৈরি করা হয়েছে যা মাস্টারকয়েন (Mastercoin) এবং NXT-এর মতো অন্যান্য প্ল্যাটফর্মগুলো সফলতার সাথে ব্যবহার করেছে। প্রাথমিক ক্রেতারা বড় ছাড় থেকে উপকৃত হবেন। বিক্রয় থেকে প্রাপ্ত BTC সম্পূর্ণভাবে ডেভেলপারদের বেতন এবং বাউন্টি প্রদানের জন্য ব্যবহৃত হবে এবং ইথেরিয়াম ও ক্রিপ্টোকারেন্সি ইকোসিস্টেমের বিভিন্ন লাভজনক এবং অলাভজনক প্রকল্পে বিনিয়োগ করা হবে।
- বিক্রিত মোট পরিমাণের 0.099x (60102216 ETH) সংস্থাকে বরাদ্দ করা হবে প্রাথমিক অবদানকারীদের ক্ষতিপূরণ দিতে এবং জেনেসিস ব্লক-এর আগে 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% |
দীর্ঘমেয়াদী সরবরাহ বৃদ্ধির হার (শতাংশ)
লিনিয়ার মুদ্রা ইস্যুয়েন্স সত্ত্বেও, বিটকয়েন-এর মতোই সময়ের সাথে সাথে সরবরাহ বৃদ্ধির হার শূন্যের দিকে ঝোঁকে।
উপরের মডেলে দুটি প্রধান পছন্দ হলো (1) একটি এনডাউমেন্ট পুলের (endowment pool) অস্তিত্ব এবং আকার, এবং (2) বিটকয়েন-এর মতো ক্যাপড সাপ্লাইয়ের (capped supply) বিপরীতে একটি স্থায়ীভাবে ক্রমবর্ধমান লিনিয়ার সাপ্লাইয়ের অস্তিত্ব। এনডাউমেন্ট পুলের যৌক্তিকতা নিম্নরূপ। যদি এনডাউমেন্ট পুলের অস্তিত্ব না থাকত এবং একই মুদ্রাস্ফীতির হার প্রদান করার জন্য লিনিয়ার ইস্যুয়েন্স 0.217x এ হ্রাস পেত, তবে ইথারের মোট পরিমাণ 16.5% কম হতো এবং তাই প্রতিটি ইউনিট 19.8% বেশি মূল্যবান হতো। অতএব, ভারসাম্যে বিক্রয়ে 19.8% বেশি ইথার কেনা হতো, তাই প্রতিটি ইউনিট আবারও আগের মতোই মূল্যবান হতো। তখন সংস্থার কাছে 1.198x পরিমাণ BTC থাকত, যা দুটি ভাগে বিভক্ত বলে বিবেচনা করা যেতে পারে: আসল BTC এবং অতিরিক্ত 0.198x। অতএব, এই পরিস্থিতিটি এনডাউমেন্টের ঠিক সমতুল্য, তবে একটি গুরুত্বপূর্ণ পার্থক্য রয়েছে: সংস্থাটি সম্পূর্ণভাবে BTC ধারণ করে এবং তাই ইথার ইউনিটের মান সমর্থন করতে উৎসাহিত হয় না।
স্থায়ী লিনিয়ার সরবরাহ বৃদ্ধির মডেলটি বিটকয়েন-এ অত্যধিক সম্পদ কেন্দ্রীকরণ হিসেবে যা দেখা হয় তার ঝুঁকি হ্রাস করে এবং বর্তমান ও ভবিষ্যৎ যুগে বসবাসকারী ব্যক্তিদের মুদ্রার একক অর্জনের একটি ন্যায্য সুযোগ দেয়, একই সাথে ইথার অর্জন এবং ধরে রাখার একটি শক্তিশালী প্রণোদনা বজায় রাখে কারণ শতাংশ হিসেবে "সরবরাহ বৃদ্ধির হার" সময়ের সাথে সাথে এখনও শূন্যের দিকে ঝোঁকে। আমরা এই তত্ত্বও দিই যে যেহেতু অসাবধানতা, মৃত্যু ইত্যাদির কারণে সময়ের সাথে সাথে কয়েনগুলো সর্বদা হারিয়ে যায় এবং কয়েন হারানোকে প্রতি বছর মোট সরবরাহের শতাংশ হিসেবে মডেল করা যেতে পারে, তাই প্রচলনে থাকা মোট মুদ্রা সরবরাহ আসলে শেষ পর্যন্ত বার্ষিক ইস্যুয়েন্সকে হারানোর হার দিয়ে ভাগ করলে যে মান পাওয়া যায় তাতে স্থিতিশীল হবে (যেমন, 1% হারানোর হারে, একবার সরবরাহ 26X এ পৌঁছালে প্রতি বছর 0.26X মাইন করা হবে এবং 0.26X হারিয়ে যাবে, যা একটি ভারসাম্য তৈরি করবে)।
মনে রাখবেন যে ভবিষ্যতে, এটি সম্ভব যে ইথেরিয়াম নিরাপত্তার জন্য একটি প্রুফ-অফ-স্টেক (PoS) মডেলে স্যুইচ করবে, যা ইস্যুয়েন্সের প্রয়োজনীয়তাকে প্রতি বছর শূন্য থেকে 0.05X এর মধ্যে কমিয়ে দেবে। যদি ইথেরিয়াম সংস্থা তহবিল হারায় বা অন্য কোনো কারণে অদৃশ্য হয়ে যায়, তবে আমরা একটি "সামাজিক চুক্তি" উন্মুক্ত রাখি: যে কারো ইথেরিয়াম-এর একটি ভবিষ্যৎ ক্যান্ডিডেট সংস্করণ তৈরি করার অধিকার রয়েছে, একমাত্র শর্ত হলো ইথারের পরিমাণ সর্বাধিক 60102216 * (1.198 + 0.26 * n) এর সমান হতে হবে যেখানে n হলো জেনেসিস ব্লক-এর পরের বছরের সংখ্যা। নির্মাতারা উন্নয়নের জন্য অর্থ প্রদানের উদ্দেশ্যে PoS-চালিত সরবরাহ সম্প্রসারণ এবং সর্বাধিক অনুমোদিত সরবরাহ সম্প্রসারণের মধ্যে পার্থক্যের কিছু বা সমস্ত অংশ ক্রাউড-সেল (crowd-sell) বা অন্যথায় বরাদ্দ করতে স্বাধীন। ক্যান্ডিডেট আপগ্রেডগুলো যা সামাজিক চুক্তি মেনে চলে না সেগুলো ন্যায়সঙ্গতভাবে কমপ্লায়েন্ট (compliant) সংস্করণগুলোতে ফর্ক করা যেতে পারে।
মাইনিং কেন্দ্রীকরণ
বিটকয়েন মাইনিং অ্যালগরিদমটি মাইনারদের ব্লক হেডার-এর সামান্য পরিবর্তিত সংস্করণগুলোতে লক্ষ লক্ষ বার বারবার SHA256 গণনা করার মাধ্যমে কাজ করে, যতক্ষণ না শেষ পর্যন্ত একটি নোড এমন একটি সংস্করণ নিয়ে আসে যার হ্যাশ লক্ষ্যের চেয়ে কম (বর্তমানে প্রায় 2192)। তবে, এই মাইনিং অ্যালগরিদমটি দুই ধরণের কেন্দ্রীকরণের জন্য ঝুঁকিপূর্ণ। প্রথমত, মাইনিং ইকোসিস্টেমটি ASIC (অ্যাপ্লিকেশন-স্পেসিফিক ইন্টিগ্রেটেড সার্কিট) দ্বারা আধিপত্য বিস্তার করেছে, যা বিটকয়েন মাইনিংয়ের নির্দিষ্ট কাজের জন্য ডিজাইন করা কম্পিউটার চিপ এবং তাই হাজার গুণ বেশি দক্ষ। এর মানে হলো বিটকয়েন মাইনিং আর কোনো অত্যন্ত বিকেন্দ্রীকৃত এবং সমতাবাদী সাধনা নয়, এতে কার্যকরভাবে অংশগ্রহণ করার জন্য লক্ষ লক্ষ ডলার মূলধনের প্রয়োজন হয়। দ্বিতীয়ত, বেশিরভাগ বিটকয়েন মাইনার আসলে স্থানীয়ভাবে ব্লক যাচাইকরণ সম্পাদন করে না; পরিবর্তে, তারা ব্লক হেডারগুলো প্রদান করার জন্য একটি কেন্দ্রীভূত মাইনিং পুলের ওপর নির্ভর করে। এই সমস্যাটি যুক্তিযুক্তভাবে আরও খারাপ: এই লেখাটি লেখার সময় পর্যন্ত, শীর্ষ তিনটি মাইনিং পুল পরোক্ষভাবে বিটকয়েন নেটওয়ার্ক-এ প্রায় 50% প্রসেসিং ক্ষমতা নিয়ন্ত্রণ করে, যদিও এটি এই সত্য দ্বারা প্রশমিত হয় যে যদি কোনো পুল বা জোট একটি ৫১% আক্রমণ করার চেষ্টা করে তবে মাইনাররা অন্যান্য মাইনিং পুলে স্যুইচ করতে পারে।
ইথেরিয়াম-এ বর্তমান উদ্দেশ্য হলো এমন একটি মাইনিং অ্যালগরিদম ব্যবহার করা যেখানে মাইনারদের স্টেট থেকে র্যান্ডম ডেটা আনতে, ব্লকচেইন-এর শেষ N ব্লকগুলো থেকে কিছু এলোমেলোভাবে নির্বাচিত ট্রানজ্যাকশন গণনা করতে এবং ফলাফলের হ্যাশ ফেরত দিতে রিকোয়ার করা হয়। এর দুটি গুরুত্বপূর্ণ সুবিধা রয়েছে। প্রথমত, ইথেরিয়াম কন্ট্রাক্টগুলোতে যেকোনো ধরণের কম্পিউটেশন অন্তর্ভুক্ত থাকতে পারে, তাই একটি ইথেরিয়াম ASIC মূলত সাধারণ কম্পিউটেশনের জন্য একটি ASIC হবে - অর্থাৎ, একটি ভালো CPU। দ্বিতীয়ত, মাইনিংয়ের জন্য সম্পূর্ণ ব্লকচেইন-এ অ্যাক্সেস প্রয়োজন, যা মাইনারদের সম্পূর্ণ ব্লকচেইন সংরক্ষণ করতে এবং অন্তত প্রতিটি ট্রানজ্যাকশন যাচাই করতে সক্ষম হতে বাধ্য করে। এটি কেন্দ্রীভূত মাইনিং পুলের প্রয়োজনীয়তা দূর করে; যদিও মাইনিং পুলগুলো এখনও পুরস্কার বিতরণের র্যান্ডমনেস সমান করার বৈধ ভূমিকা পালন করতে পারে, এই কাজটি কোনো কেন্দ্রীয় নিয়ন্ত্রণ ছাড়াই পিয়ার-টু-পিয়ার পুলগুলো দ্বারা সমানভাবে ভালোভাবে পরিবেশন করা যেতে পারে।
এই মডেলটি পরীক্ষিত নয়, এবং মাইনিং অ্যালগরিদম হিসেবে কন্ট্রাক্ট এক্সিকিউশন ব্যবহার করার সময় কিছু চতুর অপ্টিমাইজেশন এড়ানোর ক্ষেত্রে পথে অসুবিধা হতে পারে। তবে, এই অ্যালগরিদমের একটি উল্লেখযোগ্যভাবে আকর্ষণীয় বৈশিষ্ট্য হলো এটি যে কাউকে নির্দিষ্ট ASIC-গুলোকে বাধা দেওয়ার জন্য বিশেষভাবে ডিজাইন করা ব্লকচেইন-এ বিপুল সংখ্যক কন্ট্রাক্ট প্রবর্তন করে "কূপে বিষ প্রয়োগ" (poison the well) করার অনুমতি দেয়। ASIC নির্মাতাদের একে অপরকে আক্রমণ করার জন্য এই ধরনের কৌশল ব্যবহার করার অর্থনৈতিক প্রণোদনা রয়েছে। সুতরাং, আমরা যে সমাধানটি তৈরি করছি তা শেষ পর্যন্ত একটি বিশুদ্ধ প্রযুক্তিগত সমাধানের পরিবর্তে একটি অভিযোজিত অর্থনৈতিক মানবিক সমাধান।
স্কেলেবিলিটি
ইথেরিয়াম সম্পর্কে একটি সাধারণ উদ্বেগ হলো স্কেলেবিলিটির সমস্যা। বিটকয়েন-এর মতো, ইথেরিয়াম এই ত্রুটিতে ভোগে যে প্রতিটি ট্রানজ্যাকশন নেটওয়ার্ক-এর প্রতিটি নোড দ্বারা প্রসেস করা প্রয়োজন। বিটকয়েন-এর ক্ষেত্রে, বর্তমান ব্লকচেইন-এর আকার প্রায় 15 GB, যা প্রতি ঘণ্টায় প্রায় 1 MB করে বাড়ছে। যদি বিটকয়েন নেটওয়ার্ক প্রতি সেকেন্ডে ভিসার (Visa) 2000টি ট্রানজ্যাকশন প্রসেস করত, তবে এটি প্রতি তিন সেকেন্ডে 1 MB (প্রতি ঘণ্টায় 1 GB, প্রতি বছর 8 TB) করে বাড়ত। ইথেরিয়াম-এরও একই রকম বৃদ্ধির ধরণ ভোগ করার সম্ভাবনা রয়েছে, যা এই কারণে আরও খারাপ হয়েছে যে বিটকয়েন-এর মতো শুধুমাত্র একটি মুদ্রার পরিবর্তে ইথেরিয়াম ব্লকচেইন-এর ওপর অনেক অ্যাপ্লিকেশন থাকবে, তবে এই কারণে উন্নত হয়েছে যে ইথেরিয়াম ফুল নোডগুলোকে সম্পূর্ণ ব্লকচেইন ইতিহাসের পরিবর্তে শুধুমাত্র স্টেট সংরক্ষণ করতে হবে।
এত বড় ব্লকচেইন আকারের সমস্যা হলো কেন্দ্রীকরণের ঝুঁকি। যদি ব্লকচেইন-এর আকার বেড়ে, ধরা যাক, 100 TB হয়, তবে সম্ভাব্য পরিস্থিতি হবে যে শুধুমাত্র খুব অল্প সংখ্যক বড় ব্যবসাই ফুল নোড চালাবে, যেখানে সমস্ত নিয়মিত ব্যবহারকারী লাইট SPV নোড ব্যবহার করবে। এমন পরিস্থিতিতে, সম্ভাব্য উদ্বেগ দেখা দেয় যে ফুল নোডগুলো একত্রিত হতে পারে এবং সবাই কোনো লাভজনক উপায়ে প্রতারণা করতে সম্মত হতে পারে (যেমন, ব্লক পুরস্কার পরিবর্তন করা, নিজেদেরকে BTC দেওয়া)। লাইট নোডগুলোর এটি অবিলম্বে শনাক্ত করার কোনো উপায় থাকবে না। অবশ্যই, অন্তত একটি সৎ ফুল নোড সম্ভবত থাকবে এবং কয়েক ঘণ্টা পরে রেডিট-এর মতো চ্যানেলগুলোর মাধ্যমে জালিয়াতির তথ্য বেরিয়ে আসবে, তবে সেই সময়ে অনেক দেরি হয়ে যাবে: প্রদত্ত ব্লকগুলোকে কালো তালিকাভুক্ত করার প্রচেষ্টা সংগঠিত করা সাধারণ ব্যবহারকারীদের ওপর নির্ভর করবে, যা একটি সফল ৫১% আক্রমণ চালানোর মতো একই স্কেলে একটি বিশাল এবং সম্ভবত অসাধ্য সমন্বয় সমস্যা। বিটকয়েন-এর ক্ষেত্রে, এটি বর্তমানে একটি সমস্যা, তবে পিটার টড (Peter Todd) দ্বারা প্রস্তাবিত (opens in a new tab) একটি ব্লকচেইন পরিবর্তন রয়েছে যা এই সমস্যাটি প্রশমিত করবে।
অদূর ভবিষ্যতে, ইথেরিয়াম এই সমস্যাটি মোকাবিলা করার জন্য দুটি অতিরিক্ত কৌশল ব্যবহার করবে। প্রথমত, ব্লকচেইন-ভিত্তিক মাইনিং অ্যালগরিদমগুলোর কারণে, অন্তত প্রতিটি মাইনার একটি ফুল নোড হতে বাধ্য হবে, যা ফুল নোডগুলোর সংখ্যার ওপর একটি নিম্ন সীমা তৈরি করবে। দ্বিতীয়ত এবং আরও গুরুত্বপূর্ণভাবে, তবে, আমরা প্রতিটি ট্রানজ্যাকশন প্রসেস করার পরে ব্লকচেইন-এ একটি মধ্যবর্তী স্টেট ট্রি রুট অন্তর্ভুক্ত করব। এমনকি যদি ব্লক যাচাইকরণ কেন্দ্রীভূত হয়, যতক্ষণ পর্যন্ত একটি সৎ যাচাইকারী নোড বিদ্যমান থাকে, একটি যাচাইকরণ প্রোটোকলের মাধ্যমে কেন্দ্রীকরণ সমস্যাটি এড়ানো যেতে পারে। যদি একজন মাইনার একটি অবৈধ ব্লক প্রকাশ করে, তবে সেই ব্লকটি হয় খারাপভাবে ফর্ম্যাট করা হতে হবে, অথবা স্টেট S[n] ভুল। যেহেতু S[0] সঠিক বলে জানা যায়, তাই অবশ্যই কিছু প্রথম স্টেট S[i] থাকতে হবে যা ভুল যেখানে S[i-1] সঠিক। যাচাইকারী নোডটি সূচক i প্রদান করবে, সাথে APPLY(S[i-1],TX[i]) -> S[i] প্রসেস করার জন্য প্রয়োজনীয় প্যাট্রিসিয়া ট্রি (Patricia tree) নোডগুলোর সাবসেট নিয়ে গঠিত একটি "অবৈধতার প্রমাণ" (proof of invalidity) প্রদান করবে। নোডগুলো কম্পিউটেশনের সেই অংশটি চালানোর জন্য সেই নোডগুলো ব্যবহার করতে সক্ষম হবে এবং দেখতে পাবে যে জেনারেট করা S[i] প্রদত্ত S[i] এর সাথে মেলে না।
আরেকটি, আরও পরিশীলিত, আক্রমণের সাথে ক্ষতিকারক মাইনারদের অসম্পূর্ণ ব্লক প্রকাশ করা জড়িত থাকবে, তাই ব্লকগুলো বৈধ কি না তা নির্ধারণ করার জন্য সম্পূর্ণ তথ্যের অস্তিত্বও থাকে না। এর সমাধান হলো একটি চ্যালেঞ্জ-রেসপন্স প্রোটোকল: যাচাইকরণ নোডগুলো টার্গেট ট্রানজ্যাকশন সূচকগুলোর আকারে "চ্যালেঞ্জ" জারি করে এবং একটি নোড পাওয়ার পরে একটি লাইট নোড ব্লকটিকে অবিশ্বস্ত হিসেবে বিবেচনা করে যতক্ষণ না অন্য একটি নোড, মাইনার বা অন্য যাচাইকারী, বৈধতার প্রমাণ হিসেবে প্যাট্রিসিয়া নোডগুলোর একটি সাবসেট প্রদান করে।
উপসংহার
ইথেরিয়াম প্রোটোকলকে প্রাথমিকভাবে একটি ক্রিপ্টোকারেন্সির আপগ্রেড করা সংস্করণ হিসেবে কল্পনা করা হয়েছিল, যা একটি অত্যন্ত সাধারণীকৃত প্রোগ্রামিং ভাষার মাধ্যমে অন-ব্লকচেইন এসক্রো, উত্তোলন সীমা, আর্থিক কন্ট্রাক্ট, জুয়ার বাজার এবং এই ধরনের অন্যান্য উন্নত বৈশিষ্ট্য প্রদান করে। ইথেরিয়াম প্রোটোকল সরাসরি কোনো অ্যাপ্লিকেশনকে "সমর্থন" করবে না, তবে একটি টুরিং-কমপ্লিট প্রোগ্রামিং ভাষার উপস্থিতির অর্থ হলো তাত্ত্বিকভাবে যেকোনো ট্রানজ্যাকশন ধরন বা অ্যাপ্লিকেশনের জন্য ইচ্ছামতো কন্ট্রাক্ট তৈরি করা যেতে পারে। তবে, ইথেরিয়াম সম্পর্কে আরও আকর্ষণীয় বিষয় হলো, ইথেরিয়াম প্রোটোকল শুধুমাত্র মুদ্রার ধারণার চেয়ে অনেক দূর এগিয়ে যায়। বিকেন্দ্রীকৃত ফাইল স্টোরেজ, বিকেন্দ্রীকৃত কম্পিউটেশন এবং বিকেন্দ্রীকৃত প্রেডিকশন মার্কেট সম্পর্কিত প্রোটোকলগুলো, আরও ডজন খানেক এমন ধারণার পাশাপাশি, কম্পিউটেশনাল শিল্পের দক্ষতা উল্লেখযোগ্যভাবে বৃদ্ধি করার সম্ভাবনা রাখে এবং প্রথমবারের মতো একটি অর্থনৈতিক স্তর যুক্ত করার মাধ্যমে অন্যান্য পিয়ার-টু-পিয়ার প্রোটোকলগুলোকে ব্যাপকভাবে উৎসাহিত করতে পারে। পরিশেষে, এমন অনেক অ্যাপ্লিকেশনও রয়েছে যেগুলোর সাথে অর্থের কোনো সম্পর্কই নেই।
ইথেরিয়াম প্রোটোকল দ্বারা বাস্তবায়িত একটি ইচ্ছামতো স্টেট ট্রানজিশন ফাংশনের ধারণা অনন্য সম্ভাবনাময় একটি প্ল্যাটফর্ম প্রদান করে; ডেটা স্টোরেজ, জুয়া বা অর্থের ক্ষেত্রে নির্দিষ্ট কিছু অ্যাপ্লিকেশনের জন্য উদ্দিষ্ট একটি ক্লোজড-এন্ডেড, একক-উদ্দেশ্যমূলক প্রোটোকল হওয়ার পরিবর্তে, ইথেরিয়াম তার ডিজাইনের দিক থেকেই ওপেন-এন্ডেড। আমরা বিশ্বাস করি যে আগামী বছরগুলোতে বিপুল সংখ্যক আর্থিক এবং অ-আর্থিক উভয় প্রোটোকলের জন্য একটি ভিত্তি স্তর হিসেবে কাজ করার ক্ষেত্রে এটি অত্যন্ত উপযুক্ত।
টীকা এবং আরও পঠন
টীকা
- একজন অভিজ্ঞ পাঠক লক্ষ্য করতে পারেন যে আসলে একটি বিটকয়েন ঠিকানা হলো উপবৃত্তাকার বক্ররেখা পাবলিক কী-এর হ্যাশ, এবং এটি নিজে পাবলিক কী নয়। তবে, ক্রিপ্টোগ্রাফিক পরিভাষায় পাবলিক কী-এর হ্যাশকে পাবলিক কী হিসেবে উল্লেখ করা সম্পূর্ণ বৈধ। এর কারণ হলো বিটকয়েনের ক্রিপ্টোগ্রাফিকে একটি কাস্টম ডিজিটাল স্বাক্ষর অ্যালগরিদম হিসেবে বিবেচনা করা যেতে পারে, যেখানে পাবলিক কী গঠিত হয় ECC পাবলিক কী-এর হ্যাশ দিয়ে, স্বাক্ষর গঠিত হয় ECC স্বাক্ষরের সাথে যুক্ত ECC পাবলিক কী দিয়ে, এবং যাচাইকরণ অ্যালগরিদমে পাবলিক কী হিসেবে প্রদান করা ECC পাবলিক কী হ্যাশের বিপরীতে স্বাক্ষরে থাকা ECC পাবলিক কী পরীক্ষা করা হয় এবং তারপর ECC পাবলিক কী-এর বিপরীতে ECC স্বাক্ষর যাচাই করা হয়।
- প্রযুক্তিগতভাবে, পূর্ববর্তী 11টি ব্লকের মধ্যমা।
- অভ্যন্তরীণভাবে, 2 এবং "CHARLIE" উভয়ই সংখ্যা, যার মধ্যে শেষেরটি বিগ-এন্ডিয়ান বেস 256 উপস্থাপনায় রয়েছে। সংখ্যাগুলো কমপক্ষে 0 এবং সর্বোচ্চ 2256-1 হতে পারে।
আরও পঠন
- অন্তর্নিহিত মান (opens in a new tab)
- স্মার্ট প্রপার্টি (opens in a new tab)
- স্মার্ট কন্ট্রাক্ট (opens in a new tab)
- B-money (opens in a new tab)
- পুনর্ব্যবহারযোগ্য প্রুফ-অফ-ওয়ার্ক (opens in a new tab)
- মালিকের কর্তৃত্বসহ সুরক্ষিত সম্পত্তির শিরোনাম (opens in a new tab)
- বিটকয়েন শ্বেতপত্র (opens in a new tab)
- Namecoin (opens in a new tab)
- জুকোর ত্রিভুজ (opens in a new tab)
- কালারড কয়েন শ্বেতপত্র (opens in a new tab)
- মাস্টারকয়েন শ্বেতপত্র (opens in a new tab)
- বিকেন্দ্রীকৃত স্বায়ত্তশাসিত কর্পোরেশন, বিটকয়েন ম্যাগাজিন (opens in a new tab)
- সরলীকৃত পেমেন্ট যাচাইকরণ (opens in a new tab)
- মার্কেল ট্রি (opens in a new tab)
- প্যাট্রিসিয়া ট্রি (opens in a new tab)
- GHOST (opens in a new tab)
- StorJ এবং অটোনোমাস এজেন্ট, জেফ গারজিক (opens in a new tab)
- টুরিং ফেস্টিভ্যালে স্মার্ট প্রপার্টি নিয়ে মাইক হার্ন (opens in a new tab)
- ইথেরিয়াম RLP
- ইথেরিয়াম মার্কেল প্যাট্রিসিয়া ট্রি
- মার্কেল সাম ট্রি নিয়ে পিটার টড (opens in a new tab)
শ্বেতপত্রের ইতিহাসের জন্য, এই উইকিটি (opens in a new tab) দেখুন।
ইথেরিয়াম, অন্যান্য অনেক কমিউনিটি-চালিত, ওপেন-সোর্স সফ্টওয়্যার প্রজেক্টের মতো, এর প্রাথমিক সূচনা থেকে বিবর্তিত হয়েছে। ইথেরিয়ামের সর্বশেষ উন্নয়ন এবং প্রোটোকলে কীভাবে পরিবর্তন করা হয় সে সম্পর্কে জানতে, আমরা এই গাইডটি পড়ার পরামর্শ দিই।





