وقتی صحبت از اتریوم (Ethereum) به میان میآید، شاید اولین چیزی که به ذهنمان میرسد قرارداد هوشمند (Smart Contract) باشد. قراردادهای هوشمند برنامههایی روی بلاک چین اتریوم هستند که با آنها میتوان برنامه غیرمتمرکز ساخت. در این مقاله با زبان برنامهنویسی سالیدیتی که زبان مخصوص اتریوم برای قراردادهای هوشمند است آشنا میشویم.
در ادامه ابتدا بررسی میکنیم که زبان برنامهنویسی سالیدیتی چیست و چه ویژگیهایی دارد. سپس نصب و راهاندازی سالیدیتی و نوشتن قرارداد هوشمند با سالیدیتی را آموزش میدهیم. با ما همراه باشید.
زبان سالیدیتی چیست؟
سالیدیتی (Solidity) یک زبان برنامهنویسی سطح بالا و شیءگرا است که برای نوشتن قراردادهای هوشمند روی بلاک چین اتریوم طراحی شده است. این زبان شباهت زیادی به جاوااسکریپت (JavaScript) دارد و امکان ساخت برنامههایی را فراهم میکند که بدون نیاز به واسطه، بهصورت خودکار اجرا میشوند. سالیدیتی در حال حاضر پرکاربردترین زبان برای توسعه برنامههای غیرمتمرکز (DApps) است.

