ছবির উৎসঃ https://jysperm.me/2016/05/blockchain-slides/
এই নিবন্ধটি আমার মার্চ মাসের শেষের দিকে লেইনক্লাউডে করা প্রযুক্তিগত শেয়ারিং থেকে সংগৃহীত, এবং পাঠককে ধারণা করা হয় যে তাদের কাছে মৌলিক ক্রিপ্টোক্রাফ্টের জ্ঞান এবং বিটকয়েন বাস্তবায়নের প্রাথমিক ধারণা রয়েছে।
ব্লকচেইনকে হ্যাশট্রি (HashTree) বলা হয়, যার ফলে এটি হ্যাশট্রি-র মতো কিছু বৈশিষ্ট্য ধারণ করেঃ

ছবি সৌজন্যে<http://happypeter.github.io/bitcoin_basics/book/017_merkle_tree.html
অর্থাৎ, একটি গাছের কাঠামোর মধ্যে, প্রতিটি প্রান্তিক নোডের একটি বিভাজন মান রয়েছে, এবং অ-শেষ নোডের বিভাজন মানটি তার সমস্ত সরাসরি উপ-নোডের বিভাজন মান থেকে আসে, সুতরাং প্রতিটি নোড সরাসরি বা পরোক্ষভাবে তার সমস্ত উপ-নোডের তথ্য ধারণ করে। সুতরাং, যে কোনও প্রান্তিক নোডের বিভাজন মান পরিবর্তিত হলে, তার সমস্ত পিতা-মাতার নোডের বিভাজন মান পরিবর্তিত হবে এবং মূল নোডও অবশ্যই পরিবর্তিত হবে।
আমি হ্যাশট্রি সম্পর্কে একটি অ্যাপ্লিকেশন দিতে পারিঃ "১০০% রিজার্ভ প্রুফ", যা "শূন্য-জ্ঞান প্রমাণ" এর একটি বিষয়। আমরা এমন একটি দৃশ্য বিবেচনা করতে পারি যেখানে বিটসনের ধারককে লেনদেন করার জন্য বিটকয়েনকে একটি এক্সচেঞ্জে জমা করতে হবে এবং তাত্ত্বিকভাবে এক্সচেঞ্জটি এই অর্থটি (ব্যবহারকারীর সমস্ত জমা অ্যাকাউন্ট ব্যালেন্স) ব্যবহার করতে পারে, যা ব্যবহারকারীরা দেখতে চায় না, এবং এক্সচেঞ্জটিও নিজেকে পরিষ্কার করতে চায়ঃ এক্সচেঞ্জটি প্রথমে তার কাছে থাকা একটি বিটকয়েন ঠিকানা প্রকাশ করে, এবং প্রত্যেকে নিশ্চিত হয় যে এক্সচেঞ্জটি আসলে এই পরিমাণ বিটকয়েন সংরক্ষণের জন্য রেখেছে, তবে কীভাবে প্রমাণ করা যায় যে এই অর্থটি সমস্ত ব্যবহারকারীর ব্যালেন্সের চেয়ে বেশি? অন্য কথায়, কীভাবে প্রতিটি ব্যবহারকারীর ব্যালেন্স প্রকাশ না করা (ব্যবহারকারীর গোপনীয়তা ফাঁস করে) প্রতিটি ব্যবহারকারীকে তাদের ব্যালেন্সকে এই ব্যালেন্সের মধ্যে অন্তর্ভুক্ত করতে পারে?

ছবি সৌজন্যে<http://blog.bifubao.com/2014/03/16/proof-of-reserves
আমরা একটি হ্যাশট্রি তৈরি করতে পারি যেখানে সকল নোড একটি ব্যবহারকারীকে প্রতিনিধিত্ব করে এবং ব্যবহারকারীর ব্যালেন্স থাকে।Σ) এবং ইউজার আইডি (যেমন মেইলবক্স ঠিকানা)h), এবং পিতা নোড তার সন্তানের নোডের ব্যালেন্স সমষ্টি ধারণ করে (sum) এবং সকল সাব-নোডের তথ্যের বিভাজন ((hash) । প্রত্যেক ব্যবহারকারীর জন্য, তাকে তার নিজের শেষ নোড এবং ভাইবোন নোড, তার সমস্ত পিতা নোড এবং পিতা নোডের ভাইবোন নোড দেখানো যথেষ্ট, কারণ এই ব্যবহারকারীটি ধাপে ধাপে পিতা নোডের দিকে ফিরে গিয়ে নিশ্চিত করতে পারে যে তার ব্যালেন্সটি পিতা নোডে অন্তর্ভুক্ত করা হয়েছে এবং শেষ পর্যন্ত মূল নোডে অন্তর্ভুক্ত করা হয়েছে।
এইভাবে, প্রতিটি ব্যবহারকারীর কাছে প্রদর্শিত তথ্যটি কেবল তার নিজস্ব তথ্য এবং কিছু একত্রিত তথ্য, এবং প্রতিটি ব্যবহারকারী অন্য কোনও ব্যালেন্স ব্যবহার না করেই নিজের ব্যালেন্সকে রুট নোডে অন্তর্ভুক্ত করার বিষয়টি নিশ্চিত করতে পারে। উপরের চিত্রটিতে একটি ছোটখাট ত্রুটি রয়েছে।hকেনe4df9d12এই নোডটি ব্যবহারকারীর প্রাইভেসি লিক এড়াতে ৩৩৩৩ ব্যালেন্সের ব্যবহারকারী এবং ০ ব্যালেন্সের ভার্চুয়াল ব্যবহারকারীকে অন্তর্ভুক্ত করতে পারে।
এখন আমরা Git এর দিকে নজর দিচ্ছি, যা আসলে একটি খুব সাধারণ ব্লকচেইন অ্যাপ্লিকেশনঃ

ছবি সৌজন্যেhttp://gitbook.liuhui998.com/1_2.html (GPL v2)
গিটে, ফাইল (ব্লব), সূচক (ট্রি) এবং জমা (কমিশন) উভয় ক্ষেত্রেই, একটি হ্যাশ রয়েছে যা এর বিষয়বস্তু দ্বারা নির্ধারিত হয়, যদি দুটি বস্তুর একই বিষয়বস্তু থাকে তবে একই হ্যাশ থাকে। গিটে, পুরো ভান্ডারের ইতিহাস একটি ব্লকচেইন, প্রতিটি কমিট একটি ব্লকের সমতুল্য, কমিটটিতে পূর্ববর্তী কমিটের হ্যাশ এবং সংশ্লিষ্ট বস্তুর হ্যাশ রয়েছে যা সংশোধন করা হয়েছে, কমিট নিজেই তার বিষয়বস্তু এবং এই উপাদানগুলির দ্বারা নির্ধারিত।
গিট ব্লকচেইন ব্যবহার করে একটি অনন্য ইতিহাসের জন্য একটি সংগ্রহস্থল নির্ধারণ করে। যদি একটি কমিট পরিবর্তন করা হয়, তবে তার পরে সমস্ত কমিটের হ্যাশ পরিবর্তন হবে। অবশ্যই, যেহেতু গিট কেবল একটি সংস্করণ নিয়ন্ত্রণ সরঞ্জাম, তাই আপনাকে ইতিহাস পরিবর্তন করতে বাধা দেয় না।push --force), তবে এই পরিবর্তনটি সকল সহ-লেখক বুঝতে পারবেন।
ব্লকচেইনের আরেকটি ক্লাসিক অ্যাপ্লিকেশন হল বিটকয়েন, যা এই শব্দটি ছড়িয়ে দিয়েছে (যদিও এই ধারণাটি সবসময়ই ছিল):

