وبلاگ

مدیریت خطا در سالیدیتی

مدیریت خطا در سالیدیتی
سالیدیتی

مدیریت خطا در سالیدیتی

زبان برنامه نویسی سالیدیتی عملکردهای زیاد و مختلفی برای مدیریت خطا دارد. خطاها ممکن است در زمان کامپایل یا زمان اجرا رخ دهند.به طور کلی هنگامی که یک خطا رخ می دهد، وضعیت به حالت اولیه خود برمی گردد.بررسی های دیگر خطا برای جلوگیری از دسترسی غیرمجاز به کد است. سالیدیتی به byte code کامپایل می شود و در آنجا خطای نحوی در زمان کامپایل بررسی می شود، در حالی که خطاهای زمان اجرا دشوار است و عمدتاً هنگام اجرای قراردادها رخ می دهد.​برخی از خطاهای زمان اجرا عبارتند از خطای out-of-gas ، خطای سرریز نوع داده ، خطای آرایه خارج از فهرست و … می باشد.بعد از نسخه  4.10 ساختار جدیدی از مدیریت خطاها با عنوان های assert, require, revert معرفی شدند که در بخش زیر به معرفی انواع مدیریت خطا در سالیدیتی خواهیم پرداخت.

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

  1. هر آنچه که باید در مورد اتریوم بدانید
  2. قرارداد هوشمند یا اسمارت کانترکت (Smart Contract) چیست؟
  3. چگونه یک برنامه نویس سالیدیتی شویم؟
  4. کاربردهای برنامه نویسی سالیدیتی
  5. توسعه قرارداد هوشمند در محیط ریمیکس
  6. مکان داده در برنامه نویسی سالیدیتی
  7. دستورات شرطی در سالیدیتی
  8. دستور Enums در برنامه نویسی سالیدیتی
مدیریت خطا در سالیدیتی
مدیریت خطا در سالیدیتی

مدیریت خطا در سالیدیتی (Require)

برای ارزیابی ورودی ها، پیش شرط ها و خروجی های توابع استفاده می شود. در صورت خطا در ارزیابی، سالیدیتی یک خطا به کاربر نمایش می دهد. عبارت require یک پیام خطای اختیاری را می پذیرد. اگر خرابی وجود داشته باشد، تمام گس مصرف نمی شود.عبارات “require” پیش نیازهای اجرای تابع را اعلام می کند، یعنی محدودیت هایی را که باید قبل از اجرای کد رعایت شوند، اعلام می کند. یک آرگومان واحد را می پذیرد و پس از ارزیابی یک مقدار بولی را برمی گرداند، همچنین یک گزینه پیام رشته سفارشی دارد. اگر false باشد، استثنا مطرح می شود و اجرا خاتمه می یابد. Gas استفاده نشده به تماس گیرنده برمی گردد و حالت به حالت اولیه خود برمی گردد.

آموزش سالیدیتی برنامه نویسی قرارداد هوشمند

مثال:درقطعه کد زیر در قرارداد نحوه ی استفاده از حالت require نمایش داده شده است.

// Solidity program to demonstrate require statement
pragma solidity ^0.5.0;

// Creating a contract
contract requireStatement {
	
	// Defining function to check input
	function checkInput(uint _input) public view returns(string memory){
		require(_input >= 0, "invalid uint8");
		require(_input <= 255, "invalid uint8");
		
		return "Input is Uint8";
	}
	
	// Defining function to use require statement
	function Odd(uint _input) public view returns(bool){
		require(_input % 2 != 0);
		return true;
	}
}

مثالی دیگر از مدیریت خطا حالت 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
 

تصویر مربوط به کدهای Require در محیط ریمیکس

Require Statements

مدیریت خطا در سالیدیتی (Assert)

سینتکس آن مشابه عبارت require است. پس از ارزیابی شرط، یک مقدار بولی برمی گرداند. بر اساس مقدار بازگشتی یا برنامه به اجرای خود ادامه می دهد یا یک استثنا ایجاد می کند. به جای بازگرداندن Gas استفاده نشده، عبارت assert کل منبع Gas را مصرف می کند و سپس حالت به حالت اولیه بر می گردد. Assert برای بررسی وضعیت فعلی و شرایط عملکرد قبل از اجرای قرارداد استفاده می شوداز Assert برای بررسی شرایطی استفاده می شود که هرگز نباید امکان پذیر باشد. Assert باید همیشه درست ارزیابی شوند و هرگز نباید شکست بخورند. اگر شکست بخورند، یک اشکال در کد به وجود می آید و شبکه تمام گس را مصرف می کند و تراکنش برگشت داده می شود.