بیشتر بخوانید: قرارداد هوشمند چیست
تعریف سالیدیتی به زبان ساده
اگر بخواهیم سادهتر بگوییم، سالیدیتی زبانی برای برنامه نویسی بلاک چین (Blockchain Programming) است که با آن میشود به بلاک چین یاد داد چگونه رفتار کند. مثلاً میتوانید با آن بنویسید که «اگر کاربر پول پرداخت کرد، محصول را تحویل بده». این زبان شبیه دستور دادن به یک قرارداد دیجیتالی است که همیشه دقیق و بدون دخالت انسان اجرا میشود، به همین دلیل در پروژههای مالی و حقوقی بسیار کاربرد دارد.
تاریخچه زبان برنامهنویسی سالیدیتی
زبان برنامه نویسی سالیدیتی در سال ۲۰۱۴ توسط کریستین رایتویسنر (Christian Reitwiessner) و تیمی از توسعهدهندگان بنیاد اتریوم طراحی شد. این زبان با هدف نوشتن قراردادهای هوشمند برای ماشین مجازی اتریوم (EVM) توسعه یافت. از آن زمان تاکنون، سالیدیتی بهطور مداوم بهروزرسانی شده و امکانات بیشتری برای توسعهدهندگان فراهم کرده است.
در آغاز، تمرکز اصلی توسعه سالیدیتی روی سادهسازی ساختار قراردادهای هوشمند و افزایش امنیت آنها بود. با گسترش اکوسیستم اتریوم و پیدایش اپلیکیشنهای غیرمتمرکز متنوع، سالیدیتی هم رشد کرد و ویژگیهایی مانند وراثت، کتابخانهها و انواع دادههای پیچیده به آن افزوده شد. امروزه این زبان نقش کلیدی در پیشرفت نرمافزارهای بلاک چین (Blockchain Apps) دارد.
ویژگیهای اصلی سالیدیتی
سالیدیتی در اتریوم بهعنوان زبان پیشفرض برای نوشتن قراردادهای هوشمند، مجموعهای از ویژگیهای فنی و کاربردی دارد که باعث جذابیت زبان سالیدیتی برای توسعهدهندگان بلاک چین میشود. این زبان از شیگرایی، ارثبری، کتابخانهها و انواع داده پیچیده پشتیبانی میکند.
همچنین سازگاری با ماشین مجازی اتریوم امکان اجرای کدها بهصورت غیرقابلتغییر و امن را فراهم میسازد. ترکیب این ویژگیها باعث شده سالیدیتی به زبان استاندارد توسعه اپلیکیشنهای غیرمتمرکز تبدیل شود.
زبان شیگرا و استاتیک تایپ
سالیدیتی یک زبان شیگرا (Object-Oriented) است، به این معنا که ساختار کدنویسی در آن بر پایهی اشیاء و کلاسها شکل گرفته است. هر قرارداد در سالیدیتی در واقع یک کلاس محسوب میشود که میتواند متغیرها (State Variables) و توابعی (Functions) برای مدیریت داده و منطق درون آن تعریف کند. این ویژگی ساختاردهی کد، تفکیک وظایف و بازاستفادهی بهتر از منطقها را ممکن میسازد.
همچنین سالیدیتی یک زبان استاتیک تایپ (Static Typing) است؛ یعنی نوع هر متغیر باید هنگام تعریف آن مشخص شود. این ویژگی باعث میشود خطاهای احتمالی در زمان کامپایل شناسایی شوند، نه هنگام اجرا. این موضوع در محیطهایی مانند بلاک چین که اجرای نادرست قراردادها میتواند هزینهبر یا غیرقابلبرگشت باشد، اهمیت بسیار زیادی دارد.
بیشتر بخوانید: بلاک چین چیست
شباهتها با زبانهای C++، Python و JavaScript
سالیدیتی از نظر ساختار و سینتکس، بیشترین شباهت را با زبان C++ دارد؛ مانند پشتیبانی از ساختارهای شرطی، حلقهها، وراثت چندگانه و تعریف کلاسگونهی قراردادها. از C++ الگوریتمها و کنترلهای سطح پایین به ارث رسیده که در طراحی دقیق رفتارهای قرارداد بسیار کاربردی است.
در عین حال، سالیدیتی از لحاظ خوانایی و سبک نوشتار، به جاوا اسکریپت و پایتون (Python) نیز شباهت دارد. استفاده از سینتکسهایی مانند function، متغیرهای محلی و نحوه تعریف تابع، توسعهدهندگانی که به این زبانها مسلط هستند را در یادگیری سالیدیتی یاری میدهد. این طراحی ترکیبی باعث شده سالیدیتی هم برای برنامهنویسان باتجربه و هم برای تازهواردان قابل دسترس باشد.
قابلیت پشتیبانی از ارثبری، کتابخانهها و انواع داده پیچیده
یکی از ویژگیهای قدرتمند سالیدیتی پشتیبانی از ارثبری (Inheritance) است. توسعهدهندگان میتوانند یک قرارداد پایه تعریف کنند و ویژگیها یا توابع آن را در قراردادهای فرزند گسترش دهند. این امکان موجب میشود ساختار پروژهها منظمتر شده و کدهای تکراری به حداقل برسند، درست مانند اصول برنامهنویسی مدرن.
سالیدیتی همچنین از کتابخانهها و انواع دادهی پیچیده مانند Struct و Mapping پشتیبانی میکند. کتابخانهها به شما اجازه میدهند کدهای تکرارشونده را در قالب ماژولهایی مستقل بنویسید و در چند قرارداد استفاده کنید. دادههای پیچیده امکان مدلسازی دقیقتر از دادهها را فراهم میکنند، که در ساختارهای مالی یا مدیریتی درون بلاک چین اهمیت دارد.
نصب و راهاندازی محیط توسعه سالیدیتی
برای شروع برنامهنویسی با سالیدیتی، باید یک محیط توسعه مناسب را نصب و پیکربندی کنید. این محیط شامل ابزارهایی است که امکان نوشتن، کامپایل، تست و راهاندازی قراردادهای هوشمند را فراهم میکنند. برای کار با سالیدیتی بسته به سطح تجربه و نیاز پروژه، میتوان از محیطهای سادهی آنلاین یا ابزارهای حرفهایتر استفاده کرد.
ابزارهای مورد نیاز
سه ابزار اصلی برای توسعه با سالیدیتی عبارتاند از:
- ریمیکس (Remix)
- ترافل (Truffle)
- هاردهت (Hardhat)
ریمیکس یک محیط آنلاین و مناسب برای مبتدیان است که بدون نیاز به نصب، امکان نوشتن و تست قراردادها را فراهم میکند. ترافل مجموعهای جامع از ابزارهاست که امکان ساخت، تست و راهاندازی قراردادها را در پروژههای پیچیدهتر فراهم میکند. هاردهت نیز محیطی انعطافپذیر و سریع برای توسعهدهندگان حرفهای است که ویژگیهایی مانند شبکه محلی، تست اتوماتیک و پروفایل مصرف گس را ارائه میدهد.
نصب و پیکربندی محیط توسعه
برای شروع برنامهنویسی با زبان سالیدیتی، نیاز به محیطهای توسعهای دارید که امکان نوشتن، تست و دیپلوی قراردادهای هوشمند را فراهم کنند. در ادامه، مراحل نصب و راهاندازی سه ابزار محبوب در این زمینه را بررسی میکنیم.
Remix IDE
ریمیکس یک محیط توسعهی آنلاین و مبتنی بر مرورگر است که برای نوشتن، کامپایل و تست قراردادهای هوشمند سالیدیتی استفاده میشود. البته این پلتفرم در حال حاضر یک IDE برای دسکتاپ هم دارد که میتوانید آن را از وبسایت گیت هاب (GitHub) دانلود کنید.
مراحل استفاده از محیط توسعه آنلاین ریمیکس:

