মূল কন্টেন্টে যান
Change page

স্মার্ট কন্ট্রাক্ট পরিচিতি

পেজ সর্বশেষ আপডেট: ২৫ ফেব্রুয়ারী, ২০২৬

স্মার্ট কন্ট্রাক্ট কী?

একটি "স্মার্ট কন্ট্রাক্ট" হলো মূলত একটি প্রোগ্রাম যা Ethereum ব্লকচেইন-এ রান করে। এটি হলো কোড (এর ফাংশন) এবং ডেটার (এর স্টেট) একটি সংগ্রহ, যা Ethereum ব্লকচেইন-এর একটি নির্দিষ্ট এডড্রেস-এ অবস্থান করে।

স্মার্ট কন্ট্রাক্ট হলো এক ধরনের Ethereum একাউন্ট। এর মানে হলো এগুলোর একটি ব্যালেন্স থাকে এবং এগুলো লেনদেন-এর লক্ষ্য হতে পারে। তবে এগুলো কোনো ব্যবহারকারী দ্বারা নিয়ন্ত্রিত হয় না, বরং এগুলো নেটওয়ার্ক-এ ডিপ্লয় করা হয় এবং প্রোগ্রাম অনুযায়ী রান করে। ব্যবহারকারীর একাউন্টগুলো এরপর স্মার্ট কন্ট্রাক্ট-এ সংজ্ঞায়িত কোনো ফাংশন এক্সিকিউট করার জন্য লেনদেন সাবমিট করে স্মার্ট কন্ট্রাক্ট-এর সাথে ইন্টারঅ্যাক্ট করতে পারে। স্মার্ট কন্ট্রাক্টগুলো সাধারণ চুক্তির মতো নিয়ম নির্ধারণ করতে পারে এবং কোডের মাধ্যমে স্বয়ংক্রিয়ভাবে সেগুলো প্রয়োগ করতে পারে। ডিফল্টভাবে স্মার্ট কন্ট্রাক্টগুলো মুছে ফেলা যায় না এবং এগুলোর সাথে ইন্টারঅ্যাকশনগুলো অপরিবর্তনীয় (irreversible)।

পূর্বশর্ত

আপনি যদি সবেমাত্র শুরু করে থাকেন বা কম প্রযুক্তিগত পরিচিতি খুঁজছেন, তবে আমরা আমাদের স্মার্ট কন্ট্রাক্ট পরিচিতি পড়ার পরামর্শ দিই।

স্মার্ট কন্ট্রাক্ট-এর জগতে প্রবেশ করার আগে নিশ্চিত করুন যে আপনি একাউন্ট, লেনদেন এবং ইথিরিয়াম ভার্চুয়াল মেশিন সম্পর্কে পড়েছেন।

একটি ডিজিটাল ভেন্ডিং মেশিন

স্মার্ট কন্ট্রাক্ট-এর জন্য সম্ভবত সেরা রূপক হলো একটি ভেন্ডিং মেশিন, যেমনটি Nick Szabo (opens in a new tab) বর্ণনা করেছেন। সঠিক ইনপুট দিলে একটি নির্দিষ্ট আউটপুট নিশ্চিত করা যায়।

ভেন্ডিং মেশিন থেকে স্ন্যাকস পেতে:

1money + snack selection = snack dispensed

এই লজিকটি ভেন্ডিং মেশিনে প্রোগ্রাম করা থাকে।

একটি স্মার্ট কন্ট্রাক্ট-এ ভেন্ডিং মেশিনের মতোই লজিক প্রোগ্রাম করা থাকে। এই ভেন্ডিং মেশিনটি Solidity-তে লেখা একটি স্মার্ট কন্ট্রাক্ট হলে কেমন দেখাতো, তার একটি সহজ উদাহরণ নিচে দেওয়া হলো:

