require, assert, এবং revert এর ব্যবহার

Error Handling এবং Exception Management (এরর হ্যান্ডলিং এবং এক্সেপশন ম্যানেজমেন্ট) - সলিডিটি (Solidity) - Computer Programming

298

Solidity তে require, assert, এবং revert ফাংশনগুলি ব্যবহৃত হয় স্মার্ট কন্ট্রাক্টের ভিতরে বিভিন্ন শর্ত যাচাই করতে এবং কোডের কার্যকারিতা নিয়ন্ত্রণ করতে। এই ফাংশনগুলো স্মার্ট কন্ট্রাক্টে ত্রুটি ব্যবস্থাপনা (error handling) এবং সুরক্ষা নিশ্চিত করতে সাহায্য করে। তবে, এই তিনটি ফাংশনের মধ্যে কিছু গুরুত্বপূর্ণ পার্থক্য রয়েছে, যা তাদের ব্যবহার নির্ধারণ করে।

এখানে আমরা require, assert, এবং revert ফাংশনের ব্যবহার এবং তাদের মধ্যে পার্থক্য আলোচনা করছি।


1. require ফাংশন

require ফাংশনটি ব্যবহার করা হয় যখন কোনো শর্ত সত্য হওয়া নিশ্চিত করতে হয়। যদি শর্তটি মিথ্যা হয়, তবে এটি একটি ত্রুটি ঘটায় এবং সব পরিবর্তন পূর্বাবস্থায় ফিরিয়ে আনে (অথবা রিভার্স করে)। require সাধারণত ইনপুট যাচাই, শর্ত যাচাই বা অনুমোদন পরীক্ষার জন্য ব্যবহৃত হয়।

গঠন:

require(condition, "Error message");
  • condition: একটি শর্ত যা সত্য হওয়া প্রয়োজন।
  • "Error message": ত্রুটির বার্তা যা শর্ত মিথ্যা হলে প্রদর্শিত হবে।

ব্যবহার:
require সাধারণত ফাংশনের ইনপুট যাচাই করার জন্য ব্যবহার করা হয়।

উদাহরণ:

pragma solidity ^0.8.0;

contract MyContract {
    uint256 public balance;

    // Ether জমা করার ফাংশন
    function deposit(uint256 _amount) public {
        require(_amount > 0, "Amount must be greater than zero");  // শর্ত যাচাই
        balance += _amount;
    }
}

এখানে, deposit ফাংশনে _amount যদি ০ বা তার কম হয়, তবে require শর্তটি ব্যর্থ হবে এবং "Amount must be greater than zero" বার্তা সহ একটি ত্রুটি ঘটবে।


2. assert ফাংশন

assert ফাংশনটি সাধারণত কোডের ভুল বা অবস্থা যাচাই করার জন্য ব্যবহৃত হয়, বিশেষত যখন আপনার বিশ্বাস থাকে যে একটি শর্ত কখনই ভুল হতে পারে না। এটি একটি অন্তর্নিহিত নিরাপত্তা যাচাই। assert যদি ব্যর্থ হয়, এটি স্মার্ট কন্ট্রাক্টের পরিবর্তনগুলোকে রিভার্স করে এবং গ্যাস ফিরিয়ে দেয় না।

গঠন:

assert(condition);
  • condition: একটি শর্ত যা সত্য হওয়া প্রয়োজন, না হলে এটি ব্যর্থ হবে।

ব্যবহার:
assert ব্যবহার করা হয় অযাচিত বা ত্রুটিপূর্ণ পরিস্থিতি যাচাই করার জন্য।

উদাহরণ:

pragma solidity ^0.8.0;

contract MyContract {
    uint256 public balance;

    function withdraw(uint256 _amount) public {
        assert(balance >= _amount); // শর্ত যাচাই
        balance -= _amount;
    }
}

এখানে, assert(balance >= _amount) ফাংশনটি নিশ্চিত করে যে, balance এর পরিমাণ _amount এর সমান বা তার বেশি। যদি তা না হয়, তবে assert ফাংশনটি ব্যর্থ হয়ে যাবে এবং ত্রুটি দেখাবে। এটি নিশ্চিত করে যে কন্ট্রাক্টের অবস্থা সঠিক রয়েছে।

