امروزه، همه افراد مسلط به زبان برنامهنویسی سالیدیتی به راحتی میتوانند ساخت dapps را در بلاکچین اتریوم آغاز کنند. در واقع، سالیدیتی یک زبان برنامهنویسی نسبتاً جدید، شیگرا و سطح بالاست که با هدف ساخت برنامه غیرمتمرکز به وجود آمده است. با توجه به نقش مهم سالیدیتی در ساخت dapps، در این مقاله قصد داریم تا شما را با نحوه ساخت اپلیکیشن غیرمتمرکز بر روی بلاکچین اتریوم با استفاده از زبان برنامهنویسی سالیدیتی آشنا کنیم. اگر شما هم به این موضوع علاقهمند هستید تا انتهای این مقاله همراه ما باشید و چنانچه بعد از پایان مقاله، همچنان پرسش یا ابهامی در این زمینه داشتید، میتوانید در بخش کامنتها، سؤالات خود را با ما مطرح کنید.
زبان برنامهنویسی سالیدیتی چیست؟
سالیدیتی یک زبان برنامهنویسی سطح بالاست که بر طراحی و اجرای قراردادهای هوشمند متمرکز است. بهطورکلی میتوان گفت که سالیدیتی مشابه زبانهای برنامهنویسی C++، جاوا اسکریپت و پایتون میباشد که به صورت خاص ماشین مجازی اتریوم را هدف قرار داده است. در واقع، توسعهدهندگان حوزه کریپتو از solidity برای ساخت برنامه غیرمتمرکز (dapp) در بلاکچین اتریوم استفاده میکنند.
جالب است بدانید که زبان برنامهنویسی سالیدیتی در سال ۲۰۱۵ توسط کریستین رایتویسنر (Christian Reitwiessner) معرفی شد. از جمله ویژگیهای برجسته سالیدیتی میتوان به موارد زیر اشاره کرد.
- سالیدیتی یک زبان برنامهنویسی از نوع استاتیک میباشد که برای اجرای قراردادهای هوشمند طراحی شده است. در واقع، این زبان برنامهنویسی از پایه شیگرا برای ساخت و استقرار قراردادهای هوشمند استفاده میکند.
- سالیدیتی یک زبان برنامهنویسی مناسب برای ایجاد قراردادهای کیف پولهای چند امضایی، رأیگیری، تأمین مالی جمعی و سایر برنامههاست.
- سالیدیتی پشتیبانی جامعی از رویکردهای پیچیده در برنامهنویسی تعریف شده توسط کاربر ارائه میدهد.
در نظر داشته باشید که سالیدیتی، زبان اصلی برای ساخت dapps و پلتفرمهای اجراکننده بلاکچین است. بنابراین، قبل از آشنایی با نحوه ساخت dapp بهتر است ابتدا مفاهیم اصلی این حوزه را بهطور خلاصه مرور کنیم.
بلاکچین چیست؟
بهمنظور درک بهتر مفهوم بلاکچین ابتدا در مورد برنامههای وب (Web Application) صحبت میکنیم.
معمولاً هنگام تعامل با یک برنامه وب، از یک مرورگر وب برای اتصال به سرور مرکزی استفاده میشود. در این شرایط تمام کدهای این برنامه وب روی سرور مرکزی و تمامی دادهها در یک پایگاه داده مرکزی قرار دارند. بنابراین، در زمان ارتباط با برنامه وب باید با این سرور مرکزی در اینترنت ارتباط برقرار کنید. فرض کنید که میخواهیم یک برنامه رأیگیری در وب بسازیم. قطعاً در زمان انجام این کار با چند مشکل بزرگ مواجه خواهیم شد:
- دادههای موجود در این پایگاه داده، قابل تغییر هستند. این بدان معناست که میتوان دادههای این پایگاه را بیش از یکبار شمارش کرد و یا آنها را بهطور کامل حذف نمود.
- کد منبع در سرور وب نیز میتواند در هر زمان تغییر کند.
به دلیل وجود این مشکلات، بهتر است ساخت برنامه غیرمتمرکز رأیگیری را بر روی بلاکچین انجام بدهیم چون با استفاده از بلاکچین همه کاربران متصل به شبکه میتوانند در انتخابات شرکت کنند. از طرف دیگر ما بعد از ساخت dapp، میخواهیم اطمینان حاصل کنیم که آرای کاربران فقط یکبار شمارش میشود. به همین دلیل قبل از آموزش ساخت dapp، در ادامه مقاله به بررسی نحوه عملکرد بلاکچین میپردازیم.
شبکه بلاکچین تنها یک شبکه و پایگاه داده دارد. در واقع، بلاکچین یک شبکه همتا به همتا از کامپیوترهاست که به آنها «نود» گفته میشود. وظیفه نودها این است که تمام دادهها و کدهای موجود در شبکه را به اشتراک بگذارند. بنابراین، اگر شما یک دستگاه متصل به بلاکچین دارید، یک نود (Node) در شبکه محسوب میشوید که میتوانید با تمام نودهای دیگر در شبکه صحبت کنید. در نظر داشته باشید که در این شرایط، یک کپی از تمام دادهها و کد موجود در بلاکچین در اختیار شماست. علاوه بر این، در شبکه بلاکچین، سرور مرکزی وجود ندارد و فقط مجموعهای از کامپیوترها در شبکه با یکدیگر صحبت میکنند.
بهطورکلی میتوان گفت که در بلاکچین به جای حضور یک پایگاه داده متمرکز، تمام دادههای منتشر شده توسط نودهای بلاکچین در بلاکها قرار میگیرند و سپس این بلاکها برای ایجاد دفتر کل عمومی به هم متصل میشوند. این دفتر کل، همه دادههای موجود در بلاکچین را نشان میدهد. علاوه بر این، تمام دادههای این دفتر کل عمومی با هش رمزنگاری شده و توسط یک الگوریتم اجماع تأیید میشود. در واقع، نودها با مشارکت در شبکه اطمینان حاصل میکنند که تمام دادههای توزیع شده در سراسر شبکه یکسان هستند. این موضوع یکی از مهمترین دلایلی است که چرا بهتر است برای ساخت برنامه غیرمتمرکز رأیگیری از بلاکچین استفاده کنیم.
قرارداد هوشمند چیست؟
به نظر شما برای ساخت dapp، چگونه میتوان برنامه رأیگیری را کدگذاری کرد؟ در پاسخ به این سؤال باید گفت که بلاکچین اتریوم به ما این امکان را میدهد تا با قرارداد هوشمند، کد را با ماشین مجازی اتریوم (EVM) اجرا کنیم.
واقعیت این است که قراردادهای هوشمند در تمام منطق تجاری (Business logic) برنامه رأیگیری ما وجود دارند و این همان جایی است که ما بخش غیرمتمرکز برنامه خود را کدگذاری میکنیم. در واقع قراردادهای هوشمند، وظیفه خواندن و نوشتن دادهها در بلاکچین و اجرای منطق تجاری را بر عهده دارند. جالب است بدانید که قراردادهای هوشمند به عنوان یکی از اجزای مهم اکوسیستم دیفای با زبان برنامهنویسی سالیدیتی (Solidity) نوشته میشوند.
عملکرد قراردادهای هوشمند در بلاکچین بسیار شبیه به یک میکروسرویس در اینترنت است. بنابراین، اگر دفتر کل (Public Ledger) نمایانگر لایه پایگاه داده (Database Layer) در بلاکچین باشد، قراردادهای هوشمند جایی هستند که منطق تجاری با دادهها ارتباط برقرار میکنند.
بهتر است بدانید که علت نامگذاری قراردادهای هوشمند این است که این قراردادها نشاندهنده یک توافق هستند. برای ساخت dApp رأیگیری، توافق این است که رأی من محاسبه میشود، بقیه آرا فقط یکبار شمارش میشوند و کاندیدایی که بیشترین آرا را داشته باشد، برنده انتخابات خواهد شد. قبل از آشنایی با ساخت برنامه غیرمتمرکز، بهتر است نگاهی گذرا به ساختار اپلیکیشن غیرمتمرکز رأیگیری بیندازیم.
برای ساخت dapp، ما یک کلاینت فرانت اند سنتی (Traditional front-end client) خواهیم داشت که باHTML ، CSS و جاوا اسکریپت نوشته شده است. این کلاینت به جای ارسال درخواست به یک سرور بک اند، به یک بلاکچین اتریوم که ما نصب خواهیم کرد، متصل میشود. توجه داشته باشید که ما تمام منطق تجاری مربوط به dApp خود را در یک قرارداد هوشمند انتخاباتی با زبان برنامهنویسی سالیدیتی کدنویسی خواهیم کرد. سپس این قرارداد هوشمند را در بلاکچین اتریوم خود مستقر کرده و به حسابها اجازه میدهیم، رأیگیری را شروع کنند.
با توجه به نقش مهم سالیدیتی در ساخت dapps، توصیه میکنیم که همه علاقهمندان به حوزه کریپتو، نحوه کار با این زبان برنامهنویسی را یاد بگیرند. یکی از بهترین راهها برای آموزش سالیدیتی شرکت در یک دوره آموزشی حرفهای است. آکادمی سیتکس با هدف آموزش و کمک به افزایش سطح علمی کاربران بازار داراییهای دیجیتال اقدام به برگزاری «دوره آموزش زبان برنامهنویسی سالیدیتی» کرده است. توصیه میکنیم که درصورت علاقه به یادگیری این زبانبرنامهنویسی حتماً در این دوره شرکت کنید.
بعد از آشنایی با مفاهیم اولیه بهتر است ساخت برنامه غیرمتمرکز را شروع کنیم!
ساخت dapp رأیگیری با زبان برنامهنویسی سالیدیتی
در ابتدا ما باید یک برنامه سمت کلاینت یا کاربر (client-side application) بسازیم که با قرارداد هوشمند ما در بلاکچین ارتباط برقرار کند. جالب است بدانید که این برنامه سمت کلاینت، جدولی از نامزدها دارد که شناسه، نام و تعداد آرای هر نامزد را مشخص میکند. علاوه بر این، این برنامه فرمی برای رأی دادن به کاندیدای مورد نظر شما نیز دارد. توجه داشته باشید که برای ساخت dApp رأیگیری به چند وابستگی (Dependencies) نیاز است.
مدیریت پکیج نود (Node Package Manager)
اولین وابستگی مورد نیاز برای ساخت اپلیکیشن غیرمتمرکز، Node Package Manager یا NPM است که همراه با Node.js ارائه میشود. شما با رفتن به ترمینال و تایپ کردن عبارت «$ node -v» میتوانید ببینید که آیا نود قبلاً نصب شده است یا خیر.
ترافل فریم ورک (Truffle Framework)
وابستگی بعدی برای ساخت dapp، ترافل فریم ورک است که به ما اجازه ساخت برنامه غیرمتمرکز بر روی بلاکچین اتریوم میدهد. علاوه بر این، این وابستگی مجموعهای از ابزارها را به منظور نوشتن قراردادهای هوشمند با زبان برنامهنویسی Solidity فراهم میکند. در واقع، ترافل فریم ورک ما را قادر میسازد تا در حین ساخت dapp، قراردادهای هوشمند خود را آزمایش کرده و آنها را در بلاکچین مستقر کنیم و از طرف دیگر، مکانی برای توسعه برنامه سمت کلاینت داشته باشیم.
گاناش (Ganache)
وابستگی بعدی برای ساخت dapp، گاناش است. شما میتوانید گاناش را از وبسایت Truffle Framework نصب کنید. با نصب این وابستگی به شما ۱۰ حساب خارجی با آدرس بلاکچین اتریوم داده میشود و هر حساب حاوی ۱۰۰ اتر جعلی میباشد.
متاماسک (Metamask)
وابستگی بعدی برای ساخت dapp، افزونه Metamask در Google Chrome است. توجه داشته باشید که برای استفاده از بلاکچین اتریوم باید یک افزونه مرورگر ویژه نصب کنیم. اینجاست که متامسک وارد میشود و در نتیجه ما میتوانیم با حساب شخصی خود به بلاکچین اتریوم متصل شده و با قرارداد هوشمند خود تعامل داشته باشیم. بهتر است بدانید که برای نصب متامسک باید افزونه متامسک کروم را در فروشگاه وب گوگل کروم جستجو کنید. هنگامی که آن را نصب کردید، مطمئن شوید که این وابستگی در لیست اکتنشنهای شما وارد شده است.
هایلایت کردن سینتکس (Syntax Highlighting)
این وابستگی، اختیاری است اما توصیه میکنیم که برای زبان برنامهنویسی سالیدیتی، هایلایت کردن سینتکس را نصب کنید.
بعد از نصب وابستگیها باید ساخت dapp رأیگیری خود را شروع کنیم!
گام به گام ساخت برنامه dapp
برای ساخت برنامه غیرمتمرکز ابتدا باید محل دانلود Ganache را پیدا کرده و آن را باز کنید. اکنون شما یک بلاکچین محلی در حال اجرا دارید. همانطور که در بخش قبلی مقاله اشاره کردیم، گاناش به ما ۱۰ حساب از قبل بارگذاریشده با ۱۰۰ اتر جعلی (این اترها در شبکه اصلی اتریوم ارزشی ندارد) میدهد. توجه داشته باشید که هر حساب، دارای یک آدرس منحصربهفرد و یک کلید خصوصی است. بنابراین، بعد از ساخت dapp، هر آدرس به عنوان یک شناسه منحصربهفرد برای هر رأیدهنده عمل میکند.
بعد از انجام این کار باید از طریق دستور زیر یک دایرکتوری برای ساخت dApp خود ایجاد کنیم:
|
اکنون شما در پروژه خود هستید و میتوانید با یک Truffle box به سرعت برنامه خود را اجرا کنید. در این آموزش به منظور ساخت برنامه غیرمتمرکز از Pet Shop box استفاده شده است. شما میتوانید Pet Shop box را از داخل دایرکتوری پروژه خود و با دستور زیر نصب کنید:
|
بعد از انجام این مراحل زمان آن فرا رسیده تا نوشتن قرارداد هوشمند خود را آغاز کنیم! توجه داشته باشید که این قرارداد هوشمند شامل تمام منطق تجاری برنامه غیرمتمرکز ما و مسئول خواندن از بلاکچین و نوشتن در بلاکچین اتریوم خواهد بود. این ویژگی به ما امکان میدهد تا نامزدهایی را که در انتخابات شرکت میکنند، لیست کنیم و همه آرا و رأیدهندگان را پیگیری نماییم.
در این مرحله از ساخت برنامه غیرمتمرکز از طریق دستور زیر، کار را با ساخت یک فایل قرارداد جدید در فهرست قراردادها ادامه میدهیم:
|
سپس برای ساخت dapp، باید یک «smoke test» ایجاد کنیم تا مطمئن شویم که پروژه خود را به درستی تنظیم کردهایم و در نتیجه میتوانیم قرارداد را با موفقیت در بلاکچین مستقر کنیم. برای انجام این کار فایل را باز کنید و با کد زیر شروع کنید.
گام بعدی برای ساخت dapp، ایجاد یک تابع سازنده (Constructor Function) است. در واقع، این تابع بعد از اجرا کردن قرارداد هوشمند در بلاکچین فراخوانی میشود. توجه داشته باشید که تابع سازنده، نامی مشابه قرارداد هوشمند دارد و از این طریق، سالیدیتی میفهمد که تابع از نوع «سازنده» است. بعد از ایجاد پایه قرارداد هوشمند به منظور استقرار این قرارداد در بلاکچین باید یک فایل جدید در پوشه Migrations ایجاد کنیم. برای ساخت dapp، با استفاده از دستور زیر از ریشه پروژه (Project Root) خود، یک فایل جدید ایجاد میکنیم.
|
توجه داشته باشید که ما همه فایلهای خود را در دایرکتوری migrations با اعداد شمارهگذاری میکنیم تا Truffle بداند که آنها را با کدام ترتیب اجرا کند.
گام بعدی برای ساخت dapp، فهرست کردن نامزدهای شرکتکننده در انتخابات است. برای انجام این کار ما باید بتوانیم نام چندین نامزد و چند مورد از ویژگیهای هر کدام از نامزدها را ذخیره کنیم. در واقع، ما باید بتوانیم شناسه، نام و تعداد رأی هر نامزد را پیگیری و مشخص کنیم. در زیر نحوه مدلسازی نامزدها مشخص شده است.
در این مرحله از ساخت dapp، ما یک نامزد را با Solidity Structمدلسازی کردهایم. در واقع، سالیدیتی به ما این امکان را میدهد که انواع مختلفی از ساختارهای مد نظر خود را ایجاد کنیم. ما در این مدلسازی مشخص کردیم که این ساختار دارای یک شناسه از نوع عدد صحیح بدون علامت، نام استرینگ و تعداد رأیها از نوع عدد صحیح بدون علامت میباشد.
گام بعد برای ساخت اپلیکیشن غیرمتمرکز، اضافه کردن قابلیت رأیدهی در انتخابات است. با افزودن این قابلیت به قرارداد هوشمند، حسابهایی که در انتخابات رأی دادهاند، قابل پیگیری هستند.
سپس برای ساخت dapp، با روش زیر یک تابع «رأی» اضافه کنید:
عملکرد اصلی این تابع، افزایش تعداد آرای نامزدها با خواندن ساختار Candidate و voteCount است. بعد از انجام این مرحله از ساخت اپلیکیشن غیرمتمرکز، کد قرارداد شما کامل و باید به شکل زیر باشد.
در مرحله بعد شما باید عملکرد رأیگیری dapp خود را امتحان کنید. بعد از انجام این کار، صفحه تأیید متامسک مشابه تصویر زیر برای شما ظاهر میشود.
سپس در این مرحله از ساخت برنامه غیرمتمرکز، شما با کلیک بر روی گزینه «Submit»، میتوانید رأی خود را با موفقیت ثبت کنید. توجه داشته باشید که برای مشاهده آرای ثبت شده، باید صفحه را بهروزرسانی کنید.
آخرین مرحله در آموزش ساخت برنامه غیرتمرکز رأیگیری این است که شما باید بعد از هر رأیگیری یک رویداد (event) راهاندازی کنید. این کار به شما امکان میدهد تا بعد از اعلام رأی یک حساب کاربری، برنامه سمت کلاینت خود را بهروزرسانی کنید. توجه داشته باشید که شما بعد از اتمام این مرحله با موفقیت ساخت اپلیکیشن غیرمتمرکز خود را به پایان رساندهاید.
جمعبندی
سالیدیتی یک زبان برنامهنویسی محبوب در اتریوم برای توسعه قراردادهای هوشمند است. شباهتهای Solidity با زبانهای معروف سطح بالا فرصت استثنایی را برای مبتدیان فراهم میکند تا نحوه ساخت dapps و توسعه قراردادهای هوشمند را یاد بگیرند. در واقع، همه افراد علاقهمند به توسعه و ساخت برنامه غیرمتمرکز میتوانند با آموزش ارز دیجیتال و تمرین و تکرار، این زبان برنامه نویسی را به راحتی یاد بگیرند.
در این مقاله تلاش کردیم تا شما را با نحوه ساخت اپلیکیشن غیرمتمرکز (ساخت dapp) رأیگیری با کمک زبان برنامهنویسی سالیدیتی آشنا کنیم. اگر به یادگیری بیشتر این زبان برنامهنویسی علاقهمند هستید میتوانید با مراجعه به صفحه آموزش سالیدیتی در سایت آکادمی سیتکس به صورت کامل با این زبان برنامهنویسی آشنا شوید.
سؤالات متداول
سالیدیتی (Solidity) چیست؟
سالیدیتی یک زبان برنامه نویسی برای نوشتن قراردادهای هوشمند بر روی بلاکچین اتریوم است. توجه داشته باشید که سالیدیتی یک زبان ایستا و مشابه زبانهای برنامهنویسی C++، جاوا اسکریپت و پایتون است.
چگونه سالیدیتی یاد بگیریم؟
بهترین راه برای یادگیری زبان برنامهنویسی سالیدیتی ایجاد قراردادهای هوشمند بر روی بلاکچین اتریوم است که میتوانید آموزش ساخت اپلیکیشن غیرمتمرکز را هم فرا بگیرید . علاوه بر این، شما با شرکت در دوره «آموزش زبان برنامهنویسی سالیدیتی» آکادمی سیتکس میتوانید این زبان برنامهنویسی را به حرفهایترین شکل ممکن یاد بگیرید.