onlyOwner, require এবং assert এর প্রয়োগ

Modifiers এবং Access Control (মডিফায়ারস এবং অ্যাক্সেস নিয়ন্ত্রণ) - সলিডিটি (Solidity) - Computer Programming

321

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 {
        // শুধুমাত্র মালিক এই ফাংশনটি এক্সিকিউট করতে পারবেন
    }
}

এখানে:

  • onlyOwner modifier চেক করে যে, 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 ব্যবহৃত হয় কোনো অভ্যন্তরীণ ভুল বা অবস্থা যাচাই করার জন্য, যেটি শুধুমাত্র কোডের ভুল চিহ্নিত করতে ব্যবহার করা উচিত। এগুলোর সঠিক ব্যবহার স্মার্ট কন্ট্রাক্টের নিরাপত্তা এবং কার্যকারিতা বাড়ায়।

Content added By
Promotion

Are you sure to start over?

Loading...