برنامه نویسی و زبانهای آن تنها راهی هستند که بشر برای ارتباط با سیستمها و مکانیزمهای کامپیوتری مختلف در اختیار دارد. مکانیزم بلاکچین نیز از این قاعده مستثنی نیست و بشر برای اینکه بتواند از این تکنولوژی بهره ببرد، باید توانایی کد زدن را داشته باشد. زبان برنامه نویسی سالیدیتی solidity یکی از زبانهایی است که برای کدنویسی در بلاکچین ارائه شده و از ۱۴ سال پیش تاکنون تغییرات بسیاری را تجربه کرده است. بسیاری از افرادی که به این زبان مسلط هستند در حال حاضر به عنوان توسعهدهنده پروژههای دیفای و Dappها و توکنهای مختلف فعالیت دارند.
در حال حاضر افراد بسیاری از زبان سالیدیتی استفاده میکنند و خدمات مبتنی بر بلاکچین را توسعه میدهند. این زبان برنامه نویسی با بلاکچین اتریوم به شهرت رسید و در حال حاضر هم بیشتر در همین بلاکچین مورد استفاده قرار میگیرد. این مقاله از داموند برای افرادی نوشته شده است که میخواهند بدانند سالیدیتی چیست و چگونه در بلاکچین اتریوم برای نوشتن قراردادهای هوشمند مورد استفاده قرار میگیرد.
زبان برنامه نویسی سالیدیتی solidity چیست؟
سالیدیتی یک زبان برنامه نویسی شیگراست که در حال حاضر جزو سطح بالاترین زبانهای برنامه نویسی به شمار میرود. این زبان برنامه نویسی برای نوشتن قراردادهای هوشمند و انجام خودکار تراکنشها بر بستر بلاکچین مورد استفاده قرار میگیرد. این زبان برنامه نویسی در سال ۲۰۱۴ توسط توسعه دهندگان اتریوم ایجاد شد و در ابتدا تنها برای قراردادهای هوشمند این شبکه مورد استفاده قرار میگرفت. به مرور زمان برنامه نویسهای دیگر متوجه مزایا و کاربرد سالیدیتی solidity شدند و به همین دلیل سایر بلاکچینها هم برای توسعه قراردادهای هوشمندشان از آن استفاده کردند.
برنامهنویسان جاوا اسکریپت را به عنوان یکی از پرکاربردترین زبانهای برنامه نویسی در جهان میشناسند؛ زبان برنامه نویسی سالدیتی هم شباهتهای بسیاری به جاوا اسکریپت دارد و میتواند به همان اندازه کاربردی باشد. شباهتهای این دو زبان به اندازهای است که میتوان گفت این زبان، یکی از دیالکت یا گویشهای جاوا اسکریپت است. بنابراین اکثر افرادی که به جاوا اسکریپت مسلط باشند، میتوانند با سالیدیتی هم کار کنند. سالیدیتی با سایر زبانهای برنامه نویسی مانند پایتون و C++ هم وجوه مشترک دارد.
قابلیتها و کاربردهای سالیدیتیی
برنامه نویسان سالیدیتی نیازی به تایپ کدهای صفر و یکی ندارند. در این زبان کدها با ترکیبی از حروف و اعداد نوشته میشوند و درکشان برای انسانها راحتتر است. این موضوع، مشکلاتی که بعد از تغییر ساختار تیمهای برنامه نویسی و جابجا شدن اعضا به وجود میآید را تا حد زیادی کاهش میدهد.
سالیدیتی جزو زبانهای برنامه نویسی ایستاست که از مفاهیمی چون وراثت، کتابخانه و مفاهیم پیچیدهای که توسعه دهندگان در آن تعریف میکنند، پشتیبانی میکند. ایستایی این زبان برنامه نویسی باعث میشود کاربران متوجه شوند هر متغیر موجود در کدها به چه چیزی اشاره دارد. تنوع دادههای موجود در کامپایلر امکان چک کردن اعتبار متغیرها را برای آن فراهم میکند؛ دادههای ایستای موجود معمولا در یکی از دو دسته دادههای ارزش یا دادههای منبع قرار میگیرند.
تفاوت اصلی دادههای ارزش و دادههای منبع در نحوه تخصیص آنها به متغیرها و روشی که در ماشین مجازی اتریوم مجازی اتریوم ذخیره میشوند، مشخص میشود. تغییر مقدار در یک متغیر، باعث تغییر مقدار سایر متغیرها نمیشود، اما اگر در متغیرهای منبع تغییری ایجاد شود، مقدار سایر متغیرها هم تغییر میکنند و باید بروزرسانی شوند.
زبان برنامه نویسی بلاکچین چطور کار میکند؟
یکی از جذابیتهای اکوسیستم اتریوم این است که بسیاری از پروژههای دیفای، توکنها و پروژههای رمزنگاری شده میتوانند بر بستر آن فعالیت داشته باشند. قراردادهای هوشمندی که با استفاده از سالیدیتی نوشته میشوند، امکان راهاندازی پروژهها و ارائه خدمات مختلف بر بستر اتریوم را فراهم میکنند.
یکی از مهمترین ابزارهای مورد نیاز برای استفاده از سالیدیتی ماشین مجازی است. ماشین مجازی کامپیوتری بر بستر بلاکچین است که به عنوان یک میان افزار، ایدههای افراد را به کدهای قابل خواندن برای شبکه تبدیل میکند. کاربردیترین ماشین مجازی که در حال حاضر در بستر بلاکچین کار میکند، ماشین مجازی اتریوم است.
در بطن کدها و پروسههای اپلیکیشنهای غیرمتمرکز، زبان برنامه نویسی solidity کدی در سطح ماشین ایجاد میکند و در ماشین مجازی اجرا میشود. در این بخش یک کامپایلر وجود دارد که کدهای پیچیدهای که برای انسانها قابل درک هستند را به کدهای قابل استفاده برای پردازنده تبدیل میکند. این کامپایلرها در پلتفرمهای مختلف به صورت رایگان عرضه میشوند؛ نمونههایی چون کامپایلر آنلاین Remix یا کامپایلرهای قابل دانلود برای سیستم برای برنامهنویسان سالیدیتی کاربردی هستند.
در حال حاضر قراردادهای هوشمندی که روی ماشینهای مجازی بلاکچین توسعه داده میشوند، محدودیتهایی دارند. یکی از قابل توجهترین موارد، دسترسی محدود به توابع کتابخانه است که برای تجزیه ساختارهای JSON یا محاسبه ممیزهای شناور (Floating-point arithmetic) مشکل ایجاد میکند.
توابع خصوصی و عمومی
توابع عمومی در زبانهای برنامه نویسی شبیه به APIهایی هستند که هرکسی میتواند به آنها دسترسی داشته باشد و آنها را در کدهای خود فراخوانی کند. این توابع معمولا برای کاربردهای مشترک بین توسعهدهندگان مختلف در یک پلتفرم ایجاد میشوند تا همه بتوانند از آنها استفاده کنند.
به عنوان مثال تابعی که امکان دریافت موجودی را برای اپلیکیشنهای غیرمتمرکز فراهم میکند، میتواند یک تابع عمومی باشد و در هر اپلیکیشنی مورد استفاده قرار بگیرد. استفاده از توابع عمومی یکی از متداولترین راهکارها برای ایجاد قراردادهای هوشمند بر بستر بلاکچین است.
ایجاد یک قرارداد هوشمند با استفاده از زبان برنامه نویسی solidity و توابع عمومی آن، کار سادهایست اما سطح امنیتی بالایی ندارد. به عنوان مثال اگر تابع عمومی که برای قابلیت برداشت در یک قرارداد هوشمند مورد استفاده قرار میگیرد، امن نباشد، احتمالا هکرها به راحتی میتوانند به کاربران درگیر با آن قرارداد دسترسی پیدا کنند و به حسابهایشان دستبرد بزنند.
در این مثال، مهاجم میتواند یک تابع برداشت را در یک حلقه فراخوانی کند تا عملیات برداشت برای چند بار متوالی انجام شود و موجودی حسابهای مبدأ به حساب خودش منتقل شود. برای حل این قبیل مشکلات میتوان از توابع خصوصی استفاده کرد.
توابع خصوصی، کدهایی هستند که فقط کدهای داخل قرارداد میتوانند آنها را فراخوانی کنند. این توابع دستوراتی دارند که تنها در صورتی اجرا میشود که توسط توابع دیگری فراخوانی شده باشند. بنابراین میتوان گفت این توابع به صورت زنجیرهای اجرا میشوند و اگر یکی از حلقههای زنجیر وجود نداشته باشد، توابع خصوصی بعدی کار نمیکنند. این موضوع دسترسی عوامل مخرب به کدها و ایجاد تغییر در آنها را سختتر میکند.
استانداردها و منطق کدها در زبان برنامه نویسی سالیدیتی
در شبکه اتریوم استانداردهای مختلفی وجود دارد که تعیین میکند قراردادهای هوشمند چگونه باید با سالیدیتی نوشته شوند. توسعهدهندگان میتوانند با استفاده از این استانداردها از قراردادهای هوشمند برای برنامههای کاربردی مورد نظرشان استفاده کنند.
استانداردهای موجود با نام ERC که مخفف عبارت Ethereum Request for Comments است، شناخته میشود. این استانداردها بر اساس اسنادی که شامل راهنمای توابع مورد نیاز و محدودیتهایی که برای اجرای کدها تعیین شده است، ایجاد میشوند.
برخی از استانداردهای موجود در سالیدیتی در بستر اتریوم عبارتند از:
در سالیدیتی روشهای مختلفی برای ایجاد تعامل میان قراردادهای هوشمند مختلف وجود دارد. از این زبان برنامه نویسی همچنین میتوان برای ایجاد دستورات اختصاصی درباره نحوه ذخیرهسازی دادهها در قراردادهای هوشمند استفاده کرد. به کمک پروسههایی که تاکنون درباره آنها صحبت کردیم، میتوان دادههای قراردادهای هوشمند مختلف را از یکدیگر جدا کرد.
نکته دیگری که در این باره وجود دارد، این است که. با استفاده از قراردادهای جایگزین سالیدیتی، میتوان کاری کرد که منطق یک قرارداد تغییر کند. با این تغییر منطق، امکان جداسازی دادهها فراهم میشود.
تغییرناپذیری در سالیدیتی
بعد از اینکه کدهای یک قرارداد هوشمند نوشته شد و کامپایلر آنها را تایید کرد، تغییر آنها دیگر ممکن نخواهد بود. علت این موضوع آن است که هر کدی باید مطابق با برنامه کار کند و اگر چنین نباشد، احتمال دست بردن در آن وجود خواهد داشت.
همانطور که میدانید، اتریوم یک پلتفرم تغییرناپذیر است و امکان تغییر دادهها و منطق قراردادهای نوشته شده وجود ندارد. این موضوع برای برخی از برنامهنویسان و توسعهدهندگان بلاکچین مشکل ایجاد میکند. به همین دلیل راهکارهای مختلفی برای دور زدن این قانون وجود دارد.
یکی از متداولترین راههای موجود برای دور زدن این ویژگی، استفاده از پروکسی است که به قرارداد دیگری اشاره میکند که منطق تجاری مورد نیاز را دارد. با این کار میتوان نسخه جدیدی از قرارداد را اجرا کرد و مشکل تغییرناپذیری قرارداد هوشمند سالیدیتی را از بین برد.
کارمزد (Gas)
در شبکه اصلی اتریوم هزینههای اضافهای وجود دارد که برای استفاده از زبان برنامه نویسی سالیدیتی پرداخت میشود. بخشی از این هزینهها بر اساس گس یا کارمزد سیستم اتریوم هستند؛ این هزینهها به ماینرهایی پرداخت میشود که امنیت شبکه را تأمین میکنند تا کدها به صورت امن در شبکه اجرا شوند.
هنگام ایجاد یک قرارداد هوشمند باید به این نکته توجه داشت که کارمزد یا گس مشخص میکند که قابلیت اجرایی یک قرارداد هوشمند چقدر است. این هزینهها به ازای هر واحد حافظه استفاده شده پرداخت میشوند، بنابراین هر اقدامی که با استفاده از سالیدیتی انجام میشود، به پرداخت کارمزد نیاز خواهد داشت. قراردادهای هوشمندی که کارمزد استفاده از آنها زیاد است، معمولا دوام زیادی ندارند و بعد از مدتی از شبکه خارج میشوند.
به کمک بهینهسازی گس میتوان کارمزد قرارداد هوشمند را بعد از اجرای کدها کاهش داد. یکی از رایجترین راهکارها برای کاهش هزینه کارمزد، استفاده بیشتر از کتابخانهها و کاهش استفاده از توابع است. کتابخانهها معمولا برای ذخیره بایتکدها مورد استفاده قرار میگیرند.
توسعهدهندگان به جای اضافه کردن بایتکد غیرضروری به قرارداد هوشمند، از کتابخانه استفاده میکنند؛ بنابراین اندازه قرارداد هوشمند کاهش پیدا میکند. استفاده از توابع کمتر به معنی کد کمتر و کاهش سختی ممیزی کدهاست.
کاربرد سالیدیتی در اتریوم
سالیدیتی در اتریوم برای توسعه توکنهای معمولی و NFTها مورد استفاده قرار میگیرد. در اکوسیستم اتریوم توسعه هرکدام از انواع توکنها استانداردهای منحصر به فردی دارد که توسعهدهندگان باید به آن توجه داشته باشند.
کاربران بلاکچین با استفاده از این استانداردها میتوانند از قابلیتهای مختلف سالیدیتی solidity استفاده کنند و توکنهای قابل معاوضه و غیرقابل معاوضه را بر بستر اتریوم توسعه دهند. در حال حاضر کاربران بلاکچین ایدههای مختلفی را در این زمینه اجرا کردهاند؛ از استخراج توکنهای NFT گرفته تا افزودن آنها به استخرها و مزرعههای استخراج. اتریوم راههای مختلفی برای اجرای پروژههای غیرمتمرکز و کسب سود ایجاد کرده است.
سالیدیتی در اتریوم همچنین برای نهادهای خود گردان غیرمتمرکز (DAO) مورد استفاده قرار میگیرد. ساختار اولیه تمام DAOهایی که بر بستر اتریوم کار میکنند، توسط این زبان برنامه نویسی ایجاد شده است. زبان برنامه نویسی سالیدیتی امکان اجرای خودکار پروسههای DAO را فراهم کرده است. به عنوان مثال اعضای پلتفرمهای DAO میتوانند در رایگیریها شرکت کنند و به ازای هر مشارکت آنها، صورت خودکار اعتبار دریافت میکنند.
بهترین زبان برنامه نویسی بلاک چین
سالیدیتی چیزی بیشتر از یک زبان برنامه نویسی است و در حال تعیین استانداردهای لازم برای آینده بلاکچین است. به همین دلیل به عنوان بهترین زبان برنامه نویسی بلاک چین شناخته میشود. توسعهدهندگان به صورت مداوم امنیت و عملکرد این زبان برنامه نویسی را ارتقا میدهند و در حال حاضر بسیاری از پروژههای غیرمتمرکز در حوزههای مختلف به آن وابسته هستند.
زبان برنامه نویسی بیت کوین، C++ است که از ابتدا توسط ساتوشی ناکاموتو مورد استفاده قرار گرفت. این زبان برنامه نویسی شباهتهای بسیاری به سالیدیتی دارد، اما نمیتواند همه نیازهای شبکه بلاکچین را برآورده کند. به همین دلیل است که سالیدیتی در بلاکچین بیشتر از C++، پایتون و حتی سیشارپ مورد توجه قرار گرفته است. البته بسیاری از افرادی که با سالیدیتی برنامه نویسی میکنند، به یکی از این زبانهای برنامه نویسی مسلط هستند.
نکاتی درباره یادگیری سالیدیتی
بعد از آشنایی با زبان برنامهنویسی سالدیتی ممکن است به یاد گرفتن این زبان فکر کنید. سالیدیتی زبان برنامهنویسی سادهای نیست و به زمان و انرژی بسیاری برای یادگیری نیاز دارد. سایتهای مختلفی هستند که آموزشهای این زبان برنامهنویسی را ارائه میدهند یا پروژههایی برای یادگیری بهتر این زبان به دانشجویان میسپارند. بیایید پیش از بررسی این سایتها بررسی کنیم که آیا سالیدیتی ارزش یادگیری دارد یا خیر.
این زبان برنامهنویسی مهمترین زبان بلاکچین است و در آینده کاربردهای بیشتری پیدا میکند، اما کسی که فقط سالیدیتی بداند و هیچ مهارت دیگری نداشته باشد، نمیتواند شغل خوبی در دنیای ارزهای دیجیتال پیدا کند. این زبان برنامهنویسی برای افرادی مناسب است که پیش از این هم برنامهنویس بودهاند و روی سایر زبانها هم مسلط هستند. همچنین افرادی که به تازگی میخواهند وارد دنیای برنامهنویسی شوند، تازه نفس هستند و میتوانند چند سال برای یادگیری و تمرین وقت صرف کنند، میتوانند در سالیدیتی موفق شوند. یادگیری این زبان برای افرادی که الان مهارت خاصی ندارند و به دنبال مهارتی هستند که بعد از چند ماه آنها را به درآمد برساند، انتخاب مناسبی نیست.
از آنجایی که سالیدیتی یکی از جدیدترین زبانهای برنامهنویسی است که در دنیا ایجاد شده، هنوز آموزشهای زیادی برای آن وجود ندارد. اکثر آموزشها در سایتهای معتبر انگلیسی زبان ارائه میشوند و هیچکدام از آنها هم رایگان نیستند. در ادامه به چند مورد از سایتهای معتبری که این آموزشها را ارائه میدهند، اشاره میکنیم.
- Crypto Zombies: این سایت سالیدیتی را با پروژههای ساده آموزش میدهد. دانشجویان با تمرینات این سایت میتوانند با این زبان برنامهنویسی یک بازی زامبی بسازند. این بازی خیلی پیشرفته نیست، اما شما را با ساختار کلی و روش کار با سالیدیتی آشنا میکند.
- BitDegree: این سایت به طور کلی آموزشهایی در زمینه بلاکچین ارائه میدهد. دانشجویان بعد از پایان دورههای این سایت، مدرک معتبری دریافت میکنند که روی بلاکچین اتریوم ذخیره میشود.
- udemy.com: دوره سالیدیتی این سایت هزینه متوسطی دارد، اما مطابق با آمار ارائه شده، یکی از بهترین آموزشهایی است که در حال حاضر درباره این زبان وجود دارد.
- B9LAB.com: این سایت هم دورههای سالیدیتی را ارائه میدهد، اما هزینه دورههای آن بسیار زیاد است.
کلام آخر
هر سال میلیاردها دلار برای پروژههای بلاکچین صرف میشود و بخش اعظمی از این پروژهها به زبان برنامه نویسی سالیدیتی توسعه داده میشوند. با استفاده از قراردادهای هوشمند solidity میتوان فرایندهای تجاری و غیرتجاری را به گونهای طراحی کرد که به صورت خودکار انجام شوند. انجام فعالیتهای مختلف بر بستر بلاکچین نیازی به اعتماد به یک واسطه ندارد و احتمال کلاهبرداری و تقلب در آن بسیار کم است.
برنامه نویسی حوزه بلاکچین یکی از شاخههای جدید برنامه نویسی است که توجه بسیاری از توسعهدهندگان را به خود جلب کرده است. برنامهنویسان سالیدیتی در سالهای آینده میتوانند موقعیتهای شغلی بسیار خوبی به دست آورند و در زمینه توسعه پروژهها و اپلکیشنهای غیرمتمرکز فعالیت داشته باشند.
صرافی ارز دیجیتال داموند مفاهیم ارزهای دیجیتال و تکنولوژی بلاکچین را از صفر و به زبانی ساده بیان میکند تا در ضمن ترید در این بازار بتوانید دانشی فنی در این زمینه داشته باشید. برای اطلاعات بیشتر و دانش پایهای در زمینه بلاکچین و ارزهای دیجیتال، مجله داموند را دنبال کنید.