در این مقاله با مفهوم Modifiers در سالیدیتی آشنا میشوید و یاد میگیرید چگونه با استفاده از آنها منطق اجرای توابع را کنترل کرده و امنیت قراردادهای هوشمند خود را افزایش دهید.
Modifiers در سالیدیتی چیست؟
Modifier
در سالیدیتی، یا تغییردهنده تابع، سازوکاری است که به شما اجازه میدهد قبل یا بعد از اجرای یک تابع، منطق خاصی را اجرا کنید؛ بدون آنکه مجبور باشید این منطق را در همه توابع بهصورت تکراری بنویسید.
به بیان ساده، Modifier ها روشی برای اعمال محدودیت یا بررسی شرایط بر روی توابع هستند. یکی از کاربردهای رایج آنها، بررسی مالکیت (مثلاً فقط صاحب قرارداد بتواند یک تابع خاص را اجرا کند) است.
آموزش Modifiers در سالیدیتی
ساختار onlyOwner
آنقدر رایج است که بخش جداگانهای را به آن اختصاص میدهیم.
مثال زیر را در نظر بگیرید:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
contract Ownable { address public owner; constructor() { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner, "onlyOwner"); _; } function changeOwner( address newOwner ) public onlyOwner { owner = newOwner; } } contract HoldFunds is Ownable { function withdrawFunds() public onlyOwner { (bool ok, ) = owner.call{ value: address(this).balance }(""); require(ok, "transfer failed"); } receive() external payable { } } |
1 2 3 4 |
modifier onlyOwner() { require(msg.sender == owner, "onlyOwner"); _; } |
این به این معنی است: «کد قبل از زیرخط (_) را اجرا کن، سپس تابع را اجرا کن.»
این یک روش مفید برای «تغییر» رفتار تابع است، به همین دلیل نام آن «modifiers» (تغییردهنده) است.
دقت کنید با اینکه HoldFunds
از Ownable
ارث بری کرده، هیچ تابعی را بازنویسی نکرده است. در سالیدیتی، وراثت بیشتر برای افزودن قابلیتها و رفتارها به کار میرود، نه برای پیاده سازی چندریختی (polymorphism). (اگر با این مفهوم آشنا نیستید، نگران نباشید.)
پس در این حالت، اگر میخواهید قرارداد هوشمند شما توابع کاربردی مفیدی داشته باشد، میتوانید قراردادی دیگر را وارد کنید که این قابلیتها را ارائه میدهد.
استفاده از قراردادهای جداگانه برای سازماندهی کد ضروری نیست و میتوان تمام منطق را در یک قرارداد واحد پیادهسازی کرد، اما این کار موجب کاهش خوانایی و نگهداری سختتر کد میشود.
از modifiers میتوان برای اهداف مختلفی استفاده کرد، اما متداولترین کاربرد آنها بررسی مالکیت در توابع حساس است.
اگرچه زبان سالیدیتی اجازه تغییر وضعیت قرارداد در درون modifiers را میدهد، این عمل توصیه نمیشود؛ چراکه موجب پیچیدهتر شدن تحلیل و درک رفتار قرارداد خواهد شد.
راستی! برای دریافت مطالب جدید در کانال تلگرام یا پیج اینستاگرام سورس باران عضو شوید.
- انتشار: ۱۷ اردیبهشت ۱۴۰۴
دسته بندی موضوعات
- آموزش ارز دیجیتال
- آموزش برنامه نویسی
- آموزش متنی برنامه نویسی
- اطلاعیه و سایر مطالب
- پروژه برنامه نویسی
- دوره های تخصصی برنامه نویسی
- رپورتاژ
- فیلم های آموزشی
- ++C
- ADO.NET
- Adobe Flash
- Ajax
- AngularJS
- apache
- ARM
- Asp.Net
- ASP.NET MVC
- AVR
- Bootstrap
- CCNA
- CCNP
- CMD
- CSS
- Dreameaver
- EntityFramework
- HTML
- IOS
- jquery
- Linq
- Mysql
- Oracle
- PHP
- PHPMyAdmin
- Rational Rose
- silver light
- SQL Server
- Stimulsoft Reports
- Telerik
- UML
- VB.NET&VB6
- WPF
- Xml
- آموزش های پروژه محور
- اتوکد
- الگوریتم تقریبی
- امنیت
- اندروید
- اندروید استودیو
- بک ترک
- بیسیک فور اندروید
- پایتون
- جاوا
- جاوا اسکریپت
- جوملا
- دلفی
- دوره آموزش Go
- دوره های رایگان پیشنهادی
- زامارین
- سئو
- ساخت CMS
- سی شارپ
- شبکه و مجازی سازی
- طراحی الگوریتم
- طراحی بازی
- طراحی وب
- فتوشاپ
- فریم ورک codeigniter
- فلاتر
- کانستراکت
- کریستال ریپورت
- لاراول
- معماری کامپیوتر
- مهندسی اینترنت
- هوش مصنوعی
- یونیتی
- کتاب های آموزشی
- Android
- ASP.NET
- AVR
- LINQ
- php
- Workflow
- اچ تی ام ال
- بانک اطلاعاتی
- برنامه نویسی سوکت
- برنامه نویسی موبایل
- پاسکال
- پایان نامه
- پایتون
- جاوا
- جاوا اسکریپت
- جی کوئری
- داده کاوی
- دلفی
- رباتیک
- سئو
- سایر کتاب ها
- سخت افزار
- سی اس اس
- سی پلاس پلاس
- سی شارپ
- طراحی الگوریتم
- فتوشاپ
- مقاله
- مهندسی نرم افزار
- هک و امنیت
- هوش مصنوعی
- ویژوال بیسیک
- نرم افزار و ابزار برنامه نویسی
- وردپرس