Function Modifiers হল Solidity তে একটি শক্তিশালী ফিচার যা একটি ফাংশনকে পরিবর্তন বা নিয়ন্ত্রণ করার জন্য ব্যবহৃত হয়। এটি ফাংশনের আগে বা পরে কিছু নির্দিষ্ট লজিক প্রয়োগ করতে সক্ষম হয় এবং কোডের পুনঃব্যবহারযোগ্যতা নিশ্চিত করে। Function modifiers সাধারণত নিরাপত্তা, অনুমতি যাচাই, পেমেন্ট শর্ত ইত্যাদি লজিক প্রয়োগে ব্যবহৃত হয়।
Function Modifiers এর বৈশিষ্ট্য
- কোড পুনঃব্যবহারযোগ্যতা: Modifier দিয়ে একাধিক ফাংশনে একই লজিক প্রয়োগ করা যেতে পারে, যা কোডের পুনঃব্যবহারযোগ্যতা নিশ্চিত করে।
- ফাংশন চালানোর পূর্বে বা পরে এক্সিকিউশন কন্ট্রোল: Modifier ফাংশনের আগে বা পরে কাজ করতে পারে। এটি ফাংশনের কার্যকলাপের শর্ত নির্ধারণ করে।
- শর্ত যাচাই: Modifier দিয়ে ব্যবহারকারী বা শর্ত যাচাই করা যেতে পারে, যেমন মালিকের অনুমতি, পেমেন্টের পরিমাণ ইত্যাদি।
Modifier এর উদাহরণ
১. Basic Modifier Example
এখানে একটি সাধারণ modifier ব্যবহার করা হয়েছে যা নিশ্চিত করে যে একটি ফাংশন শুধুমাত্র মালিকের দ্বারা এক্সিকিউট করা যাবে।
pragma solidity ^0.8.0;
contract Example {
address public owner;
constructor() {
owner = msg.sender; // মালিক হিসেবে চিহ্নিত করা হচ্ছে
}
// Modifier যা চেক করবে যে ফাংশনটি মালিকের কাছ থেকেই কল হয়েছে কিনা
modifier onlyOwner() {
require(msg.sender == owner, "You are not the owner");
_;
}
// ফাংশন যা শুধুমাত্র মালিক চালাতে পারবেন
function secureAction() public onlyOwner {
// কিছু লজিক
}
}এখানে:
onlyOwnermodifier চেক করে যেmsg.sender(যিনি ফাংশন কল করছেন)ownerএর সমান কিনা।_;এটি modifier এর মধ্যে সন্নিবেশিত হয়, যা ফাংশন এক্সিকিউট করার জায়গা নির্দেশ করে।secureAction()ফাংশনটি শুধুমাত্রownerএর মাধ্যমে এক্সিকিউট হবে।
২. Modifier for Payment Validation
এখানে একটি modifier ব্যবহার করা হয়েছে যা নিশ্চিত করবে যে একটি ফাংশনে পেমেন্টের পরিমাণ শূন্যের চেয়ে বেশি হতে হবে।
pragma solidity ^0.8.0;
contract Payment {
// Modifier যা নিশ্চিত করবে যে পেমেন্টের পরিমাণ শূন্যের চেয়ে বেশি
modifier amountGreaterThanZero(uint _amount) {
require(_amount > 0, "Amount must be greater than zero");
_;
}
// ফাংশন যা পেমেন্ট গ্রহণ করবে
function deposit(uint _amount) public payable amountGreaterThanZero(_amount) {
// পেমেন্ট গ্রহণের লজিক
}
}এখানে:
amountGreaterThanZeromodifier চেক করবে যে_amount০ এর চেয়ে বেশি কিনা। যদি শর্ত পূর্ণ না হয়, ট্রানজেকশন বাতিল হয়ে যাবে।depositফাংশনেamountGreaterThanZeromodifier ব্যবহৃত হয়েছে যাতে পেমেন্টের পরিমাণ সঠিক হয়।
৩. Modifier for Access Control
এখানে একটি modifier ব্যবহার করা হয়েছে যা নিশ্চিত করবে যে, একটি নির্দিষ্ট রোলের অধিকারী ব্যক্তি শুধুমাত্র কিছু ফাংশন এক্সিকিউট করতে পারবেন।
pragma solidity ^0.8.0;
contract AccessControl {
mapping(address => bool) public admins;
constructor() {
admins[msg.sender] = true; // কন্ট্রাক্ট ডিপ্লয়ারের জন্য admin privilege
}
// Modifier যা চেক করবে যে কলকারী admin কিনা
modifier onlyAdmin() {
require(admins[msg.sender], "You are not an admin");
_;
}
// ফাংশন যা শুধুমাত্র admin ব্যবহার করতে পারবেন
function addAdmin(address _admin) public onlyAdmin {
admins[_admin] = true;
}
// ফাংশন যা শুধুমাত্র admin ব্যবহার করতে পারবেন
function removeAdmin(address _admin) public onlyAdmin {
admins[_admin] = false;
}
}এখানে:
onlyAdminmodifier চেক করবে যেmsg.senderএকটিadminকিনা। যদি না হয়, তবে অ্যাক্সেস নিষিদ্ধ হবে।addAdminএবংremoveAdminফাংশনগুলি শুধুমাত্রadminরোলের অধিকারী দ্বারা এক্সিকিউট করা যাবে।
৪. Complex Modifier Example
একটি complex modifier যেখানে একটি ফাংশনের মধ্যে দুটি শর্ত প্রয়োগ করা হয়েছে:
- ব্যবহারকারী
msg.senderএর মাধ্যমে কাজটি করতে হবে, এবং - একটি নির্দিষ্ট পরিমাণ Ether পেমেন্ট করা উচিত।
pragma solidity ^0.8.0;
contract ComplexModifier {
address public owner;
constructor() {
owner = msg.sender; // মালিক ঠিকানা
}
// Modifier যা মালিক চেক করবে এবং Ether এর পরিমাণ যাচাই করবে
modifier onlyOwnerAndPayment() {
require(msg.sender == owner, "Only owner can perform this action");
require(msg.value >= 1 ether, "Minimum 1 ether required");
_;
}
// ফাংশন যা মালিক এবং 1 ether পেমেন্ট নিশ্চিত করে এক্সিকিউট হবে
function performAction() public payable onlyOwnerAndPayment {
// এক্সিকিউট লজিক
}
}এখানে:
onlyOwnerAndPaymentmodifier দুটি শর্ত প্রয়োগ করে। প্রথমত, এটি চেক করে যে কলকারী মালিক কি না, এবং দ্বিতীয়ত, এটি নিশ্চিত করে যে কমপক্ষে ১ ether পেমেন্ট করা হয়েছে।performActionফাংশনটি শুধুমাত্র এই দুটি শর্ত পূর্ণ হলে এক্সিকিউট হবে।
Modifier এর ব্যবহার এবং উপকারিতা
- কোডের পুনঃব্যবহার: Modifier ফাংশনালিটি পুনঃব্যবহার করতে সাহায্য করে, যাতে একই লজিক একাধিক জায়গায় ব্যবহার করা যায়।
- নিরাপত্তা এবং যাচাই: Modifier দিয়ে অনুমতি যাচাই, পেমেন্ট চেক, এবং অন্যান্য নিরাপত্তা ফিচার প্রয়োগ করা যায়।
- লজিক প্রিপেন্ড বা পোস্টপেন্ড: Modifier দিয়ে ফাংশন চলার আগে বা পরে কিছু লজিক প্রয়োগ করা যায়, যা ফাংশনের এক্সিকিউশন নিয়ন্ত্রণ করে।
সারাংশ
Function Modifiers Solidity তে খুবই শক্তিশালী টুল, যা কোডের পুনঃব্যবহারযোগ্যতা বাড়ায় এবং ফাংশন এক্সিকিউশনের আগে বা পরে শর্ত প্রয়োগ করতে সহায়তা করে। এগুলি বিশেষ করে নিরাপত্তা যাচাই, পেমেন্ট শর্ত, এবং ফাংশনের এক্সিকিউশনের শর্ত নির্ধারণে ব্যবহৃত হয়। Function modifiers এর মাধ্যমে কোডের অখণ্ডতা নিশ্চিত করা যায় এবং স্মার্ট কন্ট্রাক্টের কার্যকারিতা বাড়ানো যায়।
Read more