کسب درآمد دلاری با قرارداد هوشمند

Error Handling in Solidity

مثال:درقطعه کد زیر در قرارداد نحوه ی استفاده از حالت Assert نمایش داده شده است.

// Solidity program to demonstrate assert statement
pragma solidity ^0.5.0;

// Creating a contract
contract assertStatement {

	// Defining a state variable
	bool result;

	// Defining a function to check condition
	function checkOverflow(uint _num1, uint _num2) public {
		uint sum = _num1 + _num2;
		assert(sum<=255);
		result = true;
	}
	
	// Defining a function to print result of assert statement
	function getResult() public view returns(string memory){
		if(result == true){
			return "No Overflow";
		}
		else{
			return "Overflow exist";
		}
	}
}

تصویر مربوط به کدهای Assert در محیط ریمیکس

Assert Statement

مثالی دیگر از مدیریت خطا حالت Assert

مدیریت خطا در سالیدیتی (Revert)

این عبارت مشابه عبارت require است. هیچ شرطی را ارزیابی نمی کند و به هیچ حالت یا عبارتی بستگی ندارد. برای ایجاد استثناها، نمایش خطاها و برگرداندن فراخوانی تابع استفاده می شود. این عبارت حاوی یک پیام رشته ای است که مشکل مربوط به اطلاعات استثنا را نشان می دهد. فراخوانی عبارت revert به این معنی است که یک استثنا نمایش داده می شود، Gas استفاده نشده برمی گردد و حالت به حالت اولیه خود باز می گردد. Revert برای رسیدگی به انواع استثناهای مورد نیاز استفاده می شود، اما با منطق کمی پیچیده تر.(Revert) شبیه به (Require) است اما فقط یک آرگومان می گیرد که پیام خطا است. هنگامی که شرایط بررسی پیچیده است، استفاده از Revert ممکن است بهتر باشد.

مشاهده  ماشین مجازی اتریوم چیست؟
انواع مدیریت خطا در سالیدیتی
انواع مدیریت خطا در سالیدیتی

مثال:درقطعه کد زیر در قرارداد نحوه ی استفاده از حالت Revert نمایش داده شده است.

// Solidity program to demonstrate revert statement
pragma solidity ^0.5.0;

// Creating a contract
contract revertStatement {

// Defining a function to check condition
function checkOverflow(uint _num1, uint _num2) public view returns(string memory, uint){
		uint sum = _num1 + _num2;
		if(sum < 0 || sum > 255){
			revert(" Overflow Exist");
		}
		else{
			return ("No Overflow", sum);
		}
		
	}
	
}
	
}

تصویر مربوط به کدهای Revert در محیط ریمیکس

Revert Statement

مثالی دیگر از مدیریت خطا حالت Revert

منبع کدهای مقاله مدیریت خطا در سالیدیتی

وب سایت: geeksforgeeks

دیدگاه خود را اینجا قرار دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

محبوب ترین دوره ها

برچسب های محبوب

Mapping Solidity Inheritance آموزش برنامه نویسی سالیدیتی آموزش سالیدیتی آموزش قرارداد هوشمند اجزای قرارداد هوشمند ارز دیجیتال اتریوم ارز دیجیتال یونی ارزهای متاورسی الگوریتم اثبات کار الگوریتم اجماع امنیت کیف پول اهمیت قرارداد هوشمند اپلیکیشن متمرکز برنامه نویس سالیدیتی برنامه نویسی اتریوم برنامه نویسی بلاکچین برنامه نویسی ریمیکس برنامه نویسی سالیدیتی برنامه نویسی شی‌ گرا برنامه نویسی قرارداد هوشمند بلاکچین بلاک چین اتریوم بهترین ارزهای دیجیتال ترون چیست توسعه دهنده سالیدیتی صرافی های ارزدیجیتال صرافی‌ غیرمتمرکز قرارداد هوشمند قیمت پولکادات متاورس مزایای قرارداد هوشمند نوشتن سیستم رای گیری با سالیدیتی نوشتن قرارداد هوشمند واقعیت مجازی متاورس ویژگی‌های اتریوم پلتفرم های ارزدیجیتال پیش نیاز قرارداد هوشمند کاربرد قرارداد هوشمند کد نویسی سالیدیتی کسب درآمد با قرارداد هوشمند کسب درآمد در متاورس کیف پول ارزدیجیتال کیف پول الکترونیکی کیف پول نرم‌افزاری