Solidity তে onlyOwner modifier, require, এবং assert দুটি গুরুত্বপূর্ণ ফাংশন এবং কৌশল যা স্মার্ট কন্ট্রাক্টের কার্যক্রম নিরাপদ এবং কার্যকরী করতে ব্যবহৃত হয়। এগুলি নিরাপত্তা যাচাই, শর্ত পূর্ণ হলে কার্যক্রম সম্পাদন, এবং ভুল সনাক্তকরণে সহায়ক হয়। নিচে আমরা প্রতিটি কৌশলটি এবং তার ব্যবহার দেখবো।
১. onlyOwner Modifier
onlyOwner হল একটি কাস্টম modifier যা কেবলমাত্র মালিক (owner) কে ফাংশন এক্সিকিউট করার অনুমতি দেয়। এটি সাধারণত ব্লকচেইনে মালিকানা চেক করার জন্য ব্যবহৃত হয়, যাতে কেবলমাত্র মালিক কিছু নির্দিষ্ট ফাংশন চালাতে পারে। এর মাধ্যমে কন্ট্রাক্টে অ্যাক্সেস কন্ট্রোল স্থাপন করা হয়।
উদাহরণ:
pragma solidity ^0.8.0;
contract OwnerControl {
address public owner;
constructor() {
owner = msg.sender; // কন্ট্রাক্ট ডিপ্লয় করার সময় মালিক হিসেবে কলকারী ঠিকানা অ্যাসাইন করা হয়
}
// Modifier যা শুধু মালিকের জন্য ফাংশন এক্সিকিউট করার অনুমতি দেয়
modifier onlyOwner() {
require(msg.sender == owner, "You are not the owner");
_;
}
// মালিকের জন্য নির্দিষ্ট ফাংশন
function restrictedAction() public onlyOwner {
// শুধুমাত্র মালিক এই ফাংশনটি এক্সিকিউট করতে পারবেন
}
}এখানে:
onlyOwnermodifier চেক করে যে,msg.sender(যিনি ফাংশনটি কল করছেন)ownerএর সমান কিনা।restrictedActionফাংশনটি কেবলমাত্র মালিক (যিনি কন্ট্রাক্ট ডিপ্লয় করেছেন) এক্সিকিউট করতে পারবেন।
২. require এর প্রয়োগ
require হল একটি শর্ত যাচাই করার জন্য ব্যবহৃত ফাংশন। যখন কোনো শর্ত পূর্ণ না হয়, তখন এটি একটি ত্রুটি উৎপন্ন করে এবং ট্রানজেকশন বাতিল করে দেয়। require সাধারণত পেমেন্ট বা অন্য শর্ত যাচাই করতে ব্যবহৃত হয়।
উদাহরণ:
pragma solidity ^0.8.0;
contract Payment {
uint public balance;
// Deposit ফাংশন যা শর্ত চেক করবে
function deposit(uint _amount) public {
require(_amount > 0, "Amount must be greater than 0"); // Amount 0 এর চেয়ে বেশি হতে হবে
balance += _amount;
}
// Withdrawal ফাংশন যা শর্ত চেক করবে
function withdraw(uint _amount) public {
require(balance >= _amount, "Insufficient balance"); // পর্যাপ্ত ব্যালেন্স থাকতে হবে
balance -= _amount;
}
}এখানে:
require(_amount > 0, "Amount must be greater than 0");এই শর্তটি নিশ্চিত করে যে পেমেন্টের পরিমাণ ০ এর বেশি।require(balance >= _amount, "Insufficient balance");এটি নিশ্চিত করে যে, ব্যবহৃত পরিমাণের জন্য পর্যাপ্ত ব্যালেন্স আছে কিনা।
যদি কোনো শর্ত পূর্ণ না হয়, তাহলে ট্রানজেকশন রিভার্স হয়ে যাবে এবং সংশ্লিষ্ট ত্রুটির বার্তা দেখানো হবে।
৩. assert এর প্রয়োগ
assert ব্যবহার করা হয় স্মার্ট কন্ট্রাক্টের অবস্থা যাচাই করার জন্য। এটি সাধারণত কন্ট্রাক্টের অভ্যন্তরীণ ভুল শনাক্ত করতে ব্যবহৃত হয়, যেমন অপ্রত্যাশিত অবস্থায় ডেটা পরিবর্তন। assert ভুল হলে, এটি ট্রানজেকশন বাতিল করে এবং কোনো ত্রুটি বার্তা দেখায় না।
উদাহরণ:
pragma solidity ^0.8.0;
contract Example {
uint public balance;
// Withdraw ফাংশন যা ব্যালেন্স যাচাই করবে
function withdraw(uint _amount) public {
assert(balance >= _amount); // চেক করবে যে ব্যালেন্স পর্যাপ্ত আছে কিনা
balance -= _amount;
}
}এখানে:
assert(balance >= _amount);এটি নিশ্চিত করে যেbalanceপর্যাপ্ত আছে এবং এটি একটি অবস্থা যাচাই হিসেবে কাজ করে।- যদি
balanceযথেষ্ট না থাকে, তবেassertএকটি ত্রুটি সৃষ্টি করবে এবং ট্রানজেকশন বাতিল হয়ে যাবে।
assert সাধারণত তখন ব্যবহার করা হয় যখন আপনি নিশ্চিত হন যে শর্তটি কখনই ভুল হওয়ার কথা নয়, এবং এটি বিশেষভাবে কোডের কোনো ধরনের ভুল (যেমন, অযাচিত ভ্যালু) সনাক্ত করতে ব্যবহৃত হয়।
onlyOwner, require, এবং assert এর মধ্যে পার্থক্য
| ফাংশন | ব্যবহার | উদ্দেশ্য |
|---|---|---|
onlyOwner | কাস্টম modifier হিসেবে মালিকানা যাচাই করা | শুধুমাত্র মালিককেই কিছু ফাংশন এক্সিকিউট করতে দেয়া |
require | শর্ত পূর্ণ হলে ফাংশন চালানোর জন্য | ফাংশন বা শর্ত যাচাই, যদি শর্ত পূর্ণ না হয়, ট্রানজেকশন বাতিল করা |
assert | অবস্থার সঠিকতা যাচাই করা | ভুল সনাক্তকরণ, বিশেষত অবস্থা যাচাই করা, অপ্রত্যাশিত ফলাফল প্রতিরোধ করা |
সারাংশ
onlyOwner, require, এবং assert Solidity তে স্মার্ট কন্ট্রাক্টের নিরাপত্তা এবং কার্যকারিতা নিশ্চিত করতে ব্যবহৃত হয়। onlyOwner modifier মালিকের অনুমতি যাচাই করতে ব্যবহৃত হয়, require শর্ত যাচাই করার জন্য ব্যবহার করা হয় যাতে ফাংশন এক্সিকিউট হওয়া আগে শর্ত নিশ্চিত করা যায়, এবং assert ব্যবহৃত হয় কোনো অভ্যন্তরীণ ভুল বা অবস্থা যাচাই করার জন্য, যেটি শুধুমাত্র কোডের ভুল চিহ্নিত করতে ব্যবহার করা উচিত। এগুলোর সঠিক ব্যবহার স্মার্ট কন্ট্রাক্টের নিরাপত্তা এবং কার্যকারিতা বাড়ায়।
Read more