سالیدیتی چیست؟ آشنایی کامل با زبان برنامه نویسی بلاک چین
پیشرفته
همزمان با رشد صنعت وب ۳، برنامهنویسها با گزینههای بیشتری در زبانهای برنامهنویسی وب ۳ مواجه شدهاند. هر زبان برنامهنویسی مزایا و معایب خاص خود را در بحث نوشتن قراردادهای هوشمند دارد. زبانها ممکن است از لحاظ پشتیبانی از بلاکچینهای خاص و یا در ویژگیهای مختلفی مانند سرعت، خوانایی یا امنیت، متفاوت باشند.
سالیدیتی (Solidity) که به عنوان زبان قرارداد هوشمند بلاک چین اتریوم ساخته شده است، یک زبان برنامهنویسی قدرتمند است که برای ایجاد برنامههای غیرمتمرکز (dApps) برای بزرگترین اکوسیستم توسعهدهنده (Developer) در صنعت بلاک چین استفاده میشود.
در این مقاله، ما تاریخچه، تأثیرات و کاربردهای زبان برنامهنویسی سالیدیتی را ارائه خواهیم کرد. در پایان، برخی از بهترین منابع برنامهنویسی را ارائه میکنیم تا بتوانید به یادگیری در مورد توسعه سالیدیتی ادامه دهید.
مقدمه
سالیدیتی که در سال ۲۰۱۴ معرفی شد، یک زبان برنامهنویسی شیءگرا object-oriented)) و سطح بالا برای پیادهسازی قراردادهای هوشمند است که روی ماشین مجازی اتریوم (EVM) اجرا میشود. سالیدیتی از زبانهای برنامهنویسی معروف مانند ++C و JavaScript الهام گرفته شده است. به عنوان یک توسعهدهنده وب ۳، کار با سالیدیتی برای یادگیری توسعه وب نسل سوم مفید است.
در این مقاله شما را با تاریخچه سالیدیتی آشنا میکنیم، شباهتهای بین سالیدیتی و سایر زبانهای برنامهنویسی را معرفی میکنیم و کاربردهای اصلی سالیدیتی را توضیح میدهیم.
چه کسی سالیدیتی را ابداع کرد؟
در سال ۲۰۱۴، مدیر ارشد فناوری اتریوم، گاوین وود (Gavin Wood)، سالیدیتی را به عنوان زبانی ارائه کرد که نیاز اتریوم به یک زبان برنامهنویسی تورینگ کامل (Turing-complete) برای نوشتن قراردادهای هوشمند را برآورده میکند.
بنیانگذار اتریوم، ویتالیک بوترین، اتریوم را به عنوان پروتکلی پیشنهاد کرد که کارکرد بلاک چین را با قابلیت افزوده قراردادهای هوشمند گسترش دهد. در چشمانداز او، اتریوم میتواند شبکه پیچیدهای از قراردادهای هوشمند را پردازش کند که بر روی یک شبکه توزیعشده و جهانی از رایانهها اجرا میشود. قراردادهای هوشمند به توسعه دهندگان این امکان را میدهد تا ارزهای دیجیتال جدید ایجاد کنند، برنامههای مالی غیرمتمرکز (دیفای) بسازند و موارد دیگر.
تیم پروژه سالیدیتی توسط کریستین رایتویسنر (Christian Reitwiessner) رهبری شد. آنها در ایجاد یک زبان برنامهنویسی تورینگ کامل و شیءگرا برای اجرای قراردادهای هوشمند موفق شدند. سطح بالا بودن یک زبان به این معنی است که توسعه دهندگان بدون نیاز به دستکاری اطلاعات سطح سیستم مانند مموری یا بایت کد (bytecode) برای انجام محاسبات، میتوانند قراردادهای هوشمند ایجاد کنند.
تورینگ کامل بودن به توانایی یک سیستم دستکاری داده، (در اینجا زبان برنامهنویسی)، برای شبیه سازی رفتار ماشین تورینگ اشاره دارد. از نظر تئوری، سالیدیتی نیاز داشت تا بتواند هر محاسباتی را که توسعه دهندگان از آن انتظار دارند، انجام دهد.
سالیدیتی بر پایه چه زبانهای برنامهنویسی ساخته شده است؟
سالیدیتی در طول توسعه خود بر پایه (و تحت تأثیر) چندین زبان برنامهنویسی موجود، از جمله C++، Python و JavaScript بود.
شباهتهای سالیدیتی به C++
سالیدیتی از یک syntax یکسان با C++ برای اعلان متغیرها و حلقهها (لوپها) استفاده میکند. علاوه بر این، سالیدیتی از اورلودینگ (Overloading) توابع سبک C++ پشتیبانی میکند که زمانی مورد نیاز است که دو تابع دارای نام یکسانی باشند اما در پارامترهایی که میپذیرند متفاوت باشند.
در نهایت، سالیدیتی امکان تبدیل (conversion) نوع ضمنی و صریح را فراهم میکند. این بدان معناست که انواع متغیرها را میتوان با کد صریح نوشت یا در صورت نیاز توسط محاسبات، بهطور خودکار تبدیل میشوند.
شباهتهای سالیدیتی به جاوا اسکریپت
سالیدیتی قبلاً به شدت تحت تأثیر جاوا اسکریپت بود. اکنون، شباهت اصلی قابل مشاهده این دو، استفاده سالیدیتی از کلمه کلیدی “function” برای تعریف توابع است.
برای توسعه دهندگانی که با برخی از بزرگترین ویژگیها و تاثیرات سالیدیتی آشنا هستند، آشنایی با سالیدیتی نسبتاً ساده خواهد بود. علاوه بر این، سالیدیتی به صورت ایستا تایپ میشود، ضمن اینکه امکان استفاده از کتابخانه ها (Library) و همچنین ایجاد انواع توابع پیچیده را فراهم میکند.
شباهتهای سالیدیتی به پایتون
تاثیرپذیری سالیدیتی از پایتون از نظر سینتکس syntax)) کمتر آشکار است، با این حال، مانند Python، سالیدیتی از خطیسازی C3 و وراثت چندگانه multiple inheritance)) استفاده میکند و کلمه کلیدی «super» را حفظ میکند.
از بعد استفاده از سینتکس پایتونیک، Vyper شبیه سالیدیتی است و به طور هدفمند برای افزایش امنیت قراردادهای هوشمند مورد استفاده در بلاکچینهای سازگار با EVM طراحی شده است.
سالیدیتی چگونه استفاده میشود؟
سالیدیتی با توجه به ماهیت آن به عنوان یک زبان برنامهنویسی بلاک چین، برای کامپایل شدن در ماشین مجازی اتریوم (EVM) ایجاد شد. به این ترتیب، سالیدیتی قادر است قراردادهای هوشمند ایمن سازگار با اتریوم را برای هر بلاک چین سازگار با EVM بنویسد.
این سازگاری گسترده، همراه با قابلیت درک آسان و عملکرد انعطافپذیر آن، سالیدیتی را به پرکاربردترین زبان توسعه بلاک چین در صنعت تبدیل کرده است.
سالیدیتی چگونه کار میکند؟
توسعهدهندگان سالیدیتی قراردادهای هوشمند مینویسند، که برنامههایی هستند که روی EVM اجرا میشوند. مشابه زبانهای دیگر، قراردادهای هوشمند میتوانند چندین تابع، صورت وضعیتهای (states) داخلی و اعلانهای عمومی (public declarations) داشته باشند.
قراردادهای سالیدیتی به بایت کد تبدیل (Compile) میشوند تا توسط EVM خوانده شوند. پس از کامپایل، قراردادهای سالیدیتی هیچ تفاوتی با قراردادهای نوشته شده در سایر زبانهای قرارداد هوشمند EVM مانند Vyper یا Huff ندارند.
مانند هر ابزار برنامهنویسی دیگری، سالیدیتی به صورت عادی بهروزرسانی میشود. توجه داشته باشید که از آنجایی که قراردادهای هوشمند یک بار پیادهسازی میشوند و پس از ثبت شدن در بلاک چین غیرقابل برگشت هستند، محدودیتهای نسخه سالیدیتی آنها تنها در زمان ساخت قرارداد اهمیت خواهند داشت.
در حالی که توسعه دهندگان سالیدیتی از نظر تئوری میتوانند قراردادهای هوشمند اتریوم را مستقیماً در بایت کد بنویسند، زبانهای سطح بالایی مانند سالیدیتی به مهندسان اجازه میدهند تا قراردادها را بدون هیچگونه دستکاری در سطح پایین، به صورت کارآمدتر بنویسند.
ویژگی های زبان برنامه نویسی سالیدیتی
زبان برنامهنویسی سالیدیتی زبانی نسبتا سطح بالا بهحساب میآید و ویژگیهایی شبیه به ++C دارد. در ادامه به شاخصترین این ویژگیها اشاره میکنیم:
- کتابخانههای غنی: پس از بیت کوین، بلاک چین اتریوم از محبوبیت خاصی برخوردار است. بر همین اساس کتابخانه زبان برنامهنویسی مبتنی بر آن نیز بسیار غنی است و دادههای گستردهای در آن قرار دارد.
- مدل دادههای ایستا: سالیدیتی یک زبان برنامهنویسی ایستا است. به این معنا که در زمان تعریف هر متغیر باید نوع استفاده از آن را مشخص کرد.
- امکان کاهش تعداد خطوط: این زبان طوری طراحی شده تا خطوط اضافه را کاهش دهد. در این صورت نتیجه خروجی بهینهتر خواهد بود.
- مناسب قراردادهای هوشمند: این زبان ویژه طراحی قراردادهای هوشمند است و برنامه حاصل از آن (در صورت طراحی صحیح و اصولی) با امنیت بالا و بهطور کامل اجرا میشود.
- تنوع در پشتیبانی از پروتکلها: سالیدیتی از چندین پروتکل ERC مختلف پشتیبانی میکند که سطح کاربری آن را در حوزه قراردادهای هوشمند گسترش میدهد.
زبانی شیگرا: سالیدیتی شیگرا است و از مزایای این دست زبانها، بهرهمند شده است. بهطوری که تکرار خطوط کد در آن حداقلی است و برنامه خروجی بهینه است. قرارداد هوشمند حاصل از آن نیز سرعت عمل و دقت بالایی دارد.
سالیدیتی چگونه با EVM تعامل میکند؟
در زیر خلاصهای از نحوه عملکرد سالیدیتی برای تغییر وضعیت EVM آمده است:
- قراردادهای هوشمند را در سالیدیتی بنویسید
- قراردادهای هوشمند سالیدیتی در بایت کد کامپایل میشوند
- بایت کد به کدهای EVM تبدیل میشود
- اپکدهای EVM وضعیت EVM را تغییر میدهند
EVM یک ماشین مجازی نگهدارنده صورت وضعیت و سوابق (Record) برای «رایانه جهانی اتریوم» است. به زبان ساده، EVM صورت وضعیت جهانی شبکه را که شامل آدرسها، مانده حسابها و ذخایر توکن است، نگهداری و ثبت میکند.
قراردادهای هوشمند سالیدیتی برای ایجاد تغییرات در وضعیت جهانی EVM نوشته شده است. وضعیت جهانی EVM با اقداماتی مانند ضرب توکن، ارسال و دریافت توکن، یا آزادسازی داراییها تغییر میکند.
مجموعهای از عملیات EVM که در آپکدهای EVM کدگذاری شدهاند، این تغییرات را در صورت وضعیت جهانی بلاکچین ایجاد میکنند. هر کد عملیاتی (آپکد) EVM به گونهای طراحی شده است که EVM را وادار کند تا نوع خاصی از تغییر وضعیت را انجام دهد، مانند ارسال توکنها از یک آدرس به آدرس دیگر، ضرب توکنها یا حتی از بین بردن قراردادهای هوشمند.
در مرحله آخر، EVM بایتکد قرارداد هوشمند را به کدهای EVM ترجمه میکند تا تغییرات لازم را در بلاک چین ایجاد کند.
هر کد عملیاتی یا آپکد با کارمزد گس (Gas) معینی همراه است که در قالب رمز ارز ETH برای کاهش خطر مسدود شدن شبکه توسط یک عامل مخرب، دریافت میشود. بنابراین کل کارمزد گس یک تراکنش با قیمت هر واحد Gas ضربدر کل کارمزد گس کدهای عملیاتی یک تراکنش محاسبه میشود.
چه بلاک چین های سازگار با EVM از سالیدیتی پشتیبانی میکنند؟
سالیدیتی قادر است برای هر بلاک چین سازگار با EVM، از جمله مانند Polygon، Arbitrum و Optimism قراردادهای هوشمند بنویسد. از آنجایی که سالیدیتی انعطافپذیر است و استفاده از آن آسان است، توسط تعداد زیادی بلاک چین پشتیبانی میشود. در اینجا برخی از بزرگترین پروژههایی که از سالیدیتی پشتیبانی میکنند آورده شده است:
۱. پولکادات (DOT)
پولکادات یک بلاک چین است که بر روی ادغام چندین بلاک چین (یعنی پاراچین) در یک زنجیره با استفاده از یک زنجیره رله (Relaychain) متمرکز شده است. هدف Polkadot این است که پاراچین ها قابلیت همکاری داشته باشند تا امکان مقیاسپذیری و افزایش پهنای باند را فراهم کند.
۲. اولانچ (AVAX)
Avalanche یک رقیب اتریوم است که از زبان سالیدیتی پشتیبانی میکند. معماری Avalanche مبتنی بر شبکهای از سه بلاک چین است: یکی برای صدور و ترید داراییها (X Chain)، دیگری برای هماهنگی اعتبارسنجهای شبکه (P-Chain) و دیگری که امکان ایجاد قرارداد هوشمند (C Chain) را فراهم میکند.
۳. زنجیره BNB (زنجیره هوشمند سابق بایننس)
زنجیره هوشمند بایننس (Binance Smart Chain) به عنوان یک توکن ERC-20 در اتریوم راهاندازی شد و برای حمایت از اکوسیستم رو به رشد دی اپهای آن، شبکه زنجیره هوشمند بایننس (BSC) ایجاد شد. BSC و توکنهای آن از سالیدیتی در قراردادهای هوشمند خود استفاده میکنند. امروزه زنجیره هوشمند بایننس BNB Chain نامیده میشود.
سالیدیتی چقدر محبوب است؟
سالیدیتی محبوبترین زبان برنامهنویسی قراردادهای هوشمند در صنعت بلاک چین است. سالیدیتی زبان مادری برای ایجاد قراردادهای هوشمند سازگار با EVM است. حتی خارج از EVM، پروژههایی وجود دارند که از ماشین مجازی اتریوم پشتیبانی میکنند، مانند Solana EVM.
همچنان که صنعت بلاک چین در حال رشد است، ممکن است به نظر برسد که سالیدیتی در مقایسه با سایر زبانهای برنامهنویسی کمتر مورد استفاده قرار میگیرد. با این حال، در صنعت، سالیدیتی پرکاربردترین زبان قرارداد هوشمند است. سالیدیتی دارای موارد استفاده قوی در بسیاری از زنجیرهها و اکوسیستمهای دی اپ است.
ارتباط سالیدیتی با قراردادهای هوشمند
دقت و سرعت بالا، کتابخانه گسترده و بهرهمندی از بلاک چین اتریوم، سالیدیتی را به زبانی ایدهآل برای قراردادهای هوشمند تبدیل کرده است.
در این زبان پس از نوشتن و تنظیم کدها و کامپایل قراردادهای هوشمند دیگر نمیتوان آنها را تغییر داد. به علاوه ارتباط با بلاک چین اتریوم نیز مقاومت قرارداد در برابر تغییر را بیشتر کرده است. در نهایت این ویژگیها میتوانند به ایجاد قراردادهایی با اعتبار بسیار بالا کمک کنند.
یکی از ویژگیهای دیگر قراردادهای هوشمند مبتنی بر سالیدیتی، امکان استفاده از برنامه آنها در قراردادهای جدید است. در نسل بعدی قرارداد میتوان شروط تازهای اضافه کرد تا برنامه جدید، قدرتمندتر از قبلی باشد.
نمونه ای از قراردادهای هوشمند مبتنی بر سالیدیتی
نمونه زیر یک کد ساده از سالیدیتی است که یک ارز ساده در اتریوم ایجاد میکند.
این کد یک ارز دیجیتال ایجاد میکند.
به اعلان تابع، متغیرهای خصوصی و عمومی قرارداد توجه کنید. توابع به قرارداد اجازه میدهد تا اقدامات مختلفی را روی زنجیره انجام دهد، در این مورد توکنها را از یک آدرس به آدرس دیگر ارسال میکند و توکنها را ضرب میکند.
متغیرهای عمومی از خارج از قرارداد قابل دسترسی هستند و به طور خودکار توابع گیرنده را برای بازیابی مقدار آن متغیرها ایجاد میکنند. کلمه کلیدی رویداد به برنامههای کلاینت اجازه میدهد تا به تغییرات ناشی از قرارداد گوش دهند.
در این مثال، یک کلاینت رویداد (event) ارسال شده را میبیند، که به شنونده نشان میدهد که آدرس msg.sender مقداری توکن را به گیرنده آدرس ارسال کرده است.
استاندارد ERC سالیدیتی چیست؟
زیربنای طراحی قراردادهای هوشمند سالیدیتی استانداردهای ERC (Ethereum Request for Comment) است که دستورالعملهایی برای بهبود و استانداردسازی پیادهسازی انواع مختلف توکنهای اتریوم هستند.
استانداردهای ERC توسط EIP ها (طرح پیشنهادی بهبود اتریوم) پیشنهاد میشوند. هنگامی که استانداردهای ERC تایید و نهایی شدند، به استانداردی برای نوشتن قراردادهای سالیدیتی تبدیل میشوند. این اجازه میدهد تا یک الگوی مشترک برای ساخت قراردادهای هوشمند ایجاد شود. وقتی توسعهدهندگان سالیدیتی توکنهایی را با رعایت استانداردهای موجود ERC میسازند، میدانند که توکنهایشان چگونه در بلاک چین رفتار مناسبی خواهند داشت.
برخی از پرکاربردترین استانداردهای ERC عبارتاند از:
ERC-20 – استاندارد توکن قابل تعویض
ERC-721 – استاندارد توکن غیرقابل تعویض (NFT)
ERC-1155 – استاندارد توکن نیمه قابل تعویض
ERC-4626 – استاندارد yield-bearing vault
چگونه برنامهنویسی سالیدیتی را یاد بگیریم
اکنون میدانید که سالیدیتی چیست، اما چگونه یادگیری سالیدیتی را شروع میکنید؟ به عنوان محبوبترین زبان قراردادهای هوشمند، منابع زیادی به صورت آنلاین برای شروع یادگیری توسعه سالیدیتی وجود دارد.
یکی از بهترین راهها برای یادگیری سالیدیتی، بوت کمپ ۷ هفتهای سالیدیتی دانشکده آلکمی (Alchemy) است که در اصل توسط ChainShot، تیمی برجسته از مهندسان وب ۳ ایجاد شد و پس از خرید ChainShot در آگوست ۲۰۲۲ توسط آلکمی بازطراحی شد.
بوت کمپ توسعه دهندگان اتریوم در ابتدا یک دوره ۳۰۰۰ دلاری بود و اکنون رایگان است. جای خود را در صف برای پیوستن به دانشگاه آلکمی رزرو کنید.
منابع سالیدیتی
در زیر برخی از بهترین منابع آنلاین برای یادگیری برنامهنویسی سالیدیتی در اختیار شما قرار داده شده است:
- اسناد رسمی سالیدیتی: از اسناد (Solidity Documentation) به عنوان منبع اصلی خود برای یادگیری توسعه سالیدیتی استفاده کنید.
- Solidity by Example: تلفیقی از نمونه کارهای سالیدیتی از برنامه Hello World تا برنامههای کیف پول و دیفای.
- Clean Contracts: راهنمای نحوه نوشتن قراردادهای هوشمند امن و قابل پیشبینی با نمونه کد سالیدیتی.
- Ethernaut by OpenZeppelin: یک بازی جنگی مبتنی بر قرارداد هوشمند که در آن هر سطح با هک کردن یک قرارداد هوشمند همراه است.
برنامهنویسی با سالیدیتی را آغاز کنید
این مقاله شما را با سالیدیتی آشنا کرد و منابعی را برای شروع یادگیری توسعه سالیدیتی در اختیار شما قرار داد. سالیدیتی یک زبان بسیار انعطافپذیر و قدرتمند برای توسعه برنامههای غیرمتمرکز بر روی بلاکچینهای سازگار با اتریوم و EVM است.
هنگامی که دانش خود تکمیل کردید، در پیادهسازی یک برنامه در شبکه آزمایشی Goerli تردید نکنید، در یک هکاتون web3 شرکت کنید و شروع به تلاش برای ایجاد یک استارت آپ وب ۳ کنید!
دیدگاهها