آموزش سالیدیتی Solidity
[vc_row][vc_column][vc_column_text]
آموزش سالیدیتی Solidity
آموزش سالیدیتی Solidity، به ظهور صنعت بلاکچین افراد زیادی به دنبال آن رفتند که با برنامه نویسی بلاکچین به زبان سالیدیتی آشنا شوند.و از آنجایی که آشنایی به زبان برنامه نویسی سالیدیتی دارای هزینه است، تیم زوم ارز تلاش کرد تا بتوانید محتوای بسیار خوبی را درباره برنامه نویسی بلاکچین تهیه کنند و افرادی که با برنامه نویسی آشنا هستند، می توانند از طریق این محتوا با سینتکس های زبان برنامه نویسی سالیدیتی آشنا شوند.[/vc_column_text][/vc_column][/vc_row][vc_row][vc_column][vc_tta_tour][vc_tta_section title=”Overview” tab_id=”Overview”][vc_column_text]
زبان برنامه نویسی Solidity سالیدیتی چیست؟ یک زبان برنامه نویسی سطح بالا و قرارداد محور برای اجرای قراردادهای هوشمند است. سالیدیتی Solidity بسیار تحت تاثیر زبان های C++ Python، و JavaScript است و برای هدف قرار دادن ماشین مجازی اتریوم یا EVM طراحی شده است.
این آموزش یا مقاله مبتدیان را برای یادگیری زبان برنامه نویسی سالیدیتی Solidity مورد هدف قرار داده است و آنها را برای یادگیری مفاهیم پیشرفته تر در سالیدیتی راهنمایی می کند. پس از اتمام این آموزش شما می توانید شروع به توسعه دانش خود کنید و به راحتی دانش خود را پیاده سازی کنید.
سالیدیتی Solidity از انواع کتابخانه ها و زبان برنامه نویسی پیچیده تعریف شده توسط کاربر پشتیبانی می کند. برای ایجاد قراردادهایی همچون سرمایه گذاری گسترده و کیف پول های چند امضایی می توانید از سالیدیتی Solidity استفاده کنید.
اتریوم Ethereum چیست؟
اتریوم غیرمتمرکز است. اتریوم در واقع یک پلتفرم بلاکچین است که قراردادهای هوشمند را اجرا می کند، برنامه هایی که دقیقا اجرا می شوند و هیچگونه احتمال خرابی یا تداخل شخص ثالث در آن وجود ندارد.
ماشین مجازی اتریوم EVM
ماشین مجازی اتریوم یا Ethereum Virtual Machine که به آن EVM نیز گفته می شود، محیطی برای اجرای قراردادهای هوشمند در اتریوم است. ماشین مجازی اتریوم در تامین امنیت و اجرای کدهای نامعتبر در سراسر جهان متمرکز است.
EVM تخصصی در جلوگیری از حملات دارد و اطمینان حاصل می کند که ارتباطات بدون هیچگونه تداخل بالقوه ای برقرار می شود. ماشین مجازی اتریوم Ethereum Virtual Machine به گونه ای طراحی شده است که به عنوان یک محیط اجرا برای قراردادهای هوشمند مبتنی بر اتریوم عمل می کند.
قرارداد هوشمند Smart Contract چیست؟
قرارداد هوشمند یک پروتکل رایانه ای است که برای تسهیل، تایید یا اجرای قرارداد به صورت دیجیتالی طراحی شده است. قراردادهای هوشمند انجام معاملات و یا تراکنش های معتبر را بدون اشخاص ثالث امکان پذیر می کند و این معاملات یا تراکنش ها قابل پیگیری و برگشت ناپذیر است.
مفهوم قراردادهای هوشمند برای اولین بار توسط Nick Szabo در سال ۱۹۹۴ ارائه شد. در ادامه به جزئیات بیشتری در ارتباط با قراردادهای هوشمند خواهیم پرداخت.
[/vc_column_text][/vc_tta_section][vc_tta_section title=”Environment Setup” tab_id=”environmentsetup”][vc_column_text]
آموزش سالیدیتی Solidity – تنظیم محیط
در این فصل توضیح خواهیم داد که چگونه می توان کامپایلر Solidity را بر روی دستگاه CentOS راه اندازی کرد. اگر دستگاه مجهز به سیستم عامل لینوکس ندارید، می توانید از کامپایلر Compiler آنلاین ما برای قرارداد های کوچک و یادگیری سریع سالیدیتی Solidity استفاده کنید.
روش ۱ – npm / Node.js
این سریعترین راه برای نصب کامپایلر Solidity بر روی دستگاه CentoS شماست. برای نصب کامپایلر سالیدیتی Solidity مراحل زیر را داریم.
Node.js را نصب کنید
ابتدا مطمئن شوید که Node.js را در دستگاه CentOS خود در دسترس دارید. اگر در دسترس نیست، با استفاده از دستورات زیر آن را نصب کنید.
اگر همه چیز نصب شده باشد، خروجی شما به شکل زیر است.
Solc را نصب کنید
پس از نصب Node.js، می توانید به صورت زیر کامپایلر Solidity را نصب کنید.
دستور فوق برنامه solcjs را نصب می کند و آن را از طریق سیستم در سطح جهانی در دسترس قرار می دهد. اکنون می توانید کامپایلر سالیدیتی Solidity خود را با صدور دستور زیر آزمایش کنید.
اگر همه چیز خوب پیش برود، این مورد چیزی را به شرح زیر چاپ می کند.
اکنون شما آماده استفاده از solcjs هستید که ویژگی های کمتری نسبت به کامپایلر استاندارد Solidity دارد اما نقطه شروع خوبی به شما می دهد.
روش ۲ – تصویر Docker
برای شروع برنامه نویسی Solidity می توانید یک تصویر Docker نصب کنید و استفاده از آن را شروع کنید. در زیر مراحل آن اورده شده است. در ادامه دستور نصب یک تصویر Solidity Docker وجود دارد.
پس از بارگیری تصویر Docker، می توانیم آن را با استفاده از دستور زیر تایید کنیم.
این دستور چیزی را به شرح زیر چاپ می کند.
روش ۳ – نصب پکیج های باینری Binary Packages
اگر شما مایل به نصب کامپایلر کامل بر روی دستگاه لینوکس خود هستید، لطفا وب سایت رسمی نصب کامپایلر Solidity را بررسی کنید.
[/vc_column_text][/vc_tta_section][vc_tta_section title=”Basic Syntax” tab_id=”basicsyntax”][vc_column_text]
آموزش سالیدیتی Solidity – سینتکس پایه Basic Syntax
فایل های مرجع سالیدیتی Solidity می تواند شامل تعداد معینی از تعاریف قرارداد، بخشنامه ها و دستورالعمل های عملی باشد.
بیایید با یک فایل مرجع ساده از سالیدیتی Solidity شروع کنیم. در زیر مثالی از یک فایل Solidity آورده شده است.
پراگما Pragma
خط اول یک دستورالعمل است که می گوید کد برای Solidity نسخه ۰.۴.۰ یا هر مورد جدیدتری نوشته شده است که عملکرد را تا نسخه ۰.۶.۰ از بین نمی برد، اما شامل نمی شود.
یک دستورالعمل پراگما Pragma همیشه محلی برای یک فایل مرجع است و اگر فایل دیگری را وارد کنید، پراگما Pragma از آن فایل به طور خودکار در فایل وارد کننده استفاده نمی کند.
بنابراین پراگما Pragma برای فایلی جدیدتر از نسخه ۰.۴.۰ کامپایل نخواهد شد و همچنین روی کامپایلر که از نسخه ۰.۵.۰ شروع به کار نمی کند به شرح زیر نوشته می شود.
در اینجا شرط دوم با استفاده از ^ اضافه می شود.
قرارداد Contract
قرارداد سالیدیتی Solidity مجموعه ای از کد (توابع آن) و داده ها است که در یک آدرس خاص در بلاکچین اتریوم قرار دارد.
خط unitstoredData متغیری را با نام storedData از نوع unit اعلام می کند و توابع می توانند برای تغییر یا بازیابی مقدار متغیر استفاده شوند.
وارد کردن فایل ها Importing Files
اگرچه مثال فوق فایل ورودی ندارد اما سالیدیتی Solidity از گزاره های وارد شده پشتیبانی می کند که شباهت زیادی با عبارت موجود در زبان JavaScrypt دارد.
عبارت زیر تمامی نمادها را از ” filename ” وارد می کند.
مثال زیر یک نماد جدید ایجاد می کند که اعضای آن همه از ” filename ” هستند.
برای وارد کردن فایل X از همان فایل فعلی، از “X/.” به جای X استفاده کنید. اگر از “X” به عنوان X استفاده کنید یک فایل متفاوت می تواند در یک فهرست جهانی ارجاع شود.
کلمات کلیدی از پیش تعریف شده
در جدول زیر شما می توانید کلمات کلیدی از پیش تعریف شده در سالیدیتی Solidity را مشاهده نمایید.
[/vc_column_text][/vc_tta_section][vc_tta_section title=”First Application” tab_id=”firstapplication”][vc_column_text]
آموزش سالیدیتی Solidity – First Application
ما برای کامپایل و اجرای پایه کد سالیدیتی Solidity خود از Remix IDE استفاده می کنیم.
مرحله ۱ – کد داده شده را در بخش Remix IDE Code کپی کنید.
مثال
مرحله ۲ – در زیر تب کامپایل، بر روی Start Compile کلیک کنید.
مرحله ۳ – در زیر تب Run، بر روی Deploy کلیک کنید.
مرحله ۴ – در زیر تب Run، Solidity Test at 0x… را انتخاب کنید.
مرحله ۵ – برای نمایش نتیجه بر روی getResult کلیک کنید.
خروجی
[/vc_column_text][/vc_tta_section][vc_tta_section title=”Comments” tab_id=”comments”][vc_column_text]
آموزش سالیدیتی Solidity – کامنتها Comments
Solidity از هر دو نوع زبان C و ++C پشتیبانی می کند. بنابراین:
۱.هر متن بین // و انتهای یک خط به عنوان یک کامنت در نظر گرفته می شود و توسط کامپایلر سالیدیتی Solidity نادیده گرفته می شود.
۲.هر متنی بین /* و */ به عنوان کامنت در نظر گرفته می شود. این ممکن است چندین خط را دربر بگیرد.
مثال زیر نحوه استفاده از کامنت ها در سالیدیتی Solidity را نشان دهد.
[/vc_column_text][/vc_tta_section][vc_tta_section title=”Types” tab_id=”types”][vc_column_text]
آموزش سالیدیتی Solidity – انواع متغیر در زبان سالیدیتی
هنگام نوشتن برنامه به هر زبانی، باید از متغیر های مختلفی برای ذخیره اطلاعات مختلف استفاده کنید. متغیرها چیزی جز مکانهای ذخیره شده حافظه برای ذخیره مقادیر نیستند. این بدان معنی است که هنگام ایجاد یک متغیر، فضای بیشتری را در حافظه ذخیره می کنید.
ممکن است بخواهید اطلاعات انواع داده های مختلف مانند کاراکتر، عدد صحیح و … را ذخیره کنید. بر اساس نوع داده یک متغیر، سیستم عامل حافظه را اختصاص می دهد و تصمیم می گیرد که چه مواردی را می توان در حافظه از پیش تعریف شده ذخیره نمود.
انواع متغیرها
Solidity مجموعه ای غنی از انواع داده داخلی و همچنین تعریف شده توسط کاربر را به برنامه نویس ارائه می دهد. جدول زیر هفت نوع داده اصلی C++ را لیست می کند.
آدرس
آدرس مقدار ۲۰ بایت را نشان می دهد که نشان دهنده اندازه آدرس اتریوم است. از یک آدرس می توان برای بدست آوردن موجودی از روش .balance استفاده کرد و می توان برای انتقال موجودی به آدرس دیگر از روش .transfer استفاده شود.
[/vc_column_text][/vc_tta_section][vc_tta_section title=”Variable” tab_id=”variable”][vc_column_text]
آموزش متغیرهای سالیدیتی Solidity
سالیدیتی Solidity از سه نوع متغیر پشتیبانی می کند.
متغیرهای حالت state – متغیرهایی که مقادیر آنها به طور دائم در یک قرارداد ذخیره می شود.
متغیرهای محلی Local – متغیرهایی که مقادیر انها تا زمان اجرای تابع وجود دارد.
متغیرهای سراسری Global – متغیرهای ویژه ای در فضای جهانی وجود دارد که برای بدست آوردن اطلاعات در مورد بلاکچین استفاده می شود.
سالیدیتی Solidity یک زبان تایپ شده است، به این معنی که نوع متغیر state یا Local باید در هنگام اعلام مشخص شود. هر متغیر اعلام شده بر اساس نوع خود همیشه یک مقدار پیش فرض دارد. هیچ مفهومی از “تعریف نشده” یا “پوچ” وجود ندارد.
متغیر حالت State
متغیرهایی که مقادیر آنها برای همیشه در یک قراردارد ذخیره می شود.
متغیر محلی Local
متغیرهایی که مقادیر آنها فقط در داخل تابعی که در آن تعریف شده در دسترس است. پارامترهای تابع همیشه از نوع متغیرهای محلی Local می باشند.
مثال
رنامه فوق را با استفاده از مراحل ارائه شده در فصل Solidity First Application اجرا کنید.
خروجی
متغیرهای سراسری Global
اینها متغیرهای خاصی می باشند که اطلاعاتی در مورد بلاکچین و خصوصیات تراکنش ها یا معاملات را ارائه می دهند.
نام های متغیر سالیدیتی Solidity
هنگام نام گذاری متغیرهای خود در سالیدیتی Solidity، قوانین زیر را در خاطر داشته باشید.
- شما نباید از هیچ یک از کلمات کلیدی از پیش تعریف شده سالیدیتی به عنوان نام متغیر استفاده کنید. این کلمات کلیدی در بخش بعدی ذکر شده است. به عنوان مثال، نام متغیرهای break یا Boolean معتبر نیستند.
- نام متغیرهای سالیدیتی Solidity نباید با یک عدد (۰-۹) شروع شوند. آنها باید با یک حرف یا کاراکتر شروع شوند. به عنوان مثال ۱۲۳test یک متغیر نامعتبر است اما _۱۲۳test یک متغیر معتبر می باشد.
- نام متغیرهیا سالیدیتی Solidity به حروف کوچک و بزرگ حساس هستند. به عنوان مثال، Name و name دو متغیر متفاوت هستند.
[/vc_column_text][/vc_tta_section][vc_tta_section title=”Variable Scope” tab_id=”variablescope”][vc_column_text]
آموزش سالیدیتی Solidity – دامنه متغیر Variable Scope
دامنه متغیرهای محلی محدود به عملکردی است که در آن تعریف شده است اما متغیرهای حالت می توانند سه نوع دامنه داشته باشند.
۱.عمومی Public – به متغیرهای state عمومی و داخلی می توان از طریق پیام نیز دسترسی داشت. برای یک متغیر state عمومی، یک تابع گیرنده خودکار تولید می شود.
۲.داخلی Internal – متغیرهای state داخلی فقط از طریق قرارداد فعلی یا قرارداد ناشی از آن بدون استفاده از این قابل دسترسی هستند.
۳.خصوصی Private – متغیرهای state خصوصی فقط از طریق قرارداد فعلی که در قرارداد مشتق شده از آن تعریف نشده است، قابل دسترسی هستند.
[/vc_column_text][/vc_tta_section][vc_tta_section title=”Operators” tab_id=”operators”][vc_column_text]
آموزش سالیدیتی Solidity – عملگرها
عملگر چیست؟
بیایید یک عبارت ساده را برای مثال ۴ + ۵ را که مساوی با ۹ می باشد در نظر بگیریم. در اینجا ۴ و ۵ را عملوند و “+” را عملگر می نامند. سالیدیتی Solidity انواع عملگرهای زیر را پشتیبانی می کند.
- عملگرهای حسابی Arithmetic Operators
- عملگرهای مقایسه کننده Comparison Operators
- عملگرهای منطقی Logical Operators
- عملگرهای انتساب Assignment Operators
- عملگرهای شرطی ConditionalOperators
بیاید نگاهی به همه عملگرها داشته باشیم.
عملگرهای حسابی Arithmetic Operators
سالیدیتی Solidity عملگرهای حسابی زیر را پشتیبانی می کند.
فرض کنید متغیر A مقدار ۱۰ را نگه می دارد و متغیر B مقدار ۲۰ را نگه می دارد.
عملگر به اضافه (+) برای اعداد و همچنین رشته ها String کار می کند. به عنوان مثال، + ۱۰″a” برابر با “a10 ” می دهد.
مثال
کد زیر نحوه استفاده از عملگرهای حسابی در سالیدیتی Solidity را نشان می دهد.
برنامه فوق را می توانید با استفاده از مراحل ارائه شده در فصل Solidity First Application اجرا کنید.
خروجی
عملگرهای مقایسه کننده Comparison Operators
سالیدیتی Solidity از عملگرهای مقایسه کننده زیر پشتیبانی می کند.
فرض کنید متغیر A مقداری برابر ۱۰ دارد و متغیر B دارای مقدار ۲۰ است.
مثال
کد زیر نحوه استفاده از عملگرهای مقایسه کننده را در سالیدیتی Solidity نشان می دهد.
برنامه فوق را با استفاده از مراحل ارائه شده در فصل Solidity First Application اجرا کنید.
خروجی
عملگرهای منطقی
سالیدیتی Solidity از عملگرهای منطقی زیر پشتیبانی می کند.
فرض کنید متغیر A برابر با ۱۰ و متغیر B برابر با ۲۰ باشد. سپس
مثال
برای یادگیری نحوه پیاده سازی اپراتورهای منطقی سالیدیتی Solidity کد زیر را امتحان کنید.
برنامه فوق را با استفاده از مراحل ارائه شده در فصل Solidity First Application اجرا کنید.
خروجی
اپراتورهای Bitwise Solidity
سالیدیتی Solidity از عملگرهای Bitwise زیر پشتیبانی می کند.
فرض کنید متغیر A، ۲ و متغیر B مقدار ۳ را ذخیره کند. سپس
مثال
برای پیاده سازی عملگر Bitwise در سالیدیتی کد زیر را امتحان کنید
برنامه فوق را با استفاده از مراحل ارائه شده در فصل Solidity First Application اجرا کنید.
خروجی
عملگرهای انتساب Assignment
سالیدیتی Solidity از عملگرهای انتساب Assignment زیر پشتیبانی می کند.
مثال
کد زیر را برای اجرای عملگر Assignment در سالیدیتی امتحان کنید.
برنامه فوق را با استفاده از مراحل ارائه شده در فصل Solidity First Application اجرا کنید.
خروجی
عملگرهای شرطی (؟ 🙂
عملگر شرطی ابتدا عبارتی را برای مقدار درست یا نادرست ارزیابی می کند و سپس نتیجه ارزیابی، یکی از دو عبارت داده شده را اجرا می کند.
مثال
برای درک نحوه عملکرد عملگر شرطی، کد زیر را امتحان کنید.
برنامه فوق را با استفاده از مراحل ارائه شده در فصل Solidity First Application اجرا کنید.
خروجی
[/vc_column_text][/vc_tta_section][vc_tta_section title=”Loops” tab_id=”loops”][vc_column_text]
آموزش سالیدیتی Solidity – حلقه ها
در حین نوشتن قرارداد، ممکن است با شرایطی روبرو شوید که لازم است عملی را بارها و بارها انجام دهید. در چنین شرایطی، برای کاهش تعداد عملیات، باید دستورات حلقه ای بنویسید.
Solidity از تمام حلقه های لازم برای کاهش فشار برنامه نویسی پشتیبانی می کند.
حلقه While
اساسی ترین حلقه در سالیدیتی Solidity حلقه While است که در این فصل مورد بحث قرار خواهد گرفت. هدف از حلقه While اجرای دستور یا بلاک کد به صورت مکرر تا زمانی که درست است، می باشد. هنگامی که عبارت نادرست شد، حلقه خاتمه می یابد.
فلوچارت
فلوچارت حلقه While به صورت زیر است.
سینتکس حلقه While در Solidity به شرح زیر است.
مثال
برای پیاده سازی حلقه While، مثال زیر را امتحان کنید.
برنامه فوق را با استفاده از مراحل ارائه شده در فصل Solidity First Application اجرا کنید.
خروجی
حلقه do…while
حلقه do…while شبیه حلقه while است با این تفاوت که بررسی وضعیت در انتهای حلقه اتفاق می افتد. این بدان معنی است که حلقه همیشه حداقل یک بار اجرا می شود، حتی اگر شرط نادرست باشد.
فلوچارت
فلوچارت حلقه do…while به صورت زیر است.
سینتکس
سینتکس حلقه do…while در Solidity به شرح زیر است.
توجه: علامت استفاده در انتهای حلقه do…while یعنی ; را فراموش نکنید.
مثال
برای یادگیری پیاده سازی حلقه do…while در Solidity مثال زیر را اجرا کنید.
برنامه فوق را با استفاده از مراحل ارائه شده در فصل Solidity First Application اجرا کنید.
خروجی
حلقه For
حلقه For جمع و جورترین شکل حلقه است. این حلقه شامل سه بخش مهم زیر است:
- مقداردهی اولیه حلقه که در آن مقدار شمارنده خود را مقدار اولیه قرار می دهیم. مقداردهی اولیه قبل از شروع حلقه اجرا می شود.
- تستی که در صورت صحت یا عدم صحت یک شرط مشخص شده انجام می شود. اگر شرط درست باشد، پس کد داده شده در داخل حلقه اجرا می شود، در غیر این صورت از حلقه خارج می شود.
- عبارت تکرار که در آن می توانید شمارنده خود را کم یا زیاد کنید.
می توانید هر سه قسمت را در یک خط واحد و با نقطه ویرگول از هم جدا کنید.
فلوچارت
فلوچارت حلقه for در Solidity به صورت زیر است.
سینتکس
سینتکس حلقه for به شکل زیر است.
مثال
برنامه فوق را با استفاده از مراحل ارائه شده در فصل Solidity First Application اجرا کنید.
خروجی
کنترل حلقه
Solidity کنترل کامل را برای حلقه ها فراهم می کند. ممکن است شرایطی پیش بیاید که شما نیاز به بیرون آمدن از حلقه، بدون رسیدن به انتهای آن داشته باشید. همچنین ممکن است شرایطی پیش بیاید که بخواهید بخشی از کد را رد کرده و تکرار بعدی حلقه را شروع کنید.
برای رسیدگی به چنین شرایطی، Solidity عبارتهای break و Continue را ارائه می دهد. این عبارت به ترتیب برای بیرون امدن سریع از هر حلقه یا شروع تکرار بعدی هر حلقه استفاده می شوند.
دستورbreak
دستور break، که به طور خلاصه با عبارت switch معرفی شد، برای بیرون آمدن زودهنگام از یک حلقه و یا خارج شدن از حلقه استفاده می شود.
فلوچارت
فلوچارت دستور break به صورت زیر است.
مثال
مثال زیر استفاده از دستور break با حلقه while را نشان می دهد.
برنامه فوق را با استفاده از مراحل ارائه شده در فصل Solidity First Application اجرا کنید.
خروجی
دستور Continue
دستور Continue می گوید که بلافاصله تکرار بعدی حلقه را شروع کرده و از کد باقی مانده بگذرد. وقتی با یک دستور Continue مواجه شدید، جریان برنامه بلافاصله به عبارت بررسی حلقه منتقل می شود و اگر شرط درست باقی بماند، تکرار بعدی را شروع می کند. در غیر این صورت کنترل از حلقه خارج می شود.
مثال
این مثال استفاده از یک دستور Continue را در حلقه while نشان می دهد.
برنامه فوق را با استفاده از مراحلی که در فصل Solidity First Application ارائه شده، اجرا کنید.
خروجی
[/vc_column_text][/vc_tta_section][vc_tta_section title=”Decision Making” tab_id=”decisionmaking”][vc_column_text]
دستورات شرطی در Solidity
هنگام نوشتن یک برنامه، ممکن است شرایطی پیش بیاید که شما نیاز دارید یکی از مسیرهای مشخص را انتخاب کنید. در چنین مواردی، شما باید از عبارات شرطی استفاده کنید که به برنامه شما امکان تصمیم گیری صحیح و انجام اقدامات صحیح را می دهد.
Solidity از گزاره های شرطی پشتیبانی می کند که برای انجام اقدامات مختلف بر اساس شرایط مختلف استفاده می شود. در اینجا دستور if…else را توضیح خواهیم داد.
فلوچارت if…else
سالیدیتی Solidity از فرم های زیر دستور if…else پشتیبانی می کند.
دستور if
دستور if عبارت کنترلی می باشد که به Solidity امکان تصمیم گیری و اجرای دستورات را به صورت مشروط می دهد.
سینتکس
سینتکس برای دستور if به صورت زیر می باشد.
در اینجا یک دستور Solidity ارزیابی می شود. اگر مقدار به دست آمده true یا درست باشد، دستورهای داده شده اجرا می شوند. اگر عبارت false یا نادرست باشد، هیچ گزاره ای اجرا نمی شود. در بیشتر مواقع، هنگام تصمیم گیری از عملگرهای مقایسه کننده استفاده خواهید کرد.
مثال
برای درک چگونگی دستور if، مثال زیر را اجرا کنید.
برنامه فوق را با استفاده از مراحلی که در فصل Solidity First Application ارائه شده، اجرا کنید.
خروجی
دستور if…else
دستور if…else فرم بعدی دستور کنترل است که به Solidity اجازه می دهد تا دستورات را با روشی کنترل شده اجرا کند.
سینتکس
در اینجا عبارت Solidity ارزیابی می شود. اگر مقدار بدست آمده صحیح یا true باشد، عبارت های داده شده در بلوک if اجرا می شوند. اگر عبارت نادرست یا false باشد، عبارت های داده شده در بلوک else اجرا می شوند.
مثال
برنامه فوق را با استفاده از مراحلی که در فصل Solidity First Application ارائه شده، اجرا کنید.
خروجی
دستور if…else if…
دستور if…else if فرم پیشرفته ای از if…else است که به Solidity امکان تصمیم گیری صحیح را از چندین شرایط می دهد.
سینتکس
سینتکس دستور if-else-if به شرح زیر است.
هیچ چیز خاصی در مورد این کد وجود ندارد. این فقط مجموعه ای از دستورات if است، جایی که هر if بخشی از else عبارت قبلی است. دستورات بر اساس شرط true اجرا می شوند، اگر هیچ یک از شرایط true یا درست نباشد، بلوک else اجرا می شود.
مثال
برنامه فوق را با استفاده از مراحلی که در فصل Solidity First Application ارائه شده، اجرا کنید.
خروجی
[/vc_column_text][/vc_tta_section][vc_tta_section title=”Strings” tab_id=”strings”][vc_column_text]
آموزش سالیدیتی Solidity – رشته ها Strings
در زبان سالیدیتی در بحث String یا رشته ها از ” و ‘ استفاده می کند. این رشته ای را به عنوان نوع داده برای اعلام متغیر از نوع رشته یا String فراهم می کند.
در مثال بالا، “test” یک رشته و data یک متغیر از نوع رشته یا string است. در زبان Solidity امکان تبدیل داخلی بین بایت به String و بالعکس را فراهم می کند. در Solidity می توانیم به راحتی String را به یک متغیر از نوع ۳۲ بایت byte اختصاص دهیم.
معرفی کاراکترها
تبدیل بایت Byte به رشته String
داده های از نوع بایت Byte را می توان با استفاده از () به رشته یا String تبدیل کرد.
مثال
کد زیر را اجرا کنید تا نحوه کار String در Solidity درک کنید.
برنامه فوق را با استفاده از مراحل ارائه شده در فصل Solidity First Application اجرا کنید.
خروجی
[/vc_column_text][/vc_tta_section][vc_tta_section title=”Arrays” tab_id=”arrays”][vc_column_text]
آموزش سالیدیتی Solidity – آرایه ها Arrays
آرایه یک ساختار داده است، که یک مجموعه پی در پی با اندازه ثابت از همان نوع عناصر را ذخیره می کند. یک آرایه برای ذخیره مجموعه ای از داده ها استفاده می شود.
به جای اعلام متغیرهای منفرد، مانند number0، nymber1، و … number99 شما یک متغیر آرایه را اعلام می کنید و از [۰]،[۱]، …، [۹۹] را برای نمایش اعداد استفاده می کنید. متغیرهای منفرد یک عنصر خاص در یک آرایه توسط یک فهرست قابل دسترسی است.
در Solidity، یک آرایه می تواند دارای اندازه ثابت یا اندازه پویا باشد. برای آرایه ذخیره سازی، انواع مختلفی از عناصر نیز می تواند داشته باشد.
همه آرایه ها در حافظه دارای مکان می باشند. کمترین آدرس مربوط به اولین عنصر و بالاترین آدرس به آخرین عنصر مربوط می باشد.
اعلام آرایه ها
برای اعلام آرایه ای با اندازه ثابت در Solidity، برنامه نویس نوع عناصر و تعداد عناصر مورد نیاز آرایه را به شرح زیر مشخص می کند.
به این آرایه تک بعدی گفته می شود. سایز آرایه باید یک ثابت عددی بزرگتر از صفر باشد و نوع آن می تواند هر نوع داده Solidity معتبری باشد. به عنوان مثال، برای اعلام یک آرایه ۱۰ عنصری به نام balance of type unit، از این دستور استفاده کنید.
برای اعلام آرایه ای با اندازه داینامیک در Solidity، برنامه نویس نوع عناصر را به شرح زیر مشخص می کند.
شروع آرایه ها
می توانید عناصر آرایه در Solidity را یک به یک با استفاده از یک دستور به صورت زیر مقدار دهی اولیه کنید.
تعداد مقادیر بین [] نمی تواند از تعداد عناصری که برای آرایه اعلام می کنیم بیشتر باشد. در زیر مثالی برای اختصاص یک عنصر از آرایه ذکر شده است.
شما دقیقا همان آرایه ای را که در مثال قبلی ایجاد کرده اید، ایجاد خواهید کرد.
دستور فوق به عنصر شماره ۳ در آرایه مقدار ۵ اختصاص می دهد.
ایجاد آرایه های دارای حافظه داینامیک
آرایه های حافظه داینامیک با استفاده از کلمه کلیدی جدید ایجاد می شوند.
ایندکس در آرایه
دسترسی به عناصر آرایه با ایندکس کردن نام آرایه ایجاد می شود. مثال زیر را در نظر بگیرید:
در این قسمت مفاهیمی برای دسترسی به آرایه ها ذکر شده است.
length – length اندازه آرایه را برمی گرداند. برای تغییر اندازه آرایه داینامیک می توان از length استفاده کرد.
Push – push اجازه می دهد تا یک عنصر به یک آرایه در انتها اضافه شود. طول جدید آرایه را برمی گرداند.
مثال
برای درک چگونگی عملکرد آرایه ها در Solidity، کد زیرا امتحان کنید.
[/vc_column_text][/vc_tta_section][vc_tta_section title=”Enums” tab_id=”enums”][vc_column_text]
نوع شمارشی Enums در Solidity
Enums یک متغیر را محدود می کند تا فقط یکی از چند مقدار از پیش تعریف شده داشته باشد. مقادیر موجود در این لیست شمارش شده را enum می نامند.
با استفاده از enums می توانید تعداد اشکالات کد خود را کاهش دهید.
به عنوان مثال، اگر برنامه ای را برای آب میوه فروشی در نظر بگیریم، می توان اندازه لیوان را به کوچک، متوسط و بزرگ محدود کرد. این اطمینان می دهد که به هیچ کس اجازه نمی دهد اندازه دیگری غیر از کوچک، متوسط یا بزرگ سفارش دهد.
مثال
با امتحان کردن کد زیر می توانید با عملکرد enum در زبان برنامه نویسی Solidity آشنا شوید.
برنامه فوق را با استفاده از مراحل ارائه شده در فصل Solidity First Application اجرا کنید.
ابتدا بر روی setLarge کلیک کنید تا مقدار به صورت LARGE تنظیم شود و سپس getChoice را انتخاب کنید تا گزینه ی انتخاب شده انجام شود.
خروجی
برای دریافت گزینه پیش فرض، روی گزینه getDefaultChoice کلیک کنید.
خروجی
[/vc_column_text][/vc_tta_section][vc_tta_section title=”Structs” tab_id=”structs”][vc_column_text]
ساختار Struct در زبان Solidity
انواع ساختار struct برای نشان دادن یک رکورد استفاده می شود. فرض کنید می خواهید کتاب های خود را در کتابخانه پیگیری کنید. شاید بخواهید ویژگی های زیر را در مورد هر کتاب ردیابی کنید.
- عنوان
- نویسنده
- موضوع
- شناسه کتاب
تعریف ساختار Struct
برای تعریف ساختار، باید از کلمه کلیدی struct استفاده کنید. کلمه کلیدی struct نوع جدیدی از داده را با بیش از یک عضو تعریف می کند. قالب دستور struct به شرح زیر است.
مثال
دسترسی به یک Struct و متغیر آن
برای دسترسی به هر عضو struct، از عملگر دسترسی عضو (.) استفاده می کنیم. عملگر دسترسی عضو به عنوان یک دوره زمانی بین نام متغیر struct و عضوی از ساختاری که می خواهیم به آن دسترسی پیدا کنیم کدگذاری می شود. شما می توانید از Struct برای تعریف متغیرها استفاده کنید. مثال زیر نحوه استفاده از ساختار Struct در برنامه را نشان می دهد.
مثال
کد زیر را امتحان کنید تا بفهمید چطور ساختارها structs در Solidity کار می کنند.
برنامه فوق را با استفاده از مراحلی که در فصل Solidity First Application ارائه شده، اجرا کنید.
ابتدا بر روی setBook کلیک کنید تا مقدار آن به صورت LARGE تنظیم شود و سپس بر روی getBookId کلیک کنید تا شناسه کتاب انتخاب شده را دریافت کنید.
خروجی
[/vc_column_text][/vc_tta_section][vc_tta_section title=”Mapping” tab_id=”mapping”][vc_column_text]
آموزش سالیدیتی – مپینگ Mapping
مپینگ Mapping یک نوع مرجع برای آرایه ها و ساختارها است. در زیر سینتکس برای اعلام Mapping آورده شده است.
جایی که
- KeyType: می تواند انواع بایت bytes و رشته String باشد. هیچ نوع مرجع پیچیده ای مجاز نیستند.
- ValueType: می تواند هر نوعی باشد.
توجه:
.Mapping فقط می تواند نوع storage داشته باشد و به طور کلی برای متغیرهای state استفاده می شود.
.Mapping می تواند به صورت عمومی علامت گذاری شود. Solidity به طور خودکار گیرنده ای برای آن ایجاد می کند.
مثال
کد زیر را اجرا کنید تا بفهمید Mapping در Solidity چگونه کار می کند.
برنامه فوق را با استفاده از مراحلی که در فصل Solidity First Application ارائه شده، اجرا کنید.
ابتدا بر روی updateBalance کلیک کنید تا مقدار آن ۱۰ شود، سپس خروجی را مشاهده نمایید.
خروجی
[/vc_column_text][/vc_tta_section][vc_tta_section title=”Conversions” tab_id=”conversions”][vc_column_text]
آموزش سالیدیتی Solidity – تبدیل ها
Solidity امکان تبدیل ضمنی و همچنین صریح را فراهم می کند. کامپایلر Solidity امکان تبدیل ضمنی بین دو نوع داده را فراهم می کند به شرطی که امکان تبدیل ضمنی و از بین رفتن اطلاعات وجود نداشته باشد. به عنوان مثال unit8 به unit16 قابل تبدیل است اما int8 به unit256 قابل تبدیل نیست زیرا int8 می تواند حاوی مقدار منفی باشد که در unit256 مجاز نیست.
تبدیل صریح
ما می توانیم با استفاده از سینتکس سازنده، صریحا یک نوع داده را به نوع دیگر تبدیل کنیم.
تبدیل به نوع کوچکتر ارزش بیت های بالاتر را دارد.
تبدیل به نوع بالاتر، بیت ها را به سمت چب اضافه می کند.
تبدیل به بایت کوچکتر برای داده های بالاتر هزینه دارد.
تبدیل به بایت بزرگتر بیت ها را به سمت راست اضافه می کند.
تبدیل بین بایت های با اندازه ثابت و int تنها زمانی امکان پذیر است که هر دو دارای یک اندازه باشند.
در صورت عدم نیاز به کوتاه کردن طول داده، می توان اعداد هگزادسیمال Hexadecimal را به هر نوع عددی اختصاص داد.
[/vc_column_text][/vc_tta_section][vc_tta_section title=”Ether Units” tab_id=”etherunits”][vc_column_text]
آموزش سالیدیتی Solidity – واحدهای اتر Ether
در زبان برنامه نویسی سالیدیتی Solidity می توان از wei ،Finney ،Szabo یا ether به عنوان پسوند استفاده کرد تا برای تبدیل انواع مختلف مبتنی بر اتر استفاده شود. کمترین واحد wei است و ۱e12 نشان دهنده ۱ به توان ۱۲ است.
واحدهای زمانی Time Units
مشابه ارز، Solidity دارای واحدهای زمانی است که کمترین واحد دوم است و ما می توانیم از ثانیه ها، دقیقه ها، ساعت ها، روزها و هفته ها به عنوان پسوند برای نشان دادن زمان استفاده کنیم.
[/vc_column_text][/vc_tta_section][vc_tta_section title=”Special Variables” tab_id=”specialvariables”][vc_column_text]
آموزش سالیدیتی Solidity – متغیرهای ویژه
متغیرهای ویژه متغیرهای موجود در سطح جهانی هستند و اطلاعاتی را در مورد بلاکچین فراه می کنند. در زیر لیستی از متغیرهای خاص آورده شده است.
مثال
کد زیر را امتحان کنید تا استفاده از msg، متغیر ویژه برای دریافت آدرس فرستنده در سالیدیتی Solidity را مشاهده کنید.
برنامه فوق را با استفاده از مراحل ارائه شده در فصل Solidity First Application اجرا کنید.
ابتدا روی updateBalance کلیک کنید تا مقدار آن ۱۰ شود، سپس می توانید خروجی را مشاهده نمایید.
خروجی
[/vc_column_text][/vc_tta_section][vc_tta_section title=”Style Guide” tab_id=”styleguide”][vc_column_text]
آموزش سالیدیتی Solidity – Style Guide
Style Guide به حفظ سازگاری کد و خوانایی بیشتر کد کمک می کند. در زیر بهترین روش هایی است که هنگام نوشتن قرارداد با Solidity دنبال می شود.
Code Layout
Indentation – برای حفظ سطح indentation از ۴ اسپیس به جای tab استفاده کنید. از میکس شدن اسپیس ها با تب ها خودداری کنید.
قانون دو خط خالی Two Blank Lines – از ۲ خط خالی بین دو تعریف قرارداد استفاده کنید.
قانون یک خط خالی One Blank Line – از ۱ خط خالی بین دو عملکرد استفاده کنید. در صورت اعلام نیازی به داشتن سطرهای خالی نیست.
حداکثر طول خط – یک خط نباید از ۷۹ کاراکتر بیشتر باشد تا خوانندگان بتوانند به راحتی کد را تجزیه کنند.
قوانین Wrapping – اولین استدلال بدون باز کردن پرانتز در خط جدید می باشد. در هر استدلال از indent منفرد استفاده کنید. عنصر پایان دهنده ;( باید آخرین باشد.
کدگذاری کد مرجع Source Code Encoding – کدگذاری UTF-8 یا ASCII ترجیحا استفاده می شود.
Import – Import statements باید درست در بالای فایل پس از اعلام pragma قرار گیرند.
ترتیب فانکشن ها – فانکشن ها باید از نظر میزان visibility گروه بندی شوند.
از فضای خالی اضافی خودداری کنید – از فضای خالی بلافاصله داخل پرانتز، براکت و … خودداری کنید.
ساختارهای کنترل – Braces باید در همان اعلام کننده باز شوند. روی خط خودشان ببندید و همان تو رفتگی را حفظ کنید. از یک فضای دارای Brace استفاده کنید.
Function Declaration – از قانون بالا برای braces استفاده کنید. همیشه visibility label را اضافه کنید. Visibility label باید قبل از هر modifier باشد.
نگاشت ها Mappings – هنگام اعلام متغیرهای mapping از فضای خالی خودداری کنید.
اعلام متغیرها – هنگام اعلام متغیرهای آرایه از فضای خالی خودداری کنید.
اعلام رشته String – برای اعلام یک رشته به جای ‘ از ̎ استفاده کنید.
ترتیب Layout
عناصر باید به ترتیب زیر چیدمان شوند.
- Pragma statements
- Import statements
- Interfaces
- Libraries
- Contracts
در Interfaces، Libraries یا contracts باید به صورت زیر باشد:
- Type declarations
- State variables
- Events
- Functions
قراردادهای نامگذاری Naming conventions
-Contracts و Library باید با استفاده از CapWord Style یا حروف بزرگ نامگذاری شود. به عنوان مثال، Owner، SmartContract و غیره.
-نام Contract و Library باید با نام فایل آنها مطابقت داشته باشد.
-در صورت وجود چندین contract یا library در یک فایل، از نام contract یا library اصلی استفاده کنید.
نام های ساختار Struct
- از حروف بزرگ CapWords مانند SmartCoin استفاده کنید.
نام های Event
- از سبک CapWords مانند Deposit‚ AfterTransfer استفاده کنید.
نام های تابع
- از سبک mixedCase مانند initiateSupply استفاده کنید.
متغیرهای Local و State
- از سبک MixedCase مانند CreatorAddress‚ supply استفاده کنید.
Constants
- برای جدا کردن کلمات بزرگ از _ استفاده کنید مانند MAX_BLOCKS.
نام های modifier
- از سبک mixCase مانند onlyAfter استفاده کنید.
نام های Enum
- از سبک CapWords مانند TokenGroup استفاده کنید.
[/vc_column_text][/vc_tta_section][vc_tta_section title=”Functions” tab_id=”functions”][vc_column_text]
آموزش سالیدیتی Solidity – توابع Functions
یک تابع گروهی از کدهایی می باشد که به صورت مجدد قابل استفاده است و می تواند در هر کجای برنامه شما فراخوانی شود. با این کار دیگر نیازی به نوشتن مجدد همان کد نیست. در نوشتن کدهای ماژولار به برنامه نویسان کمک می کند. توابع به یک برنامه نویس اجازه می دهد تا یک برنامه بزرگ را به تعدادی از توابع کوچک و قابل کنترل تقسیم کند.
مانند هر زبان برنامه نویسی پیشرفته دیگر، Solidity نیز از تمام ویژگی های لازم برای نوشتن کد ماژولار با استفاده از توابع پشتیبانی می کند. این بخش نحوه نوشتن توابع خود را در Solidity توضیح می دهد.
تعریف توابع Function Definition
قبل استفاده از یک تابع، باید آن را تعریف کنیم. متداول ترین روش برای تعریف یک تابع در Solidity با استفاده از کلمه کلیدی function و به دنبال آن یک نام منحصر به فردف لیستی از پارامترها (که ممکن است خالی باشد ) و یک بلوک احاطه شده توسط {} است.
سینتکس
سینتکس اصلی در اینجا نشان داده شده است.
مثال
فراخوانی تابع
برای فراخوانی یک تابع در جایی از قرارداد، شما به سادگی باید نام آن تابع را همانطور که در کد زیر نشان داده شده است، بنویسید.
کد زیر را امتحان کنید تا بدانید که این رشته string در Solidity چگونه کار می کند.
برنامه فوق را با استفاده از مراحلی که در فصل Solidity First Application ارائه شده است، اجرا کنید.
خروجی
پارامترهای تابع
تا کنون، توابع بدون پارامتر را مشاهده کرده ایم. اما یک امکان برای pass پارامترهای مختلف در هنگام فراخوانی یک تابع وجود دارد. این پارامترهای pass را می توان در داخل تابع ضبط کرد و هر تغییری را می توان بر روی آن پارامترها انجام داد. یک تابع می تواند چندین پارامتر را که با کاما از هم جدا شده اند، بگیرد.
مثال
مثال زیر را انجام دهید. ما در اینجا از یک تابع unit2str استفاده کرده ایم. این یک پارامتر است.
برنامه فوق را با استفاده از مراحلی که در فصل Solidity First Application ارائه شده است، اجرا کنید.
خروجی
عبارت بازگشتی
یک تابع Solidity می تواند یک عبارت بازگشتی اختیاری داشته باشد. اگر می خواهید مقداری را از یک تابع برگردانید، این مورد لازم است. این دستور باید آخرین عبارت یک تابع باشد.
مانند مثال بالا، ما از تابع unit2str برای برگرداندن یک رشته string استفاده می کنیم.
در Solidity، یک تابع می تواند مقادیر متعددی را نیز بازگرداند. مثال زیر را ببینید.
برنامه فوق را با استفاده از مراحلی که در فصل Solidity First Application ارائه شده است، اجرا کنید.
خروجی
[/vc_column_text][/vc_tta_section][vc_tta_section title=”Function Modifiers” tab_id=”functionmodifiers”][vc_column_text]
آموزش سالیدیتی Solidity – اصلاح کننده های تابع Function Modifiers
Function Modifiers یا اصلاح کننده های تابع برای اصلاح رفتار یک تابع استفاده می شود. به عنوان مثال برای اضافه کردن یک شرط به به یک تابع می تواند مورد استفاده قرار گیرد.
ابتدا یک اصلاح کننده یا modifier با پارامتر یا بدون آن ایجاد می کنیم.
بدنه تابع در جایی قرار می گیرد که نماد ویژه “;_” در تعریف یک اصلاح کننده یا modifier ظاهر می شود. بنابراین اگر در هنگام فراخوانی این تابع شرط modifier برقرار باشد، تابع اجرا می شود و در غیر اینصورت، یک استثنا وجود دارد.
مثال زیر را ببینید.
[/vc_column_text][/vc_tta_section][vc_tta_section title=”View Functions” tab_id=”viewfunctions”][vc_column_text]
آموزش سالیدیتی Solidity – توابع View
توابع View اطمینان می دهند که state را تغییر نمی دهند. یک تابع را می توان به عنوان view اعلام کرد. عبارات زیر اگر در تابع وجود داشته باشد، state را اصلاح می کنند و کامپایلر در چنین مواردی هشدار می دهد.
- اصلاح متغیرهای state / Modifying state variables
- Emitting events
- ایجاد قراردادهای دیگر Creating other contracts
- استفاده از self-destruct
- ارسال اتر از طریق فراخوانی Sending Ether via calls
- فراخوانی هر تابع که به عنوان view یا pure مشخص نشده باشد.
- استفاده از فراخوانی های سطح پایین using low-level calls
- Using assembly containing certain opcodes
روش گیرنده به طور پیش فرض توابع view است.
مثال زیر را که از یک تابع view استفاده نموده است، مشاهده نمایید.
مثال
برنامه فوق را با استفاده از مراحلی که در فصل Solidity First Application ارائه شده است، اجرا کنید.
خروجی
[/vc_column_text][/vc_tta_section][vc_tta_section title=”Pure Functions” tab_id=”purefunctions”][vc_column_text]
آموزش سالیدیتی Solidity – توابع Pure
توابع pure اطمینان حاصل می کنند که state را نمی خوانند و یا اصلاح نمی کنند. یک تابع را می توان pure اعلام کرد. عبارات زیر اگر در تابع وجود داشته باشد، خواندن state را در نظر گرفته و کامپایلر در چنین مواردی هشدار می دهد.
- خواندن متغیرهای state
- دسترسی address(this).balance یا <address>.balance
- دسترسی به هر یک از متغیرهای خاص بلوک tx، msg ( msg.sig و msg.data قابل خواندن است).
- فراخوانی هر تابع که pure مشخص نشده باشد.
- استفاده از inline assembly that contains certain opcodes
توابع pure می توانند از توابع revert() و require() برای بازگشت تغییرات state در صورت بروز خطا، استفاده کنند.
مثال زیر را که از یک تابع view استفاده نموده است، مشاهده نمایید.
مثال
برنامه فوق را با استفاده از مراحلی که در فصل Solidity First Application ارائه شده است، اجرا کنید.
خروجی
[/vc_column_text][/vc_tta_section][vc_tta_section title=”Fallback Function” tab_id=”fallbackfunction”][vc_column_text]
آموزش سالیدیتی Solidity – تابع بازگشتی Fallback Function
تابع بازگشتی نوع خاصی از تابع است که در قرارداد در دسترس است و ویژگی های زیر را دارا می باشد.
- زمانی فراخوانی می شود که یک تابع موجود در قرارداد فراخوانی شود.
- لازم است که در خارج علامت گذاری شود.
- هیچ اسمی ندارد.
- هیچ استدلالی ندارد.
- نمی تواند هیچ چیز را برگرداند.
- در هر قرارداد می تواند یک بار تعریف شود.
- اگر قرارداد اتر بدون داده دریافت کند، استثنا ایجاد خواهد شد.
مثال زیر مفهوم تابع بازگشتی در هر قرارداد را نشان می دهد.
مثال
[/vc_column_text][/vc_tta_section][vc_tta_section title=”Function Overloading” tab_id=”functionoverloading”][vc_column_text]
آموزش سالیدیتی Solidity – تابع overloading
شما می توانید چندین تعریف برای همان نام تابع در یک محدوده داشته باشید. تعریف تابع باید با انواع و یا تعداد آرگومان های موجود در لیست آرگومان ها از یکدیگر متفاوت باشد. نمی توانید تابع را بارگیری کنید که فقط با نوع بازگشتی متفاوت هستند.
مثال زیر مفهوم تابع overloading در سالیدیتی Solidity را نشان می دهد.
برنامه فوق را با استفاده از مراحلی که در فصل Solidity First Application ارائه شده است، اجرا کنید.
ابتدا بر روی callSumWithTwoArguments کلیک کنید و سپس بر روی callSumWithThreeArguments کلیک نمایید تا نتیجه را مشاهده کنید.
خروجی
[/vc_column_text][/vc_tta_section][vc_tta_section title=”Mathematical Functions” tab_id=”mathematicalfunctions”][vc_column_text]
آموزش سالیدیتی Solidity – توابع ریاضی Mathematical Functions
سالیدیتی Solidity توابع ریاضی داخلی را به خوبی فراهم می کند. در زیر روش های بسیار استفاده شده است.
-addmod(unit x‚ unit y, unit k) returns (unit) – محاسبه می کند (x + y) % k جایی که جمع با دقت انجام می شود و در ۲۲۵۶ wrap نمی شود.
-mulmod(unit x‚ unit y, unit k) returns (unit) – محاسبه می کند (x * y) % k جایی که جمع با دقت دلخواه انجام می شود و در ۲۲۵۶ wrap نمی شود.
مثال زیر استفاده از توابع ریاضی را در Solidity نشان می دهد.
مثال
برنامه فوق را با استفاده از مراحلی که در فصل Solidity First Application ارائه شده است، اجرا کنید.
ابتدا بر روی callAddMod کلیک کنید و سپس callMulMod را بزنید تا نتجیه را مشاهده نمایید.
خروجی
[/vc_column_text][/vc_tta_section][vc_tta_section title=”Cryptographic Functions” tab_id=”cryptographicfunctions”][vc_column_text]
آموزش سالیدیتی Solidity – توابع رمزنگاری
Solidity توابع رمزنگاری داخلی ارائه می دهد. در زیر متدهای مهم آورده شده است.
- keccak256(bytes memory) returns (bytes32) – هش ورودی Keccak-256 را محاسبه می کند.
- sha256(bytes memory) returns (bytes20) – هش ورودی SHA-256 را محاسبه می کند.
- ripemd160(bytes memory) returns (bytes20) – هش ورودی RIPEMD-160 را محاسبه می کند.
- sha256(bytes memory) returns (bytes32)- هش ورودی SHA-256 را محاسبه می کند.
- ecrecover(bytes32 hash‚ unit8 v‚ bytes32 s) returns (address) – آدرس مرتبط با کلید عمومی را از امضای منحنی بازیابی کنید ویا صفر را در هنگام خطا بازگردانید.
پارامترهای تابع با مقادیر ECDSA امضا مطابقت دارند:
- r: first 32 bytes of signature
- s: second 32 bytes of signature
- v: final 1 byte of signature
این روش یک آدرس را بر می گرداند.
مثال زیر استفاده از تابع رمزنگاری را در سالیدیتی Solidity نشان می دهد.
مثال
برنامه فوق را با استفاده از مراحلی که در Solidity First Application ارائه شده است، اجرا کنید.
خروجی
[/vc_column_text][/vc_tta_section][vc_tta_section title=”Whithdrawal Pattern” tab_id=”whithdrawalpattern”][vc_column_text]
آموزش سالیدیتی Solidity – الگوی برداشت Withdrawal Pattern
الگوی برداشت اطمینان می دهد که فراخوانی انتقال مستقیم که تهدیدی برای امنیت است، ایجاد نمی شود. قرارداد زیر استفاده غیر مطمئن از فراخوانی انتقال برای ارسال اتر را نشان می دهد.
قرارداد فوق می تواند در حالت غیر قابل استفاده ارائه شود زیرا باعث می شود که غنی ترین قرارداد با شکست تابع بازگشتی مواجه شود. وقتی تابع fallback یا تابع بازگشتی از کار بیفتد، تابع becomeRichest() نیز از کار می افتد و قرارداد برای همیشه به تعویق می افتد. برای کاهش این مشکل، می توانیم از الگوی برداشت استفاده کنیم.
در الگوی برداشت، ما قبل از هر بار انتقال مبلغ مورد نظر را تنظیم می کنیم. این موضوع اطمینان حاصل می کند که تنها قرارداد فراخوان شده از کار می افتد.
[/vc_column_text][/vc_tta_section][vc_tta_section title=”Restricted Access” tab_id=”restrictedaccess”][vc_column_text]
آموزش سالیدیتی Solidity – دسترسی محدود Restricted Access
دسترسی محدود به یک قرارداد یک عمل معمول است. به طور پیش فرض، یک قرارداد فقط خواندنی است مگر اینگه به صورت عمومی مشخص شود.
ما می توانیم افرادی که می توانند state قرارداد را تغییر دهند یا توابع قراردادها را با استفاده از اصلاح کننده ها modifiers فراخوانی کنند، محدود کنیم. همانطور که در زیر توضیح داده شده است، چندین اصلاح کننده modifiers ایجاد و استفاده خواهیم کرد.
- onlyBy – اگر یکبار از یک تابع استفاده شود، فقط صدا کننده caller ذکر شده می تواند این تابع را فراخوانی کند.
- onlyAfter – پس از استفاده از یک تابع، می توان آن تابع را پس از یک دوره زمانی خاص فراخوانی کرد.
- costs – هنگامی که از یک تابع استفاده می شود، caller یا صدا کننده فقط در صورت ارائه مقدار مشخصی می تواند این تابع را فراخوانی کند.
مثال
[/vc_column_text][/vc_tta_section][vc_tta_section title=”Contracts” tab_id=”contracts”][vc_column_text]
آموزش سالیدیتی Solidity – قراردادها Contracts
قرارداد در سالیدیتی Solidity مشابه یک کلاس در ++C است. یک قرارداد دارای ویژگی های زیر است.
سازنده Constructor – یک تابع ویژه با کلمه کلیدی constructor اعلام می شود که در هر قرارداد یک بار اجرا می شود و هنگام ایجاد قرارداد فراخوانی می شود.
متغیرهای state – متغیرها در هر قرارداد برای ذخیره state قرارداد یا وضعیت قرارداد ارائه می شوند.
توابع Functions – توابع در هر قرارداد که می تواند متغیرهای state را اصلاح کند تا state قرارداد را تغییر دهد.
کمیت های Visibility
در زیر، کمیت های مختلف visibility برای توابع یا متغیرهای state قرارداد وجود دارد.
خارجی external – توابع خارجی به این منظور هستند که توسط قراردادهای دیگر فراخوانی می شوند. آنها نمی توانند برای فراخوانی داخلی استفاده شوند. ()Function_name لازم است. متغیرهای state را نمی توان به عنوان توابع خارجی مشخص کرد.
Public – توابع public / متغیرها را می توان از دو جهت خارجی و داخلی استفاده کرد. برای متغیر public state، Solidity به طور خودکار یک تابع گیرنده ایجاد می کند.
داخلی internal – توابع داخلی/متغیرها فقط می توانند به صورت داخلی یا توسط قراردادهای مشتق شده استفاده شوند.
Private – توابع خصوصی/متغیرها فقط در داخل و حتی در قراردادهای مشتق شده قابل استفاده هستند.
مثال
برنامه فوق را با استفاده از مراحلی که در Solidity First Application ارائه شده است، اجرا کنید. روش های مختلف قراردادها را اجرا کنید. برای ()E.getComputedResult به دنبال ()E.getResult نشان می دهد.
خروجی
[/vc_column_text][/vc_tta_section][vc_tta_section title=”Inheritance” tab_id=”inheritance”][vc_column_text]
آموزش سالیدیتی Solidity – وراثت Inheritance
وراثت راهی برای گسترش عملکرد قرارداد است. Solidity از وراثت منفرد و چندگانه پشتیبانی می کند. در زیر موارد برجسته و اصلی آورده شده است.
- یک قرارداد مشتق شده می تواند به تمام اعضای غیر خصوصی از جمله روش های داخلی و متغیرهای state دسترسی داشته باشد. اما استفاده از این مجاز نیست.
- ما می توانیم تابع super قرارداد را با استفاده از super keyword یا با استفاده از نام قرارداد super فراخوانی کنیم.
- در صورت وراثت چندگانه، فراخوانی تابع با استفاده از super، بیشتر قراردادهای مشتق شده را ترجیح می دهد.
مثال
برنامه فوق را با استفاده از مراحلی که در فصل Solidity First Application ارائه شده است، اجرا کنید. روشهای مختلف قراردادها را اجرا کنید.
برای ()E.getComputedResult و به دنبال ()E.getResultنشان می دهد.
خروجی
[/vc_column_text][/vc_tta_section][vc_tta_section title=”Constructors” tab_id=”constructors”][vc_column_text]
آموزش سالیدیتی Solidity – سازنده ها Constructors
سازنده constructor یک تابع خاص است که با استفاده از کلمه کلیدی constructor اعلام می شود. این برای شروع متغیرهای state قرارداد استفاده می شود. در زیر مشخصات اصلی constructor آورده شده است.
- یک قرارداد می تواند فقط یک constructor داشته باشد.
- یک کد constructor زمانی که یک قرارداد ایجاد می شود، یک بار اجرا می شود و برای شروع state قرارداد استفاده می شود.
- پس از اجرای کد constructor، کد نهایی بر روی بلاکچین مستقر می شود. این کد شامل توابع عمومی و کدهای قابل دسترسی از طریق توابع عمومی است. کد constructor یا هر روش داخلی که فقط توسط constructor استفاده می شود در کد نهایی موجود نیست.
- یک constructor می تواند هم عمومی و هم داخلی باشد.
- یک constructor داخلی قرارداد را به صورت چکیده علامت گذاری می کند.
- در صورت عدم تعریف constructor ،constructor پیش فرض در قرارداد حضور دارد.
- در صورتی که قرارداد پایه constructor استدلال داشته باشد، هر قرارداد مشتق شده باید آنها را تصویب کند.
- constructor پایه را می توان مستقیما با استفاده از روش زیر راه اندازی کرد.
- در صورتی که قرارداد پایه constructor استدلال داشته باشد، هر قرارداد مشتق شده باید آنها را تصویب کند.
- constructor پایه را می توان مستقیما با استفاده از روش زیر راه اندازی کرد.
- راه های مستقیم و غیرمستقیم برای مقداردهی اولیه constructor قرارداد پایه مجاز نیست.
- اگر قرارداد مشتق شده استدلال ها را به constructor قرارداد اصلی منتقل نکند، قرارداد مشتق شده انتزاعی خواهد شد.
[/vc_column_text][/vc_tta_section][vc_tta_section title=”Abstract Contracts” tab_id=”abstractcontracts”][vc_column_text]
آموزش سالیدیتی Solidity – قراردادهای انتزاعی Abstract Contracts
قرارداد انتزاعی Abstract Contracts قراردادی است که حداقل شامل یک تابع بدون هیچگونه پیاده سازی باشد. از چنین قراردادی به عنوان قرارداد پایه یا اصلی استفاده می شود. به طور کلی یک قرارداد انتزاعی شامل توابع انتزاعی و اجرایی است. قرارداد مشتق شده تابع انتزاعی را پیاده سازی می کند و از توابع موجود در صورت لزوم استفاده می کند.
در صورتی که یک قرارداد مشتق شده تابع انتزاعی را اجرا نکند، این قراردا ممشتق شده به عنوان انتزاعی علامت گذاری می شود.
مثال
کد زیر را اجرا کنید تا متوجه شوید قرارداد های انتزاعی در Solidity چگونه کار می کند.
برنامه فوق را با استفاده از مراحل ارائه شده در فصل Solidity First Application اجرا کنید.
خروجی
[/vc_column_text][/vc_tta_section][vc_tta_section title=”Interfaces” tab_id=”interfaces”][vc_column_text]
آموزش سالیدیتی Solidity – اینترفیس ها Interfaces
اینترفیس ها مشابه قراردادهای انتزاعی هستند و با استفاده از کلمه کلیدی interface ایجاد می شوند. در زیر مشخصات اصلی یک interface آورده شده است.
- اینترفیس نمی تواند هیچ تابعی با اجرا داشته باشد.
- توابع یک interface فقط از نوع خارجی است.
- interface نمی تواند یک constructor باشد.
- interface نمی تواند متغیرهای state داشته باشد.
- interface می تواند دارای enum باشد.
مثال
کد زیر را امتحان کنید تا متوجه شوید که interface در Solidity چگونه کار می کند.
با استفاده از مراحلی که در فصل Solidity First Application ارائه شده است، برنامه فوق را اجرا کنید.
خروجی
[/vc_column_text][/vc_tta_section][vc_tta_section title=”Libraries” tab_id=”libraries”][vc_column_text]
آموزش سالیدیتی Solidity – کتابخانه ها Libraries
کتابخانه ها مشابه قراردادها می باشند اما عمدتا برای استفاده مجدد هستند. کتابخانه شامل توابعی است که سایر قراردادها می توانند از آنها استفاده کنند. Solidity محدودیت های خاصی در استفاده از کتابخانه دارد. در ادامه مشخصات اصلی کتابخانه Solidity آورده شده است.
- توابع کتابخانه می توانند مستقیما فراخوانی شوند، اگر آنها state را تغییر ندهند. این بدان معناست کع توابه pure یا view از خارج کتابخانه قابل فراخوانی هستند.
- از انجا که فرض می شود کتابخانه بدون state نیست، نمی تواند از بین برود.
- یک کتابخانه نمی تواند متغیرهای state داشته باشد.
- یک کتابخانه نمی تواند هیچ عنصری را به ارث برساند.
- کتابخانه را نمی توان به ارث برد.
مثال
کد زیر را امتحان کنید تا نحوه کار کتابخانه در Solidity را درک کنید.
شما می توانید کد بالا را با استفاده از مراحلی که در فصل Solidity First Application ارائه شده است، اجرا کنید.
خروجی
استفاده از For
این دستورالعمل با استفاده از A برای B، می تواند برای پیوستن توابع کتابخانه A به یک نوع داده شده B استفاده شود. این توابع از نوع caller به عنوان اولین پارامتر استفاده می شود.
مثال
می توانید با اجرای کد زیر نحوه کار کتابخانه در Solidity را درک کنید.
برنامه فوق را با استفاده از مراحلی که در فصل Solidity First Application ارائه شده است، اجرا کنید.
خروجی
[/vc_column_text][/vc_tta_section][vc_tta_section title=”Assembly” tab_id=”assembly”][vc_column_text]
آموزش سالیدیتی Solidity – اسمبلی Assembly
Solidity گزینه ای را برای استفاده از زبان اسمبلی برای نوشتن اسمبلی inline در کد اصلی سالیدیتی فراهم می کند. همچنین می توانیم یک کد Standalone Assembly بنویسیم که سپس به bytecode تبدیل شود. Standalone Assembly یک زبان میانی برای یک کامپایلر Solidity است و کد Solidity را به یک Standalone Assembly و سپس به کد Byte تبدیل می کند. ما می توانیم از همان زبان استفاده شده در Inline Assembly برای نوشتن کد در یک مجموعه مستقل استفاده کنیم.
اسمبلی Inline
کد Inline assembly را می توان درون کد اصلی Solidity قرار داد تا کنترل دقیق تری بر EVM داشته باشد و به ویژه هنگام نوشتن توابع کتابخانه استفاده می شود.
یک کد اسمبلی در زیر بلاک اسمبلی { … } نوشته می شود.
مثال
کد زیر را امتحان کنید تا نحوه کار کتابخانه در Solidity را درک کنید.
برنامه فوق را با استفاده از مراحلی که در فصل Solidity First Application ارائه شده است، اجرا کنید.
خروجی
[/vc_column_text][/vc_tta_section][vc_tta_section title=”Events” tab_id=”events”][vc_column_text]
آموزش سالیدیتی Solidity – رویدادها Events
Event یک عضو ارثی inheritable در یک قرارداد است. یک event منتشر می شود و استدلال های منتقل شده در گزارش های معاملات یا تراکنش ها را ذخیره می کند. این گزارش ها در بلاکچین ذخیره می شوند و تا زمان حضور قرارداد در بلاکچین با استفاده از آدرس قرارداد قابل دسترسی هستند. یک event ایجاد شده از طریق قراردادها، حتی event که آنها را ایجاد و منتشر کرده است، قابل دسترسی نیست.
یک event را می توان با استفاده از کلمه کلیدی event اعلام کرد.
مثال
با امتحان کد زیر می توانید با عملکرد یک event در Solidity آشنا شوید.
ابتدا یک قرارداد ایجاد کنید و یک event منتشر کنید.
سپس به event قرارداد در کد JavaScript دسترسی پیدا کنید.
این برنامه باید جزئیات مشابه موارد زیر را چاپ کند.
خروجی
[/vc_column_text][/vc_tta_section][vc_tta_section title=”Error Handling” tab_id=”errorhandling”][vc_column_text]
آموزش سالیدیتی Solidity – مدیریت خطا Error Handling
Solidity توابع مختلفی را برای مدیریت خطا فراهم می کند. به طور کلی وقتی خطایی رخ می دهد، state به state اولیه برگردانده می شود. بررسی های دیگر برای جلوگیری از دسترسی کد غیرمجاز است. در زیر برخی از روش های مهم مورد استفاده در مدیریت خطا آورده شده است.
- assert (شرط bool) – در صورت عدم تحقق شرط، این فراخوانی متد باعث کدگذاری نامعتبر می شود و هر گونه تغییر در state برگردانده می شود. این روش برای خطاهای داخلی استفاده می شود.
- require (شرط bool) – در صورت عدم تحق شرط، این فراخوانی روش به state اولیه یا حالت اولیه برمی گردد. این روش برای خطاهای ورودی ها یا اجزای خارجی استفاده می شود.
- require (شرط bool، string memory message) – در صورت عدم تحقق شرط، این فراخوانی روش به state اولیه برمی گردد. این روش برای خطاهای موجود در ورودی ها یا اجزای خارجی استفاده می شود. این گزینه برای ارائه پیام سفارشی فراهم می کند.
- ()revert – این روش اجرا را متوقف می کند و هر گونه تغییر ایجاد شده را به state اولیه بر می گرداند.
- revert (string memory reason) – این روش اجرا را متوقف می کند و هرگونه تغییر ایجاد شده را به state اولیه برمی گرداند. این گزینه ای را برای ارائه پیام سفارشی فراهم می کند.
مثال
با امتحان کد زیر می توانید با نحوه مدیریت خطا در Solidity آشنا شوید.
وقتی revert فراخوانی شود، داده های هگزادسیمال را به شرح زیر برمی گرداند.
خروجی
[/vc_column_text][/vc_tta_section][/vc_tta_tour][/vc_column][/vc_row]
سلام من برای در نظر گرفتن فی تراکنش ها در صرافی پنکیک سواپ به مشکل بر خوردم.برای نوشتن در قرار داد با این ارور مواجه شدم باید چکار کنم
( arg = " AddValue " , coderType = " uint256 " , value = " 2 %)
سلام دوست عزیز
کاش کد رو میذاشتین، از روی این تیکه خطا که گذاشتین درست نمیشه متوجه شد… به نظر میاد که ایرادی در آرگومان های ورودی یکی از توابع هستش،
اما بهتره کد رو بذارین که ببینیم چی به چیه