- مرورگر خود را باز کرده و به آدرس remix.ethereum.org مراجعه کنید.
- ۲. در بخش File Explorer، یک فایل جدید با پسوند .sol ایجاد کنید.
- کد قرارداد هوشمند خود را بنویسید و با استفاده از تب Solidity Compiler آن را کامپایل کنید.
- برای تست و دیپلوی قرارداد، از تب Deploy & Run Transactions استفاده کنید.
Truffle
ترافل یک چهارچوب توسعهی قدرتمند برای ساخت، تست و دیپلوی قراردادهای هوشمند است.
مراحل نصب:
- اطمینان حاصل کنید که Node.js و npm روی سیستم شما نصب شدهاند.
- در ترمینال cmd، دستور زیر را برای نصب Truffle اجرا کنید:
npm install -g truffle
مراحل راهاندازی پروژه:
- یک پوشه جدید برای پروژه خود ایجاد کرده و وارد آن شوید.
- دستور زیر را برای ایجاد ساختار اولیه پروژه اجرا کنید
truffle init
Hardhat
هاردهت یک محیط توسعه پیشرفته برای سالیدیتی است که امکاناتی مانند شبکه محلی، تستهای خودکار و دیباگینگ را فراهم میکند.
مراحل نصب:
- اطمینان حاصل کنید که Node.js و npm روی سیستم شما نصب شدهاند.
- در ترمینال، یک پوشه جدید برای پروژه ایجاد کرده و وارد آن شوید.
- دستور زیر را برای ایجاد پروژهی جدید اجرا کنید:
npm init -y
سپس Hardhat را بهعنوان وابستگی توسعه نصب کنید:
npm install --save-dev hardhat
مراحل راهاندازی پروژه:
- پس از نصب، دستور زیر را برای راهاندازی پروژهی هاردهت اجرا کنید:
npx hardhat
در منوی ظاهر شده، گزینهی “Create a basic sample project” را انتخاب کنید و مراحل را دنبال کنید.
آشنایی با محیط توسعه Remix
Remix IDE یک محیط توسعهی تحت وب است که نیازی به نصب ندارد و بهراحتی از طریق وبسایت آن در دسترس است. این ابزار برای افراد تازهکار بسیار مناسب است زیرا رابط کاربری سادهای دارد و امکاناتی مانند نوشتن، کامپایل و تست سریع قراردادهای هوشمند را فراهم میکند. همچنین امکان اتصال به کیف پول متامسک و انتشار قراردادها در شبکههای تستی مانند Goerli یا Sepolia را نیز فراهم میسازد.
نوشتن اولین قرارداد هوشمند با سالیدیتی
برای شروع برنامهنویسی با سالیدیتی، بهترین راه نوشتن یک قرارداد ساده و قابل فهم است. این کار به شما کمک میکند تا با ساختار کلی، نحوه تعریف متغیرها، توابع و تعامل با بلاک چین آشنا شوید. در محیطهایی مانند Remix میتوانید بدون نیاز به نصب ابزار خاص، اولین قرارداد خود را بنویسید و اجرا کنید.
در این مرحله، تمرکز اصلی باید روی درک اجزای اصلی قرارداد هوشمند باشد؛ از جمله تعیین نسخه سالیدیتی، تعریف ساختار contract
و نوشتن توابع ساده. این رویکرد به شما کمک میکند تا قدمبهقدم درک عمیقتری از توسعه در بستر بلاک چین پیدا کنید.
ساختار پایه یک قرارداد هوشمند
هر قرارداد سالیدیتی با تعیین نسخه کامپایلر آغاز میشود که با کلمه کلیدی pragma
مشخص میگردد. سپس ساختار اصلی با استفاده از contract
تعریف میشود که نقش کلاس را دارد و تمام کدها در آن نوشته میشوند. درون قرارداد، متغیرها، توابع، رخدادها و ساختارهای داده تعریف میشوند.
متغیرهای حالت (State Variables) دادههایی هستند که روی بلاک چین ذخیره میشوند. توابع (Functions) نیز برای خواندن یا تغییر این دادهها استفاده میشوند. همچنین میتوان برای برقراری امنیت، سطح دسترسی به توابع را با استفاده از کلمات کلیدی مثل public
، private
یا external
تعیین کرد.
در ساختار پایه، اغلب یک تابع سازنده (constructor
) هم استفاده میشود که هنگام دیپلوی اجرا شده و میتواند وظایف اولیه مانند تعیین مالک قرارداد را انجام دهد. در مجموع، درک این ساختار اولیه، بنیان یادگیری برنامهنویسی قراردادهای هوشمند است.
نوشتن کد ساده برای قرارداد هوشمند
در ادامه یک نمونه ساده از قرارداد هوشمند را بررسی میکنیم. فرض کنید قصد داریم یک قرارداد ایجاد کنیم که فقط یک مقدار عددی را ذخیره و بازیابی کند. ابتدا با تعریف نسخه سالیدیتی و بدنه قرارداد شروع میکنیم:

