زبان برنامه نویسی سالیدیتی (Solidity) چیست؟
زبان برنامه نویسی سالیدیتی (Solidity) جهت نوشتن قراردادهای هوشمند در بلاک چین اتریوم توسعه یافته و از این رو، یکی از قویترین زبانهای برنامهنویسی برای ساخت اپلیکیشنهای غیرمتمرکز (DApps) در این اکوسیستم گسترده محسوب میشود. با گسترش دنیای وب ۳، توسعهدهنگان به انتخابهای بیشتری برای زبانهای برنامهنویسی ویژه این حوزه دست یافتند که هرکدام از آنها، مزایا و معایت ویژه خود را برای قراردادهای هوشمند (Smart Contracts) دارند.
پادکست زبان برنامه نویسی سالیدیتی
زبانهای برنامه نویسی با توجه به بلاک چینهای ویژه آنها یا خصوصیاتی نظیر سرعت، قالب و قواعد کدنویسی و امنیت آنها با یکدیگر تفاوت دارند. برنامههای غیرمتمرکز یا همان DApp ها، اپلیکیشنهایی هستند که در شبکه همتا به همتا (P2P) و اپن سورس (متنباز / Open Source) اتریوم از طریق قراردادهای هوشمند ساخته میشوند و یک رابط کاربری برای آنها طراحی شده که این اپلیکیشنها را به یک پلتفرم غیرمتمرکز تبدیل میکند.
مطالعه بیشتر: برنامه غیرمتمرکز یا DApp چیست؟
توسعه اپلیکیشن هم مشابه با سایر برنامهها و وبسایتها، به یک زبان برنامه نویسی و اجرای کد آنها در محیط مربوطه نیاز دارد که در حوزه وب ۳، بلاک چین و رمزارزها، سالیدیتی محبوبترین و اصلیترین ابزار جهت انجام اینکار، بهویژه در بلاک چین اتریوم است. سالیدیتی یک زبان برنامهنویسی جدید بوده که توسط توسعهدهندگان اتریوم، دومین ارز دیجیتال برتر دنیا، طراحی شده است.
در این مقاله از صرافی ارز دیجیتال او ام پی فینکس، به بررسی زبان برنامه نویسی سالیدیتی، نحوه عملکرد و مزایا و معایب آن میپردازیم.
زبان برنامه نویسی سالیدیتی چیست؟
طرح توسعه زبان برنامه نویسی سالیدیتی در سال ۲۰۱۴ ارائه شد و امروز بهعنوان یک زبان برنامهنویسی شیءگرا (Object-Oriented) و پیشرفته جهت پیادهسازی قرارداد هوشمند در ماشین مجازی اتریوم (Ethereum Virtual Machine / EVM) شناخته و استفاده میشود. در ساخت زبان سالیدیتی، از زبانهای برنامهنویسی شناختهشده نظیر سی پلاس پلاس (++C) و جاوا اسکریپت (JavaScript) الهام گرفته شده است. سالیدیتی توسط تیم توسعه دهنده اتریوم طراحی و ساخته شده و ویژه ایجاد قراردادهای هوشمند در این شبکه و پلتفرمهای بلاک چینی است.
از کاربردهای زبان برنامه نویسی سالیدتی میتوان به استفاده از آن برای ساخت قراردادهای هوشمند جهت پیادهسازی منطق و مدل یک کسب و کار و همچنین، ثبت تاریخچه تراکنشها در یک سیستم مبتنی بر فناوری بلاک چین اشاره کرد. بهعلاوه، سالیدیتی یکی از ابزارهای ساخت کدهای ماشینی و تبدیل و کامپایل (Compile) آن در ماشین مجازی اتریوم بوده و بهدلیل شباهت آن با زبانهای “C”، درک و فهم آن برای متخصصان این حوزه خیلی دشوار نیست. برای مثال، دستور “Main” در زبان برنامه نویسی “C” مشابه با دستور “Contract” در زبان سالیدیتی است.
زبان برنامه نویسی سالیدیتی همانند سایر همتاهای خود دارای متغیر، توابع، کلاسها، فرمولهای ریاضی، استرینگ یا رشته و بسیاری مفاهیم دیگر است. گوین وود (Gavin Wood)، مدیر ارشد فناوری اتریوم در سال ۲۰۱۴، به ایده زبان سالیدیتی رسید تا بتواند راهکاری برای طرح قراردادهای هوشمند این شبکه، از طریق یک زبان برنامه نویسی با ویژگی تورینگ کامل (Touring-Complete) باشد.
ویتالیک بوترین (Vitalik Buterin)، بنیانگذار اتریوم، در راستای گسترش قابلیتهای فناوری پیشرو بلاک چین بیت کوین از طریق افزودن قراردادهای هوشمند به آن، طرح پروتکل اتریوم را ارائه کرد. در چشمانداز این طرح، شبکهای گسترده از قراردادهای هوشمند وجود داشت که طبق برقرار شرایطی خاص، بهصورت خودکار در شبکهای جهانی متشکل از هزاران کامپیوتر اجرا میشوند. قراردادهای هوشمند به توسعهدهندگان این اجازه را داده تا بتوانند ارزهای دیجیتال جدید، اپلیکیشنهای حوزه دیفای (DeFi) و بسیاری محصولات دیگر را طراحی و عرضه کنند.
تیم توسعه دهنده زبان سالیدیتی به رهبری کریستین رایتوایزنر (Christian Reitwiessner)، در زمینه ساخت یک زبان برنامه نویسی شیءگرا و تورینگ کامل، جهت پیادهسازی قراردادهای هوشمند موفق ظاهر شدند و توانستند یک زبان برنامهنویسی سطح بالا را ارائه دهند که توسعهدهندگان قراردادهای هوشمند، برای ساخت و محاسبات آنها مجبور نباشند دادههای سیستمی نظیر حافظه یا بایتکدها را تغییر دهند. مفهوم تورینگ کامل، به قابلیت ایجاد تغییر در دادههای سیستمی و پایه جهت شبیهسازی رفتار یک ماشین تورینگ (Touring Machine) اشاره دارد. از لحاظ تئوری، زبان برنامه نویسی سالیدیتی طوری طراحی شده که پاسخگوی انواع محاسبات مورد نیاز توسعهدهندگان باشد.
همانطور که پیشتر به آن اشاره شد، سالیدیتی بر اساس و الهامگرفته از زبانهای برنامهنویسی قبل از خود از جمله سی پلاس پلاس، پایتون (Python) و جاوا اسکریپت است. در زبان سالیدیتی جهت اعلام متغیرها و لوپها (حلقه / Loop)، عیناً از سینتکس (قاعده نحوی / Syntax) زبان “++C” استفاده میشود و همچنین برای توابع اورلود (Overload) که دارای اسامی یکسان اما پارامترهای پذیرفتهشده متفاوت هستند، از دستور ویژه همین زبان پشتیبانی میکند. جهت تبدیل و کامپایل دادهها در زبان سالیدیتی میتوان از روشهای ضمنی (Implicit) و صریح (Explicit) استفاده کرد که یعنی، نوع متغیرها را میتوان به سبک صریح در یک کد نوشت یا در صورت نیاز به انجام محاسبه، بهصورت خودکار تبدیل شوند.
زبان برنامه نویسی سالیدیتی تا حد زیادی از جاوا اسکریپت الهام گرفته شده، اما اصلیترین شباهت ظاهری آن، تعریف توابع از طریق دستور “Function” است. از این رو، یادگیری زبان سالیدیتی برای بسیاری از توسعهدهندگان کار دشواری نبوده و این زبان، استاتیک تایپ (Static Type) بوده و قابلیت استفاده از کتابخانه (Library) و ساخت مدلهای پیچیده را دارد.
از طرفی دیگر، سینتکس زبان سالیدیتی خیلی شبیه به پایتون نبوده اما مشابه با آن از الگوریتم خطیسازی “C3”، وراثت چندگانه و متد و تابع “Super” استفاده میکند. همچنین در کنار سالیدیتی، از زبان برنامه نویسی وایپر (Vyper) که سینتکسی مشابه با پایتون داشته استفاده میشود، تا امنیت قراردادهای هوشمند در بلاک چینهای سازگار با ماشین مجازی اتریوم بهبود پیدا کند.
سالیدیتی محبوبترین زبان برنامهنویسی قرارداد هوشمند در صنعت بلاک چین بوده و زبان بومی ساخت قراردادهای هوشمند سازگار با ماشین مجازی اتریوم است. همچنین خارج از شبکه اتریوم، پروژههای زیادی با زبان سالیدیتی جهت پشتیبانی توسط ماشین مجازی اتریوم در بلاک چینهایی نظیر پولکادات (Polkadot)، آوالانچ (Avalanche)، بایننس اسمارت چین (Binance Smart Chain) و سولانا (Solana) طراحی و اجرا شدهاند.
زبان سالیدیتی چگونه کار میکند؟
سالیدیتی که ماهیت اصلی آن یک زبان برنامه نویسی بلاک چین است، ویژه اجرا در ماشین مجازی اتریوم (EVM) ساخته شده است. از این رو میتوان از طریق زبان برنامه نویسی سالیدیتی، قراردادهای هوشمند مبتنی بر اتریوم را برای تمامی بلاک چینهای سازگار با ماشین مجازی اتریوم ساخت. سازگاری گسترده این زبان برنامهنویسی در کنار یادگیری آسان و قابلیتهای متعدد و منعطف آن، سالیدیتی را به پرکاربردترین زبان برنامه نویسی در حوزه بلاک چین تبدیل کرده است.
توسعهدهندگان با استفاده از زبان سالیدیتی، اقدام به ساخت قراردادهای هوشمند میکنند که این برنامهها مشابه با سایر زبانها، از توابع، کلاسها و وضعیتهای مختلف برخوردارند. قراردادهایی که با زبان سالیدیتی نوشته میشوند، به بایتکد (Bytecode) تبدیل شده تا توسط ماشین مجازی اتریوم قابل خواندن باشند. پس از مرحله ترجمه کدهای نوشتهشده یا همان کامپایل (Compile)، قرارداد هوشمندی که با سالیدیتی نوشته شده هیچ تفاوتی با سایر قراردادهای نوشتهشده به زبانهای دیگر نظیر وایپر (Vyper) و هاف (Huff) نخواهد داشت.
زبان برنامه نویسی سالیدیتی مشابه با سایر ابزارهای توسعه بهطور منظم بهروزرسانی میشود، اما باید به خاطر داشته باشید از جایی که قراردادهای هوشمند پس از ثبت و اجرا در یک بلاک چین قابلیت بازگشت و تغییر ندارند، ممکن است دارای محدودیتهایی از سوی نسخه فعلی زبان سالیدیتی باشند. با وجود اینکه توسعهدهندگان سالیدیتی از لحاظ تئوری میتوانند یک قرارداد هوشمند اتریوم را مستقیماً در قالب بایتکد بنویسند، زبان برنامه نویسی پیشرفتهای نظیر سالیدیتی به آنها این قابلیت را داده که برنامهها و قراردادهایی کاربردی را بدون نقطه نفوذ یا دستکاری در اطلاعات سیستمی طراحی کنند.
ماشین مجازی اتریوم (EVM) یک ماشین حالت مجازی (Virtual State Machine) و ثبتکننده تاریخچه وقایع در این بلاک چین است. به بیان ساده، ماشین مجازی اتریوم وضعیت کلی (Global State) این شبکه از جمله آدرس کیف پولها، موجودی حسابها و توکنهای مختلف را ثبت و حفظ میکند و قراردادهای هوشمند نوشتهشده به زبان سالیدیتی، در این وضعیت کل تغییر ایجاد میکنند. وضعیت کلی شبکه در ماشین مجازی اتریوم، از طریق فعالیتهایی نظیر مینت (Mint) توکنهای جدید، ارسال و دریافت ارز دیجیتال یا راهاندازی پروژههای جدید تغییر پیدا میکند. این عملیات که در آپکدهای (Opcodes) ماشین مجازی اتریوم کدگذاری شدهاند، تغییرات وضعیت کلی شبکه را اعمال میکنند.
هر دستور آپکد در ماشین مجازی اتریوم، طوری طراحی شده که این ماشین یک تغییر خاص را در وضعیت شبکه انجام دهد که از میان آنها، میتوان به ارسال و دریافت رمزارزها، صدور توکنهای جدید یا حتی از بینبردن قراردادهای هوشمند اشاره کرد. در نهایت، ماشین مجازی اتریوم بایتکد قرارداد هوشمند را به یک آپکد تبدیل کرده و تغییرات لازمه در بلاک چین را اعمال میکند.
هر آپکد یک کارمزد گس (Gas Fee) مشخص دارد که در قالب ارز دیجیتال اتریوم (ETH) اعمال شده و جهت جلوگیری از فعالیتهای مخرب هکرها و ایجاد تراکم در شبکه استفاده میشود. از این رو، کارمزد گس یک تراکنش از طریق قیمت هر واحد گس و هزینه کل آپکد آن تراکنش محاسبه میشود. در ادامه، خلاصهای از نحوه عملکرد زبان برنامه نویسی سالیدیتی و تغییر وضعیت کلی شبکه اتریوم توسط آن آوردهایم:
- نوشتن قرارداد هوشمند به زبان سالیدیتی
- کامپایل قرارداد هوشمند سالیدیتی به بایتکد
- تبدیل بایتکد به آپکدها ماشین مجازی اتریوم
- تغییر وضعیت کلی شبکه توسط آپکدها
یکی از پایههای اساسی کار در زبان برنامه نویسی سالیدیتی، استاندارد توکن ERC اتریوم بوده که در واقع دستورالعملهایی جهت بهبود و استانداردسازی توکنهای مختلف در این شبکه است. استانداردهای ERC از طریق طرحهای پیشنهادی بهبود اتریوم (Ethereum Improvement Proposals / EIP) ارائه میشوند که در صورت تایید نهایی، برای نوشتن یک قرارداد هوشمند با زبان سالیدیتی آماده میشوند. توکنهای ERC اتریوم از طریق زبان سالیدیتی طراحی و ساخته میشوند و طبق یک برنامه مشخص در این بلاک چین رفتار خواهند کرد. برخی از رایجترین استانداردهای ERC اتریوم بهشرح زیر هستند:
- ERC-20: استاندارد توکنهای مثلی
- ERC-721: استاندارد توکنهای غیرمثلی یا NFT
- ERC-1155: استاندارد توکنهای نیمه مثلی (مانند مجموعههای NFT)
- ERC-4626: استاندارد توکنهای خزانه ویژه استخر نقدینگی (Yield-Bearing Vault)
مزایا و معایب زبان سالیدیتی
سالیدیتی در قالب یک زبان برنامه نویسی، ویژگیهای زیادی دارد که این زبان را در برابر سایر همتاهای آن در بلاک چین اتریوم برجسته کرده است. صرف نظر از انواع اصلی و پایه دادههای موجود در این زبان، سالیدیتی چندین نوع داده و متغیر پیچیده هم دارد. سالیدیتی قراردادهای هوشمند را در بلاک چین ثبت و اجرا میکند و یکی از پیشرفتهترین زبانها ویژه قراردادهای هوشمند است.
سالیدیتی یک رابط باینری اپلیکیشن (Application Binary Interface / ABI) داشته که امنیت دادهها را تامین کرده و در صورتی که کامپایلر یک نوع داده اشتباه را برای متغیر مربوطه تشخیص دهد، رابط ABI یک خطا برای آن ارسال میکند. در این بخش، تغییراتی که کاربر در یک اپلیکیشن ایجاد میکند نیز به زبان قابل فهم ماشین مجازی اتریوم تبدیل میشوند.
اما مشابه با هر زبان برنامهنویسی، سالیدیتی نیز چند ایراد در کنار این ویژگیها دارد. در وحله اول، بلاک چین در ذات خود غیرقابل تغییر و دستکاری است و این مسئله باعث شده که قراردادهای هوشمند زبان سالیدیتی یا هر زبانی، پس از اجرا در بلاک چین قابلیت تغییر و ویرایش نداشته باشند. این یعنی که هر یک خط کد در یک قرارداد هوشمند باید بینقص باشد و در غیر این صورت، خطر هک و نفوذ به آن وجود خواهد داشت؛ چرا که تا زمانی که بلاک چین اتریوم فعالیت میکند، آن قرارداد هوشمند هم به عملکرد خود ادامه میدهد. زبان سالیدیتی نسبت به حملات ورود مجدد (Reentrancy Attack) و برخی از دیگر موارد امنیتی نیز آسیبپذیر است.
در نهایت باید گفت که سالیدیتی یک زبان برنامهنویسی ویژه طراحی قراردادهای هوشمند در بلاک چین اتریوم است و اکثر توسعهدهندگان این حوزه برای انجام این کار، سالیدیتی را نسبت به سایر زبانها ترجیح میدهند. سالیدیتی یک زبان برنامهنویسی کاربردی جهت ساخت اپلیکیشنهای همهکاره بوده و از جایی که در زیرساخت شبکه اتریوم قابل اجرا است، متغیرها، دستورها و توابع بیشتری را نسبت به سایر زبانهای برنامهنویسی دارد و توسعهدهندگان با استفاده از زبان سالیدیتی، در شبکه اتریوم به ساخت ارزهای دیجیتال و اپلیکیشنهای غیرمتمرکز میپردازند.
اتریوم گستردهترین اکوسیستم حال حاضر دنیا برای اپلیکیشنهای غیرمتمرکز نظیر خدمات مالی، بازیهای درآمدزا (Play-to-Earn / P2E) و . . . بوده که از طریق قراردادهای هوشمنده توسعه پیدا میکنند.
در این مقاله از صرافی ارز دیجیتال او ام پی فینکس، سعی کردیم معرفی کاملی از زبان برنامه نویسی سالیدیتی و نحوه عملکرد و مزایا و معایب آن به شما ارائه دهیم. در صورتی که پیرامون این مطلب سوال، پیشنهاد و یا انتقادی داشتید، خواهشمندیم با ثبت نظر خود با ما در ارتباط باشید.
سوالات پرتکرار در مورد زبان برنامه نویسی سالیدیتی
-
سالیدیتی چیست؟
سالیدیتی (Solidity) زبان برنامهنویسی ویژه قراردادهای هوشمند و توکنهای مختلف در بلاک چین اتریوم (Ethereum) است.
-
کدام ارز دیجیتال پروژه سالیدیتی است؟
تقریباً تمام اپلیکیشنهای غیرمتمرکز (DApps) و توکنهای شبکه اتریوم از طریق زبان سالیدیتی توسعه یافتهاند.