• تهران -خیابان شریعتی - بالاتر از سه راه ملک - روبروی آتش نشانی - آرتارسانه
  • تلفن تماس: 02191303424

مقایسه assert , require , revert در سالیدیتی

مقایسه assert , require , revert در سالیدیتی

سلام ما قبلا در دوره آموزش برنامه نویسی سالیدیتی و برنامه نویسی بلاکچین بصورت ویديویی تفاوت های بین شرط های  assert()، require() و revert()  را بررسی کردیم در این مقاله سعی داریم این تفاوت ها را بصورت تکمیلی و مکتوب تشریح کنیم.

توابع assert()، require() و revert() در Solidity نسخه 0.4.10،  معرفی شدند.
  توابع assert and require توابع راحتی هستند که شرایط را بررسی می کنند. در مواردی که شرایط رعایت نمی شود استثنا و وقفه بوچود میآورند.

require برای اعتبارسنجی ورودی ها و شرایط قبل از اجرا استفاده می شود.

assert برای بررسی کدهایی که هرگز نباید نادرست باشند استفاده می شود.

assert ناموفق احتمالاً به این معنی است که یک اشکال وجود دارد.

() revert برای اجرای توقف و برگرداندن تغییرات حالت استفاده می شود

نحو نوشتاری توابع :

assert(bool condition)   :

باعث ایجاد خطای Panic می شود و در نتیجه در صورت درست نبودن  شرط، بازگشت تغییر حالت – برای خطاهای داخلی استفاده می شود.

require(bool condition) در صورت برآورده نشدن شرط برمی‌گردد – برای خطا در ورودی‌ها یا اجزای خارجی استفاده می‌شود.

require(bool condition, string memory message) در صورت عدم رعایت شرایط برمی‌گردد – برای خطا در ورودی‌ها یا اجزای خارجی استفاده می‌شود. همچنین یک پیغام خطا ارائه می دهد.

() revert اجرای را قطع کرده و تغییرات حالت را برگرداند

revert(string memory reason)   لغو اجرای و برگرداندن تغییرات حالت، ارائه یک رشته توضیحی

توابع assert() **و require() ** بخشی از توابع جلوگیری از اجرای خطا در Solidity هستند. Solidity از error handling  fبرای رسیدگی به  خطا و  بازگرداندن حالت استفاده می کند.

این بدان معناست که تمام تغییرات ایجاد شده در قرارداد در آن فراخوانی یا هر فراخوانی فرعی در صورت بروز خطا لغو می شود. همچنین یک خطا را علامت گذاری می کند.
آنها کاملا مشابه هستند زیرا هر دو شرایط را بررسی می کنند و در صورت عدم برآورده شدن، خطا ایجاد می کنند.

مصرف گس در سالیدیتی

تفاوت بین این دو این است که عملکرد **assert() **در صورت false، تمام گس فی باقیمانده را مصرف می کند و همه تغییرات ایجاد شده را برمی گرداند.

در همین حال، ** require() **عملکرد وقتی false باشد، تمام تغییرات انجام شده در قرارداد را نیز برمی‌گرداند، اما تمام هزینه‌های گس باقی‌مانده را که ما پیشنهاد پرداخت کرده‌ایم بازپرداخت می‌کند.
این رایج ترین تابع Solidity است که توسط توسعه دهندگان برای اشکال زدایی و مدیریت خطا استفاده می شود.

نتیجه گیری

برای رسیدگی به خطاها، Solidity تغییراتی را که ممکن است باعث ایجاد مشکل شده باشد، خنثی می کند.

بررسی خطاهای داخلی نیاز به تجزیه و تحلیل شرایط
استثناهایی که Solidity Revert ایجاد می کند می تواند شامل رشته های خطا باشد