سالیدیتی چیست؟ یک زبان برنامهنویسی قرارداد هوشمند
یک خط بیدقت از زبان برنامهنویسی سالیدیتی، ۳.۶ میلیون اتریوم را به یک مهاجم تحویل داد. کد دقیقاً همان کاری را که به آن گفته شده بود، انجام داد. این بخش نگرانکننده است. سالیدیتی پول را جابجا میکند. منبع آن معمولاً در معرض دید است. و وقتی یک قرارداد فعال میشود، دیگر هیچ راه حلی وجود ندارد - باگ باقی میماند، وجوه در معرض دید قرار میگیرند و تمام دنیا میتوانند هر دو را بخوانند. این زبان برنامهنویسی، زبان برنامهنویسی غالب برای نوشتن قراردادهای هوشمند در اتریوم و هر بلاکچین EVM در کنار آن است. اصطلاحات تخصصی را کنار بگذارید و بیشتر DeFi و NFTها در زیر آن قرار دارند. قدرتمند. همچنین بیرحم. در اینجا توضیح میدهیم که سالیدیتی چیست، کد در واقع چگونه اجرا میشود، اولین قرارداد چگونه به نظر میرسد و چرا امنیت هرگز از بین نمیرود.
زبان برنامهنویسی سالیدیتی چیست؟
هر راهنمایی یک چیز را میگوید: سالیدیتی یک زبان سطح بالا برای قراردادهای هوشمند است. بسیار خب. این به سختی به شما کمک میکند. اما چه نوع زبانی؟ تایپ استاتیک. شیءگرا. آکولاد و نقطه ویرگول، سینتکس قرض گرفته شده از جاوا اسکریپت، سی پلاس پلاس و پایتون. اگر کد را در هر یک از این موارد ارسال کرده باشید، یک فایل `.sol` در حدود ده دقیقه به طور آشنا خوانده میشود.
گوین وود در سال ۲۰۱۴، با کمک یک تیم کوچک اتریوم که کریستین رایتویسنر نیز در آن نقش داشت، طرح اولیه آن را ارائه داد. هدف، صریح و بیپرده بود: اجازه دهید مردم برای یک بلاکچین عمومی قراردادهای هوشمند بنویسند. واحد اصلی آن «قرارداد» است. آن را به عنوان یک «کلاس» در نظر بگیرید که اتفاقاً روی یک زنجیره قرار دارد - حالت را نگه میدارد، توابع را نمایش میدهد و از دیگران به ارث میبرد. نکته جالب، جایی است که این چیز اجرا میشود. آن را به بایتکد کامپایل کنید، و همان قرارداد به طور یکسان روی هر گره در یک شبکه غیرمتمرکز اجرا میشود و همه آنها یکدیگر را بررسی میکنند. همین یک درخواست، توضیح میدهد که چرا سالیدیتی اینقدر محدود به نظر میرسد.
| استحکام در یک نگاه | |
|---|---|
| اولین بار منتشر شد | ۲۰۱۴ |
| طراح ارشد | گوین وود (اتریوم) |
| پارادایم | شیءگرا، قراردادگرا |
| تایپ کردن | استاتیک |
| کامپایل میکند تا | بایتکد EVM |
| آخرین کامپایلر | نسخه ۰.۸.۳۵ (آوریل ۲۰۲۶) |
| پسوند فایل | .سل |
نحوه کار سالیدیتی: از کد تا ماشین مجازی اتریوم
بخش جالب زبان سالیدیتی، سینتکس آن نیست. بلکه خط لوله (pipeline) آن است. کد خوانا به چیزی تبدیل میشود که هزاران ماشین موافقند به یک شکل اجرا شود. کل نکته، جبرگرایی است. اگر دو گره قرارداد یکسانی را اجرا کنند و پاسخهای متفاوتی دریافت کنند، شبکه نمیتواند روی موجودی هیچکدام توافق کند. همین یک الزام، بسیاری از محدودیتهای عجیب این زبان را توضیح میدهد: عدم دریافت عدد تصادفی، عدم فراخوانی یک API وب خارجی در اواسط اجرا. همه چیز باید از خود زنجیره قابل تکرار باشد.
کامپایلر و بایتکد
شما یک فایل `.sol` مینویسید، قابل خواندن توسط انسان و سطح بالا. کامپایلر سالیدیتی، `solc`، آن را به بایتکد EVM تبدیل میکند، رشتهای طولانی از عملیات سطح پایین، به علاوه یک ABI که توابع قرارداد را فهرست میکند. بایتکد چیزی است که روی زنجیره قرار میگیرد. هیچکس آن را با دست نمیخواند. این هدف ماشین است، همانطور که C به صورت اسمبلی درمیآید.
EVM و بنزین
ماشین مجازی اتریوم آن بایتکد را اجرا میکند. هر گره اتریوم یکی از آنها را دارد. هر عملیاتی که انجام میدهد، هزینه سوخت (gas) دارد، هزینهای که به صورت ETH پرداخت میشود. سوخت یک جزئیات فرعی نیست. این روشی است که شبکه برای محاسبه قیمتگذاری میکند و از خود دفاع میکند: یک حلقه فرار، زنجیره را مسدود نمیکند - فقط سوخت فرستنده را میسوزاند و برمیگردد. سالیدیتی خوب، سوخت را پایین نگه میدارد.
ABI
ABI یا رابط دودویی برنامه، نقشه JSON نحوه ارتباط با یک قرارداد مستقر شده است. کیف پولی مانند MetaMask یا یک برنامه غیرمتمرکز front-end از آن برای رمزگذاری یک فراخوانی تابع به فرمتی که EVM انتظار دارد استفاده میکند و سپس هر آنچه را که برمیگردد رمزگشایی میکند. ABI را به عنوان پلی بین رابط کاربری که کاربر میبیند و قراردادی که در یک آدرس روی بلاکچین قرار دارد، در نظر بگیرید.

