স্মার্ট কন্ট্রাক্ট পরিচিতি
স্মার্ট কন্ট্রাক্ট কী?
একটি "স্মার্ট কন্ট্রাক্ট" হলো মূলত একটি প্রোগ্রাম যা ইথেরিয়াম ব্লকচেইনে রান করে। এটি কোড (এর ফাংশন) এবং ডেটার (এর স্টেট) একটি সংগ্রহ, যা ইথেরিয়াম ব্লকচেইনের একটি নির্দিষ্ট ঠিকানায় অবস্থান করে।
স্মার্ট কন্ট্রাক্ট হলো এক ধরনের ইথেরিয়াম অ্যাকাউন্ট। এর মানে হলো তাদের একটি ব্যালেন্স থাকে এবং এগুলো ট্রানজ্যাকশনের লক্ষ্যবস্তু হতে পারে। তবে এগুলো কোনো ব্যবহারকারী দ্বারা নিয়ন্ত্রিত হয় না, বরং এগুলো নেটওয়ার্কে ডিপ্লয় করা হয় এবং প্রোগ্রাম অনুযায়ী রান করে। ব্যবহারকারীর অ্যাকাউন্টগুলো এরপর স্মার্ট কন্ট্রাক্টে সংজ্ঞায়িত কোনো ফাংশন এক্সিকিউট করার জন্য ট্রানজ্যাকশন সাবমিট করে এর সাথে ইন্টারঅ্যাক্ট করতে পারে। স্মার্ট কন্ট্রাক্ট সাধারণ কন্ট্রাক্টের মতোই নিয়মকানুন নির্ধারণ করতে পারে এবং কোডের মাধ্যমে স্বয়ংক্রিয়ভাবে সেগুলো প্রয়োগ করতে পারে। ডিফল্টভাবে স্মার্ট কন্ট্রাক্ট মুছে ফেলা যায় না এবং এগুলোর সাথে করা ইন্টারঅ্যাকশনগুলো অপরিবর্তনীয়।
পূর্বশর্ত
আপনি যদি সবেমাত্র শুরু করে থাকেন বা কম প্রযুক্তিগত পরিচিতি খুঁজছেন, তবে আমরা আমাদের স্মার্ট কন্ট্রাক্ট পরিচিতি পড়ার পরামর্শ দিচ্ছি।
স্মার্ট কন্ট্রাক্টের জগতে প্রবেশ করার আগে নিশ্চিত করুন যে আপনি অ্যাকাউন্ট, ট্রানজ্যাকশন এবং ইথেরিয়াম ভার্চুয়াল মেশিন সম্পর্কে পড়েছেন।
একটি ডিজিটাল ভেন্ডিং মেশিন
স্মার্ট কন্ট্রাক্টের জন্য সম্ভবত সবচেয়ে ভালো রূপক হলো একটি ভেন্ডিং মেশিন, যেমনটি নিক সাবো (একটি নতুন ট্যাবে খোলে) বর্ণনা করেছেন। সঠিক ইনপুট দিলে একটি নির্দিষ্ট আউটপুট নিশ্চিতভাবে পাওয়া যায়।
ভেন্ডিং মেশিন থেকে স্ন্যাকস পেতে:
টাকা + স্ন্যাকস নির্বাচন = স্ন্যাকস প্রদান
এই লজিকটি ভেন্ডিং মেশিনে প্রোগ্রাম করা থাকে।
ভেন্ডিং মেশিনের মতোই একটি স্মার্ট কন্ট্রাক্টেও লজিক প্রোগ্রাম করা থাকে। এই ভেন্ডিং মেশিনটি যদি Solidity-তে লেখা একটি স্মার্ট কন্ট্রাক্ট হতো, তবে এটি কেমন দেখাতো তার একটি সহজ উদাহরণ নিচে দেওয়া হলো:
pragma solidity 0.8.7;
contract VendingMachine {
// কন্ট্রাক্টের স্টেট ভেরিয়েবলগুলো ঘোষণা করুন
address public owner;
mapping (address => uint) public cupcakeBalances;
// যখন 'VendingMachine' কন্ট্রাক্ট ডিপ্লয় করা হয়:
// ১. ডিপ্লয় করা ঠিকানাকে কন্ট্রাক্টের মালিক হিসেবে সেট করুন
// ২. ডিপ্লয় করা স্মার্ট কন্ট্রাক্টের কাপকেক ব্যালেন্স ১০০ সেট করুন
constructor() {
owner = msg.sender;
cupcakeBalances[address(this)] = 100;
}
// মালিককে স্মার্ট কন্ট্রাক্টের কাপকেক ব্যালেন্স বাড়ানোর অনুমতি দিন
function refill(uint amount) public {
require(msg.sender == owner, "Only the owner can refill.");
cupcakeBalances[address(this)] += amount;
}
// যে কাউকে কাপকেক কেনার অনুমতি দিন
function purchase(uint amount) public payable {
require(msg.value >= amount * 1 ether, "You must pay at least 1 ETH per cupcake");
require(cupcakeBalances[address(this)] >= amount, "Not enough cupcakes in stock to complete this purchase");
cupcakeBalances[address(this)] -= amount;
cupcakeBalances[msg.sender] += amount;
}
}
ভেন্ডিং মেশিন যেমন বিক্রেতা বা কর্মীর প্রয়োজনীয়তা দূর করে, তেমনি স্মার্ট কন্ট্রাক্টও অনেক শিল্পে মধ্যস্থতাকারীদের প্রতিস্থাপন করতে পারে।
পারমিশনলেস
যে কেউ একটি স্মার্ট কন্ট্রাক্ট লিখতে পারে এবং এটি নেটওয়ার্কে ডিপ্লয় করতে পারে। আপনাকে শুধু একটি স্মার্ট কন্ট্রাক্ট ভাষায় কোড করা শিখতে হবে এবং আপনার কন্ট্রাক্ট ডিপ্লয় করার জন্য পর্যাপ্ত ETH থাকতে হবে। একটি স্মার্ট কন্ট্রাক্ট ডিপ্লয় করা প্রযুক্তিগতভাবে একটি ট্রানজ্যাকশন, তাই একটি সাধারণ ETH হস্তান্তরের জন্য যেমন গ্যাস দিতে হয়, তেমনি আপনাকে গ্যাস ফি দিতে হবে। তবে, কন্ট্রাক্ট ডিপ্লয়মেন্টের জন্য গ্যাস খরচ অনেক বেশি হয়।
স্মার্ট কন্ট্রাক্ট লেখার জন্য ইথেরিয়ামে ডেভেলপার-বান্ধব ভাষা রয়েছে:
- Solidity
- Vyper
তবে, ডিপ্লয় করার আগে এগুলোকে অবশ্যই কম্পাইল করতে হবে যাতে ইথেরিয়ামের ভার্চুয়াল মেশিন কন্ট্রাক্টটি বুঝতে এবং সংরক্ষণ করতে পারে। কম্পাইলেশন সম্পর্কে আরও জানুন
সংযোজনযোগ্যতা
ইথেরিয়ামে স্মার্ট কন্ট্রাক্টগুলো পাবলিক এবং এগুলোকে ওপেন API হিসেবে বিবেচনা করা যেতে পারে। এর মানে হলো আপনি আপনার নিজের স্মার্ট কন্ট্রাক্টে অন্যান্য স্মার্ট কন্ট্রাক্ট কল করতে পারেন, যা এর সম্ভাবনাকে বহুগুণ বাড়িয়ে দেয়। এমনকি কন্ট্রাক্টগুলো অন্যান্য কন্ট্রাক্টও ডিপ্লয় করতে পারে।
স্মার্ট কন্ট্রাক্ট সংযোজনযোগ্যতা সম্পর্কে আরও জানুন।
সীমাবদ্ধতা
স্মার্ট কন্ট্রাক্টগুলো নিজে থেকে "বাস্তব-জগতের" ইভেন্ট সম্পর্কে তথ্য পেতে পারে না কারণ তারা অফচেইন সোর্স থেকে ডেটা সংগ্রহ করতে পারে না। এর মানে হলো তারা বাস্তব জগতের ইভেন্টগুলোতে সাড়া দিতে পারে না। এটি ইচ্ছাকৃতভাবেই এমনভাবে ডিজাইন করা হয়েছে। বাহ্যিক তথ্যের ওপর নির্ভর করলে ঐক্যমত বা কনসেনসাস (consensus) ঝুঁকিতে পড়তে পারে, যা নিরাপত্তা এবং বিকেন্দ্রীকরণের জন্য গুরুত্বপূর্ণ।
তবে, ব্লকচেইন অ্যাপ্লিকেশনগুলোর জন্য অফচেইন ডেটা ব্যবহার করতে পারাটা গুরুত্বপূর্ণ। এর সমাধান হলো ওরাকল (oracles), যা এমন কিছু টুল যা অফচেইন ডেটা গ্রহণ করে এবং তা স্মার্ট কন্ট্রাক্টের জন্য সহজলভ্য করে তোলে।
স্মার্ট কন্ট্রাক্টের আরেকটি সীমাবদ্ধতা হলো এর সর্বোচ্চ আকার। একটি স্মার্ট কন্ট্রাক্ট সর্বোচ্চ 24KB হতে পারে, অন্যথায় এর গ্যাস শেষ হয়ে যাবে। দ্য ডায়মন্ড প্যাটার্ন (The Diamond Pattern) (একটি নতুন ট্যাবে খোলে) ব্যবহার করে এই সমস্যা এড়ানো যেতে পারে।
মাল্টিসিগ কন্ট্রাক্ট
মাল্টিসিগ (একাধিক-স্বাক্ষর) কন্ট্রাক্ট হলো এমন স্মার্ট কন্ট্রাক্ট অ্যাকাউন্ট যেখানে একটি ট্রানজ্যাকশন এক্সিকিউট করার জন্য একাধিক বৈধ স্বাক্ষরের প্রয়োজন হয়। উল্লেখযোগ্য পরিমাণ ইথার বা অন্যান্য টোকেন ধারণকারী কন্ট্রাক্টগুলোর ক্ষেত্রে সিঙ্গেল পয়েন্ট অফ ফেইলিওর (single point of failure) এড়াতে এটি খুবই কার্যকর। মাল্টিসিগগুলো কন্ট্রাক্ট এক্সিকিউশন এবং কী ম্যানেজমেন্টের দায়িত্ব একাধিক পক্ষের মধ্যে ভাগ করে দেয় এবং একটিমাত্র প্রাইভেট কী হারিয়ে যাওয়ার কারণে তহবিলের অপরিবর্তনীয় ক্ষতি রোধ করে। এসব কারণে, মাল্টিসিগ কন্ট্রাক্টগুলো সাধারণ DAO গভর্ন্যান্সের জন্য ব্যবহার করা যেতে পারে। এক্সিকিউট করার জন্য মাল্টিসিগগুলোতে M সংখ্যক সম্ভাব্য গ্রহণযোগ্য স্বাক্ষরের মধ্যে N সংখ্যক স্বাক্ষরের প্রয়োজন হয় (যেখানে N ≤ M, এবং M > 1)। N = 3, M = 5 এবং N = 4, M = 7 সাধারণত ব্যবহৃত হয়। একটি 4/7 মাল্টিসিগে সাতটি সম্ভাব্য বৈধ স্বাক্ষরের মধ্যে চারটির প্রয়োজন হয়। এর মানে হলো তিনটি স্বাক্ষর হারিয়ে গেলেও তহবিল পুনরুদ্ধার করা সম্ভব। এই ক্ষেত্রে, এর অর্থ হলো কন্ট্রাক্টটি এক্সিকিউট করার জন্য অধিকাংশ কী-হোল্ডারকে অবশ্যই একমত হতে হবে এবং স্বাক্ষর করতে হবে।
স্মার্ট কন্ট্রাক্ট রিসোর্স
ওপেনজেপেলিন কন্ট্রাক্টস - নিরাপদ স্মার্ট কন্ট্রাক্ট ডেভেলপমেন্টের জন্য লাইব্রেরি।
- openzeppelin.com/contracts/ (একটি নতুন ট্যাবে খোলে)
- GitHub (একটি নতুন ট্যাবে খোলে)
- কমিউনিটি ফোরাম (একটি নতুন ট্যাবে খোলে)
আরও পড়ুন
- কয়েনবেস: স্মার্ট কন্ট্রাক্ট কী? (একটি নতুন ট্যাবে খোলে)
- চেইনলিংক: স্মার্ট কন্ট্রাক্ট কী? (একটি নতুন ট্যাবে খোলে)
- ভিডিও: সহজভাবে ব্যাখ্যা করা - স্মার্ট কন্ট্রাক্ট (একটি নতুন ট্যাবে খোলে)
- Cyfrin Updraft: Web3 শেখার এবং অডিটিং প্ল্যাটফর্ম (একটি নতুন ট্যাবে খোলে)
টিউটোরিয়াল: ইথেরিয়ামে স্মার্ট কন্ট্রাক্ট স্বাক্ষর (EIP-1271)
- EIP-1271: স্মার্ট কন্ট্রাক্ট স্বাক্ষরকরণ এবং যাচাইকরণ – কীভাবে EIP-1271 স্মার্ট কন্ট্রাক্টগুলোকে স্বাক্ষর যাচাই করতে সক্ষম করে, সাথে Safe ইমপ্লিমেন্টেশনের একটি ওয়াকথ্রু।