Solidity তে Custom Errors এবং Error Management একটি গুরুত্বপূর্ণ বিষয়, যা স্মার্ট কন্ট্রাক্টের নিরাপত্তা এবং কার্যকারিতা নিশ্চিত করতে সহায়তা করে। Custom Errors ব্যবহার করে আপনি নিজস্ব ত্রুটি বার্তা তৈরি করতে পারেন, যা স্মার্ট কন্ট্রাক্টের মধ্যে ত্রুটি চিহ্নিত এবং ডিবাগ করার প্রক্রিয়াকে সহজ করে তোলে।
১. Custom Errors
Custom errors Solidity তে একটি নতুন বৈশিষ্ট্য (Solidity 0.8.4+) যা ডেভেলপারদেরকে নিজস্ব ত্রুটি বার্তা তৈরি করার সুযোগ দেয়। এগুলি require, revert বা assert এর মাধ্যমে ট্রিগার করা হতে পারে এবং ব্যবহারকারীদের জন্য আরও স্পষ্ট এবং কাস্টমাইজড ত্রুটি বার্তা প্রদান করতে সাহায্য করে।
এটি প্রাচীন ত্রুটি বার্তা পদ্ধতির তুলনায় আরও গ্যাস-কার্যকরী, কারণ এতে অতিরিক্ত স্ট্রিং মেসেজ সংরক্ষণ করার প্রয়োজন হয় না।
Custom Errors এর গঠন
Custom errors এ সাধারণত একটি নাম এবং এর সাথে প্রাসঙ্গিক ডেটা (যেমন, ভেরিয়েবলের মান) থাকে।
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract CustomErrorExample {
// Custom error declaration
error InsufficientBalance(uint requested, uint available);
uint public balance;
constructor() {
balance = 1000; // Initial balance
}
// Deposit function
function deposit(uint amount) public {
balance += amount;
}
// Withdraw function with custom error
function withdraw(uint amount) public {
if (amount > balance) {
// Trigger custom error if insufficient balance
revert InsufficientBalance(amount, balance);
}
balance -= amount;
}
}এখানে:
InsufficientBalanceএকটি custom error যাrequestedএবংavailableমান নেয়। এটি তখন ট্রিগার হয় যখন ব্যবহারকারী যে পরিমাণ অর্থ তুলতে চায় তা ব্যালেন্সের তুলনায় বেশি হয়।revert InsufficientBalance(amount, balance);এর মাধ্যমে এই কাস্টম ত্রুটি বার্তা তৈরি হয় এবং ট্রানজেকশন বাতিল করা হয়।
২. Error Management in Solidity
Error management স্মার্ট কন্ট্রাক্টে ত্রুটি সনাক্তকরণ এবং ডিবাগিং প্রক্রিয়াকে উন্নত করে। Solidity তে সাধারণত ত্রুটি ব্যবস্থাপনার জন্য require, revert, এবং assert ব্যবহার করা হয়। এগুলি কন্ট্রাক্টে শর্ত যাচাই করতে এবং যদি শর্ত পূর্ণ না হয়, তবে ট্রানজেকশন বাতিল করতে ব্যবহৃত হয়।
৩. Require এবং Revert ব্যবহারের মধ্যে পার্থক্য:
require: এই ফাংশনটি যখন কোনো শর্ত পূর্ণ না হয়, তখন ট্রানজেকশন বাতিল করে দেয় এবং একটি ত্রুটি বার্তা পাঠায়। এটি সাধারণত ব্যবহারকারীর ইনপুট যাচাই করতে ব্যবহৃত হয়।revert:revertব্যবহার করে আপনি কাস্টম ত্রুটি বার্তা পাঠাতে পারেন এবং ট্রানজেকশন বাতিল করতে পারেন। এটি সাধারনতrequireএর মতোই কাজ করে, তবে কাস্টম error এর জন্য এটি বেশি ব্যবহৃত হয়।
require এবং revert এর উদাহরণ:
pragma solidity ^0.8.0;
contract ErrorManagement {
uint public balance;
constructor() {
balance = 1000; // Initial balance
}
// Deposit function
function deposit(uint amount) public {
require(amount > 0, "Deposit amount must be greater than zero");
balance += amount;
}
// Withdraw function with revert and custom error
function withdraw(uint amount) public {
if (amount > balance) {
revert("Insufficient balance for withdrawal");
}
balance -= amount;
}
}এখানে:
require(amount > 0, "Deposit amount must be greater than zero");এই লাইনে নিশ্চিত করা হচ্ছে যে ডিপোজিটের পরিমাণ শূন্যের চেয়ে বেশি।revert("Insufficient balance for withdrawal");এই লাইনে, যদি ব্যালেন্স কম হয়, তবে ট্রানজেকশন রিভার্স হবে এবং ত্রুটি বার্তা দেখানো হবে।
৪. Assert এর ব্যবহার:
assert সাধারণত অভ্যন্তরীণ শর্ত যাচাই করতে ব্যবহৃত হয়, যেমন ডেটা ইনভ্যারিয়েন্ট বা লজিক্যাল ভুল সনাক্ত করার জন্য। এটি যখন কোনো শর্ত ভুল হয়, তখন টাকার পরিমাণের মতো ইন্টারনাল অবস্থার ত্রুটি প্রদর্শন করে এবং সম্পূর্ণ ট্রানজেকশন বাতিল করে দেয়।
assert এর উদাহরণ:
pragma solidity ^0.8.0;
contract Example {
uint public balance;
constructor() {
balance = 1000;
}
// Withdraw function with assert
function withdraw(uint amount) public {
assert(amount <= balance); // Ensure that the withdrawal amount is not greater than balance
balance -= amount;
}
}এখানে:
assert(amount <= balance);নিশ্চিত করছে যে উইথড্রয়ের জন্য নির্ধারিত পরিমাণ ব্যালেন্সের চেয়ে বেশি নয়। যদি এটি ভুল হয়, তাহলে পুরো ট্রানজেকশন বাতিল হয়ে যাবে।
Custom Errors এবং Error Management এর সুবিধা
- গ্যাস খরচ কমানো: Custom errors এর মাধ্যমে ডেটা স্টোরেজ খরচ কমানো যায় কারণ এতে স্ট্রিং বার্তা সংরক্ষণ করা হয় না।
requireবাassertএর তুলনায়revertব্যবহার করে কাস্টম ত্রুটি বার্তা পাঠানো গ্যাস খরচে সাশ্রয়ী। - উন্নত ত্রুটি সনাক্তকরণ: কাস্টম ত্রুটি ব্যবস্থাপনার মাধ্যমে আপনি স্পষ্ট এবং কাস্টমাইজড ত্রুটি বার্তা পাঠাতে পারেন, যা ডেভেলপারদের জন্য ডিবাগিং সহজ করে তোলে।
- নিরাপত্তা নিশ্চিতকরণ: Error management সঠিক শর্ত যাচাইয়ের মাধ্যমে নিরাপত্তা বাড়ায়, যেমন ব্যালেন্স চেক, পেমেন্ট শর্ত ইত্যাদি।
সারাংশ
Custom errors এবং error management Solidity তে স্মার্ট কন্ট্রাক্টের নিরাপত্তা এবং কার্যকারিতা নিশ্চিত করতে ব্যবহৃত হয়। require, revert, এবং assert এর মতো ফাংশনগুলো শর্ত যাচাই করতে এবং ত্রুটি চিহ্নিত করতে ব্যবহৃত হয়, যেখানে require সাধারণত ব্যবহারকারীর ইনপুট যাচাই করে, assert অভ্যন্তরীণ ত্রুটি চিহ্নিত করে এবং revert কাস্টম ত্রুটি বার্তা পাঠানোর জন্য ব্যবহৃত হয়। Custom errors স্মার্ট কন্ট্রাক্টে ত্রুটি সনাক্তকরণের একটি কার্যকরী উপায়, যা গ্যাস খরচ কমাতে এবং ডিবাগিং সহজ করতে সহায়তা করে।
Read more