স্মার্ট কন্ট্র্যাক্টের ভূমিকা
পৃষ্ঠাটি সর্বশেষ আপডেট করা হয়েছে: ২৫ ফেব্রুয়ারী, ২০২৬
স্মার্ট কন্ট্র্যাক্ট কি?
"স্মার্ট কন্ট্র্যাক্ট" হলো একটি প্রোগ্রাম যা Ethereum ব্লকচেইনে চলে। এটি কোড (এর ফাংশন) এবং ডেটা (এর স্টেট)-এর একটি সংগ্রহ যা Ethereum ব্লকচেইনের একটি নির্দিষ্ট ঠিকানায় থাকে।
স্মার্ট কন্ট্র্যাক্ট হলো এক ধরনের Ethereum অ্যাকাউন্ট। এর মানে হলো তাদের একটি ব্যালেন্স আছে এবং লেনদেনের লক্ষ্য হতে পারে। তবে এগুলো কোনো ব্যবহারকারী দ্বারা নিয়ন্ত্রিত হয় না, বরং এগুলো নেটওয়ার্কে স্থাপন করা হয় এবং প্রোগ্রাম অনুযায়ী চলে। ব্যবহারকারীর অ্যাকাউন্টগুলি তখন স্মার্ট কন্ট্র্যাক্টের সাথে ইন্টারঅ্যাক্ট করতে পারে এমন লেনদেন জমা দিয়ে যা স্মার্ট কন্ট্র্যাক্টে সংজ্ঞায়িত একটি ফাংশন সম্পাদন করে। স্মার্ট কন্ট্র্যাক্টগুলি একটি নিয়মিত চুক্তির মতো নিয়ম সংজ্ঞায়িত করতে পারে এবং কোডের মাধ্যমে স্বয়ংক্রিয়ভাবে সেগুলি প্রয়োগ করতে পারে। স্মার্ট কন্ট্র্যাক্ট ডিফল্টরূপে মুছে ফেলা যায় না এবং তাদের সাথে ইন্টারঅ্যাকশন অপরিবর্তনীয়।
পূর্বশর্ত
আপনি যদি সবে শুরু করেন বা একটি কম প্রযুক্তিগত ভূমিকা খুঁজছেন, আমরা আমাদের স্মার্ট কন্ট্র্যাক্টের ভূমিকা পড়ার পরামর্শ দিই।
স্মার্ট কন্ট্র্যাক্টের জগতে প্রবেশ করার আগে নিশ্চিত করুন যে আপনি অ্যাকাউন্ট, লেনদেন এবং ইথিরিয়াম ভার্চুয়াল মেশিন সম্পর্কে পড়েছেন।
একটি ডিজিটাল ভেন্ডিং মেশিন
নিক জাবো (opens in a new tab) দ্বারা বর্ণিত একটি ভেন্ডিং মেশিন সম্ভবত স্মার্ট কন্ট্র্যাক্টের জন্য সেরা রূপক। সঠিক ইনপুট দিলে, একটি নির্দিষ্ট আউটপুট নিশ্চিত।
একটি ভেন্ডিং মেশিন থেকে একটি স্ন্যাক পেতে:
1money + snack selection = snack dispensedএই যুক্তিটি ভেন্ডিং মেশিনে প্রোগ্রাম করা আছে।
একটি স্মার্ট কন্ট্র্যাক্ট, একটি ভেন্ডিং মেশিনের মতো, এর মধ্যে যুক্তি প্রোগ্রাম করা থাকে। এখানে একটি সহজ উদাহরণ দেওয়া হল যে এই ভেন্ডিং মেশিনটি যদি Solidity-তে লেখা একটি স্মার্ট কন্ট্র্যাক্ট হতো তবে কেমন দেখাতো:
1pragma solidity 0.8.7;23contract VendingMachine {45 // Declare state variables of the contract6 address public owner;7 mapping (address => uint) public cupcakeBalances;89 // When 'VendingMachine' contract is deployed:10 // 1. set the deploying address as the owner of the contract11 // 2. set the deployed smart contract's cupcake balance to 10012 constructor() {13 owner = msg.sender;14 cupcakeBalances[address(this)] = 100;15 }1617 // Allow the owner to increase the smart contract's cupcake balance18 function refill(uint amount) public {19 require(msg.sender == owner, "Only the owner can refill.");20 cupcakeBalances[address(this)] += amount;21 }2223 // Allow anyone to purchase cupcakes24 function purchase(uint amount) public payable {25 require(msg.value >= amount * 1 ether, "You must pay at least 1 ETH per cupcake");26 require(cupcakeBalances[address(this)] >= amount, "Not enough cupcakes in stock to complete this purchase");27 cupcakeBalances[address(this)] -= amount;28 cupcakeBalances[msg.sender] += amount;29 }30}সবকটি দেখুনযেভাবে একটি ভেন্ডিং মেশিন একজন বিক্রেতা কর্মচারীর প্রয়োজনীয়তা দূর করে, সেভাবেই স্মার্ট কন্ট্র্যাক্ট অনেক শিল্পে মধ্যস্থতাকারীদের প্রতিস্থাপন করতে পারে।
অনুমতিহীন
যে কেউ একটি স্মার্ট কন্ট্র্যাক্ট লিখতে এবং নেটওয়ার্কে এটি স্থাপন করতে পারে। আপনার শুধু একটি স্মার্ট কন্ট্র্যাক্ট ল্যাঙ্গুয়েজ-এ কোড করতে শেখা প্রয়োজন এবং আপনার কন্ট্র্যাক্ট স্থাপন করার জন্য যথেষ্ট ETH থাকতে হবে। একটি স্মার্ট কন্ট্র্যাক্ট স্থাপন করা প্রযুক্তিগতভাবে একটি লেনদেন, তাই আপনাকে গ্যাস দিতে হবে ঠিক যেমন একটি সাধারণ ETH স্থানান্তরের জন্য গ্যাস দিতে হয়। তবে, কন্ট্র্যাক্ট স্থাপনের জন্য গ্যাসের খরচ অনেক বেশি।
স্মার্ট কন্ট্র্যাক্ট লেখার জন্য Ethereum-এর ডেভেলপার-বান্ধব ভাষা রয়েছে:
- Solidity
- Vyper
তবে, এগুলি স্থাপন করার আগে কম্পাইল করতে হবে যাতে Ethereum-এর ভার্চুয়াল মেশিন কন্ট্র্যাক্টটিকে ব্যাখ্যা এবং সংরক্ষণ করতে পারে। কম্পাইলেশন সম্পর্কে আরও জানুন
কম্পোজেবিলিটি
স্মার্ট কন্ট্র্যাক্টগুলি Ethereum-এ পাবলিক এবং সেগুলিকে ওপেন API হিসাবে ভাবা যেতে পারে। এর মানে হল আপনি আপনার নিজের স্মার্ট কন্ট্র্যাক্টে অন্যান্য স্মার্ট কন্ট্র্যাক্টকে কল করতে পারেন যা সম্ভব তার পরিধিকে ব্যাপকভাবে প্রসারিত করতে। কন্ট্র্যাক্টগুলি এমনকি অন্যান্য কন্ট্র্যাক্টও স্থাপন করতে পারে।
স্মার্ট কন্ট্র্যাক্ট কম্পোজেবিলিটি সম্পর্কে আরও জানুন।
সীমাবদ্ধতা
স্মার্ট কন্ট্র্যাক্টগুলি একা "বাস্তব-বিশ্বের" ঘটনা সম্পর্কে তথ্য পেতে পারে না কারণ তারা অফচেইন উৎস থেকে ডেটা পুনরুদ্ধার করতে পারে না। এর মানে হল তারা বাস্তব জগতের ঘটনাগুলিতে সাড়া দিতে পারে না। এটি ডিজাইন দ্বারাই করা হয়েছে। বাহ্যিক তথ্যের উপর নির্ভর করা কনসেন্সাসকে বিপন্ন করতে পারে, যা নিরাপত্তা এবং বিকেন্দ্রীকরণের জন্য গুরুত্বপূর্ণ।
তবে, ব্লকচেইন অ্যাপ্লিকেশনগুলির জন্য অফচেইন ডেটা ব্যবহার করতে পারাটা গুরুত্বপূর্ণ। সমাধান হল ওরাকল যা এমন টুলস যা অফচেইন ডেটা গ্রহণ করে এবং স্মার্ট কন্ট্র্যাক্ট-এর জন্য উপলব্ধ করে।
স্মার্ট কন্ট্র্যাক্টের আরেকটি সীমাবদ্ধতা হল সর্বোচ্চ কন্ট্র্যাক্টের আকার। একটি স্মার্ট কন্ট্র্যাক্ট সর্বোচ্চ 24KB হতে পারে নতুবা এটি গ্যাসের অভাবে চলবে না। এটি The Diamond Pattern (opens in a new tab) ব্যবহার করে এড়ানো যেতে পারে।
মাল্টিসিগ কন্ট্র্যাক্ট
মাল্টিসিগ (একাধিক-স্বাক্ষর) কন্ট্র্যাক্টগুলি হলো স্মার্ট কন্ট্র্যাক্ট অ্যাকাউন্ট যার একটি লেনদেন সম্পাদনের জন্য একাধিক বৈধ স্বাক্ষর প্রয়োজন। প্রচুর পরিমাণে ইথার বা অন্যান্য টোকেন ধারণকারী কন্ট্র্যাক্টের জন্য ব্যর্থতার একক পয়েন্ট এড়াতে এটি খুব দরকারী। মাল্টিসিগগুলি কন্ট্র্যাক্ট সম্পাদন এবং কী ম্যানেজমেন্টের দায়িত্ব একাধিক পক্ষের মধ্যে ভাগ করে দেয় এবং একটিমাত্র প্রাইভেট কী-এর ক্ষতি থেকে তহবিলের অপরিবর্তনীয় ক্ষতি প্রতিরোধ করে। এই কারণগুলির জন্য, মাল্টিসিগ কন্ট্র্যাক্টগুলি সাধারণ DAO গভর্নেন্সের জন্য ব্যবহার করা যেতে পারে। মাল্টিসিগগুলি কার্যকর করার জন্য M সম্ভাব্য গ্রহণযোগ্য স্বাক্ষরগুলির মধ্যে N টি স্বাক্ষর প্রয়োজন (যেখানে N ≤ M, এবং M > 1)। N = 3, M = 5 এবং N = 4, M = 7 সাধারণত ব্যবহৃত হয়। একটি 4/7 মাল্টিসিগ-এর জন্য সাতটি সম্ভাব্য বৈধ স্বাক্ষরের মধ্যে চারটি প্রয়োজন। এর মানে হল তিনটি স্বাক্ষর হারিয়ে গেলেও তহবিল এখনও পুনরুদ্ধারযোগ্য। এই ক্ষেত্রে, এর মানে হল যে কন্ট্র্যাক্ট কার্যকর করার জন্য বেশিরভাগ কী-হোল্ডারদের অবশ্যই সম্মত হতে হবে এবং স্বাক্ষর করতে হবে।
স্মার্ট কন্ট্র্যাক্ট রিসোর্স
OpenZeppelin Contracts - সুরক্ষিত স্মার্ট কন্ট্র্যাক্ট ডেভেলপমেন্টের জন্য লাইব্রেরি।
- openzeppelin.com/contracts/ (opens in a new tab)
- GitHub (opens in a new tab)
- কমিউনিটি ফোরাম (opens in a new tab)