বিটকয়েনে, প্রতিটি ব্লক (ব্লক) এর মধ্যে একটি লেনদেনের (ট্রানজ্যাকশন) এবং পূর্ববর্তী ব্লকের হ্যাশ থাকে, এবং সমগ্র ব্লকচেইন একটি বিকেন্দ্রীভূত একক অ্যাকাউন্ট গঠন করে। যেহেতু প্রতি দশ মিনিটে একটি নতুন ব্লক তৈরি হয়, এবং ব্লক তৈরি হয়ে গেলে এটি ব্লকচেইনে চিরতরে থাকে, তাই ব্লকচেইন লেনদেনের ক্রমানুসারে স্থির করে দেয়, লেনদেনের পূর্ববর্তী ক্রমানুসারে বজায় রাখে এবং একটি অ্যাকাউন্টে লেনদেন শুরু করার জন্য পর্যাপ্ত ব্যালেন্স রয়েছে কিনা তা নির্ধারণ করে।
Bitcoin
এই শেয়ারের প্রথম অংশটি হল বিটকয়েন সম্পর্কে একটি সংক্ষিপ্ত বিবরণ।
বিটকয়েনে ব্লক তৈরি করা হয় "কাজের পরিমাণ প্রমাণ" এর মাধ্যমে, অর্থাৎ "খনি" তে অংশগ্রহণকারী সমস্ত "খনি" কে একটি গণনা শক্তি সম্পর্কিত, এলোমেলো প্রকৃতির একটি বিচ্ছিন্ন গণনা করতে হবে, যতক্ষণ না একটি নির্দিষ্ট শর্ত পূরণ করে এমন একটি এলোমেলো সংখ্যা গণনা করা হয়, একটি ব্লক প্রকাশের অধিকার পাওয়ার জন্য।
ডিফল্টরূপে, প্রতিটি খনিজীবী সর্বদা "দীর্ঘতম চেইন" এর উপর নির্ভর করে এবং তার পরবর্তী ব্লকটি গণনা করে, যা সবচেয়ে দীর্ঘতম চেইন হিসাবে পরিচিত যা নিয়মগুলি পূরণ করে, অন্যথায় আপনার গণনা শক্তি নষ্ট হয়ে যায়। কারণ অন্যান্য খনিজীবীরা সর্বদা দীর্ঘতম চেইনকে স্বীকৃতি দেয় এবং আপনি যদি দীর্ঘতম চেইনের ভিত্তিতে কাজ শুরু না করেন তবে আপনি অন্য সমস্ত খনিজীবীদের গণনা শক্তির সাথে প্রতিদ্বন্দ্বিতা করছেন।
বিটকয়েনকে প্রতি ১০ মিনিটে একটি নতুন ব্লক তৈরি করার জন্য ডিজাইন করা হয়েছে, এবং এই সময়টি শেষ কয়েক ব্লকের মধ্যবর্তী সময় পর্যবেক্ষণ করে পরবর্তী ব্লকের উত্পাদন শর্তের অসুবিধা সামঞ্জস্য করার জন্য করা হয়। যখন শেষ কয়েক ব্লকের উত্পাদন গতি প্রত্যাশার চেয়ে বেশি হয়, তখন পরবর্তী ব্লকের উত্পাদন আরও বেশি অসুবিধা হওয়া উচিত বলে মনে করা হয়।
সাধারণত, প্রতিটি বিটকয়েন নোডের একটি সম্পূর্ণ ব্লকচেইন তথ্য সংরক্ষণ করা প্রয়োজন যাতে একটি লেনদেন বৈধ কিনা তা নিশ্চিত করা যায়। তবে এখন সম্পূর্ণ ব্লকচেইনটি 66G এবং এটি প্রতিদিন 0.1G এর কাছাকাছি গতিতে বাড়ছে। বিটকয়েনের প্রতিটি ব্যবহারকারীকে সম্পূর্ণ ব্লকচেইন সংরক্ষণ করার জন্য অনুরোধ করা যদি খুব বেশি কঠোর না হয়, তবে বিটকয়েনের একটি "সরলীকৃত পেমেন্ট যাচাইকরণ (SPV) " প্রক্রিয়া রয়েছে, যা "হালকা ক্লায়েন্ট" নামে পরিচিত। এটি সম্পূর্ণ ব্লকচেইন সংরক্ষণ না করার বিকল্পটি বেছে নিতে পারে, তবে এটি একটি বা একাধিক সম্পূর্ণ নোডের সাথে সংযুক্ত থাকে, যা কেবলমাত্র ব্লকের সমস্ত উপাদান সংরক্ষণ করে।

ছবি সৌজন্যে<https://github.com/ethereum/wiki/wiki/White-Paper
- ব্লকচেইন ট্যাঙ্ক বই ট্যাঙ্কের অবস্থা পরিবর্তনের লগ
- লেনদেন লেনদেন লেনদেন লেনদেন লেনদেন লেনদেন লেনদেন লেনদেন লেনদেন লেনদেন লেনদেন লেনদেন
- ব্লকঃ বর্তমান পরিস্থিতি নিয়ে 'সমঝোতা'
আসলে, আমরা বিটকয়েনের ব্লকচেইনকে একটি "স্ট্যাটাস মেশিন" হিসাবে কল্পনা করতে পারি, পুরো ব্লকচেইনটি একটি স্থিতিশীল "লিজ" যা প্রতিটি লেনদেনের রেকর্ড সংরক্ষণ করে, এই লেনদেনের রেকর্ডগুলি থেকে এটি অনুমান করা যায় যে পুরো অ্যাকাউন্টটি যে কোনও সময়ে "স্ট্যাটাস" ছিল। প্রতিটি লেনদেনটি একটি রাষ্ট্রের পরিবর্তন ছিল, এবং প্রতিটি ব্লকটি পুরো বিটকয়েন নেটওয়ার্কের খনিরদের বর্তমান অবস্থার জন্য একটি "সম্মতি" ছিল, কারণ বিটকয়েন প্রতি 10 মিনিটে একটি নতুন ব্লক তৈরি করে, যা প্রতি 10 মিনিটে সমস্ত অ্যাকাউন্টের ব্যালেন্সের বিষয়ে একমত হওয়ার সমান, এবং এই দশ মিনিটের মধ্যে, অ্যাকাউন্টের স্থিতি আসলে একটি "বিশৃঙ্খল" অবস্থা ছিল।
Alt Coin
বিটকয়েনের উপর ভিত্তি করে অন্যান্য অনেক ক্রিপ্টোকারেন্সি তৈরি করা হয়েছে, যা সাধারণত "অল্ট কয়েন" নামে পরিচিত। সাধারণত এই ধরনের মুদ্রার দুটি বাস্তবায়ন রয়েছেঃ
প্রথমটি হল, বিটকয়েন থেকে পৃথক একটি নিজস্ব নেটওয়ার্ক ব্যবহার করা। এর সুবিধা হল, কয়েনগুলি তাদের নিজস্ব প্রোটোকল এবং নিয়মাবলী ডিজাইন করার ক্ষেত্রে অত্যন্ত নমনীয়, কিন্তু বিটকয়েনের মতো সংখ্যক ব্যবহারকারীর সংখ্যা অর্জন করা কঠিন, যার ফলে ক্ষতিকারক আক্রমণের বিরুদ্ধে প্রতিরক্ষা খুব দুর্বল হবে।
দ্বিতীয়টি হল বিটকয়েনের নেটওয়ার্ক ব্যবহার করে "মেটা প্রোটোকল" বাস্তবায়ন করা, বিটকয়েনের লেনদেনের উপরে কাস্টমাইজড তথ্য সংযুক্ত করে আপনার নিজস্ব যুক্তি বাস্তবায়নের জন্য, এই সুবিধাটি হ'ল বিটকয়েনের কম্পিউটিং শক্তির আকারটি আক্রমণ প্রতিরোধের জন্য ব্যবহার করা যেতে পারে, তবে একই সাথে বিটকয়েন নেটওয়ার্কের সাথে সংযুক্ত হওয়ার কারণে, সমস্ত খনিজীবী কোট মুদ্রার নিয়ম মেনে চলবে না, তাই বিটকয়েন ব্লকচেইনে অনিয়মিত ব্লক প্রবেশ করতে বাধা দেয় না, কেবলমাত্র ক্লায়েন্টের উপর অনিয়মিত লেনদেনগুলি ফিল্টার করতে পারে, যা পূর্বে উল্লিখিত বিটকয়েন দ্বারা সরবরাহিত সরলীকৃত নিশ্চিতকরণ বৈশিষ্ট্যটি ব্যবহার করতে পারে না।
বিটকয়েন একটি ব্লকচেইন প্রদান করে যা অনেক খনির অংশগ্রহণ করে এবং বড় আকারের ক্ষতিকারক আক্রমণের বিরুদ্ধে প্রতিরোধ করতে পারে। বিটকয়েনের লেনদেনের উপর কাস্টমাইজড ডেটা থাকতে পারে।
বিটোসিনের একটি ওয়েবসাইট রয়েছে।Bitcoin Scriptবিটকয়েন এর মূল বৈশিষ্ট্য নয়, তাই এটি শুধুমাত্র তুলনামূলকভাবে সহজ অপারেশন করতে পারে, ব্লকচেইনের ডেটা খুব সীমিতভাবে পড়তে পারে, এবং চক্রের অভাবের কারণে, সাধারণ, টুরিং-সম্পূর্ণ যুক্তি লিখতে অসুবিধা হয়।
Ethereum

