اصلاح کننده توابع در سالیدیتی
4 مرداد 1401 1401-05-04 9:33اصلاح کننده توابع در سالیدیتی
اصلاح کننده توابع در سالیدیتی
توابع modifiers در سالیدیتی برای تغییر یا محدود کردن رفتار یک تابع در یک قرارداد هوشمند استفاده می شود.کاربرد اصلی اصلاح کننده توابع در سالیدیتی بررسی خودکار شرایط قبل از اجرای یک تابع در زبان برنامه نویسی سالیدیتی هست.بدین صورت که اگر شرط برقرار نباشد اجرای تابع متوقف می شود یعنی در صورتی که پیش نیاز ها برقرار باشد دروازه ورود به می توانید از یک اصلاح کننده یا modifiers برای بررسی خودکار یک شرط قبل از اجرای عملکرد استفاده کنید.Modifier ها توابعی هستند که بر روی سایر توابع اعمال میشوند و از آنها میتوان برای چککردن بعضی پیشنیازها مانند کنترل سطوح دسترسی قبل از اجرا شدن سایر توابع استفاده کرد.Function Modifiers برای تغییر رفتار یک تابع استفاده می شود. به عنوان مثال برای اضافه کردن یک پیش نیاز به یک تابع.
جهت دریافت اطلاعات بیشتر قبل از مطالعه مقاله اصلاح کننده توابع در سالیدیتی توصیه می کنیم مقالات و محتواهای آموزش زبان سالیدیتی را هم مطالعه نمایید.
- قرارداد هوشمند یا اسمارت کانترکت (Smart Contract) چیست؟
- کسب درآمد دلاری با قرارداد هوشمند
- توسعه قرارداد هوشمند در محیط ریمیکس
- مدیریت خطا در سالیدیتی
- وراثت در سالیدیتی
- دستورات شرطی در سالیدیتی
کاربرد اصلاح کننده توابع در سالیدیتی
از اصلاح کننده توابع در سالیدیتی می توان برای موارد زیر استفاده کرد:
- محدود کرد دسترسی ها
- اعتبار سنجی ورودی ها
- جلوگیری و محافظت از هک ورود مجدد
اصلاح کننده ها به اجرای رفتار یک تابع کمک می کنند. رفتار یک تابع را می توان با استفاده از یک تغییر دهنده تابع تغییر داد، همچنین می توان آنها را قبل یا بعد از اجرای یک تابع فراخوانی کرد.به عنوان مثال، قبل از اجرای یک تابع، میتوانید موجودی یک حساب را بررسی کنید، تأیید کنید که فرستنده مالک است، نیاز به دسترسی به یک حساب دارید، و غیره. اصلاحکنندهها بلوکهای کد قابل استفاده مجدد هستند که میتوانند به یک یا چند تابع در قرارداد شما متصل شوند.
modifier isOwner() {
require(msg.sender == owner);
_;
}
function increment() public isOwner {
count = count + 1;
}
همانطور که در قطعه کد بالا مشاهده میکنید، modifier ها دقیقا مشابه توابع تعریف میشوند. در تعریف isOwner، در مقاله مدیریت خطا در سالیدیتی در مورد تابع require توضیح دادیم.تابع require شرطی که درون پرانتز آن مشخص شده است بررسی میکند، اگر شرط برقرار نباشد یک exception اتفاق میافتد و اجراء قرارداد خاتمه مییابد. در غیر اینصورت کلمه کلیدی” _ ” به کامپایلر میگوید که “_” را با کد تابعی که modifier بر روی آن اعمال شده است، جایگزین کند.در تصویر زیر ساختار توابع modifiers در سالیدیتی برای شما آورده شده است.
مثالی از اصلاح کننده توابع در سالیدیتی
در قسمت زیر یک نمونه مقال و کد از توابع modifiers در سالیدیتی ابتدا آورده شده و توضیحات مربوط به کدهای نوشته شده در ادامه به شما ارائه خواهد شد.
pragma solidity ^0.5.12;
contract FuncModifier {
// We will use these variables to demonstrate how to use
// modifiers.
address public Host;
uint public x = 10;
bool public locked;
constructor()public {
// Set the transaction sender as the Host of the contract.
Host = msg.sender;
}
modifier onlyHost() {
require(msg.sender == Host, "Not Host");
_;
}
//Inputs can be passed to a modiier
modifier validAddress(address _addr) {
require(_addr != address(0), "Not valid address");
_;
}
function changeHost(address _newHost) public onlyHost validAddress(_newHost) {
Host = _newHost;
}
// Modifiers can be called before and / or after a function.
// This modifier prevents a function from being called while
// it is still executing.
modifier noReentrancy() {
require(!locked, "No reentrancy");
locked = true;
_;
locked = false;
}
function decrement(uint i) public noReentrancy {
x -= i;
if (i > 1) {
decrement(i - 1);
}
}
}
توضیحات مربوط به کد اصلاح کننده توابع در سالیدیتی
خط 4: ما یک قرارداد FuncModifier ایجاد می کنیم.
خطوط 7 تا 9: چند متغیر ایجاد می کنیم و از آنها برای نشان دادن نحوه استفاده از اصلاح کننده ها استفاده می کنیم.
خطوط 11 تا 14: فرستنده تراکنش را به عنوان میزبان قرارداد تعیین می کنیم.
خط 17: ما از اصلاح کننده در تابع onlyhost استفاده می کنیم تا بررسی کنیم که تماس گیرنده میزبان قرارداد است.
خط 19: ما زیرخط را می بینیم، زیرخط یک کاراکتر خاص است که فقط در یک تغییر دهنده تابع استفاده می شود و به Solidity می گوید که بقیه کد را اجرا کند.
خط 24: این اصلاح کننده بررسی می کند که آدرس ارسال شده آدرس صفر نباشد.
خط 36: این اصلاح کننده از فراخوانی یک تابع در حالی که هنوز در حال اجرا است جلوگیری می کند. به عنوان اصلاح کننده ها را می توان قبل و/یا بعد از یک تابع فراخوانی کرد.
منابع مقاله اصلاح کننده توابع در سالیدیتی
وب سایت: educative.io – cryptomarketpool.com