قرارداد هوشمند یکی از ویژگیهای مهم شبکه اتریوم است. قرارداد هوشمند امکان برنامهنویسی بر روی شبکه بلاکچین اتریوم را فراهم کرده است. مشابه تمام پلتفرمهای برنامهنویسی، برای کدنویسی در شبکه اتریوم از یک زبان برنامهنویسی استفاده میکنیم. Solidity نام زبان برنامهنویسی در شبکه اتریوم است. در این مقاله با زبان برنامه نویسی سالیدیتی بیشتر آشنا میشوید. ویژگیهای این زبان برنامه نویسی بلاکچین را معرفی کرده و برنامه نویسی قراردادهای هوشمند را آموزش خواهم داد.
سالیدیتی (Solidity) یک زبان برنامه نویسی حرفهای است که برای کار با فناوری بلاکچین و نوشتن قراردادهای هوشمند در شبکه اتریوم طراحی شده است. سالیدیتی بر اساس سایر زبانهای برنامهنویسی از جمله، ++C، پایتون و جاوا اسکریپت است. اگر با این زبانهای برنامه نویسی آشنایی دارید، یادگیری زبان برنامه نویسی بلاکچین Solidity برای شما راحتتر خواهد بود.
زبان برنامه نویسی سالیدیتی و قراردادهای هوشمند
زبان برنامه نویسی سالیدیتی یک زبان استاتیک است؛ یعنی برخلاف زبانهای دینامیک که در زمان Run میتوان کدها را بازبینی کرد، در سالیدیتی بازبینی کدها در زمان Compile امکانپذیر است. برای مثال، پایتون و جاوا اسکریپت یک زبان برنامه نویسی دینامیک هستند در حالی که ++C یک زبان استاتیک است. سالیدیتی از این حیث مشابه ++C است.
زبان برنامه نویسی بلاک چین سالیدیتی، از ویژگی وراثت (Inheritance) برخوردار است. یعنی، توابع، متغیرها و سایر ویژگیهایی که در یک قرارداد هوشمند وجود دارد را میتوان در قرار داد هوشمند دیگری به کار برد. Solidity یک زبان برنامه نویسی متن باز است که جامعه توسعهدهندگان آن به شدت در حال رشد است. روزانه پروژههای بسیاری با استفاده از این زبان برنامه نویسی ارائه میشود که میتوانید این پروژهها را از اینجا مشاهده کنید.
پردازشگر مجازی اتریوم
قراردادهای هوشمندی که با استفاده از زبان سالیدیتی نوشته میشود بر روی پردازشگر مجازی اتریوم یا Ethereum Virtual Machine اجرا میشود. این پردازشگر تنها به قراردادهای هوشمندی که بر روی آن اجرا ده دسترسی دارد و به جز این به هیچ اطلاعات دیگری در شبکه دسترسی ندارد. در اینجا قصد معرفی EVM را نداریم، فقط به خاطر داشته باشید که قراردادهای هوشمندی که با استفاده از زبان برنامه نویسی سالیدیتی نوشته شده، بر روی پردازشگر مجازی اتریوم راه اندازی و اجرا میشود.
(در مقاله دیگری کامل به بررسی EVM خواهم پرداخت.)
سالیدیتی یکی از زبانهای برنامه نویسی موجود برای توسعه برنامه روی پردازشگر مجازی اتریوم (EVM) است. کلاسها و کتابخانههای زیادی در سالیدیتی وجود دارند که میتوانند به توسعه یک قرارداد هوشمند توسط شما، بدون هیچ زحمتی کمک کنند. مهمترین محیط های توسعه نرم افزار (IDE) برای برنامه نویسی به زبان سالیدیتی عبارتند از:
- ریمیکس Remix
- ویژوال استدیو Visual Studio (با استفاده از پلاگین)
- اتر اتم Ether atom (با استفاده از پلاگین)
- ویژگیهای زبان برنامه نویسی Solidity
در این قسمت به تعدادی از ویژگی های پایه زبان سالیدیتی اشاره میکنیم. این ویژگی ها مشابه ویژگی های زبان های سطح بالایی مثل جاوا و ++C است.
-
نوع دادهای ایستا
هرچند که این زبان ساختاری شبیه جاوا اسکریپت را دارد، اما برخلاف جاوا اسکریپ نوع دادهای آن ایستا است. برای مثال شما در جاوا و ++C باید در زمان تعریف یک متغیر و پیش از استفاده از آن ، نوع آن متغییر را تعیین کنید. در غیر این صورت در زمان کامپایل با خطا مواجه میشوید. زمان سالیدیتی نیز مانند جاوا و ++C میباشد.
-
قرارداد و رابطها (Interfaces)
در زبان برنامه نویسی سالیدیتی، یک قرارداد (Contract) یک ساختار داده (data structure) است و این امر کمک میکند تا بتوانیم قرارداد بسازیم و آن را مدیریت کنیم. قراردادها میتوانند توسط قراردادهای فرزند به ارث برده شوند و از این طریق قراردادهای پیچیدهتر ایجاد شود.
-
اصلاح کننده توابع (Function Modifier)
این ویژگی مشابه امکان بازنویسی توابع در زبان های برنامه نویسی شیء گرا است. فرض کنید میخواهید در صورت برقراری یک شرط، یک تابع را به روشی متفاوت اجرا کنید. برای این منظور میتوانید از این ویژگی استفاده کنید و رفتار تابع را تغییر دهید. اصلاح کننده توابع برای بازنویسی توابع در قراردادهای وارث نیز کاربرد دارد.
-
رویدادها (Events)
رویدادها برای نوشتن اطلاعات مربوط به قراردادها روی لاگ بلاک چین (Blockchain Log) استفاده میشوند. یک رویداد مشابه یک تابع است که یک داده را به عنوان ورودی دریافت کرده و آن را روی لاگ بلاک چین مینویسد.
-
تعیین سطح دسترسی
این ویژگی مشابه دسترسی های public و private در زبان های برنامه نویسی شیءگرا است. در زبان سالیدیتی نام و قوانین این دسترسیها کمی تغییر کرده است. برای مثال در سالیدیتی دو سطح دسترسی owned و mortal داریم. سطح دسترسی های بیشتری هم برای برقراری امنیت بیشتر در این زبان برنامه نویسی وجود دارد.
-
تبدیل نوع دادهای به صورت صریح
شما با استفاده از سالیدیتی میتوانید نوع دادهها را تغییر دهید. این تغییرها معمولا در زمان کامپایل بررسی میشوند، البته استثناهایی هم وجود دارد.
-
آرایههای داخل حافظه
آرایه های داینامیک میتوانند مستقیما داخل حافظه قرار بگیرند.
-
کتابخانهها
شما میتوانید از کتابخانههای متنوعی برای نوشتن قراردادهای خود استفاده کنید و از این طریق قرارداد خود را سفارشیسازی کنید.
-
امکان Import کردن
با استفاده از کلمه کلیدی import شما میتوانید کدهای فایل های دیگر را به قرارداد خود اضافه کنید.
ویژگیهای زبان سالیدیتی
یک قرارداد هوشمند که با استفاده از سالیدیتی نوشته شده معمولا شامل ۴ بخش زیر است:
دستورالعمل Pragma
پراگما مولفه اساسی برای استفاده از Compiler به منظور بررسی ورژن نسخهای است که برای کدنویسی از آن استفاده شده است. در صورتی که نسخه Match نباشد، در این بخش اخطاری را مشاهده خواهید کرد. برای مثال اگر در ابتدای یک قرارداد هوشمند Pragma solidity ^۰.۷.۰ باشد، Compiler باید بالاتر از نسخه ۰.۷.۰ و پایینتر از ۰.۸.۰ باشد.
State variable
این بخش اطلاعات متغیری همانند قیمت یک ارز دیجیتال را نشان میدهد که در یک قرارداد هوشمند ذخیره میشوند.
توابع
توابع در یک قرارداد هوشمند به واحد اجرایی کد گفته میشود. یک تابع، یک فعالیت را برای رسیدن به یک هدف، تعریف میکند. این ویژگی قابلیت این را دارد که از کتابخانه سالیدیتی فراخوانده شود. این ویژگی دقیقا مشابه سایر زبانهای برنامه نویسی است.
Event
ایونت فعالیتهایی که در یک قرارداد هوشمند وجود دارد را شرح میدهد.
آموزش زبان برنامه نویسی سالیدیتی
زبان سالیدیتی زبان برنامه نویسی جدیدی است و منابع برای یادگیری آن در مقایسه با سایر زبانها کمتر است. این زبان شباهت بسیار زیادی به جاوا اسکریپت دارد. لذا یادگیری Javascript کمک زیادی در یادگیری سالیدیتی خواهد کرد. اما پیش از یادگیری زبان برنامه نویسی سالیدیتی، باید بلاکچین و نحوه کار آن را بشناسید. بدون شناخت بلاک چین و ارزهای دیجیتال ، یادگیری زبان برنامه نویسی بلاکچین کاربرد زیادی نخواهد داشت. همچنین بسیاری از شرکتهایی که به دنبال استخدام برنامه نویس بلاکچین هستند، علاوه بر تسلط بر سالیدیتی، NodeJS، GoLang و AngularJS را نیز طلب میکنند.
سخن پایانی
Solidity نام زبان برنامه نویسی بلاک چین مورد استفاده در شبکه اتریوم است. با استفاده از زبان برنامه نویسی سالیدیتی قراردادهای هوشمند در شبکه اتریوم نوشته و بر روی پردازشگر مجازی اتریوم راه اندازی میشود. همه اپلیکیشنهای غیرمتمرکز که بر روی شبکه اتریوم نوشته شده، از زبان سالیدیتی استفاده کردهاند. این زبان شباهت بسیار زیادی با زبان جاوا اسکریپت داشته و یادگیری آن میتواند کمک زیادی به آموزش زبان سالیدیتی کند.