ছবি সৌজন্যেhttps://www.ethereum.org/assets (CC 3.0)
"ইথেরিয়াম" একটি ব্লকচেইন ভিত্তিক, বিকেন্দ্রীভূত অ্যাপ্লিকেশন প্ল্যাটফর্ম যা বিটকয়েনের অবকাঠামোকে একটি সাধারণ প্ল্যাটফর্ম হিসাবে তৈরি করে এবং বিটকয়েন নেটওয়ার্কের কিছু অনুপস্থিত বৈশিষ্ট্যগুলি পূরণ করে যাতে ডেভেলপাররা তাদের নিজস্ব বিকেন্দ্রীভূত অ্যাপ্লিকেশনগুলি ব্লকচেইনে চালাতে পারে।
ইথেরিয়াম সম্পর্কে বিস্তারিত আলোচনা করার আগে, আমি প্রথমে দুটি মূল ভিত্তি সম্পর্কে কথা বলব যা আমি মনে করি একটি বিকেন্দ্রীভূত নেটওয়ার্কের ভিত্তিঃ ক্রিপ্টোক্রিপ্টোলজি এবং গেমিং। ক্রিপ্টোক্রিপ্টোলজি কেবলমাত্র গণিতের সুরক্ষা নিশ্চিত করার জন্য পাবলিক কী এনক্রিপশন, ডিজিটাল স্বাক্ষর, বিভাজন এবং বিমূর্তকরণ অ্যালগরিদম ব্যবহার করে; এবং গেমিং হ'ল বিকেন্দ্রীভূত নেটওয়ার্কে যে কেউ, এমনকি যারা এই নেটওয়ার্কটি আক্রমণ করতে চায় তারাও জড়িত হতে পারে। বিকেন্দ্রীভূত নেটওয়ার্ক ডিজাইন করার সময় প্রতিটি অংশগ্রহণকারীর দৃষ্টিভঙ্গি থেকে তাদের স্বার্থ সম্পর্ক সম্পর্কে চিন্তা করা প্রয়োজন, নিয়ম মেনে চলার সময় তাদের সুবিধা সর্বাধিকীকরণ করা এবং নিয়ম লঙ্ঘন করলে ক্ষতি বা ঝুঁকি বহন করা নিশ্চিত করা।
তবে ডিজিটাল জগতে, একটি তথ্য প্রকাশের জন্য কোনও ব্যয় নেই, কোনও "লাভ" এবং "ক্ষতি" নেই, সুতরাং "লাভ" সংজ্ঞায়িত করার জন্য আপনাকে অবশ্যই বাস্তব বিশ্বের সাথে কিছু সংযোগ স্থাপন করতে হবে। উদাহরণস্বরূপ, বিটোসিন নেটওয়ার্কে, যদি আক্রমণকারী কৃত্রিমভাবে ব্লকচেইনের গতিপথ পরিবর্তন করতে চায় তবে তার চেয়ে বেশি কম্পিউটিং শক্তি থাকা দরকার।
তাই বলা যায় যে বিকেন্দ্রীভূত নেটওয়ার্কে, সমস্ত সমস্যা "প্রযুক্তি" দ্বারা সমাধান করা হয় না, যেখানে প্রযুক্তি পৌঁছাতে পারে না, সেখানে লাভের মাধ্যমে, অর্থনৈতিক উদ্দীপনার মাধ্যমে সমাধান করতে হবে। "অর্থনৈতিক উদ্দীপনার" প্রয়োজনের কারণে, ইথেরিয়ামে একটি মানিব্যাগ সিস্টেম (মুদ্রা ইউনিট "ইথার" নামে পরিচিত) রয়েছে, প্রতিটি ব্যবহারকারীর একটি মানিব্যাগের ঠিকানা তার একমাত্র পরিচয় হিসাবে রয়েছে, এই বিষয়ে বিটসিয়নের সাথে তুলনা করা হয়েছে।
"কন্ট্রাক্ট" হচ্ছে ইথেরিয়ামে প্রবর্তিত সবচেয়ে গুরুত্বপূর্ণ ধারণা। বিটকয়েনে, সমস্ত ঠিকানা একটি ব্যবহারকারীর মালিকানাধীন। যখন আমরা "ব্যবহারকারী" বলি, তখন আমরা আসলে একটি পাবলিক কী এবং ব্যক্তিগত কী সম্পর্কে কথা বলছি। কিন্তু ইথেরিয়ামে, একটি কী-জোড়ার মালিকানাধীন ঠিকানা ছাড়াও, "কোড" দ্বারা মালিকানাধীন একটি ঠিকানা রয়েছে, যা হল চুক্তি। চুক্তিটি ব্যবহারকারীর দ্বারা প্রকাশিত হয়, এটি মূলত একটি কোড যা প্রকাশের পরে পরিবর্তন করা যায় না।
- এটি কেবলমাত্র ব্লকচেইনকে ইনপুট এবং আউটপুট হিসাবে ব্যবহার করতে পারে, তাই গণনাটি পুনরাবৃত্তিযোগ্য। প্রকৃতপক্ষে, গণনার ফলাফলগুলি ব্লকচেইনে সংরক্ষণ করার দরকার নেই, কারণ এটি যে কোনও সময় পুনরায় গণনা করা যেতে পারে।
- অন্য কোন Contract এর ফাংশনকে কল করা যায় ((অন্য কোন Contract এর কোড এবং ডেটা ব্লকচেইনেও বিদ্যমান) <unk>
- এই প্রক্রিয়াতে নতুন লেনদেন তৈরি করা যায় (যেমন, নিজের মানিব্যাগের ব্যালেন্সের উপর নিয়ন্ত্রণ করা) এবং এই লেনদেনগুলি অন্য কন্ট্রাক্টের লেনদেন হতে পারে।
প্রথমত, একটি "মাল্টি-হোল্ডিং ওয়ালেট" এর উদাহরণ দেওয়া যাক, যেখানে Ethereum এর অফিসিয়াল ক্লায়েন্টের মধ্যে একটি মাল্টি-হোল্ডিং ওয়ালেট তৈরির বৈশিষ্ট্য রয়েছেঃ

এই ফাংশনটি ব্যবহার করে, আপনি এমন একটি ওয়ালেট ঠিকানা তৈরি করতে পারেন যা অন্য ২ জনের সাথে ভাগ করে নেওয়া যায়, যার মধ্যে একজন প্রতিদিন সর্বোচ্চ ১০০ ইথার ব্যবহার করতে পারে। এই সীমাবদ্ধতা ছাড়িয়ে গেলে, অন্য একজনের সম্মতি প্রয়োজন।
এই ফাংশনটি আসলে একটি Contract তৈরি করে, এবং এই লজিকটি Contract এর কোড দ্বারা বর্ণনা করা হয়েছে। আপনি যখন এই শেয়ার করা ওয়ালেট থেকে অর্থ প্রদান করতে চান, তখন আপনাকে এই শেয়ার করা ওয়ালেটে একটি বার্তা পাঠাতে হবে ((ট্রাঞ্জেকশনটি বার্তা, লেনদেনের পরিমাণটি শূন্য হতে পারে, কেবলমাত্র ডেটা বহন করে)) এবং তারপরে শেয়ার করা ওয়ালেটের কোডটি কার্যকর করা হবে, যদি এই অর্থ প্রদানের অনুরোধটি উপরের লজিকের সাথে সামঞ্জস্যপূর্ণ হয় তবে সত্যিকারের অর্থ প্রদানের লেনদেন শুরু করা হবে, অন্যথায় এই অর্থ প্রদানের অনুরোধটি প্রত্যাখ্যান করা হবে ((প্রকৃত অর্থ প্রদানের প্রয়োজন নেই)) ।
আরেকটি উদাহরণ হল "হালকা চুক্তি" যা সর্বদা বিটকয়েনকে একটি ডিজিটাল মুদ্রা হিসাবে বলা হয়, যার মুদ্রা মূল্য (এবং বৈধ মুদ্রার বিনিময় হার) অস্থির, প্রায়শই একদিনের মধ্যে মুদ্রার মূল্য দ্বিগুণ বা দ্বিগুণ হয়ে যায়, তবে চুক্তিটি যদি একটি হিজড়া চুক্তি বাস্তবায়নের সাথে সামঞ্জস্যপূর্ণ হয় তবে এই সমস্যাটি কিছুটা সমাধান করা যেতে পারে।
আমরা একজনকে "ঝুঁকি এড়ানো" বলে ডাকি যারা মুদ্রার মান স্থির রাখতে চায় এবং অন্য একজনকে "ঝুঁকি বহনকারী" বলে ডাকি যারা মুদ্রার মানের অস্থিরতার ঝুঁকি নিতে এবং এর থেকে উপকৃত হতে চায়, তাই তারা একটি পরিমাণ (যেমন 1000 CNY) এবং একটি সময় উইন্ডো (যেমন এক মাস) নিয়ে চুক্তি করতে পারে এবং একটি চুক্তি তৈরি করতে পারে। নিম্নলিখিত লজিকটি সম্পাদন করুনঃ
- কন্ট্রাক্টের ওয়ালেটের ঠিকানায় 1000 CNY মূল্যের ইথার প্রেরণ করে এবং কন্ট্রাক্টের কাছে 1000 CNY (বা তার বেশি) মূল্যের ইথার প্রেরণ করে।
- এক মাস পর, ঝুঁকি এড়ানো ব্যক্তিরা 1000 CNY মূল্যের ইথার কন্ট্রাক্ট থেকে প্রত্যাহার করতে পারে, এবং ইথার এবং CNY এর মধ্যে বিনিময় হার যাই হোক না কেন, অবশিষ্ট ইথার ঝুঁকি গ্রহণকারী দ্বারা প্রত্যাহার করা হয়।
যদি ইথারের মূল্য বৃদ্ধি পায়, ঝুঁকি গ্রহণকারীরা লাভবান হয়, যদি ইথারের মূল্য হ্রাস পায়, ঝুঁকি গ্রহণকারীরা ক্ষতিগ্রস্ত হয়, তবে ঝুঁকি এড়ানো সবসময়ই ক্ষতিগ্রস্ত হয় না। অবশ্যই, ঝুঁকি এড়ানো এবং ঝুঁকি গ্রহণকারীরা ঝুঁকি এড়ানোর জন্য যে "পরিষেবা" দিতে হবে তা আগে থেকেই আলোচনা করতে পারে।
উপরোক্ত উদাহরণে একটি সমস্যা আছে যেটা ঠিকভাবে সমাধান করা যায়নি, সেটা হল কিভাবে ইথার এবং কপিরাইট মুদ্রার মধ্যে বিনিময় হার নির্ধারণ করা যায়। আমরা আগেই বলেছি যে, কন্ট্রাক্ট শুধুমাত্র ব্লকচেইনের ডেটা অ্যাক্সেস করতে পারে, এবং কপিরাইট মুদ্রা হচ্ছে বাস্তব জগতে বিদ্যমান ডেটা, কপিরাইট জগতে নয়, এবং আমাদের কিছু পদ্ধতির মাধ্যমে এই ধরনের "অ-কপিরাইট জগতে থাকা ডেটা" ব্লকচেইনে আনা দরকার।
আমরা আরেকটি Contract ডিজাইন করতে পারি যা এই ধরনের লজিককে নির্দিষ্ট করে, যা বাস্তব জগতে Ether এবং ক্যাডাস্ট্রাল মুদ্রার মধ্যে বিনিময় হার সংগ্রহ করে, প্রতিটি সময় উইন্ডোতে (যেমন এক ঘন্টার মধ্যে):
- প্রত্যেকেরই Contract-এ গ্যারান্টি প্রদান করতে হবে এবং একটি বিনিময় হার দিতে হবে।
- সময়সীমার শেষে, কন্ট্রাক্ট মালিকদের দ্বারা প্রদত্ত বিনিময় হারের গড় গণনা করে (জামিনের উপর ভিত্তি করে) এবং প্রকাশ করে।
- এবং সংগ্রহ করা জামিনের টাকা বিতরণ করা হবে (জামিনের টাকা ওজনের সাথে) যারা গড়ের ২৫% এর কাছাকাছি।
যে কোন অংশগ্রহণকারীর জন্য, যেহেতু তারা অন্যদের প্রস্তাব জানে না, তাই সত্যিকারের বিনিময় হার জমা দেওয়ার ফলে পুরস্কার পাওয়ার সম্ভাবনা বেশি থাকে, এবং একটি অস্বাভাবিক বিনিময় হার জমা দেওয়ার ফলে জামিন হারানোর সম্ভাবনা বেশি থাকে।
অবশ্যই এই নিয়মের মধ্যে কয়েকটি ফাঁক রয়েছে, উদাহরণস্বরূপ, যদি একজন ব্যক্তির প্রচুর পরিমাণে গ্যারান্টি থাকে, তবে তিনি গড় মানটি প্রকৃত বিনিময় হারের চেয়ে বেশি বা কম দামের দিকে টানতে পারেন এবং অন্যদের গ্যারান্টি হারাতে পারেন। তবে বাস্তবে এটি বাস্তব জগতেও একই রকম, যদি আপনার কাছে প্রচুর পরিমাণে অর্থ থাকে তবে আপনি একটি পণ্যের দাম বাড়িয়ে তুলতে বা চাপিয়ে দিতে পারেন, তবে বাস্তবের সাথে তুলনা করে, ইলেকট্রনিক মুদ্রার ভলিউমটি খুব ছোট, খুব বেশি অর্থের প্রয়োজন হয় না। তবে বাস্তবে এটি খুব ঝুঁকিপূর্ণ, কারণ আপনি নিশ্চিত নন যে আপনার দেওয়া গ্যারান্টিটিটি যথেষ্ট, যদি এটি ব্যর্থ হয় তবে সমস্ত গ্যারান্টি হারাবে।
আরেকটি ত্রুটি হল যে "প্রত্যেকে চুক্তিতে একটি গ্যারান্টি প্রদান করতে পারে এবং একটি বিনিময় প্রদান করতে পারে" এই পদক্ষেপটি একটি লেনদেন তৈরি করে এবং সমস্ত লেনদেন ব্লকচেইনে লেখা হয়, তাই আপনার জমা দেওয়া বিনিময় অন্যদের কাছে দৃশ্যমান হয়, যা আরও খারাপ আক্রমণকারীদের জন্য সুযোগ তৈরি করে, এবং আমি একটি "র্যান্ডম সংখ্যা" উত্পন্ন উদাহরণ দিয়ে কীভাবে এটি এড়ানো যায় তা দেখাব।
আমরা আগেই বলেছি যে, Contract ব্লকচেইন এর উপর ডেটা পড়তে পারে, কিন্তু ব্লকচেইন এর উপর ডেটা নিশ্চিত, যদি আমরা একটি জুয়া খেলার মতো অ্যাপ্লিকেশন বাস্তবায়ন করতে চাই, তাহলে আমরা একটি র্যান্ডম সংখ্যা কোথায় পাব?
একটি কল্পনাযোগ্য র্যান্ডম সংখ্যা উত্স হ'ল পরবর্তী ব্লকের হ্যাশ, বেশিরভাগ ক্ষেত্রে, এই স্তরের এলোমেলোতা যথেষ্ট। তবে প্রকৃতপক্ষে খনিজীবী এই র্যান্ডম সংখ্যাটিকে কিছুটা নিয়ন্ত্রণ করতে পারে, যদি কোনও খনিজীবী কোনও জুয়া খেলায় অংশ নেয় এবং জুয়াটির উপার্জনটি একটি ব্লক খনির চেয়ে বেশি হয়, তবে যদি এই খনিজীবী একটি ব্লক খনি করে তবে এটি নিজেকে হারাতে পারে, তবে স্পষ্টতই এই খনিজীবী এই নতুন ব্লকটি প্রকাশ না করার সিদ্ধান্ত নেবে, এটি একক খনিজীবীর কম্পিউটারের শক্তি যত বেশি হবে তত বেশি স্পষ্ট।
সুতরাং আমাদের একটি এলোমেলো সংখ্যার বীজ সংগ্রহের জন্য একটি বিনিময় হার সংগ্রহের অনুরূপ প্রক্রিয়া প্রবর্তন করতে হবে, এবং তারপর প্রতিটি সময় উইন্ডোর শেষে এই বীজগুলি ব্যবহার করে একটি এলোমেলো সংখ্যা গণনা করতে হবে এবং। তবে বিনিময় হার সংগ্রহের মতো, যেহেতু অংশগ্রহণকারীরা লেনদেন তৈরি করে জমা দেওয়ার বিনিময় হার অর্জন করে, তাই একটি সময় উইন্ডোর মধ্যে, প্রতিটি ব্যক্তির জমা দেওয়া এলোমেলো সংখ্যা অন্যদের কাছে দৃশ্যমান হয়, তাই একজন ব্যক্তি যিনি ইতিমধ্যে কোনও জুয়া খেলায় অংশ নিয়েছেন তিনি একটি এলোমেলো সংখ্যার বীজটি সাবধানে বেছে নিতে পারেন যাতে অন্যরা জমা দেওয়া বীজ এবং নতুন বীজের যোগফলের এলোমেলো সংখ্যাটি ঠিক তার প্রত্যাশার সাথে মিলিত হয়।
সুতরাং, আমরা বীজ সংগ্রহের উইন্ডোটি দুটি ভাগে বিভক্ত করতে চাই যাতে আমরা একটি এলোমেলো সংখ্যা পেতে পারি যা কেউ অনুমান করতে পারে না এবং হস্তক্ষেপ করতে পারে নাঃ
- প্রথম ধাপঃ প্রত্যেকেই Contract-এর কাছে একটি গ্যারান্টি প্রদান করতে পারে এবং 'একটি এলোমেলোভাবে নির্বাচিত বীজের বিভাজক মান' প্রদান করতে পারে।
- দ্বিতীয় ধাপঃ প্রথম ধাপে অংশগ্রহণকারীরা Contract কে তাদের বীজ সরবরাহ করে।
- দ্বিতীয় ধাপের সমাপ্তিঃ কন্ট্রাক্ট সমস্ত বৈধ বীজকে বিচ্ছিন্ন করে, একটি র্যান্ডম সংখ্যা তৈরি করে এবং প্রকাশ করে; দ্বিতীয় ধাপে ফিরে আসুন এবং সঠিক বীজ সরবরাহকারী ব্যক্তির জামিন প্রদান করুন।
প্রথম ধাপে, আপনি কেবল অন্যদের জমা করা বীজের বিশ্লেষণীয় মান জানেন, প্রকৃত বীজ জানেন না, এবং তাই ফলাফলের সাথে হস্তক্ষেপ করার জন্য একটি বীজ তৈরি করতে পারবেন না; এবং দ্বিতীয় ধাপে, সবাই কেবল প্রথম ধাপে জমা দেওয়া বীজকে নিশ্চিত করছে, নতুন জমা দিতে পারে না, বা অন্যদের জমা দেওয়া থেকে বিরত রাখতে পারে না।
এর আগে আমরা উল্লেখ করেছি যে বিটকয়েন স্ক্রিপ্টটি চক্র, পুনরাবৃত্তি, বাউন্স ইত্যাদির ক্ষমতা সরবরাহ করে না, সম্ভবত বিটকয়েন একটি বিটকয়েন স্ক্রিপ্টের কার্য সম্পাদনের সময় নিয়ন্ত্রণের জন্য বিবেচনা করে, কারণ টুরিংয়ের "স্টপ থেরাম" অনুসারে, টুরিং-সম্পূর্ণ প্রোগ্রামিং ভাষা দ্বারা লিখিত প্রোগ্রামগুলি সর্বদা কেবল স্থির বিশ্লেষণের দৃষ্টিকোণ থেকে নির্ধারণ করতে পারে না যে এটি সীমিত পদক্ষেপের পরে শেষ হবে কিনা, যাতে নির্ভর করে একটি ক্ষতিকারক আক্রমণকারী খনির স্বাভাবিক কাজকে ব্যাহত করার জন্য একটি মৃত চক্রের কারণ হতে পারে এমন একটি লেনদেন গঠন করতে পারে।
ইথেরিয়াম আবারও "অর্থনৈতিক উদ্দীপনার" মাধ্যমে এই সমস্যাটি এড়িয়ে যায়, চুক্তিটি একটি ভার্চুয়াল মেশিনে চালিত হয় যার নাম ইভিএম (ইথেরিয়াম ভার্চুয়াল মেশিন) । ইভিএম হ'ল একটি নিজস্ব "অর্থ প্রদানকারী" ভার্চুয়াল মেশিন, ইভিএমের মানদণ্ডে, অপারেশনের জন্য প্রয়োজনীয় মেমরি এবং সিপিইউ সময় অনুসারে, প্রতিটি অপকোড দ্বারা গ্রাস করা গ্যাসকে সংজ্ঞায়িত করা হয়, এটি একটি গণনা সম্পদ যা ইথার দ্বারা কেনা হয়। যখন কোনও লেনদেনের লক্ষ্য হয় তখন চুক্তির কোডটি কার্যকর করা হয়, লেনদেনের প্রবর্তককে চুক্তি সম্পাদনের সময় গ্রাস করা গ্যাসের জন্য অর্থ প্রদান করতে হবে এবং একই সাথে "একটি সর্বোচ্চ পরিমাণ গ্যাস দিতে ইচ্ছুক" ঘোষণা করা হয়, যদি গ্যাস মাঝখানে শেষ হয়ে যায় তবে চুক্তিটি কার্যকর করা বন্ধ হয়ে যায়।
তারপর আমরা আবার "সম্মতি ব্যবধান" নিয়ে কথা বলি, যেটা বিটকয়েনের ক্ষেত্রে প্রতি ১০ মিনিটে একটি নতুন ব্লক তৈরি হয়, অর্থাৎ পুরো নেটওয়ার্কে প্রতি ১০ মিনিটে একটি "সম্মতি" হয়, তাই সাধারণত বিটকয়েন লেনদেনের জন্য দশ মিনিট অপেক্ষা করতে হয়, যা নিশ্চিত হওয়ার জন্য, যখন কম্পিউটারের শক্তি খুব বেশি না থাকে, তখন হয়তো এক ঘন্টা অপেক্ষা করতে হয় (৬টি ব্লক) যাতে সবাই মনে করে যে লেনদেনটি নির্ভরযোগ্য।
স্পষ্টতই, কম সম্মতি সময় ব্যবহারকারীদের জন্য একটি ভাল অভিজ্ঞতা হবে, কেন বিটকয়েন ব্লক সময় সংক্ষিপ্ত করে না? এটি কারণ দ্রুত সম্মতি ব্যবধানটি "কেন্দ্রীয় খনি পুকুর" এর সুবিধা কিছুটা বাড়িয়ে তুলবে। "খনি" বলতে বিটকয়েন খনিজীবীদের একত্রিত হয়ে খনি খনন করা বোঝায়, খনিজীবীরা নিঃশর্তভাবে খনি পুকুরের নির্দেশাবলী মেনে চলে এবং অবশেষে খনি পুকুরের সাথে চুক্তি করে আয় ভাগ করে নেয়। স্পষ্টতই, বিটকয়েন একটি বিকেন্দ্রীভূত সিস্টেম হিসাবে, এই কেন্দ্রীয় খনি পুকুরের অতিরিক্ত সুবিধা চায় না।
যখন একজন খনিজীবী A একটি নতুন ব্লক খনন করে, তখন সে এই ব্লকটি সম্প্রচার করে এবং অন্যরা এই বার্তাটি পাওয়ার সাথে সাথে এই নতুন ব্লকটির উপর ভিত্তি করে কাজ শুরু করে। অন্যদের জন্য, "A একটি নতুন ব্লক খনন করেছে" এবং "A এর সম্প্রচারিত বার্তাটি পেয়েছে" এর মধ্যে সময়ের গণনা কার্যত নষ্ট হয়ে যায়, এবং কেন্দ্রীয় খনি পুলের অন্যান্য খনিজীবীদের এই সমস্যাটি হবে না, কারণ তারা আরও দ্রুত নতুন ব্লকের তথ্য পেতে পারে এবং অবিলম্বে নতুন ব্লকের উপর ভিত্তি করে কাজ শুরু করতে পারে।

এই সম্প্রচারের সময়টি কয়েক সেকেন্ডের হতে পারে, যা 10 মিনিটের জন্য খুব গুরুত্বপূর্ণ নয়, কিন্তু যদি আপনি সম্মতি ব্যবধানটি সংক্ষিপ্ত করেন তবে কেন্দ্রীয় খনির পুকুরের সুবিধা আরও স্পষ্ট হবে। কিন্তু ইথেরিয়াম "আঙ্কেল ব্লক" ধারণাটি প্রবর্তন করে এই সমস্যাটি সমাধান করেছে, যা সম্মতি ব্যবধানটি 15 সেকেন্ডে হ্রাস করেছে। বিটকয়েন পেমেন্ট নিশ্চিতকরণের গতিতে অনেক উন্নতি করেছে।
বিটকয়েনের ব্লকচেইনে, একটি ব্লক শুধুমাত্র একটি পিতা ব্লক এবং একটি কন্যা ব্লক থাকতে পারে। কিন্তু ইথেরিয়ামে, একটি নতুন তৈরি ব্লক একটি পিতা ব্লক এবং বেশ কয়েকটি চাচা ব্লক থাকতে পারে। উপরের উদাহরণে ফিরে আসুন, যদি A তে একটি নতুন ব্লক খনন করা হয় কিন্তু অন্যরা এখনও সম্প্রচারের সময় গ্রহণ করেনি, তবে যদি কেউ একটি নতুন ব্লক খনন করে তবে সম্প্রচারটি দেরিতে গ্রহণ না করা হয়, তবে এই ব্লকটি পরবর্তী ব্লকের "আঙ্কেল ব্লক" হওয়ার সম্ভাবনা রয়েছে। এই ব্লকটির প্রতিনিধিত্বকারী কাজের প্রমাণটি পরবর্তী ব্লকের অংশ হিসাবে বিবেচিত হবে (অর্থাৎ এই ব্যক্তিটি পরবর্তী ব্লকটি খনন করার অসুবিধা হ্রাস পেয়েছে), এবং চাচা ব্লকটি কেবলমাত্র কাজের প্রমাণ সরবরাহ করে, যার মধ্যে লেনদেনটি অকার্যকর। এইভাবে ব্লকটির মধ্যবর্তী অবস্থার দুর্বলতার ক্ষেত্রে দেরিতে প্রাপ্ত সম্প্রচারিত ক্লায়েন্টকে ক্ষতিপূরণ দেওয়া হয়, বিশেষত, সরাসরি চাচা ব্লকের 50% কাজের প্রমাণ সরবরাহ করে, দ্বিতীয় প্রজন্মের চাচা ব্লক 25% কাজের প্রমাণ সরবরাহ করে, যা সর্বাধিক পাঁচ

ছবি সৌজন্যে<https://blog.ethereum.org/2014/07/11/toward-a-12-second-block-time
সমাধান করা হয়নি
এই অংশে, আমি আপনাকে এমন কিছু বিষয়ের সাথে পরিচয় করিয়ে দেব যা ইথেরিয়ামে এখনও সমাধান করা হয়নি।
প্রথমত, ইথেরিয়াম এখনও বিটকয়েনের মতোই POW (পরিশ্রমের প্রমাণ) দ্বারা সুরক্ষিত, কেবলমাত্র একটি নির্দিষ্ট কাজের পরিমাণ সম্পন্ন করার পরে একটি নোড ব্লক তৈরিতে অংশ নিতে পারে। কাজের প্রমাণের সমস্যাটি হ'ল নেটওয়ার্কের সুরক্ষার জন্য প্রচুর পরিমাণে কম্পিউটিং শক্তি নষ্ট হয়, যদিও এটি আমাদের পূর্বের "অর্থনৈতিক উদ্দীপনা" ধারণার উপর ভিত্তি করে, তবে এটি আসলে উন্নত হতে পারে। ইথেরিয়াম মনে করে যে কাজের প্রমাণের পরিবর্তে POS (মালিকানাধিকারের প্রমাণ) ব্যবহার করা আরও ভাল উপায়, যা এই নেটওয়ার্কের দক্ষতা ব্যাপকভাবে বাড়িয়ে তুলতে পারে।
যেহেতু ইথার নিজেই মূল্যবান, তাই কেন এটি নিজেই অর্থনৈতিক প্রণোদনা হিসাবে ব্যবহার করা হয় না? পিওএস বলতে বোঝায় যে আপনার কাছে থাকা ইথারকে গ্যারান্টি হিসাবে ব্যবহার করা হয়, যেহেতু ব্লক উত্পাদনে অংশ নিতে ইচ্ছুক প্রতিটি নোড (প্রচলিত অর্থে খনির) (যা যাচাইকারী হিসাবে পরিচিত) সিস্টেমের কাছে একটি গ্যারান্টি প্রদান করতে হবে। (এখানে সিস্টেমটি প্রোটোকলে একটি নিয়ম বোঝায়, সমস্ত নোড মনে করে যে এই গ্যারান্টিটিটি 'মুক্ত' করা হয়েছে) এবং তারপরে আমরা আমাদের নিজস্ব গ্যারান্টিটি দিয়ে পরবর্তী ব্লকের ব্লক হতে পারে। (একটি গুরুত্বপূর্ণ "সম্ভাব্য" পূর্বশর্ত হ'ল এই ব্লকটি অবশ্যই চুক্তির সাথে সামঞ্জস্যপূর্ণ হতে হবে) যদি এই ব্লকটি সত্যই পরবর্তী ব্লক হয় তবে সমস্ত নোডকে পুরস্কৃত করা হবে, অন্যথায় গ্যারান্টি বাতিল করা হবে।
এই মডেলটি POW এর মতই, যেখানে খনিররা তাদের নিজস্ব কম্পিউটারের শক্তি ব্যবহার করে "বেট" করে এবং যদি একটি চেইন দীর্ঘ হয়, তবে এটি খনির কাজ চালিয়ে যাওয়ার জন্য এটিতে স্যুইচ করা প্রয়োজন। কারণ যত বেশি অংশগ্রহণকারী চেইন, ততই সঠিক চেইন হওয়ার সম্ভাবনা থাকে, এবং শেষ পর্যন্ত সবাই একটি সমঝোতায় পৌঁছে যায়। এবং POS-এ, যেখানে লোকেরা তাদের নিজস্ব জামিনের অর্থ দিয়ে বাজি ধরে, তারা একইভাবে অন্য অনেক লোকের দ্বারা বাজি ধরেছে এমন একটি ব্লক বেছে নেওয়ার প্রবণতা রয়েছে (যদি এটি বৈধ হয়), এবং শেষ পর্যন্ত একটি সমঝোতা পৌঁছেছে।
পস অবশ্যই পুরো নেটওয়ার্কের ট্রানজিট বাড়িয়ে তুলবে <unk> এখন আর আমাদেরকে প্রচুর অর্থহীন গণনা করে ঐক্যমত্যে পৌঁছানোর প্রয়োজন নেই, প্রতিটি নোডের গণনার পরিমাণ চুক্তিতে কোড সম্পাদন এবং ডেটা যাচাইয়ের পরিমাণের কাছাকাছি হবে <unk>
অবশ্যই, পিওএস এখনও গ্রহণ করা হয়নি কারণ এখনও কিছু সমস্যা রয়েছে যা সমাধান করা হয়নি, যেমন POW এর মতো ৫১% আক্রমণ সমস্যা, যেখানে পিওডাব্লু-তে ৫১% নেটওয়ার্ক-ভিত্তিক কম্পিউটিং পাওয়ার একটি নির্দিষ্ট শারীরিক সীমাবদ্ধতা রয়েছে কারণ কম্পিউটিং পাওয়ারটি কম্পিউটিং ডিভাইস সরবরাহ করার জন্য প্রয়োজন; বিপরীতে, পিওএস-তে ৫১% নেটওয়ার্ক-ভিত্তিক ইথার সংগ্রহ করা তুলনামূলকভাবে সহজ। যতক্ষণ না আপনার পর্যাপ্ত অর্থ রয়েছে। পিওএস স্বাভাবিকভাবেই পিওডাব্লু-র চেয়ে কম জটিল, উপরে বর্ণিত কাজের যুক্তি বাস্তবায়নের জন্য যেমন কার্যকর যাচাইকারীর তালিকা বজায় রাখা, জামিনের জামিন, জরিমানা এবং ফেরত না দেওয়া, প্রস্তাবিত ব্লক এবং বাজি ব্লক, যাচাইকারীর মধ্যে জোটের আক্রমণ প্রতিরোধ, নেটওয়ার্ক বিভাজনের পরে পুনরুদ্ধার ইত্যাদি।
আরেকটি বিষয় হচ্ছে বিটকয়েন এবং ইথেরিয়াম উভয়ই বর্তমানে একই ব্লকচেইনে সমস্ত লেনদেনের নিশ্চিতকরণ করছে, যা একটি বিতরণ নেটওয়ার্কের গণনা ক্ষমতাকে ব্যাপকভাবে সীমাবদ্ধ করে। প্রতিটি নোডকে প্রতিটি লেনদেন গ্রহণ, সংরক্ষণ এবং যাচাই করতে হবে। পুরো নেটওয়ার্কের প্রক্রিয়াজাতকরণ ক্ষমতা আসলে একটি নোডের প্রক্রিয়াজাতকরণের ক্ষমতা সমান।
তাই Ethereum ভবিষ্যতে একটি "টুকরা" প্রক্রিয়া প্রবর্তন করতে চায়, যাতে পুরো নেটওয়ার্ককে বিভিন্ন অংশে বিভক্ত করা যায়, যার মধ্যে স্বতন্ত্রভাবে লেনদেনের যাচাইকরণ করা যায়। তবে টুকরাগুলির মধ্যে নির্দেশকের কাঠামোর মাধ্যমে অন্যান্য টুকরাগুলির ডেটা উদ্ধৃত করা হবে এবং এসিঙ্ক্রোনাস কলের মাধ্যমে অন্যান্য টুকরাগুলিকে প্রভাবিত করা হবে, তাই পুরো নেটওয়ার্কটি ব্যবহারকারীর কাছে এখনও একক হিসাবে দেখা যায়, তবে পুরো নেটওয়ার্কের প্রক্রিয়াজাতকরণের ক্ষমতা খুব শক্তিশালী হবে। বর্তমানে টুকরা সম্পর্কিত বাস্তবায়নটি এখনও তুলনামূলকভাবে প্রাথমিক বিকাশের পর্যায়ে রয়েছে, তাই আমি যে তথ্য পেয়েছি তা সীমিত, তাই খুব বেশি পরিচয় করিয়ে দেওয়া যায় না।
Contract
এই অংশে আমি আপনাদের দেখাবো কন্ট্রাক্টের কিছু কার্যকরী কোড। কন্ট্রাক্ট বিভিন্ন ধরনের ভাষায় লেখা যায় এবং শেষ পর্যন্ত ইভিএম-এর ওপকোড হিসেবে কাজ করে। আজকে আমরা ইভিএম-এর সবচেয়ে ভালোভাবে রক্ষণাবেক্ষণ করা একটি ভাষা Solidity নামক জাভাস্ক্রিপ্টের একটি ভাষা নিয়ে আলোচনা করব।
javascript
contract Test {
uint storedData; // State variable
struct Voter { // Struct
uint weight;
bool voted;
address delegate;
uint vote;
}
event HighestBidIncreased(address bidder, uint amount); // Event
function func() { // Function
if (msg.sender.balance < 10 finney) {
msg.sender.send(10 finney);
}
sha256("...");
address nameServer = 0x72ba7d8e73fe8eb666ea66babc8116a41bfb10e2;
nameServer.delegatecall("isAvailable", "MyName");
nameServer.call("register", "MyName");
}
}
এখানে কিছু মূল ব্যাকরণ প্রদর্শন করা হয়েছে, যেখানে আপনি Solidity এ স্ট্যাটাস ভেরিয়েবল ঘোষণা করতে পারেন।uint storedData;), এই ভেরিয়েবলের মানগুলি চিরকালের জন্য ব্লকচেইনে সংরক্ষিত থাকবে;structজটিল ডেটা স্ট্রাকচার ঘোষণা করা যায়; ফাংশন সংজ্ঞায়িত করা যায়, যেগুলো লেনদেনের প্রাপ্তির সময় কার্যকর করা হয়, লেনদেনের প্রবর্তক কোন ফাংশনগুলি কার্যকর করতে পারে তা বেছে নিতে পারে, তাই একটি চুক্তি বেশ কয়েকটি ফাংশন সরবরাহ করতে পারে, যার মধ্যে ফাংশনগুলি লজিক্যাল বিচার, চক্র এবং পরিবর্তিত মান সংশোধন করতে পারে।
এই ভাষায় কিছু ছোট ছোট সুবিধা রয়েছে যেমন সাধারণ ক্রিপ্টোগ্রাফি অ্যালগরিদম (https://en.wikipedia.org/wiki/Cryptography) ।sha256) , ইউনিট রূপান্তর10 finney) এবং সরাসরি তার পকেটের ঠিকানা লিখুন।0x72ba7d8e73fe8eb666ea66babc8116a41bfb10e2) ইত্যাদি।msgএকটি অন্তর্নির্মিত গ্লোবাল ভেরিয়েবল যা এই লেনদেনের সাথে সম্পর্কিত তথ্য যেমন প্রবর্তক, পরিমাণ ইত্যাদি পড়তে পারে। চুক্তিটি অন্য চুক্তির কোডটি দুটি উপায়ে কল করতে পারে,delegatecallএকটি Contract এর কোডকে বর্তমান প্রসঙ্গে execute করার মত, যেমন একটি লাইব্রেরী ফাংশন; এবংcall"একটি নতুন চুক্তি শুরু করা মানে আরেকটি চুক্তি শুরু করা।
এই জটিল কাজটি "স্ট্যাটাস ভেরিয়েবল" এর জন্য বিমূর্ত করা হয়েছে। storedData হল একটি স্ট্যাটাস ভেরিয়েবল। আসলে, কন্ট্রাক্টের কার্যকরকরণের সময় স্ট্যাটাস ভেরিয়েবলের পরিবর্তনগুলি ব্লকচেইনে সংরক্ষণ করা হয় না, কারণ কন্ট্রাক্টের কার্যকরকরণটি নিশ্চিতভাবে গণনা করা হয়।
এখন আমি আপনাদের দেখাবো কিভাবে একটি সত্যিকারের কন্ট্রাক্ট কয়েন ইথেরিয়াম নেটওয়ার্কের উপর ভিত্তি করে তার নিজস্ব টোকেন জারি করতে পারেঃ
javascript
contract Coin {
// The keyword "public" makes those variables
// readable from outside.
address public minter;
mapping (address => uint) public balances;
// Events allow light clients to react on
// changes efficiently.
event Sent(address from, address to, uint amount);
// This is the constructor whose code is
// run only when the contract is created.
function Coin() {
minter = msg.sender;
}
function mint(address receiver, uint amount) {
if (msg.sender != minter) return;
balances[receiver] += amount;
}
function send(address receiver, uint amount) {
if (balances[msg.sender] < amount) return;
balances[msg.sender] -= amount;
balances[receiver] += amount;
Sent(msg.sender, receiver, amount);
}
}
কোডটি এসেছেhttp://solidity.readthedocs.io/en/latest/introduction-to-smart-contracts.html#subcurrency-example (MIT)
কয়েন নামের এই চুক্তিতে দুটি স্ট্যাটাস ভেরিয়েবলের কথা বলা হয়েছে।minterএই টোকেন সংরক্ষণের জন্য ব্যবহৃত স্রষ্টা, ফাংশন নির্মাণে ((function Coin()) এই ভেরিয়েবলকে প্রথম চুক্তি তৈরির জন্য ব্যবহৃত লেনদেনের প্রবর্তক বরাদ্দ দেয়; এবং একটি মানিব্যাগের ঠিকানাটি ডিজিটাল ম্যাপিং টেবিলে ঘোষণা করে।balances, এই টোকেনটি ধারণকারী প্রত্যেকের ঠিকানার ব্যালেন্সকে বোঝায়।
mintএই ফাংশনটি প্রথমে সিদ্ধান্ত নেয় যে লেনদেনের প্রবর্তক কি এই টোকেনের স্রষ্টা, যদি তা হয় তবে ফাংশনটির প্যারামিটার অনুসারে নির্দিষ্ট সংখ্যক টোকেন নির্দিষ্ট ঠিকানায় যুক্ত করা হবে।sendএই ফাংশনটি সকলের দ্বারা কল করা যায়, এবং এটি লেনদেনের প্রবর্তকের ঠিকানা থেকে একটি নির্দিষ্ট পরিমাণ ব্যালেন্স (যদি পর্যাপ্ত ব্যালেন্স থাকে) কেড়ে নেওয়া হয়, এবং এটি একটি ট্রান্সফারের ফাংশন হিসাবে লক্ষ্য ঠিকানায় যোগ করা হয়।
আমরা একটি নামও ঘোষণা করেছি।Sentইভেন্টগুলি, ইভেন্টগুলি আসলে কোনও কার্যকর ভূমিকা রাখবে না, কেবলমাত্র ডিবাগ করার সময় গুরুত্বপূর্ণ ইভেন্টগুলি মুদ্রণ করা সহজ, ভবিষ্যতে হালকা ক্লায়েন্টের বাস্তবায়নও সহজ হবে ((লাইট ক্লায়েন্টগুলি কেবলমাত্র ইভেন্টগুলি গ্রহণ করে তবে প্রকৃতপক্ষে চুক্তিটি সম্পাদন করে না)) ।

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

এই চুক্তিটি প্রকাশিত হওয়ার পর, আপনি এটি সম্পর্কে বিস্তারিত জানতে চাইলে এখানে ক্লিক করতে পারেনঃ

এবং বাম দিকে, আপনি দেখতে পাবেন দুটি স্ট্যাটাস ভেরিয়েবলের মান,minter"আমার নিজের ঠিকানা" এর মান হল "আমার ঠিকানা"balancesযেহেতু এটি একটি ম্যাপিং টেবিল, তাই আপনি একটি ঠিকানা লিখতে পারেন এবং এর ব্যালেন্স জানতে পারেন। ডানদিকে আপনি এই চুক্তিতে নতুন লেনদেন শুরু করতে পারেন, একটি ড্রপ-ডাউন মেনু রয়েছে যা থেকে আপনি লেনদেন শুরু করতে পারেন।sendঅথবা mintফাংশন, আপনি Contract কে যে প্যারামিটারটি পাঠাবেন তা পূরণ করতে পারেন। যেহেতু এখানে আমরা লেনদেনের উদ্দেশ্য একটি বার্তা পাঠানো, ইথার নয়, তাই আমাদের লেনদেনের পরিমাণ সেট করতে হবে না।
এখন আমি আপনাদের একটি মজার কন্ট্রাক্টের কথা বলবো, যেটা একটি পনজি প্রতারণা এর মত কাজ করে, যেখানে আপনি এই কন্ট্রাক্টকে ১ ইথার দিয়ে গেমটি খেলতে পারবেন, এবং তারপর প্রত্যেক তিনজন নতুন খেলোয়াড়কে ৩ ইথার দেওয়া হবে, যার অর্থ হলঃ
javascript
contract Pyramid {
struct Participant {
address etherAddress;
}
Participant[] public participants;
uint public payoutIdx = 0;
// events make it easier to interface with the contract
event NewParticipant(uint indexed idx);
// fallback function - simple transactions trigger this
function() {
enter();
}
function enter() {
if (msg.value < 1 ether) {
msg.sender.send(msg.value);
return;
}
if (msg.value > 1 ether) {
msg.sender.send(msg.value - 1 ether);
}
uint idx = participants.length;
participants.length += 1;
participants[idx].etherAddress = msg.sender;
NewParticipant(idx);
// for every three new participants we can
// pay out to an earlier participant
if (idx != 0 && idx % 3 == 0) {
// payout is triple, minus 10 % fee
uint amount = 3 ether;
participants[payoutIdx].etherAddress.send(amount);
payoutIdx += 1;
}
}
function getNumberOfParticipants() constant returns (uint n) {
return participants.length;
}
}
কোড সরলীকৃত<https://ethereumpyramid.com/contract.html
কোডটি খুবই সহজ, কন্ট্রাক্টটি বলে যে,participantsএকটি অ্যারে যা সমস্ত অংশগ্রহণকারীদের মানিব্যাগের ঠিকানা সঞ্চয় করার জন্য ব্যবহৃত হয়, অথবা একটি ঘোষণা করেpayoutIdxএটি ব্যবহার করা হয় কতজন অংশগ্রহণকারী 3 Ether ফেরত পেয়েছেন তা রেকর্ড করার জন্য।enterএই Contract এর মূল কাজ হল প্রথমে কিছু প্যারামিটার চেক করা, যাতে নিশ্চিত করা যায় যে প্রত্যেক অংশগ্রহণকারী ১ ইথার পেমেন্ট করেছে, এবং তারপর নতুন অংশগ্রহণকারীকে দেওয়া হয়।participantsএবং অ্যারে শেষে, যদি বর্তমান অংশগ্রহণকারীর ক্রমিক সংখ্যা ৩ এর গুণিতক হয়, তাহলে ৩ ইথার পাঠানpayoutIdxএকজন অংশগ্রহণকারী হিসেবে,payoutIdxপরবর্তী অংশগ্রহণকারীকে নির্দেশ করুন।
তথ্যসূত্র
HashTree:
- বিটকয়েন মার্কেল ট্রি (ইংরেজি ভাষায়)
- ১০০% রিজার্ভ প্রমাণ http://blog.bifubao.com/2014/03/16/proof-of-reserves
- Git অবজেক্ট মডেল http://gitbook.liuhui998.com/1_2.html
Bitcoin:
- (Alt Coin) NameCoin https://namecoin.info/
- Bitcoin Script https://en.bitcoin.it/wiki/Script
- Simplified payment verification https://en.bitcoin.it/wiki/Scalability#Simplifiedpaymentverification
Halting Problem:
- গণনার সীমা (২): স্ব-অনুসন্ধান এবং অনির্ধারিত http://songshuhui.net/archives/75957
Ethereum:
- Ethereum https://www.ethereum.org/
- White Paper https://github.com/ethereum/wiki/wiki/White-Paper
- Toward a 12-second Block Time https://blog.ethereum.org/2014/07/11/toward-a-12-second-block-time
Ethereum Network:
Next of Ethereum:
- ক্যাস্পার (ইংরেজিঃ Casper) একটি বন্ধুত্বপূর্ণ ছোট্ট ভূত।
- Serenity বোঝা - দ্বিতীয় অংশঃ Casper
- (Scalability Paper) Notes on Scalable Blockchain Protocols https://github.com/vbuterin/scalability_paper
- Merkling in Ethereum https://blog.ethereum.org/2015/11/15/merkling-in-ethereum/
Contract:
- ÐAPPS http://dapps.ethercasts.com/
- Solidity https://solidity.readthedocs.org
- Ethereum and Oracles https://blog.ethereum.org/2014/07/22/ethereum-and-oracles
- Ethereum Pyramid Contract https://ethereumpyramid.com/
- RANDAO: A DAO working as RNG of Ethereum https://github.com/randao/randao
Contract IDE:
- Mix https://github.com/ethereum/mix
- Web IDE https://chriseth.github.io/browser-solidity
- Virtual IDE http://etherscripter.com/



