Solidity তে Error Handling একটি গুরুত্বপূর্ণ ধারণা, যা স্মার্ট কন্ট্রাক্টের কার্যক্রম সঠিকভাবে পরিচালনা করতে এবং ত্রুটি সনাক্ত করতে ব্যবহৃত হয়। ব্লকচেইন নেটওয়ার্কে স্মার্ট কন্ট্রাক্টের কার্যক্রম সম্পাদন করার সময় বিভিন্ন ধরণের ত্রুটি (errors) ঘটতে পারে, যেমন অনুমতি নেই, অযাচিত ইনপুট, অপ্রত্যাশিত শর্ত ইত্যাদি। এই ত্রুটিগুলি সঠিকভাবে হ্যান্ডেল করা হলে স্মার্ট কন্ট্রাক্টের নিরাপত্তা, কার্যকারিতা এবং ব্যবহারকারীর অভিজ্ঞতা উন্নত হয়।
Solidity তে error handling করার জন্য কয়েকটি প্রধান পদ্ধতি রয়েছে: require(), assert(), revert(), এবং custom error types।
1. require()
require() একটি ইন্সট্রাকশন যা শর্ত পূর্ণ না হলে স্মার্ট কন্ট্রাক্টের কার্যক্রম থামিয়ে দেয় এবং গ্যাস অপচয় রোধ করে। require() ব্যবহৃত হয় ইনপুট যাচাই, কন্ডিশন পরীক্ষা বা অনুমতিপত্র নিশ্চিত করার জন্য। যদি শর্তটি মিথ্যা হয়, তবে একটি ত্রুটি (error) তৈরি হয় এবং execution থেমে যায়।
require() ব্যবহার উদাহরণ:
pragma solidity ^0.8.0;
contract RequireExample {
uint public balance;
constructor() {
balance = 1000;
}
function withdraw(uint amount) public {
require(amount <= balance, "Insufficient balance!"); // ইনপুট যাচাই
balance -= amount; // ব্যালেন্স আপডেট
}
}ব্যাখ্যা:
- এখানে
require()ব্যবহার করা হয়েছে নিশ্চিত করতে যে,withdrawফাংশনটি শুধুমাত্র তখনই কার্যকর হবে যদিamountছোট বা সমান হয়balanceএর। - যদি শর্ত মিথ্যা হয় (যেমন, ব্যালেন্সের চাইতে বেশি পরিমাণ টাকা তুলে নেওয়ার চেষ্টা করা), তবে
"Insufficient balance!"এরর মেসেজ সহ ত্রুটি দেখানো হবে।
require() এর বৈশিষ্ট্য:
- সাধারণত ব্যবহার হয় শর্ত যাচাই করার জন্য (যেমন ইনপুট যাচাই বা অনুমতি যাচাই)।
- শর্তটি মিথ্যা হলে গ্যাস অপচয় হয় না, অর্থাৎ ট্রানজেকশন বাতিল হয়ে যায় এবং খরচ কম হয়।
2. assert()
assert() একটি ফাংশন যা সাধারণত আভ্যন্তরীণ ভুল বা অবস্থার জন্য ব্যবহৃত হয়। এটি বিশেষভাবে এমন পরিস্থিতিতে ব্যবহৃত হয় যেখানে কন্ট্রাক্টের আভ্যন্তরীণ অবস্থা সঠিক কিনা তা যাচাই করা হয়। assert() শর্তটি মিথ্যা হলে একটি অপ্রত্যাশিত ত্রুটি তৈরি হয় এবং সমস্ত গ্যাস অপচয় হয়ে যায়। এটি সাধারণত শর্ত বা লজিক ভুল শনাক্ত করতে ব্যবহৃত হয়।
assert() ব্যবহার উদাহরণ:
pragma solidity ^0.8.0;
contract AssertExample {
uint public balance;
constructor() {
balance = 1000;
}
function withdraw(uint amount) public {
assert(balance >= amount); // আভ্যন্তরীণ শর্ত যাচাই
balance -= amount; // ব্যালেন্স আপডেট
}
}ব্যাখ্যা:
- এখানে
assert()ব্যবহার করা হয়েছে আভ্যন্তরীণ শর্ত যাচাই করার জন্য, যা নিশ্চিত করবে যে,balanceথেকে তোলার পরিমাণ কমপক্ষেamountএর সমান বা বড়। - যদি শর্তটি মিথ্যা হয়, তবে একটি ত্রুটি ঘটবে এবং গ্যাস অপচয় হবে।
assert() এর বৈশিষ্ট্য:
- আভ্যন্তরীণ অবস্থার সঠিকতা যাচাই করতে ব্যবহৃত হয় (যেমন, ভারসাম্য বা অন্যান্য স্টোরড ডেটা)।
- যদি শর্তটি মিথ্যা হয়, তবে সমস্ত গ্যাস অপচয় হয়ে যায়, এবং কন্ট্রাক্টের কার্যক্রম থেমে যায়।
3. revert()
revert() একটি ফাংশন যা ট্রানজেকশন বাতিল করার জন্য ব্যবহৃত হয় এবং ত্রুটি মেসেজ সহ পুনরুদ্ধারের (revert) কাজ করে। revert() এর মাধ্যমে আপনি শর্ত পূর্ণ না হলে কন্ট্রাক্টের কাজ বাতিল করতে পারেন এবং ব্যবহারকারীকে ত্রুটি মেসেজ প্রদান করতে পারেন।
revert() ব্যবহার উদাহরণ:
pragma solidity ^0.8.0;
contract RevertExample {
uint public balance;
constructor() {
balance = 1000;
}
function withdraw(uint amount) public {
if (amount > balance) {
revert("Insufficient balance!"); // ট্রানজেকশন রিভার্ট করা
}
balance -= amount; // ব্যালেন্স আপডেট
}
}ব্যাখ্যা:
- এখানে
revert()ব্যবহৃত হয়েছে যদিamountব্যালেন্সের চেয়ে বেশি হয়। এই ক্ষেত্রে, ট্রানজেকশন বাতিল হবে এবং"Insufficient balance!"ত্রুটি মেসেজ প্রদর্শিত হবে। revert()ব্যবহারের মাধ্যমে আমরা কন্ট্রাক্টের কার্যক্রম পুরোপুরি বাতিল করতে পারি এবং ত্রুটির কারণ প্রদান করতে পারি।
revert() এর বৈশিষ্ট্য:
- শর্ত পূর্ণ না হলে কন্ট্রাক্টের কাজ বাতিল করা হয়।
- একটি নির্দিষ্ট ত্রুটি মেসেজ প্রদান করা যায়।
4. Custom Error Types
Solidity তে custom errors (কাস্টম এরর টাইপ) ব্যবহার করে আপনি নিজস্ব ত্রুটি তৈরি করতে পারেন, যা স্মার্ট কন্ট্রাক্টে আরও নির্দিষ্ট ত্রুটি সংক্রান্ত তথ্য প্রদান করে। কাস্টম এরর ব্যবহার করলে গ্যাস খরচ কমে যায় কারণ এদের সাথে অতিরিক্ত স্ট্রিং মেসেজের প্রয়োজন হয় না।
Custom Error Types এর উদাহরণ:
pragma solidity ^0.8.0;
contract CustomErrorExample {
uint public balance;
// কাস্টম এরর ডিক্লেয়ার করা
error InsufficientBalance(uint requested, uint available);
constructor() {
balance = 1000;
}
function withdraw(uint amount) public {
if (amount > balance) {
// কাস্টম এরর রিভার্ট করা
revert InsufficientBalance(amount, balance);
}
balance -= amount; // ব্যালেন্স আপডেট
}
}ব্যাখ্যা:
InsufficientBalanceএকটি কাস্টম এরর যা দুইটি প্যারামিটার নেয়:requestedএবংavailable।withdrawফাংশনটি কাস্টম এররInsufficientBalanceব্যবহার করে, যাতে সরাসরি ত্রুটির কারণ (অনুরোধকৃত পরিমাণ এবং উপলব্ধ ব্যালেন্স) সঠিকভাবে প্রদান করা যায়।
Custom Errors এর বৈশিষ্ট্য:
- কাস্টম এররগুলো গ্যাস সাশ্রয়ী হয় কারণ এগুলো স্ট্রিং মেসেজের পরিবর্তে ইনডেক্সড ডেটা ব্যবহার করে।
- এটি সুনির্দিষ্ট ত্রুটি মেসেজ এবং ফিল্ড প্রদান করে যা স্মার্ট কন্ট্রাক্টের ডিবাগিং এবং ত্রুটি পরিচালনাকে আরও সহজ করে তোলে।
সারাংশ
Solidity তে Proper Error Handling Techniques ব্যবহারের মাধ্যমে স্মার্ট কন্ট্রাক্টের কার্যক্রম এবং নিরাপত্তা নিশ্চিত করা হয়। require(), assert(), revert(), এবং custom error types এই প্রযুক্তিগুলি স্মার্ট কন্ট্রাক্টে ত্রুটি সনাক্তকরণ, শর্ত যাচাই এবং কার্যক্রম বাতিল করার জন্য ব্যবহৃত হয়। প্রতিটি পদ্ধতির নিজস্ব বৈশিষ্ট্য এবং প্রয়োগ রয়েছে, এবং সঠিক ত্রুটি হ্যান্ডলিং স্মার্ট কন্ট্রাক্টের নিরাপত্তা এবং কার্যকারিতা নিশ্চিত করে।
Read more