نوشتن اولین قرارداد هوشمند سالیدیتی شما
تئوری کافی است. سریعترین راه برای درک سالیدیتی، خواندن یک قرارداد کوچک و تشخیص اجزای آن است.
آناتومی یک قرارداد
استحکام
// SPDX-License-Identifier: MIT
سالیدیتی پراگما ^0.8.20؛
شمارنده قرارداد {
uint256 public count;
event Incremented(uint256 newCount);
function increment() public {
count += 1;
emit Incremented(count);
}
}
```
چند قطعه، کل ماجرا را حمل میکنند. خط «pragma» نسخه کامپایلر را پین میکند، بنابراین یک نسخه ناسازگار نمیتواند کد شما را بیسروصدا دوباره کامپایل کند. «contract Counter» قرارداد را باز میکند، مانند باز کردن یک کلاس. «count» یک متغیر وضعیت است که به طور دائم روی زنجیره ذخیره میشود. «increment()» یک تابع عمومی است که هر کسی میتواند آن را فراخوانی کند. «event Incremented» هر تغییر را ثبت میکند تا برنامههای خارج از زنجیره بتوانند واکنش نشان دهند. کد شیگرا، با یک بلاکچین در زیر آن.
ابزارهایی که واقعاً استفاده میکنید
برای شروع هیچ چیزی نصب نمیکنید. Remix یک IDE مرورگر است: نوشتن، کامپایل و استقرار Solidity با چند کلیک، که آن را به مکانی استاندارد برای یادگیری Solidity تبدیل میکند. پروژههای واقعی به چارچوبهای محلی منتقل میشوند. Hardhat و Foundry کامپایل، آزمایش و استقرار را به درستی انجام میدهند. و تقریباً همه به OpenZeppelin، کتابخانهای از قراردادهای حسابرسی شده و قابل استفاده مجدد برای توکنها و کنترل دسترسی، تکیه میکنند، به جای اینکه کد پرخطر را از ابتدا دوباره بنویسند.
از کد تا یک آدرس زنده
استقرار به معنای ارسال بایتکد کامپایلشده در یک تراکنش است. ابتدا روی یک شبکه آزمایشی رایگان آزمایش کنید. سپولیا انتخاب معمول در 2026 است. یک کیف پول مانند متامسک را متصل کنید. فقط زمانی که قرارداد درست کار میکند، به شبکه اصلی فشار دهید. استقرار نیز هزینه گس دارد که با اتریوم واقعی پرداخت میشود. و این جملهای است که ارزش خالکوبی روی مچ دستتان را دارد: پس از استقرار، کد تغییرناپذیر است. شما نمیتوانید یک قرارداد زنده را ویرایش کنید. همین حقیقت - بیش از هر تغییر ناگهانی در سینتکس - دلیل وجود بخش بعدی است.
کدام بلاکچینها از سالیدیتی پشتیبانی میکنند؟
سالیدیتی (Solidity) سالها پیش دیگر «زبان اتریوم» نبود. شبکههای زیادی EVM را برای استفاده مجدد از ابزارهای اتریوم پذیرفتند، به طوری که سالیدیتی به زبان مشترک یک خانواده کامل از زنجیرهها تبدیل شد. ChainList بیش از ۳۸۵ بلاکچین سازگار با EVM را در ##__۲## ردیابی میکند. نامهای بزرگ همگی واجد شرایط هستند: Polygon، BNB Chain، Arbitrum ، Base و Avalanche، که همگی بایتکد یکسانی را اجرا میکنند که فایل `.sol` شما به آن کامپایل میشود.
اتریوم هنوز مرکز ثقل است. طبق گزارش DeFiLlama، حدود ۴۵ میلیارد دلار ارزش کل قفل شده در این پلتفرم وجود دارد که بیش از نیمی از کل DeFi است. و فعالیت در حال افزایش است: طبق آمار Token Terminal، تقریباً ۸.۷ میلیون قرارداد هوشمند جدید تنها در سه ماهه چهارم سال ۲۰۲۵ مستقر شدهاند. برای یک توسعهدهنده، این دسترسی دلیل واقعی انتخاب Solidity به جای زبانی است که به یک زنجیره متصل است.
خب، چه چیزی با آن ساخته میشود؟ تقریباً هر دسته از برنامههای غیرمتمرکزی که نامشان را شنیدهاید. پروتکلهای وامدهی و معاملات DeFi. قراردادهای ERC-20 پشت اکثر توکنها و قراردادهای ERC-721 پشت NFTها. DAOها قوانین رأیگیری خود را در Solidity کدگذاری میکنند. استیبل کوینها عرضه را با آن مدیریت میکنند. بازیهای درون زنجیرهای منطق خود را در آنجا نگه میدارند. وقتی یک پروژه میگوید «روی اتریوم» است، تقریباً مطمئناً کسی Solidity را نوشته و مستقر کرده است.
چرا امنیت قرارداد هوشمند سالیدیتی دشوار است؟
ویژگیهایی که سالیدیتی را قدرتمند میکنند، همانهایی هستند که باگهای آن را بسیار گران میکنند. کد، پول را در خود نگه میدارد. منبع اغلب عمومی است. نمیتوان آن را وصله کرد. یک مهاجم قرارداد شما را با خیال راحت میخواند و وجوه درست در آدرس موجود است. این زبانی برای حرکت سریع و شکستن چیزها نیست. من هرگز با نرمافزاری کار نکردهام که شکاف بین «کامپایل میشود» و «ایمن است» تا این حد زیاد باشد.
ورود مجدد و هک DAO
آسیبپذیری اصلی سالیدیتی، بازگشت به سیستم است. یک قرارداد قبل از بهروزرسانی موجودی داخلی خود، اتریوم را به یک آدرس خارجی ارسال میکند و قرارداد دریافتکننده قبل از پایان اولین فراخوانی، بارها و بارها برای برداشت فراخوانی میکند. در ژوئن ۲۰۱۶، همین نقص، حدود ۳.۶ میلیون اتریوم، به ارزش تقریبی ۶۰ میلیون دلار در آن زمان، از DAO را از دست داد. پیامد این اتفاق، اتریوم را به ETH و اتریوم کلاسیک تقسیم کرد، زنجیرهای که هنوز هم در حال معامله است. و راه حل؟ تقریباً به طرز توهینآمیزی کوچک. ابتدا وضعیت خود را بهروزرسانی کنید، آخر پول را ارسال کنید. این الگو حتی یک نام دارد: بررسی-اثرات-تعاملات.
سرریز عدد صحیح و SafeMath
قبل از سالیدیتی ۰.۸، محاسبات میتوانست بیسروصدا انجام شود. اگر ۱ را به حداکثر مقدار یک `uint256` اضافه میکردید، به صفر میرسید، که مهاجمان از آن برای ایجاد موجودیهای توکن نامعقول سوءاستفاده میکردند، مانند حادثه BeautyChain (BEC) در سال ۲۰۱۸. سالها توسعهدهندگان با کتابخانهای به نام SafeMath، که مدتی یکی از فایلهایی بود که بیشترین میزان وارد شده را در کل سالیدیتی داشت، در برابر این امر محافظت میکردند. سپس نسخه ۰.۸ بررسیهای سرریز و سرریز را در خود زبان تعبیه کرد. رایجترین اشکال محاسباتی اکنون به طور پیشفرض برمیگردد، بدون نیاز به کتابخانه اضافی.
حسابرسی و هزینههای آن
از آنجا که اشتباهات دائمی هستند، پروژههای جدی برای بررسی هزینه پرداخت میکنند. آنها بر اساس اجزای حسابرسی شده OpenZeppelin ساخته میشوند و سپس شرکتها را برای حسابرسی کل سیستم استخدام میکنند. طبق دادههای بازار Sherlock ، یک حسابرسی حرفهای قرارداد هوشمند معمولاً برای یک پروتکل DeFi از ۲۵۰۰۰ تا بیش از ۱۰۰۰۰۰ دلار هزینه دارد و حسابرسیهای Solidity معمولاً ۲۵ تا ۴۰ درصد ارزانتر از حسابرسیهای معادل Rust هستند، صرفاً به این دلیل که مجموعه استعدادها بزرگتر است. شرکتهای خوب نیز رزرو میکنند. یک پروتکل متوسط میتواند هفتهها برای یک فرصت و سپس هفتهها بیشتر برای گزارش منتظر بماند. هیچ یک از اینها سریع نیست و هیچ یک از آنها اختیاری نیست.
| آسیبپذیری | چه مشکلی پیش میآید؟ | پرونده معروف | رفع |
|---|---|---|---|
| ورود مجدد | تماس خارجی قبل از بهروزرسانی وضعیت، دوباره برقرار میشود | سازمان خودگردان غیرمتمرکز (DAO)، ۲۰۱۶ | بررسیها-اثرات-تعاملات |
| سرریز عدد صحیح | محاسبات از حد خود عبور میکند | بیوتی چین (BEC)، ۲۰۱۸ | بررسیهای داخلی (Solidity 0.8+) |
| کنترل دسترسی | هر کسی میتواند یک تابع ممتاز را فراخوانی کند | مختلف | محافظان نقش / onlyOwner |
| تماسهای خارجی بررسی نشده | تماس ناموفق نادیده گرفته شد، منطق ادامه مییابد | مختلف | اعتبارسنجی مقادیر بازگشتی |
خبر خوب این است که این فاجعه در حال کاهش است. طبق گفته Immunefi ، ضررهای ناشی از سوءاستفادههای خاص DeFi در سال ۲۰۲۵ به حدود ۶۸۰ میلیون دلار کاهش یافت که تقریباً ۷۴ درصد کمتر از اوج ۲.۶۲ میلیارد دلاری در سال ۲۰۲۲ است. ابزارهای بهتر و بررسیهای امنیتی که اکنون در کامپایلر گنجانده شدهاند، بخشی از دلیل این امر هستند.

سالیدیتی در مقایسه با سایر زبانهای برنامهنویسی قراردادهای هوشمند
سالیدیتی رقبایی دارد. حتی امنترین آنها هم نیست. وایپر مینیمال و شبیه پایتون است، عمداً سادهسازی شده تا راههایی که میتوانید خودتان را نابود کنید، از بین ببرد؛ کرو (Curve) بر اساس آن اجرا میشود. قراردادهای Rust بر روی سولانا (Solana) و نیر (NEAR) اجرا میشوند، از برخی جهات امنتر هستند، اما یادگیری آنها دشوارتر و حسابرسی آنها پرهزینهتر است. پس چرا سالیدیتی هنوز برنده است؟ نه طراحی زبان. اثرات شبکه. عمیقترین ابزارها، حسابرسیشدهترین کتابخانهها، یک اکوسیستم کامل EVM از زنجیرهها و کیف پولها، همه از قبل به زبان سالیدیتی صحبت میکنند.
| زبان | زنجیر | پایه نحوی | بهترین برای | بده بستان |
|---|---|---|---|---|
| استحکام | اتریوم + تمام ماشینهای مجازی EVM | جاوا اسکریپت/سی++ | حداکثر دسترسی، ابزارآلات بالغ | نوشتن کد ناامن آسان است |
| وایپر | ای وی ام | پایتون | قراردادهای ساده و از نظر ایمنی حیاتی | امکانات کمتر، جامعه کاربری کوچکتر |
| زنگ زدگی | سولانا، نزدیک | زنگ زدگی | عملکرد بالا، ایمنی قوی | شیب تند، حسابرسیهای پرهزینهتر |
اگر میخواهید در جایی که کاربران و پول از قبل هستند، ارسال کنید، سالیدیتی پیشفرض عملگرایانه است، حتی زمانی که رقیب از نظر فنی امنتر باشد.
آیا باید برنامهنویسی سالیدیتی را در سال سوم یاد بگیرید؟
هیاهوی گمانهزنی پیرامون ارزهای دیجیتال فروکش کرد، اما تقاضا برای افرادی که بتوانند زبان برنامهنویسی سالیدیتی (Solidity) را به درستی بنویسند، کاهش نیافت. طبق آمار Electric Capital ، اتریوم بین ژانویه تا سپتامبر ۲۰۲۵ حدود ۱۶۱۸۱ توسعهدهنده جدید را جذب کرد و تقریباً ۷۴ درصد از کل توسعهدهندگان چندزنجیرهای روی زنجیرههای EVM کار میکنند. اینجاست که کار پردرآمد و کتابخانههای قابل استفاده مجدد وجود دارند.
یک مسیر عاقلانه برای یادگیری برنامهنویسی سالیدیتی: شروع با ریمیکس، خواندن اسناد رسمی سالیدیتی، سپس کار با قراردادهای OpenZeppelin تا ببینید که متخصصان چگونه توکنها و کنترل دسترسی را ساختار میدهند. پروژههای کوچک را در یک شبکه آزمایشی مستقر کنید تا زمانی که الگوهای امنیتی به جای حفظ کردن، خودکار به نظر برسند. مهارت کمیاب، نوشتن سالیدیتی نیست که کامپایل شود؛ افراد زیادی میتوانند این کار را انجام دهند. چیزی که یک توسعهدهنده سالیدیتی در واقع برای آن پول دریافت میکند، نوشتن کدی است که از تماس با یک رقیب - کسی که قرارداد شما را خوانده و پولش در خطر است - جان سالم به در میبرد.
چرا زبان سالیدیتی همچنان زبان پیشفرض است؟
به یک دلیل مشخص، و نه تبلیغات، زبان برنامهنویسی پیشفرض Solidity است. این زبان به هر زنجیره EVM میرسد. غنیترین ابزارها را در خود جای داده است. در زیر اکثر DeFiها و NFTها قرار دارد. اما اولین چیزی که باید یاد بگیرید، سینتکس آن نیست. بلکه این است: در یک بلاکچین، کد پیادهسازی شده قانون است و باگها همیشگی هستند. زبان و الگوهای امنیتی را با هم یاد بگیرید، زیرا این دو در اینجا از هم جدا نیستند. قدم بعدی، کوچک و رایگان است. Remix را باز کنید، یک قرارداد ده خطی بنویسید و این هفته آن را در یک شبکه آزمایشی پیادهسازی کنید.