توابع modifiers در سالیدیتی(solidity)
توابع modifiers در سالیدیتی(solidity) برای تغییر یا محدود کردن رفتار یک تابع در یک قرارداد هوشمند استفاده می شود. می توانید از یک اصلاح کننده یا modifiers برای بررسی خودکار یک شرط قبل از اجرای عملکرد استفاده کنید. به عنوان مثال، قبل از اجرای یک تابع، میتوانید موجودی یک حساب را بررسی کنید، تأیید کنید که فرستنده مالک است، نیاز به دسترسی به یک حساب دارید، و غیره. اصلاحکنندهها بلوکهای کد قابل استفاده مجدد هستند که میتوانند به یک یا چند تابع در قرارداد شما متصل شوند.
به عنوان مثال، تصویر زیر ساختار پایه قرارداد هوشمند Solidity با یک تابع modifiers را توضیح می دهد. اصلاح کننده در تابع اول و سوم برای نشان دادن قابلیت استفاده مجدد از اصلاح کننده ها در کد شما ارجاع داده شده است.
توابع اصلاح کننده (modifire) را می توان برای موارد استفاده مختلف ایجاد کرد. این اصلاح کننده ها را می توان قبل یا بعد از اجرای کدهای تابع اجرا کرد.
“;_” یک کد ویژه است که فقط در تابع modifiers استفاده می شود و کد به solidity دستور می دهد تا کد را در تابع اجرا کند. این یک علامت ادغام است که با ادغام منبع تابع با کد اصلاح کننده در “;_” نشان می دهد که “بقیه” کد تابع کجا باید برود. به عبارت ساده تر می توانید:
- تابع modifiers و سپس تابع اصلی را اجرا کنید
یا
- تابع اصلی و سپس تابع modifiers را اجرا کنید.
ساختار اصلی توابع modifiers در سالیدیتی(solidity)
مثال از تابع modifiers در سالیدیتی
یک مثال استفاده از یک اصلاح کننده برای بررسی اینکه آیا فراخوان دهنده تابع مالک قرارداد است یا خیر. این یک مورد بسیار رایج برای محدود کردن دسترسی به یک تابع است. می توانید یک اصلاح کننده ساده بنویسید که نشان می دهد فقط صاحب قرارداد می تواند کاری انجام دهد. ابتدا باید تابع modifiers را بنویسید سپس باید آن را به یک تابع مرتبط کنید.
در مثال زیر، قرارداد تابع اصلاح کننده onlyOwner را تعریف می کند و از آن در یک تابع استفاده می کند.
//the modifier "onlyOwner" can be used in a function
//if it is called it will evaluate if the entity executing the function is the owner of the contract
//If not the function will not run and "Not Owner" will print
//if it is the owner then the function will execute
modifier onlyOwner() {
require(msg.sender == owner, “Not Owner’);
_;
در مثال زیر، قرارداد، تابع اصلاح کننده onlyOwner را تعریف می کند و از آن در یک تابع استفاده می کند. اگر فراخوان دهنده تابع مالک قراداد نباشد، تابع اجرا نمی شود و پیام “Not Owner” در گزارش چاپ می شود. این کد را در ریمیکس امتحان کنید.
//define which compiler to use
pragma solidity ^0.7.0;
//contract name is MyFirstContract
contract MyFirstContract {
//create two variables. A sting and an address
address owner;
string private name;
//constructor sets the creator of the contract to the owner variable
constructor() {
owner = msg.sender;
}
//modifier checks that the caller of the function is the owner
modifier onlyOwner() {
require(msg.sender == owner, 'Not Owner');
_;
}
//set name. Only the owner of the contract can call because a modifier is specified
function setName(string memory newName) public onlyOwner{
name = newName;
}
//get the name
function getName () public view returns (string memory) {
return name;
}
}
توابع modifiers همچنین میتوانند پارامترهایی از گذشته داشته باشند تا قابلیتهای خود را افزایش دهند. در مثال زیر، اصلاح کننده از آدرس ارسال شده در یک تابع به عنوان پارامتر استفاده می کند. سپس بررسی میکند که آیا آدرس معتبر است یا نه، یک پیام خطا در گزارش چاپ میکند. نکته مهمی که باید به آن توجه داشت این است که اصلاح کننده های تابع می توانند پارامترهای تابع را ارزیابی کنند.
مثال با پارامتر
//this modifier can be reused and called in a function
//this modifier allows the address parameter to be passed to it
Modifier validAddress(address _addr) {
Require(_addr != address(0), “Not a valid address”);
_;
این کد فقط برای اهداف آموزشی است. کد اعتبارسنجی نشده است و با مسئولیت خود استفاده کنید. به یاد داشته باشید که قراردادهای هوشمند آزمایشی هستند و ممکن است حاوی اشکال باشند.
در صورتی که تجربه خاصی در خصوص برنامهنویسی ندارید میتوانید از دورههای رایگان سایت ما “فرازمان“، استفاده کنید. همچنین اگر به دورههای پیشرفتهتری در این خصوص نیاز داشته باشید، ما با آموزش های حرفه ای که در سایتمان قرار دادیم می توانید به سطح دلخواهتان با تلاش و پشتکار برسید.
نقشه راه
راهنما آکادمی فرازمان
برای یادگیری برنامه نویسی بلاکچین…
در این باره بیشتر بخوانید
دیدگاهتان را بنویسید