بلاک چین چشم مشتاقان زیادی را در سراسر دنیا به خود خیره کرده است تا این فناوری بتواند با از بین بردن سیستمهای ثابت که تراکنشهای مالی بر اساس آنها در سراسر دنیا انجام میشود به جای آنها جایگزین شود.در این مقاله از گروه تبلیغاتی فورسی می خواهیم با برترین زبان های برنامه نویسی در حوزه بلاکچین آشنا شویم.
بلاک چین چیست؟
بلاک چین (Blockchain) از دو کلمه Block (بلوک) و Chain (زنجیره) ایجاد شده است. این فناوری در حقیقت زنجیرهای از بلوکهاست.به طور کلی بلاک چین یک نوع سیستم ثبت اطلاعات و گزارش است.تفاوت آن با سیستمهای دیگر این است که اطلاعات ذخیره شده روی این نوع سیستم، میان همه اعضای شبکه به اشتراک گذاشته میشوند و با استفاده از رمزنگاری امکان حذف و دستکاری اطلاعات ثبت شده تقریبا غیرممکن است.
بیت کوین اولین کاربرد از این فناوری بود و از بلاک چین برای ذخیره اطلاعات دارایی کاربران بهره برد. اگر بلاک چین یک سیستم عامل باشد، بیت کوین نرم افزاری روی این سیستم عامل است.
تکنولوژی بلاک چین قطعا یک اختراع فوق العاده است. اما سوالی که برای همه مردم پیش می آید این است: واقعا بلاک چین چیست؟! بلاک چین یک اوراق بهادار دیجیتالی غیر متمرکز است. با استفاده از توزیع (و نه کپی) اطلاعات دیجیتال تکنولوژی بلاک چی در واقع زیرساخت ایجا یک نوع اینترنت جدید را ایجاد کرده است.
این تکنولوژی که در اصل وام گرفته شده از ارز دیجیتال و بیت کوین است، در حال یافتن کاربردهای دیگر برای این پتانسیل از تکنولوژی است. بیت کوین به عنوان طلای دیجیتال شناخته می شود.فناوری در حال فراهم آوردن فرصتهای زیادی برای برنامه نویسان و گسترش دهندگان این صنعت است تا بر روی آن سرمایه گذاری کنند.
بهترین زبان برای برنامهنویسی بلاک چین چیست؟
پاسخ این است که زبان یکتایی وجود نداشته و بر اساس اینکه چه پروژهای میخواهید انجام دهید کاملا متغیر است. زبانهای برنامهنویسی متعددی برای اینکار وجود دارد. ابتدا باید ببینید کدامیک از ارزهای دیجیتال، پلتفرم پایهی پروژهی شما را تشکیل داده و چه عملکردی از آن انتظار دارید. شما میتوانید لیست محبوبترین زبانهای برنامهنویسی در سال ۲۰۱۸ را از وبسایتهای ieee و یا tiobe ببینید.
ممکن است توسعهدهندهای زبان C# را برای کار خود انتخاب کند درحالیکه توسعهدهندهی دیگری اسکریپتهای پایتون و یا جاوا اسکریپت همیشه محبوب را ترجیح دهد. میبینید کاملا بستگی به هدف شما دارد.
به طور کلی برنامهنویسی بلاکچین چهار حوزهی زیر را پوشش میدهد:
- راهاندازی یک ICO
- ساخت یک قرارداد هوشمند و یا برنامه غیرمتمرکز (Dapp)
- ارتقاء یک بلاک چین موجود و یا ایجاد یک بلاک چین جدید
- ساخت یک دفتر کل غیرمتمرکز نظیر هایپرلجر فابریک (fabric)
اگر قصد برنامهنویسی در هر یک از حوزههای بالا را داشته باشید، ابتدا باید فناوری بلاک چین را کاملا درک کرده باشید. منابع بسیاری برای درک این فناوری بر بستر اینترنت موجود است. پیشنهاد میشود ابتدا مفاهیم پایهای بلاک چین و کاربردهای آن را مطالعه کرده و سپس حوزهی مورد علاقهی خود را انتخاب نمایید. ما دو کتاب زیر را برای آشنایی با مفاهیم کلی پیشنهاد میکنیم:
- تسلط بر بلاک چین: Mastering Blockchain by Imran bashir
- تسلط بر بیت کوین: Mastering bitcoin By Andreas M Antonopolos
پس از مطالعهی مبانی این کار، قادر به تصمیمگیری خواهید بود. اگر قصد توسعهی کامل یک بلاک چین جدید را داشته باشید، احتمالا به زبان برنامهنویسی ++C نیاز خواهید داشت. اما ممکن است تصمیم بگیرید به جای توسعهی یک بلاک چین از صفر، از پروژههای منبعبازی مانند بیت کوین و یا اتریوم استفاده کنید.
اگر قصد ساختن یک قرارداد هوشمند (Smart Contract) بر بستر اتریوم را داشته باشید، به یادگیری زبان برنامهنویسی سالیدیتی (Solidity) نیاز خواهید داشت. برای اینکار میتوانید به راهنمای ساخت قرارداد هوشمند رجوع کنید.
برای توسعهی پروژههایی نظیر هایپرلجر فابریک، به زبانهای برنامهنویسیای نظیر زبان گو (Go) نیاز خواهید داشت.
این نکته را در نظر داشته باشید که بلاک چین تنها فناوری زیرساختی شما بوده و به برنامهنویسی فرانتاند (Front end) نیز برای امکان تعامل کاربران با برنامهی خود نیاز خواهید داشت. برای فرانتاند شاید زبان جاوا اسکریپت بهترین گزینه برای شما باشد. پیش از اینکه به معرفی زبانهای برنامهنویسی بهصورت مجزا بپردازیم، برخی از چالشهایی را که ممکن است پیش روی شما بهعنوان یک برنامهنویس بلاک چین قرار بگیرد را بیان کرده تا با دانستن آنها بهتر بتوانید برای انتخاب زبان برنامهنویسی مناسب تصمیم بگیرید.
معیارهای انتخاب زبان
امنیت (Security)
دیوید شوارتز (David Schwartz) چه زیبا بیان کرده است که بلاکچینها باید همانند دژهای نظامی مستحکم باشند. نخست آنکه کد آنها عمومی بوده و برای همگان قابل رویت است. همه میتوانند کد مربوط به آنها را بررسی کرده و نقاط ضعف امنیتی و باگها را پیدا کنند. با این وجود برخلاف سایر پروژههای منبعباز (Opensource)، یافتن آسیبپذیری در یک بلاک چین تبعات زیانبار بیشتری دارد. پیدا کردن چنین باگهایی میتواند منجر به هک سیستم و سرقت میلیونها دلار شود. درست به همین دلیل پروسهی توسعهی یک بلاک چین معمولا بسیار آهسته پیش میرود.
مدیریت منبع (Resource management)
توسعه باید همگام با نیازهای شبکه باشد. نمیتوان این نیازها را از ابتدا در نظر نگرفته و بعدا به آنها پرداخت. شما باید به خوبی سیستم خود را برای پرسشهای (queries) محلی و از راه دور (Remote) آماده کنید.
کارایی (Performance)
یک بلاک چین باید همیشه بالاترین قابلیتهای خود را به نمایش بگذارد. برای این هدف زبان برنامهنویسی که انتخاب میشود باید بسیار انطباقپذیر باشد. نکتهی مهم اینجاست که بسیاری از دستورالعملهایی که در بلاک چین انجام میشوند قابلیت اجرا به صورت موازی را داشته و تعدادی از آنها چنین قابلیتی را ندارند.
یکی از وظایفی که قابلیت موازیسازی در بلاک چین را دارد، تایید امضای دیجیتال (digital signature) است چراکه تنها چیزی که برای تایید نیاز دارید یک کلید، یک تراکنش و یک امضا است. تنها با استفاده از سه داده، میتوانید تاییدات را به موازات وظایف دیگر انجام دهید.
تمام توابع یک بلاک چین، چنین خاصیتی ندارند به عنوان مثال اجرای یک تراکنش را در نظر بگیرید. چندین تراکنش برای جلوگیری از مشکلاتی نظیر دوبار خرج کردن (Double spend) نمیتوانند به صورت کاملا موازی اجرا شوند. برخی زبانهای برنامهنویسی برای پیادهسازی توابع به شکل موازی مناسبتر هستند.
جداسازی (Isolation)
رفتار قطعی (Deterministic) چیست؟
اگر (A + B = C) باشد، بدون در نظر گرفتن هیچ پیششرطی، همواره عبارت (A+B) برابر با C خواهد بود. توابع هش (Hash function) نیز قطعی هستند و این بدین معنا است که هش متغیر A، همواره برابر با HA خواهد بود. بنابراین در یک بلاک چین،تمامی عملیات مربوط به تراکنشها باید قطعی باشند. یک تراکنش نمیتواند در دو روز رفتاری متفاوت داشته باشد. همچنین یک قرارداد هوشمند نیز نمیتواند در دو ماشین رفتاری متفاوت داشته باشد.
پیادهسازی چنین المانی تنها از طریق جداسازی و یا ایزوله کردن تراکنشها و قراردادهای هوشمند از عناصری است که عدم قطعیت در آنها وجود دارد.
زبانهای برنامهنویسی بلاک چین
۱.زبان سی پلاس پلاس (++C)
این برنامه به عنوان مشتقی از زبان برنامه نویسی C ساخته شده است. زبان روندگرای ++C بر اساس زبان دادهگرای C نوشته شده است. شاید همین بزرگترین تفاوت بین این دو زبان باشد. ++C اطلاعات و عملکرد آنها را به دادهها تبدیل میکند که میتوان آنها را به راحتی در برنامههای دیگر مورد استفاده قرار داد. این زبان برنامه نویسی بلاک چین اجازه میدهد تا مدیریت مؤثرتری بر روی حافظه وجود داشته باشد.
بلاک چین به بسیاری از کاربران و ماینرها اجازه میدهد تا به صورت سیستماتیک و همزمان عمل کنند. ++C اپلیکیشنهایی را ایجاد میکند که نه تنها بین نقاط پایانی بلکه در پروسه انجام تراکنش سریعتر عمل میکنند. به همین علت است که پروژههای بلاک چین مانند بیت کوین اتریوم و ریپل همگی با زبان ++C نوشته شدهاند.
۲.زبان جاوا (Java)
جاوا به عنوان زبان جهانی اینترنت بسیار اهمیت دارد. زبان برنامه نویسی بلاک چین زبانی قدیمی و برای ایجاد پیج های اینترنتی فعال بسیار مفید است. همچنین برای ایجاد بلاک چینهای ساده و تغییرناپذیر نیز کاربرد دارد. تغییر ناپذیری باعث میشود که هیچ کس نتواند اطلاعات یک بلوک را تغییر دهد هر بلوک تازه که بلاک چین اضافه میشود.
اطلاعات بلوک قبلی به اضافه اطلاعات بلوک جدید را در اختیار دارد. هر تغییری که در یک بلوک ایجاد شود باعث ایجاد تغییر جدیدی در بلوکهای کناری آن هم خواهد شد، و تا زمانی که اطلاعات آن بلوک با دیگر بلوکها هماهنگ نشده باشد نمیتواند به زنجیره اضافه شود در نتیجه بلاک چین به این وسیله تغییر ناپذیر شده است.
۳.زبان پایتون (Python)
پایتون زبان نسبتا مدرنی است که تازهواردان به آن بسیار علاقه دارند. این زبان توسط خیدو فان روسوم (Guido van Rossum) با هدف سادگی و خوانایی دستورات به وجود آمد. پایتون از زمان انتشارش به عنوان یک زبان ساده و در عینحال قدرتمند و همراه با یک جامعهی پشتیبانی گسترده شناخته شده است. این منجر به یکپارچه شدن پایتون با تقریبا همهی پلتفرمها از کتابخانههای واسط کاربری تحت وب نظیر فلسک (Flask) گرفته تا بستهی نرمافزاری (NumPy) در یادگیری ماشین گردید.
با اینکه نمیتوان با زبان پایتون به تنهایی یک بلاک چین جدید نوشته و یا به قابلیتهای یک بلاک چین موجود افزود، برنامهی غیرمتمرکز نوشت و یا یک ICO برگزار کرد. اما حذف این زبان از چنین لیستی اشتباه است چراکه در تقریبا تمامی بلاک چینها، یک یا چند ابزار عمومی با پایتون و یا برای این زبان وجود دارد.
۴.زبان سیمپلیسیتی (Simplicity)
سیمپلیسیتی یک زبان برنامه نویسی بلاک چین است که برای تنظیم قراردادهای هوشمند به کار میرود. این زبان برنامه نویسی بلاک چین به گفته راسل اوکانر (Russell O’Connor) سازنده این برنامه بسیار ساده است. این زبان برای بهبود زبانهای پایهای ارزهای دیجیتال مانند بیت کوین و اتریوم به کار برده میشود.
در این زبان از تجزیه و تحلیل استاتیک برای جلوگیری از هنگ کردن برنامهها هنگام آنالیز و محاسبات استفاده میشود. اوکانر و کمپانی او یعنی بلاک استریم (blockstream) امیدوار هستند که این زبان، پس از آنکه آزمایشش را کاملاً پس داد در بیت کوین مورد استفاده قرار بگیرد.
۵.زبان سالیدیتی (Solidity)
سالیدیتی یک زبان با دامنه خاص مشابه جاوا اسکریپت است که توسط تیم اتریوم برای ساخت اپلیکیشنهای غیرمتمرکز در پلتفرم اتریوم ایجاد شده است. سالیدیتی تا به امروز سازگارترین و محبوبترین زبان دامنه خاص (DSL) است که از سوی جامعهی اتریوم و صنعت بلاک چین مورد پذیرش قرار گرفته است.
هر فردی که قصد ساختن یک برای غیرمتمرکز (Dapp) و یا برگزاری یک ICO را داشته باشد، زبان سالیدیتی یکی از مستقیمترین و بهترین راههایی است که میتواند از آن استفاده کند. از آنجایی که سالیدیتی پیش از هاردفورک اتریوم توسعه یافته، اتریوم و اتریوم کلاسیک هر دو از آن پشتیبانی میکنند. تیم کاردانو نیز به تازگی پشتیبانی خود از سالیدیتی را اعلام کرده است.
سالیدیتی به مرور به زبان دامنه خاص برنامهنویسی که توسط بسیاری از بلاک چینها پشتیبانی میشود تبدیل خواهد شد. این زبان با اولویت دادن به توسعهدهنده طراحی شده و دستورات آن شباهت زیادی به جاوا اسکریپت دارد.
نتیجهگیری
بیت کوین و فناوری بلاک چین راه خود را در دگرگون کردن انتقال دادهها و داراییها ادامه خواهند داد. واضح است که این تاثیر جهانی بوده و تمامی صنایع را تحت تاثیر قرار خواهد داد. مهم نیست از کجا و از کدام زبان برنامه نویسی شروع کنید. اولین گام را برای یادگیری یکی از این زبانهای برنامه نویسی مهم در این حوزه بردارید. چون اگر بگوییم تعداد توسعهدهندگان امروزه از میزان افرادی که صنایع بدان نیاز دارند بسیار کمتر است، اغراق نکردهایم.