در این کد، متغیر storedNumber
برای ذخیره مقدار عددی تعریف شده است. تابع set
برای تنظیم مقدار جدید و تابع get
برای مشاهده مقدار ذخیرهشده به کار میروند. این نمونه، پایهای برای درک عملکرد قراردادهای ساده است و اجرای آن در محیطی مثل Remix میتواند تجربه عملی مفیدی ایجاد کند.
تست و استقرار قرارداد
برای تست این قرارداد، کافی است وارد محیط آنلاین Remix IDE شوید. پس از ساخت فایل جدید و وارد کردن کد، از بخش Solidity Compiler برای کامپایل استفاده کنید. سپس به بخش Deploy & Run Transactions بروید و قرارداد را دیپلوی کنید.
پس از استقرار، رابط کاربری Remix به شما امکان استفاده از توابع set
و get
را میدهد. میتوانید عددی را وارد کرده، با set
ذخیره کنید و سپس با get
آن را بخوانید. این روند ساده، نقطه شروع مناسبی برای یادگیری نحوه تعامل با قراردادهای هوشمند و آماده شدن برای پروژههای پیشرفتهتر است.
مفاهیم پیشرفته در سالیدیتی
پس از آشنایی با اصول اولیه زبان سالیدیتی، گام بعدی درک مفاهیم پیشرفتهای است که در توسعه حرفهای قراردادهای هوشمند نقش کلیدی دارند. این مفاهیم شامل مباحث امنیتی، بهینهسازی مصرف گس و استفاده از کتابخانهها و ابزارهای کاربردی میشوند. درک صحیح این موارد به توسعهدهندگان کمک میکند قراردادهایی امنتر، کارآمدتر و قابل اطمینانتر بسازند.
مدیریت ایمنی در قراردادهای هوشمند
قراردادهای هوشمند در صورت کدنویسی نادرست میتوانند به آسیبپذیریهای خطرناکی دچار شوند. خطاهایی مانند حمله بازگشتی (Reentrancy)، سرریز اعداد (Integer Overflow/Underflow) یا دسترسیهای کنترلنشده از جمله رایجترین تهدیدها هستند. این اشکالات میتوانند منجر به از دست رفتن سرمایه یا اختلال در عملکرد سیستم شوند.
برای جلوگیری از این آسیبپذیریها، استفاده از الگوهای طراحی ایمن مانند Checks-Effects-Interactions، محدودسازی دسترسی با modifier و بررسی نسخههای جدید کامپایلر ضروری است. همچنین تست واحد و بررسی دقیق کد با ابزارهایی مثل MythX یا Slither نقش مهمی در کشف باگهای احتمالی دارند.
بهینهسازی قراردادهای هوشمند برای کاهش هزینههای گس
هر بار که قرارداد هوشمند اجرا میشود، کاربران باید هزینهای بهنام گس پرداخت کنند. اگر کد بهینه نباشد، این هزینه میتواند بسیار بالا برود. مثلاً حلقههای طولانی یا استفادهی نابهجا از متغیرهای ذخیرهشده در حافظه بلاک چین (Storage) میتوانند گس زیادی مصرف کنند.
برای کاهش هزینه گس، بهتر است از متغیرهای memory بهجای storage در توابع موقتی استفاده شود و عملیات محاسباتی پرهزینه حذف یا تجمیع شوند. همچنین حذف منطقهای غیرضروری و انتخاب نوع دادهی مناسب (مثلاً uint8 بهجای uint256) میتواند تأثیر قابل توجهی در بهینهسازی گس داشته باشد.
استفاده از کتابخانهها و ابزارهای کمکی
کتابخانهها ابزارهایی آمادهاند که میتوانند توسعه قراردادهای هوشمند را سریعتر و ایمنتر کنند. یکی از محبوبترین آنها OpenZeppelin است که مجموعهای از قراردادهای تستشده مانند توکنهای ERC20، سیستم مالکیت و کنترل دسترسی را فراهم میکند. استفاده از این کتابخانهها باعث کاهش احتمال خطا و آسیبپذیری در کد میشود.
علاوه بر OpenZeppelin، کتابخانههای دیگری هم در دسترساند که کاربردهای تخصصیتری دارند. مثلاً Solmate یک کتابخانه سبک و ماژولار است که برای توسعه قراردادهای کارآمد با مصرف گس پایین طراحی شده است.
همچنین DappTools مجموعهای از ابزارها و کتابخانهها برای تست و توسعه پروژههای دیفای (DeFi) است که بین توسعهدهندگان پیشرفته محبوبیت زیادی دارد. کتابخانهی ABDK Libraries نیز توابع ریاضی دقیق با پشتیبانی از fixed-point و floating-point را فراهم میکند.
ابزارهایی مانند هاردهت و فوندری نیز روند توسعه، تست و دیباگ قراردادها را آسان میکنند. این ابزارها قابلیت اجرای شبکه محلی، شبیهسازی رفتار قرارداد و تحلیل میزان گس مصرفی را فراهم میسازند و برای توسعهدهندگان حرفهای سالیدیتی بسیار کاربردی هستند.
منابع آموزشی برای یادگیری سالیدیتی
برای یادگیری زبان برنامهنویسی سالیدیتی منابع متنوعی در دسترس علاقهمندان قرار دارد. بهترین منابع آموزش سالیدیتی شامل دورههای آنلاین (رایگان یا پولی)، مقالات تخصصی، مستندات رسمی، و پروژههای عملی هستند که هرکدام نقش مهمی در تسلط بر این زبان ایفا میکنند.
بسته به سطح دانش و اهداف یادگیری، افراد میتوانند مسیر آموزشی مناسبی را انتخاب کنند و مهارتهای لازم برای توسعه قراردادهای هوشمند را به دست آورند.
کتابها و مقالات تخصصی
مطالعهی کتابهای تخصصی یکی از بهترین روشها برای درک عمیق مفاهیم سالیدیتی است. کتابهایی مانند Mastering Ethereum نوشتهی آندریاس ام. آنتونوپولوس (Andreas M. Antonopoulos) و Introducing Ethereum and Solidity از کریس دافی (Chris Dannen)، مفاهیم پایه تا پیشرفته را به زبان دقیق و علمی بررسی میکنند.
این منابع علاوه بر آموزش فنی، معماری بلاک چین و روش تعامل قراردادهای هوشمند با محیط را هم به خوبی توضیح میدهند.
مقالات تخصصی و مستندات رسمی زبان سالیدیتی نیز بخش مهمی از فرایند یادگیری را تشکیل میدهند. سایت رسمی سالیدیتی (SolidityLang) با ارائهی مستندات بهروز، مثالهای کدنویسی، و نسخههای مختلف زبان، مرجع معتبری برای یادگیری محسوب میشود. همچنین بلاگهای فنی در وبسایتهایی مانند Medium یا Dev.to تجربیات توسعهدهندگان و نکات فنی پروژههای واقعی را در اختیار علاقهمندان قرار میدهند.
پروژههای عملی و آشنایی با چالشها
یادگیری واقعی سالیدیتی زمانی آغاز میشود که وارد اجرای پروژههای عملی شوید. تمرین با قراردادهای ساده مانند کیف پول چندامضایی، رأیگیری یا ICO، به شما کمک میکند تا با ساختار اجرایی کد، ارتباط قراردادها با EVM و محدودیتهای بلاک چین آشنا شوید. این پروژهها مهارت حل مسئله را افزایش میدهند و شما را برای پروژههای جدیتر آماده میکنند.
همچنین اجرای پروژههای واقعی باعث میشود با چالشهایی مثل مدیریت گس، امنیت قرارداد، و بهروزرسانی کدها روبهرو شوید. درک این مشکلات از طریق تمرین، کمک میکند تا در آینده قراردادهایی امنتر، بهینهتر و پایدارتر توسعه دهید. پلتفرمهایی مثل ریمیکس، هاردهت و فوندری (Foundry) بستر مناسبی برای شروع این تمرینها هستند.
سؤالات متداول
زبان برنامهنویسی سالیدیتی چیست؟
سالیدیتی یک زبان برنامهنویسی مخصوص نوشتن قراردادهای هوشمند در بلاک چین است.
چرا از سالیدیتی برای توسعه قراردادهای هوشمند استفاده میشود؟
چون با ماشین مجازی اتریوم سازگاری کامل داشته و ابزارهای توسعه زیادی برای آن وجود دارد.
چگونه با سالیدیتی قراردادهای هوشمند بنویسم؟
کافیست محیطی مثل Remix را باز کنید، کد بنویسید و قرارداد را روی شبکه آزمایشی اجرا کنید.
بهترین منابع برای یادگیری سالیدیتی کدامند؟
مستندات رسمی سالیدیتی، دورههای آنلاین، کتابهایی مثل Mastering Ethereum و پروژههای سالیدیتی عملی.
آیا سالیدیتی برای مبتدیان مناسب است؟
بله، اگر کمی با مفاهیم برنامهنویسی آشنا باشید، یادگیری سالیدیتی برای شما سخت نیست.
تفاوت سالیدیتی با سایر زبانهای برنامهنویسی چیست؟
سالیدیتی مخصوص بلاک چین است و تمرکز آن روی امنیت، محدودیت منابع و اجرای غیرمتمرکز است.
جمعبندی
زبان برنامهنویسی سالیدیتی یکی از ارکان اصلی توسعه قراردادهای هوشمند در بستر بلاک چین اتریوم است. با ساختاری شیگرا، پشتیبانی از انواع داده پیچیده و سازگاری با زبانهایی مثل ++C و جاوااسکریپت، سالیدیتی برای توسعهدهندگان فرصت ساخت اپلیکیشنهای غیرمتمرکز را فراهم میکند. آشنایی با محیطهایی مانند Remix، Truffle و Hardhat مسیر یادگیری سالیدیتی و پیادهسازی پروژهها را هموارتر میسازد.
در کنار یادگیری اصول اولیه، توجه به مفاهیم پیشرفتهای مثل امنیت، بهینهسازی هزینه گس و استفاده از کتابخانههایی مانند OpenZeppelin اهمیت ویژهای دارد. با بهرهگیری از منابع رایگان و پروژههای عملی، توسعهدهندگان میتوانند درک عمیقتری از ساختار قراردادهای هوشمند کسب کنند و مهارتهای خود را به سطح حرفهای برسانند.