Solidity তে Errors এবং Exceptions হল এমন মেকানিজম যা স্মার্ট কন্ট্রাক্টে সমস্যা বা ত্রুটি চিহ্নিত করতে ব্যবহৃত হয়। এটি কন্ট্রাক্টের কার্যকারিতা এবং নিরাপত্তা নিশ্চিত করতে সাহায্য করে, কারণ এদের মাধ্যমে আমরা ভুল ইনপুট, অযাচিত লেনদেন, কিংবা অপ্রত্যাশিত পরিস্থিতি থেকে সুরক্ষা পেতে পারি।
1. Exceptions
Exceptions হল এমন একটি পরিস্থিতি যেখানে কোন একটি ফাংশন বা কার্যক্রম প্রত্যাশিতভাবে সম্পন্ন না হয়ে ত্রুটি তৈরি করে। Solidity তে যদি কোন ত্রুটি ঘটে, তবে সেই কার্যক্রম থেমে যায় এবং ত্রুটির কারণ ফিরিয়ে দেয়। এর মাধ্যমে আপনি কিছু পূর্বনির্ধারিত শর্ত পূর্ণ না হলে কার্যক্রম বন্ধ করতে পারেন।
Solidity তে Exception Handling
Solidity তে Exceptions হ্যান্ডেল করার জন্য require, revert, এবং assert ব্যবহার করা হয়। এগুলি মূলত স্মার্ট কন্ট্রাক্টে ভুল ইনপুট বা শর্তগত ত্রুটি চিহ্নিত করতে ব্যবহৃত হয়।
require()
require ফাংশনটি একটি শর্ত যাচাই করতে ব্যবহৃত হয় এবং যদি শর্তটি মিথ্যা হয়, তবে এটি একটি revert ত্রুটি সৃষ্টি করে এবং সমস্ত পরিবর্তন বাতিল করে দেয়। এটি সাধারণত ইনপুট ভ্যালিডেশন বা শর্ত যাচাইয়ের জন্য ব্যবহৃত হয়।
pragma solidity ^0.8.0;
contract Example {
uint public balance;
function deposit(uint _amount) public {
require(_amount > 0, "Amount must be greater than zero");
balance += _amount;
}
}ব্যাখ্যা:
- এখানে
require(_amount > 0, "Amount must be greater than zero")চেক করবে যে প্রেরিত পরিমাণ শূন্যের বেশি কিনা। - যদি এই শর্ত পূর্ণ না হয়, তবে একটি ত্রুটি হবে এবং লেনদেনটি বাতিল হয়ে যাবে।
revert()
revert ফাংশনটি কোনো অবস্থায় লেনদেন বা কার্যক্রম বাতিল করার জন্য ব্যবহৃত হয়। এটি একটি কাস্টম ত্রুটি বার্তা দিতে পারে, যা ডেভেলপার বা ব্যবহারকারীর জন্য ত্রুটির কারণ জানায়।
pragma solidity ^0.8.0;
contract Example {
uint public balance;
function withdraw(uint _amount) public {
if (_amount > balance) {
revert("Insufficient balance");
}
balance -= _amount;
}
}ব্যাখ্যা:
revert("Insufficient balance")কাস্টম ত্রুটি বার্তা সহ লেনদেন বাতিল করে দেয় যদি অ্যাকাউন্টে পর্যাপ্ত পরিমাণ ব্যালেন্স না থাকে।
assert()
assert ফাংশনটি মূলত কোডের অখণ্ডতা নিশ্চিত করার জন্য ব্যবহৃত হয়। এটি একটি শর্ত যাচাই করে এবং যদি শর্তটি মিথ্যা হয়, তবে ত্রুটি সৃষ্টি করে। সাধারণত এটি ইন্টারনাল চেক এবং ভুল কোডের জন্য ব্যবহৃত হয়।
pragma solidity ^0.8.0;
contract Example {
uint public balance;
function withdraw(uint _amount) public {
uint prevBalance = balance;
balance -= _amount;
assert(balance == prevBalance - _amount); // নিশ্চিত করা যে ব্যালেন্স সঠিকভাবে কমে গেছে
}
}ব্যাখ্যা:
assert(balance == prevBalance - _amount)নিশ্চিত করবে যে ব্যালেন্স সঠিকভাবে কমেছে। যদি শর্তটি ভুল হয়, তবে এটি একটি ত্রুটি সৃষ্টি করবে।
2. Errors
Solidity তে Errors হলো এমন ধরনের ত্রুটি যা প্রোগ্রাম চলাকালীন সময় ঘটতে পারে। এখানে দুটি প্রধান ধরনের ত্রুটি রয়েছে: Revert Errors এবং Panic Errors।
Revert Errors
revert ত্রুটির মধ্যে custom errors অন্তর্ভুক্ত থাকে, যা ডেভেলপারদের জন্য একটি কাস্টম ত্রুটি বার্তা তৈরি করার সুযোগ দেয়। এটি স্মার্ট কন্ট্রাক্টের কার্যক্রম ব্যর্থ হওয়া বা ইনপুট ভুল হওয়া সনাক্ত করে এবং সঠিক ত্রুটি বার্তা প্রদান করে।
Custom Errors Example:
pragma solidity ^0.8.0;
error InsufficientBalance(uint requested, uint available);
contract Example {
uint public balance;
function withdraw(uint _amount) public {
if (_amount > balance) {
revert InsufficientBalance(_amount, balance); // কাস্টম ত্রুটি বার্তা
}
balance -= _amount;
}
}ব্যাখ্যা:
- এখানে
InsufficientBalanceনামে একটি কাস্টম ত্রুটি তৈরি করা হয়েছে, যা আর্গুমেন্ট হিসেবে চাওয়া ও উপলব্ধ ব্যালেন্স গ্রহণ করে এবং শর্ত পূর্ণ না হলে তা ট্রিগার হয়।
Panic Errors
Panic errors হল কিছু ধরনের ত্রুটি যা Solidity তে সাধারণত কোডের ভুল বা অত্যধিক প্রক্রিয়া চলতে গিয়ে ঘটে, যেমন বিভাজন দ্বারা শূন্যে ভাগ করা। Solidity তে কিছু পূর্বনির্ধারিত panic error কোড থাকে, যেমন divide by zero বা out of bounds।
pragma solidity ^0.8.0;
contract Example {
function divide(uint _numerator, uint _denominator) public pure returns (uint) {
require(_denominator != 0, "Cannot divide by zero"); // Divide by zero চেক
return _numerator / _denominator;
}
}ব্যাখ্যা:
- এখানে
require(_denominator != 0, "Cannot divide by zero")চেক করবে যে, আপনি শূন্যে ভাগ করতে চাচ্ছেন কিনা। - যদি শূন্যে ভাগ করার চেষ্টা করা হয়, তাহলে একটি
revertত্রুটি হবে।
3. Error Handling Best Practices
- require এবং revert সাধারণত ব্যবহার করা হয় যখন আপনি ব্যবহারকারীর ইনপুট বা অপ্রত্যাশিত অবস্থা যাচাই করতে চান। এটি একটি transaction failure সৃষ্টি করে এবং ইউজারকে সঠিক ত্রুটি বার্তা দেয়।
- assert ব্যবহার করা হয় কেবলমাত্র ইন্টারনাল অবস্থাগুলির জন্য, যেমন কোডের অখণ্ডতা নিশ্চিত করা। এটি সাধারণত কোডের ভুল চেক করতে ব্যবহৃত হয়।
- Custom errors ব্যবহার করা হলে, সেগুলি কাস্টম বার্তা সহ আরও বিস্তারিত ত্রুটি প্রদান করতে সাহায্য করে।
সারাংশ
Errors এবং Exceptions Solidity তে স্মার্ট কন্ট্রাক্টের কার্যক্রমে ত্রুটি বা সমস্যা চিহ্নিত করার জন্য ব্যবহৃত হয়। Exceptions সাধারণত ত্রুটি বা ব্যর্থতার জন্য ব্যবহৃত হয়, যেখানে require, revert, এবং assert হল প্রধান exception-handling ফাংশন। Errors এর মধ্যে কাস্টম ত্রুটি (revert errors) এবং panic errors (যেমন শূন্যে ভাগ) অন্তর্ভুক্ত থাকে। ত্রুটি এবং এক্সেপশনের সঠিক ব্যবহারে স্মার্ট কন্ট্রাক্টের সুরক্ষা এবং কার্যকারিতা নিশ্চিত করা যায়।
Read more