مدیریت خطا (Error Handling) در قراردادهای هوشمند Solidity
مدیریت خطا (Error Handling) در قراردادهای هوشمند Solidity
مدیریت خطا (Error Handling) در قراردادهای هوشمند Solidity به صورت زیر است:
ادعا (Assert)– برای بررسی شرایطی استفاده می شود که هرگز نباید امکان پذیر باشد. ادعاها باید همیشه درست ارزیابی شوند و هرگز نباید شکست بخورند. اگر شکست بخورند، یک اشکال در کد به وجود می آید و شبکه تمام گس را مصرف می کند و تراکنش برگشت داده می شود.
مثال:
Uint public balance; //state variable
Function deposit (uint _amount) public {
Uint oldBalance = balance;
Balance += _amount;
Assert(balance >= _amount;
// this assert statement should be true and we should really use require
// the statement below in the require section is correctly used
نیاز (Require) – برای ارزیابی ورودی ها، پیش شرط ها و خروجی های توابع استفاده می شود. در صورت خطا در ارزیابی، سالیدیتی یک خطا به کاربر نمایش می دهد. عبارت require یک پیام خطای اختیاری را می پذیرد. اگر خرابی وجود داشته باشد، تمام گس مصرف نمی شود.
مثال:
Function deposit (uint _amount) public {
Uint oldBalance = balance;
Uint newBalance = balance +amount
Require(newBalance >= oldBalance, “Overflow”); // we need to check the requirement first then update the balance
Balance += +amount; // after checking our condition then perform adding the amount to the balance
Assert(balance>= +amount; // this assert statement should be true
برگرداندن (Revert) – شبیه به نیاز(Require) است اما فقط یک آرگومان می گیرد که پیام خطا است. هنگامی که شرایط بررسی پیچیده است، استفاده از Revert ممکن است بهتر باشد.
مثال:
Function withdraw (uint _amount) public {
Uint oldBalance = balance;
Require(newBalance<= oldBalance, “Overflow”);
If (balance < _amount) {
Revert(“underflow) {
Balance += +amount;
در صورتی که تجربه خاصی در خصوص برنامهنویسی ندارید میتوانید از دورههای رایگان سایت ما “فرازمان“، استفاده کنید. همچنین اگر به دورههای پیشرفتهتری در این خصوص نیاز داشته باشید، ما با آموزش های حرفه ای که در سایتمان قرار دادیم می توانید به سطح دلخواهتان با تلاش و پشتکار برسید.
نقشه راه
راهنما آکادمی فرازمان
برای یادگیری برنامه نویسی بلاکچین…
در این باره بیشتر بخوانید
2 Comments
به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.
سلام روز بخیر
استفاده از require کاری که میگید رو انجام میده اما باید یک نکته رو در نظر داشت که باعث میشه حجم قرارداد بالا بره و تو قراردادهای بزرگ مشکل حجم پیش میاد،حتی المقدور اگه بشه از if و تو else از revert استفاده بشه همون نتیجه با حجم و هزینه کمتری بدست میاد.
موفق باشید.
سپاس از نظری که دادید. این خط کد ها جنبه آموزشی دارند و افراد در سطح پیشرفته برای بهینه سازی کدشون باید بیشتر تحقیق کنند. باز هم از نظر شما سپاسگذاریم