মনে রাখা উচিত: assert সাধারণত শর্ত যাচাইয়ের জন্য ব্যবহৃত হয় যেখানে কোনো শর্ত কখনই ভুল হতে পারে না, যেমন কন্ট্রাক্টের ভেরিয়েবলের অবস্থা বা নিরাপত্তা। এর ফলস্বরূপ, assert ব্যর্থ হলে এটি গুরুতর ত্রুটি এবং গ্যাসের অপচয় ঘটাতে পারে।


3. revert ফাংশন

revert ফাংশনটি ব্যবহার করা হয় কন্ট্রাক্টের কার্যক্রম পুরোপুরি বন্ধ করতে, যখন কোনো শর্ত পূর্ণ না হয় বা কোনো ত্রুটি ঘটলে। এটি require এর মতোই কাজ করে, তবে এর মাধ্যমে আপনি ত্রুটির বার্তা প্রদান করতে পারেন এবং কোডের execution পুরোপুরি থামিয়ে দিতে পারেন। revert কাস্টম ত্রুটি বার্তা প্রদান করতে সহায়ক।

গঠন:

revert("Error message");
  • "Error message": একটি কাস্টম ত্রুটি বার্তা যা দেখানো হবে।

ব্যবহার:
revert সাধারণত ফাংশনে নির্দিষ্ট শর্ত ভাঙলে কন্ট্রাক্টের কার্যক্রম রিভার্স করার জন্য ব্যবহৃত হয়।

উদাহরণ:

pragma solidity ^0.8.0;

contract MyContract {
    uint256 public balance;

    function deposit(uint256 _amount) public {
        if (_amount <= 0) {
            revert("Amount must be greater than zero");  // রিভার্স করার জন্য revert ব্যবহার
        }
        balance += _amount;
    }
}

এখানে, যদি _amount ০ বা তার কম হয়, তবে revert ফাংশনটি ব্যবহার করা হবে এবং "Amount must be greater than zero" বার্তা সহ পুরো ট্রানজেকশন রিভার্স হবে।


4. require, assert, revert এর মধ্যে পার্থক্য

  • require: এটি ব্যবহার করা হয় ইনপুট যাচাই বা শর্ত যাচাইয়ের জন্য। শর্ত ব্যর্থ হলে, সমস্ত পরিবর্তন রিভার্স হয় এবং ত্রুটির বার্তা প্রদান করা হয়। সাধারণত ফাংশন প্যারামিটার বা অবস্থার যাচাই করতে ব্যবহৃত হয়।
  • assert: এটি সাধারণত কোডের অবস্থা যাচাই করার জন্য ব্যবহৃত হয়, যেখানে শর্তটি কখনই মিথ্যা হতে পারে না। যদি assert ব্যর্থ হয়, এটি গুরুতর ত্রুটি তৈরি করে এবং স্মার্ট কন্ট্রাক্টের নিরাপত্তা প্রশ্নবিদ্ধ হতে পারে।
  • revert: এটি কোনো শর্ত ব্যর্থ হলে সম্পূর্ণ ট্রানজেকশন রিভার্স করতে ব্যবহৃত হয়। এটি সাধারণত কাস্টম ত্রুটি বার্তা সহ কাজ করে এবং একে require এর বিকল্প হিসেবে ব্যবহার করা যায়।

সারাংশ

Solidity তে require, assert, এবং revert ফাংশনগুলো স্মার্ট কন্ট্রাক্টের কার্যকারিতা এবং নিরাপত্তা নিশ্চিত করতে ব্যবহৃত হয়।

  • require ব্যবহার করা হয় ইনপুট বা শর্ত যাচাইয়ের জন্য।
  • assert ব্যবহার করা হয় কোডের অবস্থা যাচাই করার জন্য, যেখানে শর্তটি কখনই ভুল হতে পারে না।
  • revert ব্যবহার করা হয় একটি ফাংশনের পুরো কার্যক্রম বন্ধ করতে এবং কাস্টম ত্রুটি বার্তা প্রদান করতে।
    এই ফাংশনগুলো ব্লকচেইনে নিরাপত্তা এবং সঠিকতা বজায় রাখতে সহায়তা করে।
Content added By
Promotion

Are you sure to start over?

Loading...