এখান থেকেঃhttps://jysperm.me/2016/05/blockchain-slides/
এই নিবন্ধটি মার্চের শেষের দিকে LeanCloud-এ আমার প্রযুক্তিগত ভাগ করে নেওয়ার ফলাফল, যা অনুমান করে যে পাঠকেরা ইতিমধ্যে মৌলিক ক্রিপ্টোগ্রাফির জ্ঞান এবং বিটকয়েন বাস্তবায়নের প্রাথমিক ধারণা রয়েছে।
ব্লকচেইন, যাকে ব্লকচেইনও বলা হয়, এটিকে হ্যাশট্রি (বিভিন্ন গাছ) হিসাবে বিবেচনা করা যেতে পারে, এবং এই কারণে এটি হ্যাশট্রিগুলির সাথে কিছু বৈশিষ্ট্য রয়েছেঃ
ছবি থেকেhttp://happypeter.github.io/bitcoin_basics/book/017_merkle_tree.html
অর্থাৎ, একটি গাছের কাঠামোর মধ্যে, প্রতিটি টার্মিনাল নোডের একটি ব্যাখ্যামূলক মান থাকে, যখন যে কোনও টার্মিনাল নোডের ব্যাখ্যামূলক মানগুলি তার সমস্ত সরাসরি সাব-নোটের ব্যাখ্যামূলক মান থেকে আসে, তাই প্রতিটি নোড সরাসরি বা অপ্রত্যক্ষভাবে তার সমস্ত সাব-নোটের তথ্য ধারণ করে। সুতরাং, যখনই কোনও টার্মিনাল নোডের ব্যাখ্যামূলক মান পরিবর্তিত হয়, তখন তার সমস্ত পিতা নোডের ব্যাখ্যামূলক মান পরিবর্তিত হয়, রুট নোডও অবশ্যই পরিবর্তিত হবে।
আমি হ্যাশট্রি সম্পর্কে একটি অ্যাপ্লিকেশন উল্লেখ করতে পারিঃ "100% রিজার্ভ প্রুফ", এটি "জিরো-জ্ঞান প্রমাণ" বিভাগের একটি সমস্যা। আমরা এমন একটি পরিস্থিতি বিবেচনা করতে পারি যেখানে বিটকয়েনের ধারককে লেনদেনের জন্য বিটকয়েন পাঠাতে হবে এবং তত্ত্বগতভাবে এক্সচেঞ্জটি এটি ব্যবহার করতে পারে (সব ব্যবহারকারীর অ্যাকাউন্টের ব্যালেন্স) যা ব্যবহারকারীরা দেখতে চায় না এবং এক্সচেঞ্জটি নিজেকে পরিষ্কার করতে চায়ঃ এক্সচেঞ্জটি প্রথমে একটি বিটকয়েন ঠিকানা প্রকাশ করে যা তারা ধারণ করে এবং প্রত্যেকে নিশ্চিত করে যে লেনদেনটি প্রকৃতপক্ষে এই পরিমাণ বিটকয়েনকে রিজার্ভ হিসাবে ধারণ করে, তবে কীভাবে প্রমাণ করা যায় যে এই অর্থটি সমস্ত ব্যবহারকারীর যোগফলের চেয়ে বেশি? অন্য কথায়, কীভাবে প্রতিটি ব্যবহারকারীকে তাদের ব্যালান্স প্রকাশ না করে (যা ব্যবহারকারীর গোপনীয়তা প্রকাশ করবে) তাদের মোট ব্যালেন্সে অন্তর্ভুক্ত করা যায়?
ছবি থেকেhttp://blog.bifubao.com/2014/03/16/proof-of-reserves
আমরা একটি হ্যাশট্রি তৈরি করতে পারি, যেখানে সমস্ত এন্ড-নোড এক ব্যবহারকারীকে প্রতিনিধিত্ব করে এবং ব্যবহারকারীর ভারসাম্য ধারণ করে।Σ
) এবং ব্যবহারকারীর আইডি (যেমন মেইলবক্স ঠিকানা)h
), এবং পিতা নোড তার সন্তান নোড এর ভারসাম্য যোগফল অন্তর্ভুক্ত ((sum
) এবং সমস্ত উপ-নোটের তথ্যের বিভাজনhash
) ; প্রতিটি ব্যবহারকারীর জন্য, কেবল তার নিজের শেষ এবং ভাইয়ের নোডগুলি, তার সমস্ত পিতা এবং পিতা নোডগুলির ভাইয়ের নোডগুলি তাকে দেখানো দরকার, কারণ এই ব্যবহারকারীটি পিতা নোডগুলির ধাপে ধাপে পুনরুদ্ধারের মাধ্যমে নিশ্চিত করতে পারে যে তার ব্যালেন্সটি পিতা নোডে অন্তর্ভুক্ত রয়েছে এবং শেষ পর্যন্ত রুট নোডে অন্তর্ভুক্ত রয়েছে।
এইভাবে, প্রতিটি ব্যবহারকারীর কাছে প্রদর্শিত তথ্যটি কেবল তার নিজস্ব তথ্য এবং কিছু সমষ্টিগত তথ্য রয়েছে, প্রতিটি ব্যবহারকারী অন্য ব্যবহারের ভারসাম্য সম্পর্কে অজ্ঞাত থাকাকালীন তার ভারসাম্যটি রুট নোডে অন্তর্ভুক্ত রয়েছে তা নিশ্চিত করতে পারে। উপরের চিত্রটিতে একটি ছোট্ট ত্রুটি রয়েছে।h
জন্যe4df9d12
ব্যবহারকারীর প্রতিনিধিত্বকারী একটি শেষ নোড হওয়া উচিত নয়, বরং একটি সমষ্টিগত তথ্য নোড হওয়া উচিত (এই নোডটিতে একটি 3333 ব্যালেন্সযুক্ত ব্যবহারকারী এবং একটি 0 ব্যালেন্সযুক্ত ভুয়া ব্যবহারকারী থাকতে পারে) যাতে কোনও ব্যবহারকারীর গোপনীয় তথ্য ফাঁস না হয়।
এখন আসুন আমরা Git এর দিকে তাকাই, যা আসলে একটি খুব সাধারণ Blockchain অ্যাপ্লিকেশনঃ
ছবি থেকেhttp://gitbook.liuhui998.com/1_2.html(জিপিএল v2)
গিটে, ফাইল (ব্লব), ইনডেক্স (ট্রি) বা প্রতিশ্রুতি (Commit) উভয়ই একটি হ্যাশ রয়েছে যা এর বিষয়বস্তু দ্বারা নির্ধারিত হয়, যদি দুটি বস্তুর একই বিষয়বস্তু থাকে তবে একই হ্যাশ থাকে। গিটে, পুরো সংগ্রহস্থলের ইতিহাসটি একটি ব্লকচেইন, প্রতিটি প্রতিশ্রুতি একটি ব্লকের সমতুল্য, প্রতিশ্রুতিতে পূর্ববর্তী প্রতিশ্রুতির হ্যাশ এবং সংশ্লিষ্ট বস্তুর হ্যাশ রয়েছে, প্রতিশ্রুতি নিজেই এর বিষয়বস্তু এবং এই মূল তথ্য দ্বারা নির্ধারিত হয়।
গিট ব্লকচেইন ব্যবহার করে রিপোজিটরির জন্য একটি অনন্য ইতিহাস নির্ধারণ করে push --force
তবে এই পরিবর্তনটি সকল সহ-লেখকের দ্বারা লক্ষ্য করা যাবে।
ব্লকচেইনের আরেকটি ক্লাসিক অ্যাপ্লিকেশন হ'ল বিটকয়েন, এবং এটি বিটকয়েন যা ব্লকচেইন শব্দটি প্রচার করেছে (যদিও ধারণাটি সর্বদা ছিল):
ছবি থেকেhttps://commons.wikimedia.org/wiki/File:Bitcoin_Block_Data.png(CC-BY-SA-3.0)
বিটকয়েনে, প্রতিটি ব্লকের মধ্যে একটি Transaction (ট্রাঞ্জেকশন) এবং পূর্ববর্তী ব্লকের হ্যাশ রয়েছে, এবং পুরো ব্লকচেইন একটি বিকেন্দ্রীভূত একক অ্যাকাউন্ট লিডারশিপ গঠন করে। যেহেতু প্রতি দশ মিনিটে একটি নতুন ব্লক তৈরি হয় এবং ব্লক তৈরি হয়ে গেলে এটি ব্লকচেইনে চিরকালের জন্য থাকে, তাই ব্লকচেইন লেনদেনের ক্রমানুসারে স্থির থাকে, লেনদেনের পূর্ববর্তী ক্রমানুসারে রক্ষণাবেক্ষণ করে এবং এরপরে এটি নির্ধারণ করে যে কোনও অ্যাকাউন্টে একটি লেনদেন শুরু করার জন্য পর্যাপ্ত ব্যালেন্স রয়েছে কিনা।
এই শেয়ারের প্রথম অংশটি হ'ল বিটকয়েন সম্পর্কে একটি সংক্ষিপ্ত পর্যালোচনা।
বিটকয়েনের ব্লক তৈরি হয় "কাজের প্রমাণ" এর মাধ্যমে, যার অর্থ হল যে "খনির" অংশগ্রহণকারী সকল "খনির" একটি কম্পিউটিং শক্তি সম্পর্কিত, এলোমেলো প্রকৃতির ব্যাচ গণনা করতে হবে, যতক্ষণ না একটি নির্দিষ্ট শর্ত পূরণ করে এমন একটি এলোমেলো সংখ্যা গণনা করা হয়।
সেটিংসে, প্রতিটি মাইনার সর্বদা "দীর্ঘতম চেইন" এর উপর নির্ভর করবে এবং বিখ্যাত, নিয়ম পূরণকারী দীর্ঘতম চেইনের ভিত্তিতে পরবর্তী ব্লক গণনা করবে, অন্যথায় আপনার কম্পিউটার শক্তি নষ্ট হয়ে যাবে। কারণ অন্যান্য মাইনাররা সর্বদা দীর্ঘতম চেইনকে স্বীকৃতি দেয় এবং আপনি যদি দীর্ঘতম চেইনের ভিত্তিতে কাজ শুরু না করেন তবে অন্য সমস্ত মাইনারের কম্পিউটার শক্তি প্রতিদ্বন্দ্বিতা করবে।
বিটকয়েন প্রতি ১০ মিনিটে একটি নতুন ব্লক তৈরি করার জন্য ডিজাইন করা হয়েছে, যা পরবর্তী ব্লক তৈরির শর্তাবলী সামঞ্জস্য করার জন্য গত কয়েক ব্লকের ব্যবধান পর্যবেক্ষণ করে করা হয়েছে। যখন গত কয়েকটি ব্লক তৈরির গতি প্রত্যাশিতের চেয়ে বেশি হয়, তখন পরবর্তী ব্লকটি তৈরি করা উচিত বলে মনে করা হয়।
সাধারণত বিটকয়েনের প্রতিটি নোটকে একটি লেনদেনের বৈধতা নিশ্চিত করার জন্য সম্পূর্ণ ব্লকচেইন ডেটা সঞ্চয় করতে হয়। এই লেনদেনের সূত্রপাতকারীর কাছে লেনদেনটি শুরু করার জন্য পর্যাপ্ত ব্যালেন্স রয়েছে কিনা তা নিশ্চিত করার জন্য। তবে এখন সম্পূর্ণ ব্লকচেইনটি ইতিমধ্যে 66G রয়েছে এবং এটি প্রতিদিন প্রায় 0.1G হারে বাড়ছে। যদি বিটকয়েনের প্রতিটি ব্যবহারকারীর কাছে সম্পূর্ণ ব্লকচেইন সঞ্চয় করার প্রয়োজন হয় তবে এটি অত্যধিক চাপ থেকে মুক্ত নয়, সুতরাং বিটকয়েনের একটি "সরলীকৃত নিশ্চিতকরণ এসপিভি, সরলীকৃত পেমেন্ট যাচাইকরণ" প্রক্রিয়া রয়েছে, যা "হালকা ক্লায়েন্ট" নামে পরিচিত, যা সম্পূর্ণ ব্লকচেইনটি সংরক্ষণ না করে, তবে এক বা একাধিক সম্পূর্ণ ব্লকচাইনের সাথে সংযুক্ত থাকে, যা কেবলমাত্র সমস্ত তথ্য ধারণ করে (হ্যাশ, লেনদেনের পরিমাণ, কাজ) এবং তারপরে প্রতিটি ব্লককে যাচাইকরণের পরিমাণ, যখনই এটি প্রয়োজনীয় হয় যাচাইকরণের জন্য লেনদেনের সম্পূর্ণ স্থানটি অনুসন্ধান করুন।
বিটকয়েনের ব্লকচেইনকে আমরা একটি "অবস্থার মেশিন" হিসাবে কল্পনা করতে পারি, পুরো ব্লকচেইনটি একটি "ব্লক" যা প্রতিটি লেনদেনের রেকর্ড সংরক্ষণ করে এবং এই লেনদেনের রেকর্ডগুলির ভিত্তিতে পুরো অ্যাকাউন্টটি যে কোনও সময়ে "অবস্থার" উপর ভিত্তি করে অনুমান করা যায়। বিটকয়েন নেটওয়ার্কের প্রতিটি অ্যাকাউন্টে কত পরিমাণ ব্যালেন্স রয়েছে। প্রতিটি লেনদেন হ'ল একটি অবস্থা পরিবর্তন, এবং প্রতিটি ব্লক হ'ল পুরো বিটকয়েন নেটওয়ার্কের খনিজীবীদের বর্তমান অবস্থা সম্পর্কে একটি "সমঝোতা" কারণ বিটকয়েন প্রতি 10 মিনিটে একটি নতুন ব্লক তৈরি করে, যার অর্থ প্রতি 10 মিনিটে সমস্ত অ্যাকাউন্টের ব্যালেন্স সম্পর্কে সবাই একমত হয়, এবং এই দশ মিনিটের মধ্যে অ্যাকাউন্টের অবস্থা আসলে একটি "বিচ্যুতিপূর্ণ অবস্থা"।
বিটকয়েনের উপর ভিত্তি করে অনেকগুলি অন্যান্য ক্রিপ্টোকারেন্সিও উদ্ভূত হয়েছে, যা সাধারণত "Alt Coin" নামে পরিচিত এবং সাধারণত এই ধরনের মুদ্রার দুটি বাস্তবায়ন রয়েছেঃ
প্রথমটি হ'ল এটির নিজস্ব নেটওয়ার্ক ব্যবহার করা, বিটকয়েন থেকে পৃথক, এর সুবিধাগুলি হ'ল জাইকিনগুলি তাদের নিজস্ব প্রোটোকল এবং নিয়মগুলি খুব নমনীয়ভাবে ডিজাইন করতে পারে তবে এটির ব্যবহারকারীর সংখ্যা বিটকয়েনের মতো সংখ্যার স্তরে পৌঁছানো কঠিন, তাই ম্যালওয়্যার আক্রমণের বিরুদ্ধে প্রতিরক্ষা খুব দুর্বল হবে।
দ্বিতীয়টি হ'ল বিটকয়েন নেটওয়ার্কের "মেটা প্রোটোকল" বাস্তবায়ন করা, বিটকয়েনের লেনদেনের উপরে কাস্টমাইজড তথ্য যুক্ত করে তার নিজস্ব যুক্তি বাস্তবায়ন করা। এর সুবিধা হ'ল আক্রমণ প্রতিরোধের জন্য বিটকয়েনের কম্পিউটিং শক্তির স্কেল ব্যবহার করা যায়, তবে বিটকয়েন নেটওয়ার্কের সাথে সংযুক্ত হওয়ার কারণে, সমস্ত খনিজীবীরা কোটিনের নিয়ম মেনে চলবে না, তাই বিপরীত ব্লকগুলিকে ব্লকচেইনে প্রবেশ করতে বাধা দেওয়া যায় না, কেবল ক্লায়েন্টে বিপরীত লেনদেনগুলি ফিল্টার করতে পারে, বা বিটকয়েন দ্বারা সরবরাহিত সরলীকৃত নিশ্চিতকরণের বৈশিষ্ট্যটি ব্যবহার করতে পারে না।
বিটকয়েন একটি বড় সংখ্যক খনির সাথে একটি ব্লকচেইন সরবরাহ করতে পারে যা বড় আকারের ক্ষতিকারক আক্রমণকে প্রতিরোধ করতে পারে এবং বিটকয়েনের লেনদেনের উপর কাস্টমাইজড ডেটা বহন করতে পারে।
বিটোসিনও একটিবিটকয়েন স্ক্রিপ্টবিটকয়েনের মূল বৈশিষ্ট্য এটি নয়, তাই এটি তুলনামূলকভাবে সহজ ক্রিয়াকলাপগুলি সম্পাদন করতে পারে এবং ব্লকচেইনে খুব সীমিত পরিমাণে ডেটা পড়তে পারে এবং লুপিং প্রক্রিয়াটির অভাবের কারণে সাধারণ, টুরিন-সম্পূর্ণ যুক্তি লিখতে অসুবিধা হয়।
ছবি থেকেhttps://www.ethereum.org/assets(CC 3.0)
ইথেরিয়াম একটি ব্লকচেইন ভিত্তিক, বিকেন্দ্রীভূত অ্যাপ্লিকেশন প্ল্যাটফর্ম যা বিটকয়েনের অবকাঠামো এবং ক্রিপ্টোগ্রাফিক ভিত্তিক ব্লকচেইন প্রযুক্তিকে একটি সর্বজনীন প্ল্যাটফর্ম হিসাবে তৈরি করে এবং বিটকয়েন নেটওয়ার্কের অভাবী কিছু বৈশিষ্ট্য পূরণ করে যাতে বিকাশকারীরা তাদের বিকেন্দ্রীভূত অ্যাপ্লিকেশনগুলি ব্লকচেইনে চালাতে পারে।
ইথেরিয়াম সম্পর্কে বিস্তারিত জানার আগে, আমি প্রথমে বিকেন্দ্রীভূত নেটওয়ার্কের দুটি প্রধান ভিত্তি সম্পর্কে আলোচনা করবঃ ক্রিপ্টোগ্রাফি এবং গেমিং। ক্রিপ্টোগ্রাফি, অবশ্যই, গণিতগতভাবে জনসাধারণের কী এনক্রিপশন, ডিজিটাল স্বাক্ষর, ব্যাচ এবং সংক্ষিপ্তকরণ অ্যালগরিদমের মাধ্যমে সুরক্ষা নিশ্চিত করার জন্য যথেষ্ট নয়; এবং গেমিং হ'ল বিকেন্দ্রীভূত নেটওয়ার্কে যে কেউ, যারা এই নেটওয়ার্কটি আক্রমণ করতে চায় তাদের সহ যারা আগ্রহী হতে পারে, বিকেন্দ্রীভূত নেটওয়ার্কটি ডিজাইন করার সময় প্রতিটি অংশগ্রহণকারীর দৃষ্টিভঙ্গি থেকে তাদের স্বার্থের বিষয়ে চিন্তা করতে হবে, যাতে নিয়ম মেনে চলার স্বার্থ সর্বাধিক হয় এবং নিয়ম লঙ্ঘনের ক্ষেত্রে ক্ষতি বা ঝুঁকি হয়।
তবে ডিজিটাল জগতে, একটি তথ্য প্রকাশের কোনও খরচ নেই, "লাভ" এবং "ক্ষতি" নেই, সুতরাং "লাভ" সংজ্ঞায়িত করার জন্য বাস্তব জগতে কিছু সংযোগ স্থাপন করা আবশ্যক। উদাহরণস্বরূপ, বিটকয়েন নেটওয়ার্কের ক্ষেত্রে, যদি আক্রমণকারীরা ব্লকচেইনের গতিপথকে কৃত্রিমভাবে পরিবর্তন করতে চায় তবে এটি অন্য সমস্ত খনিজদের তুলনায় উচ্চতর কম্পিউটিং শক্তির প্রয়োজন।
সুতরাং বিকেন্দ্রীভূত নেটওয়ার্কে, সমস্ত সমস্যা "প্রযুক্তি" দ্বারা সমাধান করা হয় না, যেখানে প্রযুক্তি পৌঁছতে পারে না, সেখানে লাভের মাধ্যমে, অর্থনৈতিক উদ্দীপনা দ্বারা সমাধান করা উচিত। এছাড়াও, "অর্থনৈতিক উদ্দীপনা" এর প্রয়োজনের কারণে, ইথেরিয়ামে একটি ওয়ালেট সিস্টেম রয়েছে (মুদ্রা ইউনিটটি "ইথার" নামে পরিচিত) যেখানে প্রতিটি ব্যবহারকারীর কাছে একটি ওয়ালেট ঠিকানা রয়েছে যা এর একমাত্র আইডি হিসাবে রয়েছে, যা বিটকয়েনের সাথে তুলনামূলকভাবে অনুরূপ।
"কন্ট্রাক্ট" হল ইথেরিয়ামের সবচেয়ে গুরুত্বপূর্ণ ধারণা। বিটকয়েনে, সমস্ত ঠিকানা একটি ব্যবহারকারীর অন্তর্গত। যখন আমরা "ব্যবহারকারী" বলি, তখন আমরা আসলে একটি পাবলিক এবং প্রাইভেট কী সম্পর্কে কথা বলি। কিন্তু ইথেরিয়ামে, একটি কী দ্বারা মালিকানাধীন ঠিকানার পাশাপাশি, "কোড" দ্বারা মালিকানাধীন একটি ঠিকানা রয়েছে, যা "কন্ট্রাক্ট"। চুক্তিটি ব্যবহারকারীর দ্বারা প্রকাশিত হয়, এটি একটি কোড যা প্রকাশের পরে সংশোধন করা যায় না।
ইথেরিয়ামের অফিসিয়াল ক্লায়েন্টের মধ্যে একটি মাল্টি-হোল্ডিং ওয়ালেট তৈরি করার একটি বৈশিষ্ট্য রয়েছেঃ
উদাহরণস্বরূপ, এই বৈশিষ্ট্যটি একটি মানিব্যাগের ঠিকানা তৈরি করতে পারে যা অন্য 2 জনের সাথে ভাগ করা হয়, যার মধ্যে প্রত্যেকে প্রতিদিন 100 ইথার ব্যবহার করতে পারে। যদি এই সীমা অতিক্রম করা হয় তবে অন্য ব্যক্তির সম্মতিতে এটি করতে হবে।
এই বৈশিষ্ট্যটি আসলে একটি চুক্তি তৈরি করে, এবং উপরের যুক্তিটি চুক্তির কোড দ্বারা বর্ণিত। যখন আপনি এই ভাগ করা মানিব্যাগ থেকে ব্যয় করতে চান, তখন আপনাকে এই ভাগ করা মানিব্যাগের কাছে একটি বার্তা পাঠাতে হবে (ট্রানজেকশন হল বার্তা, লেনদেনের পরিমাণ শূন্য হতে পারে, কেবল ডেটা বহন করে) এবং তারপর ভাগ করা মানিব্যাগের কোডটি কার্যকর হবে, যদি এই ব্যয় অনুরোধটি উপরের যুক্তি অনুসারে হয় তবে প্রকৃত ব্যয় লেনদেন শুরু হয়, অন্যথায় এই ব্যয় অনুরোধটি প্রকৃত ব্যয় ছাড়াই প্রত্যাখ্যান করা হবে।
আরেকটি উদাহরণ হ'ল "হ্যাজিং চুক্তি", যেখানে কেউ কেউ বলেছে যে বিটকয়েন ডিজিটাল মুদ্রা হিসাবে এর মুদ্রা মূল্য (এবং বৈধ মুদ্রার বিনিময় হার) অস্থির, প্রায়শই দিনের মধ্যে মুদ্রার মূল্য দ্বিগুণ বা দ্বিগুণ হয়ে যায়, তবে চুক্তির মাধ্যমে একটি হেজিং চুক্তি বাস্তবায়িত হলে এটি কিছুটা সমাধান করা যেতে পারে।
আমরা যাকে মুদ্রার মান স্থিতিশীল রাখতে চাই তাকে "ঝুঁকি এড়ানো" বলে থাকি, আর যাকে মুদ্রার মান পরিবর্তনের ঝুঁকি নিতে এবং তা থেকে লাভবান হতে ইচ্ছুক তাকে "ঝুঁকি গ্রহণকারী" বলে থাকি, যাতে তারা একটি পরিমাণ (যেমন 1000 CNY) এবং একটি সময় উইন্ডো (যেমন এক মাস) নিয়ে চুক্তি করতে পারে এবং একটি চুক্তি তৈরি করতে পারে যা নিম্নলিখিত যুক্তি অনুসরণ করেঃ
যদি ইথেরের মূল্য বৃদ্ধি পায়, তবে ঝুঁকি গ্রহণকারীরা লাভবান হয়, যদি ইথেরের মূল্য হ্রাস পায়, তবে ঝুঁকি গ্রহণকারীরা সর্বদা ক্ষতিগ্রস্থ হয় না। অবশ্যই, ঝুঁকি গ্রহণকারী এবং ঝুঁকি গ্রহণকারীরা একটি "অনুরোধ ফি" প্রদান করতে পারেন যা ঝুঁকি গ্রহণকারীরা প্রদান করতে হবে, বা ঝুঁকি গ্রহণকারীরা 1000 CNY এর চেয়ে কয়েক গুণ বেশি গ্যারান্টি প্রদান করতে হবে (উচ্চতর গুণমানের সাথে ঝুঁকি গ্রহণ করা যেতে পারে) ।
উপরের উদাহরণে একটি সমস্যা রয়েছে যা খুব ভালভাবে সমাধান করা যায় না, ইথার এবং শর্তসাপেক্ষ মুদ্রার মধ্যে বিনিময় হার কীভাবে নির্ধারণ করা যায়, যা আমরা আগে উল্লেখ করেছি যে চুক্তিগুলি কেবল ব্লকচেইনের ডেটা অ্যাক্সেস করতে পারে, এবং শর্তসাপেক্ষ মুদ্রা হ'ল ভৌত জগতের ডেটা যা ক্রিপ্টোগ্রাফিক জগতের পরিবর্তে বিদ্যমান। আমাদের কোনও প্রক্রিয়া দ্বারা এই ধরণের "অ-ক্রিপ্টোগ্রাফিক জগতের ডেটা" ব্লকচেইনে আনতে হবে।
আমরা আরেকটি কন্ট্রাক্ট ডিজাইন করতে পারি যা এই লজিকটি নির্দিষ্ট করে, যা ইথার এবং বৈধ মুদ্রার মধ্যে বিনিময় হারকে বাস্তব জগতে সংগ্রহ করে, প্রতিটি সময় উইন্ডোতে (যেমন এক ঘন্টা):
যে কোন অংশগ্রহণকারীর জন্য, অন্যের অফার জানার কারণে, একটি বাস্তব বিনিময় জমা দেওয়ার ক্ষেত্রে পুরষ্কার পাওয়ার সম্ভাবনা বেশি, যখন একটি অদ্ভুত বিনিময় জমা দেওয়ার ক্ষেত্রে গ্যারান্টি হারানোর সম্ভাবনা বেশি।
অবশ্যই, এই নিয়মের মধ্যে কয়েকটি ত্রুটি রয়েছে, যেমন, যদি একজন ব্যক্তির খুব বেশি সিকিউরিটি থাকে, তবে তিনি গড়কে একটি উচ্চ বা কম মূল্যে তুলনা করতে পারেন যা প্রকৃত বিনিময় হারের চেয়ে কম, এবং একই সাথে পুরষ্কার পেতে পারেন এবং সঠিক বিনিময় হার সরবরাহকারী অন্য কিছু লোককে সিকিউরিটি হারাতে পারেন। কিন্তু বাস্তবেও একই জিনিস, যদি আপনার খুব বেশি অর্থ থাকে তবে আপনি একইভাবে পণ্যের দাম বাড়িয়ে তুলতে পারেন বা চাপিয়ে দিতে পারেন, তবে বাস্তব জগতের তুলনায়, ই-মুদ্রার আয়তন খুব ছোট এবং এটি করার জন্য খুব বেশি অর্থের প্রয়োজন হয় না; তবে আসলে এইভাবে মন্দভাবে উচ্চতর বা চাপিয়ে দেওয়ার হারটিও খুব বড় ঝুঁকিপূর্ণ, কারণ আপনি নিশ্চিত নন যে আপনি যথেষ্ট পরিমাণে সিকিউরিটি প্রদান করেছেন এবং ব্যর্থ হলে আপনি সমস্ত সিকিউরিটি হারাবেন।
আরেকটি ত্রুটি হল যে, "যে কেউ কন্ট্রাক্টের জন্য একটি ক্রেডিট জমা দিতে পারে এবং একটি মুদ্রা সরবরাহ করতে পারে"। এই পদক্ষেপটি একটি লেনদেন তৈরি করে করা হয়, এবং সমস্ত লেনদেন ব্লকচেইনে লেখা হয়, তাই আপনি যে মুদ্রা জমা করেন তা অন্যদের কাছে দৃশ্যমান হয়, যা ক্ষতিকারক আক্রমণকারীদের জন্য আরও সুযোগ তৈরি করে। আমি একটি উদাহরণ দিয়ে কীভাবে এই সমস্যাটি এড়ানো যায় তা দেখাবঃ "এলোমেলো সংখ্যার উত্পাদন"।
আমরা আগেই বলেছি যে Contract ব্লকচেইনের ডেটা পড়তে পারে, কিন্তু ব্লকচেইনের ডেটা নিশ্চিত, যদি আমরা জুয়া খেলার মতো একটি অ্যাপ্লিকেশন তৈরি করতে চাই, তাহলে আমরা কিভাবে একটি র্যান্ডম সংখ্যা পাব?
একটি র্যান্ডম সংখ্যার উত্স হ'ল পরবর্তী ব্লকের হ্যাশ, এবং বেশিরভাগ ক্ষেত্রে, এই ধরণের র্যান্ডমতা যথেষ্ট। তবে সত্যটি হ'ল খনিজ এই র্যান্ডম সংখ্যাটিকে কিছুটা নিয়ন্ত্রণ করতে পারে। ধরে নেওয়া যাক যে কোনও খনিতে অংশগ্রহণকারী একটি জুয়া খেলায় অংশ নিয়েছে এবং জুয়া খেলার লাভটি একটি ব্লকের লাভের চেয়ে বেশি, তবে যদি এই খনিজ খনিজ একটি ব্লক খনিজ করে যা তাকে জুয়া খেলার ক্ষতি করবে, তবে স্পষ্টতই এই খনিজটি নতুন ব্লকটি প্রকাশ না করার সিদ্ধান্ত নিয়েছে, যা একক খনিজ ব্যক্তির কম্পিউটিং শক্তির ক্ষেত্রে আরও স্পষ্ট।
সুতরাং আমাদেরকে এমন একটি প্রক্রিয়া চালু করতে হবে যা মুদ্রা সংগ্রহের মতো, যাতে আমরা র্যান্ডম সংখ্যা সংগ্রহ করতে পারি এবং তারপর প্রতিটি সময় উইন্ডোর শেষে এই বীজগুলি ব্যবহার করে একটি র্যান্ডম সংখ্যা গণনা করতে পারি। কিন্তু মুদ্রা সংগ্রহের মতো, যেহেতু অংশগ্রহণকারীরা একটি লেনদেন তৈরি করে বিনিময় হার জমা দেয়, তাই একটি সময় উইন্ডোর মধ্যে, প্রত্যেকের জমা দেওয়া র্যান্ডম সংখ্যা অন্যদের কাছে দৃশ্যমান, সুতরাং একজন ব্যক্তি যিনি ইতিমধ্যে একটি জুয়া খেলায় অংশ নিয়েছেন তিনি সাবধানে একটি র্যান্ডম সংখ্যা নির্বাচন করতে পারেন যাতে অন্যরা জমা দেওয়া বীজগুলি যুক্ত করে এবং র্যান্ডম নতুন সংখ্যাটি তার প্রত্যাশার সাথে সামঞ্জস্য করে।
সুতরাং, আমাদের বীজ সংগ্রহের উইন্ডোকে দুটি ভাগে বিভক্ত করা দরকার যাতে আমরা এমন একটি র্যান্ডম সংখ্যা পেতে পারি যা কেউ পূর্বাভাস দিতে পারে না এবং হস্তক্ষেপ করতে পারে নাঃ
প্রথম ধাপে, আপনি কেবল অন্যদের জমা দেওয়া বীজের স্টেট ভ্যালু জানেন, প্রকৃত বীজ জানেন না, এবং তাই ফলাফলের সাথে হস্তক্ষেপ করার জন্য একটি বীজ তৈরি করতে পারবেন না; দ্বিতীয় ধাপে, সবাই কেবল প্রথম ধাপে জমা দেওয়া বীজটি নিশ্চিত করে, নতুন জমা দেয় না, এবং অন্যদের বীজ জমা দেওয়া বন্ধ করতে পারে না।
আমরা আগে উল্লেখ করেছি যে বিটকয়েন স্ক্রিপ্ট লুপিং, পুনরাবৃত্তি, ঝাঁপ দেওয়া ইত্যাদির ক্ষমতা দেয় না, সম্ভবত বিটকয়েন একটি নির্দিষ্ট সময়ের বিটকয়েন স্ক্রিপ্ট এক্সিকিউশন নিয়ন্ত্রণের জন্য, কারণ টুরিংয়ের "স্টপ থিওরি" অনুসারে, টুরিংয়ের সম্পূর্ণ প্রোগ্রামিং ভাষার দ্বারা লিখিত প্রোগ্রামগুলি কেবল স্ট্যাটিক বিশ্লেষণের দৃষ্টিকোণ থেকে সর্বদা সিদ্ধান্ত নিতে পারে না যে এটি সীমিত ধাপের পরে শেষ হবে কিনা, যাতে নির্ভরযোগ্য ক্ষতিকারক আক্রমণকারীরা খনির স্বাভাবিক কাজকে ব্যাহত করার জন্য একটি মৃত চক্র সৃষ্টি করবে এমন একটি লেনদেন তৈরি করতে পারে।
ইথেরিয়াম আবারও এই সমস্যাটিকে "অর্থনৈতিক উদ্দীপনা" দিয়ে ঘুরিয়ে দেয়, কন্ট্রাক্টটি ওপকোড (অপারেটিং কোড) এর আকারে একটি ভার্চুয়াল মেশিনে চলে, যা ইথেরিয়াম ভার্চুয়াল মেশিন নামে পরিচিত। ইভিএম একটি স্ব-চার্জযুক্ত ভার্চুয়াল মেশিন, যা EVM এর মানদণ্ডে প্রতিটি অপকোড দ্বারা ব্যবহৃত গ্যাসকে অপারেটিং মেমরি এবং সিপিইউ সময়ের উপর ভিত্তি করে সংজ্ঞায়িত করে, যা ইথার দ্বারা কেনা একটি কম্পিউটিং সম্পদ। পূর্বে উল্লিখিত হিসাবে, যখন কোনও লেনদেনের লক্ষ্য চুক্তি হয়, তখন চুক্তির কোডটি কার্যকর করা হয়, লেনদেনের সূত্রপাতকারীরা চুক্তির কার্যকরকরণের সময় ব্যবহৃত গ্যাসটির জন্য অর্থ প্রদান করে এবং "সর্বোচ্চ পরিমাণ গ্যাস যা তারা দিতে ইচ্ছুক" বলে ঘোষণা করে, যদি মধ্যম পথটি শেষ হয়ে যায় তবে চুক্তিটি কার্যকর করা বন্ধ হয়ে যায়।
তারপর আমরা আবার আলোচনা করব "সমঝোতা ব্যবধান" নিয়ে, যেটা আমি আগে উল্লেখ করেছি যে বিটকয়েন প্রতি ১০ মিনিটে একটি নতুন ব্লক তৈরি করে, অর্থাৎ পুরো নেটওয়ার্ক প্রতি ১০ মিনিটে একটি "সমঝোতা" অর্জন করে, তাই সাধারণ বিটকয়েন লেনদেন নিশ্চিত হওয়ার জন্য কয়েক মিনিট অপেক্ষা করতে হয়, যদি না খুব বেশি কম্পিউটিং শক্তি থাকে, তাহলে এক ঘন্টা অপেক্ষা করতে হবে (৬টি ব্লক) এবং সবাই বিশ্বাস করবে যে লেনদেনটি নির্ভরযোগ্য।
স্পষ্টতই, স্বল্পতর সমঝোতা সময় ব্যবহারকারীদের জন্য একটি ভাল অভিজ্ঞতা প্রদান করে, কেন বিটকয়েন ব্লক সময়কে সংক্ষিপ্ত করে না? এটি কারণ দ্রুততর সমঝোতা সময়সীমা "কেন্দ্রীয় খনি" এর সুবিধাগুলি কিছুটা বাড়িয়ে তুলবে। "খনি" বলতে বোঝায় যে বিটকয়েন খনির খনির একত্রিত হওয়া, খনির নির্দেশাবলী শর্তহীনভাবে মেনে চলা, এবং অবশেষে খনির সাথে লাভ ভাগ করে নেওয়ার বিষয়ে চুক্তি করা।
যখন একজন খনিজীবী A একটি নতুন ব্লক বের করে, তখন তিনি এই ব্লকটি ছড়িয়ে দেন, অন্যরা এই বার্তাটি পাওয়ার পর অবিলম্বে এই নতুন ব্লকটির উপর কাজ শুরু করে; অন্যরা "A নতুন ব্লক বের করে" এবং "A দ্বারা প্রচারিত বার্তা গ্রহণের" মধ্যে সময় গণনা করে, যা আসলে নষ্ট হয়ে যায়, যখন কেন্দ্রীভূত পুকুরের অন্যান্য খনিজীবীরা এই সমস্যা হবে না, কারণ তারা দ্রুত নতুন ব্লকের তথ্য পেতে পারে এবং অবিলম্বে নতুন ব্লকের ভিত্তিতে কাজ শুরু করতে পারে।
এই সম্প্রচারের সময় দশ সেকেন্ডেরও বেশি হতে পারে, যা ১০ মিনিটের জন্য খুব গুরুত্বপূর্ণ নয়, তবে যদি আপনি সম্মতি ব্যবধানটি সংক্ষিপ্ত করেন তবে কেন্দ্রীভূত খনির সুবিধাগুলি আরও স্পষ্ট হবে। তবে ইথেরিয়াম "Uncle Block" ধারণাটি প্রবর্তন করে এই সমস্যাটি সমাধান করেছে, সম্মতি ব্যবধানটি 15 সেকেন্ডে হ্রাস করেছে, যা বিটকয়েনের তুলনায় অর্থ প্রদানের নিশ্চিতকরণের গতিতে একটি বড় উন্নতি করেছে।
বিটকয়েনের ব্লকচেইনে, একটি ব্লক কেবলমাত্র একটি পিতা ব্লক এবং একটি উপ-ব্লক থাকতে পারে; কিন্তু ইথেরিয়ামে, একটি নতুন উত্পাদিত ব্লক একটি পিতা ব্লক এবং কয়েকটি শ্বিল্ড ব্লক থাকতে পারে। উপরের উদাহরণে ফিরে যান, যদি A-তে একটি নতুন ব্লক খনন করা হয় তবে অন্যরা সম্প্রচারের সময় এটি গ্রহণ করেনি, তবে যদি কেউ একটি নতুন ব্লক খনন করে তবে সম্প্রচারের পরে এটি গ্রহণ করা হয়নি, তবে এই ব্লকটি পরবর্তী ব্লকের "শ্বিল্ড" হতে পারে। এই ব্লকের প্রতিনিধিত্বকারী কাজের পরিমাণ প্রমাণিত হবে যে এটি পরবর্তী ব্লকের অংশ হিসাবে বিবেচিত হবে ((যেমন, এই ব্যক্তির পরবর্তী ব্লক খনন করার অসুবিধা হ্রাস পেয়েছে), শ্বিল্ডটি কেবলমাত্র কাজের পরিমাণ প্রমাণ দেয়, যার মধ্যে থাকা লেনদেনগুলি অকার্যকর। এটি আরও বেশি সময় পরে সম্প্রচারিত ক্লায়েন্টের অসুবিধার জন্য ক্ষতিপূরণ দেয়, বিশেষত, শ্বিল্ডের কাজের পরিমাণের 25% প্রত্যয়িত করে, যা এই শ্রেণীর সর্বাধিক পাঁচটি প্রজন্মের শ্বিল্ডকে স্বীকৃতি দেয়।
ছবি থেকেhttps://blog.ethereum.org/2014/07/11/toward-a-12-second-block-time
পরবর্তী অংশে, আমি ইথেরিয়ামের কিছু সমস্যা সম্পর্কে আলোচনা করব যা এখনও সমাধান করা হয়নি।
প্রথমত, ইথেরিয়ামের বর্তমান কনসেনসেন্স পদ্ধতিটি বিটকয়েনের মতোই POW (ওয়ার্কওভারের প্রমাণ) দ্বারা গ্যারান্টিযুক্ত, কেবলমাত্র নির্দিষ্ট পরিমাণে কাজ সম্পন্ন নোটগুলি ব্লকের উত্পাদনে অংশ নিতে পারে। ওয়ার্কওভারের সমস্যাটি হ'ল নেটওয়ার্কের সুরক্ষা নিশ্চিত করার জন্য প্রচুর পরিমাণে কম্পিউটার শক্তি অপচয় করা হয়, যদিও এটি আমাদের উপরে উল্লিখিত "অর্থনৈতিক উদ্দীপনা" ধারণার উপর ভিত্তি করেও উন্নত করা যেতে পারে। Ehtereum মনে করে আরও ভাল উপায় হল POS (মালিকত্বের প্রমাণ) এর পরিবর্তে ওয়ার্কওভারের প্রমাণ, যা নেটওয়ার্কের দক্ষতা ব্যাপকভাবে উন্নত করতে পারে।
যদি ইথার নিজেই মূল্যবান হয়, তাহলে কেন ইথারকে অর্থনৈতিক প্রণোদনা হিসাবে ব্যবহার করা হয় না? POS মানে হল যে, আপনি আপনার ইথার দিয়ে গ্যারান্টি দিতে পারেন যে, ব্লক তৈরিতে অংশগ্রহণ করতে চান এমন প্রত্যেকটি নোড (ঐতিহ্যগতভাবে খনির অর্থ) যাচাইকারী নামে পরিচিত) সিস্টেমের কাছে একটি গ্যারান্টি প্রদান করতে হবে। এই সিস্টেমটি একটি চুক্তিতে উল্লেখ করা হয়েছে, যেখানে সমস্ত নোড এই গ্যারান্টিটিকে "ফ্রিজ" বলে মনে করে।
এই মডেলটি আসলে POW এর সাথে খুব মিল আছে, যেখানে POW-তে, খনিজীবীরা তাদের নিজস্ব কম্পিউটার শক্তি ব্যবহার করে "বাজি" রাখে এবং যদি একবার একটি চেইন দীর্ঘ হয়, তবে এটি এই চেইনে স্যুইচ করা প্রয়োজন যাতে তারা খনির কাজ চালিয়ে যেতে পারে।
POS অবশ্যই পুরো নেটওয়ার্কের ট্যাটাউড বৃদ্ধি করবে। এখন আর কোন অর্থহীন গণনার মাধ্যমে সমঝোতা করার প্রয়োজন নেই, প্রতিটি নোডের গণনার পরিমাণ চুক্তিতে কোড সম্পাদন এবং ডেটা যাচাইয়ের গণনার পরিমাণের কাছাকাছি আসবে।
অবশ্যই, পিওএস এখনও গ্রহণ করা হয়নি কারণ কিছু সমস্যা এখনও সমাধান করা হয়নি, যার মধ্যে একটি হ'ল পিওডব্লিউ-র মতো ৫১% আক্রমণ সমস্যা, যেখানে পিওডব্লিউ-তে পুরো নেটওয়ার্কের ৫১% কম্পিউটিং ক্ষমতা নির্দিষ্ট শারীরিক সীমাবদ্ধতা রয়েছে। পিওডব্লিউ-তে কম্পিউটিং পাওয়ারের জন্য কম্পিউটিং ডিভাইস সরবরাহ করা প্রয়োজন; এর বিপরীতে পিওএস-এ পুরো নেটওয়ার্কের ৫১% ইথার সংগ্রহ করা তুলনামূলকভাবে সহজ। যদি আপনার পর্যাপ্ত অর্থ থাকে। পিওএস অবশ্যই পিওডব্লিউ-র চেয়ে কম জটিল নয়।
আরেকটি বিষয় হল "স্কিপিং" (বিট্টোইন বা ইথেরিয়াম উভয়ই একই ব্লকচেইনে সমস্ত লেনদেন নিশ্চিত করে) । এটি একটি বিতরণ নেটওয়ার্কের কম্পিউটিং ক্ষমতাকে ব্যাপকভাবে সীমাবদ্ধ করে। প্রতিটি নোডকে প্রতিটি লেনদেন গ্রহণ, সঞ্চয় এবং বৈধকরণ করতে হবে। পুরো নেটওয়ার্কের প্রসেসিং ক্ষমতা একক নোডের প্রসেসিং ক্ষমতা সমান।
সুতরাং ইথেরিয়াম ভবিষ্যতে একটি "স্লিপিং" প্রক্রিয়া প্রবর্তন করতে চায়, যাতে পুরো নেটওয়ার্ককে বিভিন্ন অংশে বিভক্ত করা যায় এবং তাদের মধ্যে স্বতন্ত্রভাবে লেনদেন যাচাই করা যায়। তবে স্লিপিংয়ের মধ্যে পয়েন্টারগুলির কাঠামোর মাধ্যমে অন্যান্য স্লিপিংয়ের ডেটা উল্লেখ করা হবে, অ্যাসিনক্রোনিক কলের মাধ্যমে অন্যান্য স্লিপিংগুলিকে প্রভাবিত করবে, তাই পুরো নেটওয়ার্কটি ব্যবহারকারীর দৃষ্টিতে এখনও একক, তবে পুরো নেটওয়ার্কের প্রক্রিয়াকরণ ক্ষমতা খুব শক্তিশালী প্রসারণযোগ্য হবে। বর্তমানে সীমিত স্লিপিং সম্পর্কিত বাস্তবায়নগুলি তুলনামূলকভাবে প্রাথমিক বিকাশের পর্যায়ে রয়েছে, তাই আমি যে তথ্য পেয়েছি তা খুব বেশি নয়।
এই অংশে আমি আপনাদের দেখাবো কিছু বাস্তব, কার্যকর কন্ট্রাক্ট কোড। কন্ট্রাক্টগুলি অনেকগুলি প্যাটার্ন ভাষার দ্বারা লিখিত হতে পারে, যা শেষ পর্যন্ত EVM-এ অপকোডে সংকলিত হবে। আজ আমরা Solidity-এর জাভাস্ক্রিপ্ট ভাষাটি বেছে নিয়েছি, যা বর্তমানে সবচেয়ে ভালভাবে রক্ষণাবেক্ষণ করা একটি EVM ভাষা।
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
জটিল ডেটা কাঠামো ঘোষণা করা; এছাড়াও ফাংশনগুলি সংজ্ঞায়িত করা যায়, যা লেনদেনের প্রাপ্তির সময় কার্যকর করা হয়, লেনদেনের সূত্রপাতকারীরা বেছে নিতে পারে যে কোন ফাংশনগুলি কার্যকর করা হয়, সুতরাং একটি চুক্তি বেশ কয়েকটি ফাংশন সরবরাহ করতে পারে, যার মধ্যে ফাংশনগুলির মধ্যে লজিক্যাল বিচার, লুপিং, সংশোধন এবং মান পরিবর্তন করা যেতে পারে।
ভাষাটিতে কিছু খুব সুবিধাজনক ছোট বৈশিষ্ট্য রয়েছে, যেমন একটি সাধারণ ক্রিপ্টোগ্রাফিক অ্যালগরিদম (((sha256
), ইউনিট বিনিময় ((10 finney
) ⇒ সরাসরি আপনার মানিব্যাগের ঠিকানা লিখুন (((0x72ba7d8e73fe8eb666ea66babc8116a41bfb10e2
(হাসি)msg
এটি একটি বিল্ট-ইন গ্লোবাল ভেরিয়েবল যা এই লেনদেনের সাথে সম্পর্কিত তথ্য যেমন প্রবর্তক, পরিমাণ ইত্যাদি পড়তে পারে।delegatecall
এটি অন্য চুক্তির কোডকে বর্তমান প্রেক্ষাপটে কার্যকর করার সমতুল্য, যেমন একটি পুস্তিকা ফাংশন প্রবর্তন করা;call
এটি একটি নতুন লেনদেন শুরু করার যুক্তি যা অন্য একটি চুক্তির সূচনা করে।
তাহলে কিভাবে কন্ট্রাক্ট ব্লকচেইন থেকে ডাটা পড়তে এবং লিখতে পারে? এই জটিল কাজটি "স্টেট ভেরিয়েবল" এর জন্য বিমূর্ত করা হয়, যার উপরে স্টোরেজড ডেটা হল একটি স্টেট ভেরিয়েবল। আসলে কন্ট্রাক্ট এক্সিকিউশন চলাকালীন স্টেট ভেরিয়েবলের পরিবর্তনগুলি ব্লকচেইনে সংরক্ষণ করা হয় না, কারণ কন্ট্রাক্ট এক্সিকিউশন হল একটি অনিশ্চয়তার গণনা।
এখন আমি একটি বাস্তব ব্যবহারযোগ্য চুক্তি প্যানেল দেখাব যা ইথেরিয়াম নেটওয়ার্কের উপর ভিত্তি করে একটি নিজস্ব টোকেন প্রকাশ করবেঃ
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(এমআইটি)
কয়েন নামক এই চুক্তিটি দুটি অবস্থা পরিবর্তনশীল ঘোষণা করে।minter
এই টোকেনটির স্রষ্টা এই ফাংশনটি তৈরি করেছেন।function Coin()
) যা এই ভেরিয়েবলকে প্রথম চুক্তি তৈরির জন্য ব্যবহৃত লেনদেনের প্রবর্তকের মান প্রদান করে; এটি একটি মানচিত্রের মানচিত্রও ঘোষণা করে যা একটি মানিব্যাগের ঠিকানা থেকে সংখ্যা পর্যন্ত।balances
এই টোকনটি ব্যবহার করা হয়, যা প্রতিটি টোকনধারী ব্যক্তির ঠিকানার ব্যালেন্সকে নির্দেশ করে।
mint
এই ফাংশনটি প্রথমে সিদ্ধান্ত নেয় যে লেনদেনের সূত্রপাতকারী এই টোকেনের স্রষ্টা কিনা, এবং যদি তা হয় তবে ফাংশনের পরামিতি অনুসারে নির্দিষ্ট সংখ্যক টোকেন নির্দিষ্ট ঠিকানায় যোগ করা হয়।send
এই ফাংশনটি সবার দ্বারা কল করা যেতে পারে, যা লেনদেনের সূত্রপাতকারীর ঠিকানা থেকে একটি নির্দিষ্ট পরিমাণ ভারসাম্য (যদি পর্যাপ্ত ভারসাম্য থাকে) কেটে দেয় এবং লক্ষ্য ঠিকানায় যোগ করে, যা একটি স্থানান্তরের কার্যকারিতা।
আমরা একটি ঘোষণাও করেছি।Sent
ইভেন্টগুলি আসলে কোনও কার্যকর ভূমিকা পালন করে না, কেবল ডিবাগিংয়ের সময় গুরুত্বপূর্ণ ইভেন্টগুলি মুদ্রণ করা সহজ, যা ভবিষ্যতে হালকা ক্লায়েন্টের বাস্তবায়নকে সহজ করে তুলবে ((হালকা ক্লায়েন্টগুলি কেবল ইভেন্টগুলি গ্রহণ করে এবং প্রকৃতপক্ষে চুক্তি সম্পাদন করে না) ।) ।
ইথেরিয়াম এই কোডটি ডিবাগ করার জন্য মিক্স নামে একটি আইডিই সরবরাহ করে। মিক্সের ডানদিকে আপনি আপনার চুক্তি পরীক্ষা করতে ব্লক এবং অ্যাকাউন্ট তৈরি করতে পারেন এবং এটি সম্পাদনের সময় প্রতিটি অবস্থা ভেরিয়েবলের মানের পরিবর্তন দেখতে পারেন। এটি উল্লেখ করা মূল্যবান যে চুক্তিটি প্রকাশের পরে এটি পরিবর্তন করা যায় না এবং এর পরে এটি সম্পূর্ণরূপে অন্য কারও লেনদেনের দ্বারা ট্রিগার করা হয়। এটি প্রতিদিন বাগ লেখার প্রোগ্রামারদের পক্ষে খুব বিরক্তিকর হতে পারে, তবে চুক্তিটির অর্থ হ'ল "চুক্তি" যা আপনি যদি কোনও চুক্তি প্রকাশ করেন তবে এটি স্বাভাবিকভাবেই সংশোধন করতে পারবেন না। অবশ্যই আপনি নিজের চুক্তিতে কিছু বিশেষাধিকার দিতে পারেন (যেমন পূর্ববর্তী মুদ্রার ক্ষেত্রে, কেবলমাত্র স্রষ্টাই মুদ্রা তৈরি করতে পারেন), তবে এই কোডগুলি ব্লকচেইনে বিদ্যমান এবং অন্যান্য ব্যবহারকারীরা এটি জানেন।
আমরা ইথেরিয়াম ওয়ালেটে এই চুক্তিটি প্রকাশ করতে পারিঃ
এই চুক্তিটি প্রকাশের পর আপনি এই চুক্তিটি অনুসরণ করতে পারেন এবং এর বিস্তারিত ইন্টারফেসটি দেখতে পারেনঃ
বাম দিকে আপনি দেখতে পাচ্ছেন দুইটি অবস্থা ভেরিয়েবলের মান।minter
আমি আমার নিজের ঠিকানাটি ব্যবহার করি।balances
এটি একটি ম্যাপিং টেবিল, তাই আপনি একটি ঠিকানা লিখতে পারেন তার ব্যালেন্স অনুসন্ধান করতে. ডানদিকে আপনি এই চুক্তিতে একটি নতুন লেনদেন শুরু করতে পারেন, একটি ড্রপ ডাউন মেনু রয়েছে যা আপনি নির্বাচন করতে পারেনsend
অথবাmint
ফাংশন, আপনি Contract-এ পাস করার জন্য একটি পরামিতি পূরণ করতে পারেন। এখানে আমরা যেহেতু একটি লেনদেন পাঠানোর উদ্দেশ্য একটি বার্তা পাঠানো, Ether পাঠানো নয়, তাই আমাদের লেনদেনের পরিমাণ সেট করতে হবে না।
এখন আমি একটি খুব মজার চুক্তির কথা বলব, যেটি একটি "পন্টিস জালিয়াতি" কার্যকর করে, যেখানে আপনি এই চুক্তিতে যোগদানের জন্য 1 ইথার দিতে পারেন, এবং তারপর প্রতি তিনজন যোগদানকারীকে প্রথম যোগদানকারীকে 3 ইথার দেওয়া হবেঃ
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
কোডটি খুবই সহজ, এই Contract একটি কন্ট্রাক্ট ঘোষণা করেparticipants
অ্যারেটি সমস্ত অংশগ্রহণকারীদের মানিব্যাগের ঠিকানাগুলিকে ক্রমানুসারে সঞ্চয় করতে ব্যবহৃত হয়, অথবা একটিpayoutIdx
এটি রেকর্ড করার জন্য ব্যবহৃত হয় যে কতজন অংশগ্রহণকারী 3 ইথার ফেরত পেয়েছে।enter
এই কন্ট্রাক্টের মূল কার্যকারিতা হল প্রথমে কিছু পরামিতি পরীক্ষা করা যা প্রতিটি অংশগ্রহণকারীর জন্য 1 ইথার প্রদান করে এবং তারপর নতুন অংশগ্রহণকারীকে প্রবেশের অনুমতি দেয়।participants
অ্যারে শেষে, শেষ পর্যন্ত, যদি বর্তমান অংশগ্রহণকারীর প্রথম সংখ্যাটি 3 এর গুণ হয়, তাহলে 3 Ether পাঠানো হবে।payoutIdx
এই ভিডিওটি একটি ভিডিওতে প্রকাশিত হয়েছে।payoutIdx
Next articleঅন্যায়কারীদের বিরুদ্ধে মামলা!
হ্যাশট্রি:
বিটকয়েনঃ
থামানোর সমস্যাঃ
ইথেরিয়ামঃ
ইথেরিয়াম নেটওয়ার্কঃ
ইথেরিয়ামের পরবর্তীঃ
চুক্তিঃ
কনট্রাক্ট আইডিইঃ
উদ্ভাবকগণ - ক্যোটিফিকেশন - ছোট্ট স্বপ্নআমি সম্পূর্ণরূপে অন্ধ হয়ে গেছি, আমি কেবল বুঝতে পারি, খুব কমই বুঝতে পারি।
শাওয়ানচুয়ানআসলে আমার বস বিটিসি এবং ইটিএইচ নিয়ে গবেষণা করতে গিয়েছিলেন।
মোমোক্সঅজানা