1pragma solidity 0.8.7;
2
3contract VendingMachine {
4
5 // কন্ট্রাক্টের স্টেট ভেরিয়েবলগুলো ঘোষণা করুন
6 address public owner;
7 mapping (address => uint) public cupcakeBalances;
8
9 // যখন 'VendingMachine' কন্ট্রাক্ট ডিপ্লয় করা হয়:
10 // ১. ডিপ্লয়িং অ্যাড্রেসকে কন্ট্রাক্টের মালিক হিসেবে সেট করুন
11 // ২. ডিপ্লয় করা স্মার্ট কন্ট্রাক্টের কাপকেক ব্যালেন্স ১০০-তে সেট করুন
12 constructor() {
13 owner = msg.sender;
14 cupcakeBalances[address(this)] = 100;
15 }
16
17 // মালিককে স্মার্ট কন্ট্রাক্টের কাপকেক ব্যালেন্স বাড়ানোর অনুমতি দিন
18 function refill(uint amount) public {
19 require(msg.sender == owner, "Only the owner can refill.");
20 cupcakeBalances[address(this)] += amount;
21 }
22
23 // যে কাউকে কাপকেক কেনার অনুমতি দিন
24 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-এ পাবলিক থাকে এবং এগুলোকে ওপেন API হিসেবে বিবেচনা করা যেতে পারে। এর মানে হলো আপনি আপনার নিজের স্মার্ট কন্ট্রাক্ট-এ অন্যান্য স্মার্ট কন্ট্রাক্টগুলোকে কল করতে পারেন, যা এর সম্ভাবনাকে ব্যাপকভাবে প্রসারিত করে। এমনকি কন্ট্রাক্টগুলো অন্যান্য কন্ট্রাক্টও ডিপ্লয় করতে পারে।

স্মার্ট কন্ট্রাক্ট কম্পোজেবিলিটি সম্পর্কে আরও জানুন।

সীমাবদ্ধতা

স্মার্ট কন্ট্রাক্টগুলো নিজে থেকে "বাস্তব-জগতের" ইভেন্ট সম্পর্কে তথ্য পেতে পারে না কারণ এগুলো অফচেইন সোর্স থেকে ডেটা সংগ্রহ করতে পারে না। এর মানে হলো এগুলো বাস্তব জগতের ইভেন্টগুলোতে সাড়া দিতে পারে না। এটি এভাবেই ডিজাইন করা হয়েছে। বাহ্যিক তথ্যের ওপর নির্ভর করলে কনসেন্সাস বিপন্ন হতে পারে, যা নিরাপত্তা এবং ডিসেন্ট্রালাইজেশন-এর জন্য গুরুত্বপূর্ণ।

তবে, ব্লকচেইন অ্যাপ্লিকেশনগুলোর জন্য অফচেইন ডেটা ব্যবহার করতে পারাটা গুরুত্বপূর্ণ। এর সমাধান হলো ওরাকল, যা এমন কিছু টুল যা অফচেইন ডেটা গ্রহণ করে এবং তা স্মার্ট কন্ট্রাক্ট-এর জন্য সহজলভ্য করে তোলে।

স্মার্ট কন্ট্রাক্ট-এর আরেকটি সীমাবদ্ধতা হলো এর সর্বোচ্চ কন্ট্রাক্ট সাইজ। একটি স্মার্ট কন্ট্রাক্ট সর্বোচ্চ 24KB হতে পারে, অন্যথায় এর গ্যাস শেষ হয়ে যাবে। The Diamond Pattern (opens in a new tab) ব্যবহার করে এই সমস্যা এড়ানো যেতে পারে।

মাল্টিসিগ কন্ট্রাক্ট

মাল্টিসিগ (মাল্টিপল-সিগনেচার) কন্ট্রাক্ট হলো এমন স্মার্ট কন্ট্রাক্ট একাউন্ট, যেগুলোতে একটি লেনদেন এক্সিকিউট করার জন্য একাধিক বৈধ সিগনেচারের প্রয়োজন হয়। প্রচুর পরিমাণে ইথার বা অন্যান্য টোকেন ধারণকারী কন্ট্রাক্টগুলোর ক্ষেত্রে সিঙ্গেল পয়েন্ট অফ ফেইলিওর এড়াতে এটি খুবই কার্যকর। মাল্টিসিগগুলো একাধিক পক্ষের মধ্যে কন্ট্রাক্ট এক্সিকিউশন এবং কি (key) ম্যানেজমেন্টের দায়িত্ব ভাগ করে দেয় এবং একটি মাত্র প্রাইভেট কি হারানোর কারণে ফান্ডের অপরিবর্তনীয় ক্ষতি রোধ করে। এসব কারণে, মাল্টিসিগ কন্ট্রাক্টগুলো সাধারণ DAO গভর্নেন্স-এর জন্য ব্যবহার করা যেতে পারে। এক্সিকিউট করার জন্য মাল্টিসিগগুলোতে M সংখ্যক সম্ভাব্য গ্রহণযোগ্য সিগনেচারের মধ্যে N সংখ্যক সিগনেচার প্রয়োজন হয় (যেখানে N ≤ M, এবং M > 1)। সাধারণত N = 3, M = 5 এবং N = 4, M = 7 ব্যবহৃত হয়। একটি 4/7 মাল্টিসিগ-এ সাতটি সম্ভাব্য বৈধ সিগনেচারের মধ্যে চারটির প্রয়োজন হয়। এর মানে হলো তিনটি সিগনেচার হারিয়ে গেলেও ফান্ড পুনরুদ্ধার করা সম্ভব। এই ক্ষেত্রে, এর মানে এটাও যে কন্ট্রাক্টটি এক্সিকিউট করার জন্য বেশিরভাগ কি-হোল্ডারকে (key-holders) একমত হতে হবে এবং সাইন করতে হবে।

স্মার্ট কন্ট্রাক্ট রিসোর্স

OpenZeppelin Contracts - নিরাপদ স্মার্ট কন্ট্রাক্ট ডেভেলপমেন্টের জন্য লাইব্রেরি।

আরও পড়াশোনা

টিউটোরিয়াল: Ethereum-এ স্মার্ট কন্ট্রাক্ট সিগনেচার (EIP-1271)

এই আর্টিকেলটি কি সহায়ক ছিল?