جواد عبدی
951215271030
دانشگاه صدرا (صدرالمتالهین)
درس مهندسی اینترنت
تکنولوژی بلاک چین
مقدمه
اگر طی ده سال گذشته پیگیر مسائل بانکداری، سرمایه گذاری و یا ارز دیجیتال (cryptocurrency)بوده باشید، احتمالا باید با اصطلاح “بلاک چین”، که یک فناوری حفظ سوابق و اسناد در بستر شبکه بیتکوین است آشنا باشید. برای آموختن بیشتر در مورد بلاکچین احتمالا باید با چنین تعریفی برخورد کرده باشید: “بلاکچین یک دفتر کل یا حساب پراکندهی غیر متمرکز همگانیست.”
بلاکچین (Blockchain) چیست؟
اگر این فناوری تا این حد پیچیده است، چرا آن را بلاکچین (در لاتین به معنای زنجیره بلوک) میخوانیم؟ در ابتداییترین سطح خود، بلاکچین به معنای واقعی کلمه فقط یک زنجیره بلوک است، اما نه در آنچه بطور مرسوم و عرف معنا میشود. وقتی میگوییم بلاک (block) و چِین (chain)، ما در حقیقت به اطلاعات دیجیتالی (یا بلوک) ذخیره شده در یک پایگاه داده همگانی (یا چِین) اشاره میکنیم.
چه چیز بلاکچین را متمایز میسازد؟
شبکه بلاکچین متصدی مرکزی ندارد و معنای واقعی یک نظام دموکرات است.
اما این جمله به چه معناست؟
از آنجایی که یک دفتر کل مشترک و تغییرناپذیر داریم، اطلاعات موجود در آن برای همگان قابل رویت است. از این رو، هرچیزی که بر اساس بلاکچین بنا شده، ماهیت شفافی دارد و هرکسی را در این مجموعه مسئول اعمال خود قرار میدهد.
سه رکن تکنولوژی بلاکچین
سه ویژگی اصلی تکنولوژی بلاکچین که موجب شده که با استقبال گسترده روبرو شود عبارتند از:
• عدم تمرکز
• شفافیت
• تغییر ناپذیری
رکن اول: عدم تمرکز
پیش از بیتکوین و بیتتورنت، ما بیشتر با خدمات و مدل های متمرکز آشنا بودیم. ساده بگوییم، شما یک نهاد متمرکز دارید که تمام داده هارا ذخیره میکند و برای بدست آوردن اطلاعات مورد نیاز، تنها میبایست با این نهاد در تعامل بود.
مثال دیگر سیتم متمرکز بانک ها هستند. آنها پول شما را نگهداری میکنند و تنها راهی که میتوان مبلغی را از آن به کسی پرداخت کرد از طریق بانک است
کلاینت سرور یا سیستمی که در آن یک سرور مرکزی مسئول فراهم کردن داده هاست مثال کاملی است از:
?
هنگامی که در گوگل به جستجو میپردازید، شما در واقع یک درخواست به سرور ارسال میکنید که سپس با اطلاعات مربوطه به شما باز میگردد. این نمونه ساده یک کلاینت سرور است.
سیستم های متمرکز برای سالها برای ما مفید واقع شدند اما در عین حال ضعف و آسیبپذیری های خود را نیز دارند.
در ابتدا، از آنجایی که آنها متمرکز هستند، تمام داده ها در یک نقطه ذخیره میشوند و این امر آنرا به هدف قابل دسترس و راحتی برای حمله احتمالی هکرها تبدیل میکند.
اگر قرار باشد سیستم متمرکز، ارتقای نرمافزاری داده شود یا به اصطلاح بروزرسانی (upgrade) شود، کل سیستم را متوقف میکند.
یا برای مثال فرض کنید آن نهاد متمرکز به هر دلیلی خاموش شده و از کار بیافتد، در اینصورت هیچکس قادر نخواهد بود به اطلاعاتی که مالک آن است دسترسی داشته باشد.
یا در بدترین حالت اگر در نظر بگیریم، چه اتفاقی میافتد اگر اطلاعات این نهاد مخدوش شود؟ در آن صورت تمام دادههای موجود در بلاکچین به خطر میافتد.
خب، چه میشود اگر ما این نهاد متمرکز را کنار بگذاریم؟
در یک سیستم غیرمتمرکز ، اطلاعات توسط یک نهاد واحد ذخیره نمی شود. در حقیقت ،همه افراد در این شبکه این اطلاعات را در اختیار دارند.
در یک شبکه غیرمتمرکز ، اگر می خواهید با دوست خود ارتباط برقرار کنید ، می توانید مستقیماً بدون حضور شخص ثالث این کار را انجام دهید. ایدئولوژی اصلی پشت بیتکوین نیز همین بود. تنها شمایید که مسئولیت پول خود را بر عهده دارید. شما می توانید بدون نیاز به مراجعه به بانک پول خود را به هر کس که می خواهید ارسال کنید.
رکن دوم: شفافیت
یکی از جذاب ترین مفاهیم در بلاکچین که غالبا از آن سوء برداشت میشود مفهوم “شفافیت” است. برخی می گویند که بلاکچین به ما حریم خصوصی می دهد در حالی که برخی دیگر معتقد هستند که بلاکچین کاملا شفاف است. چرا فکر می کنید این اتفاق می افتد؟
هویت شخص از طریق رمزنگاریهای پیچیده پنهان می شود و فقط توسط آدرس عمومیشان ( public address ) نشان داده می شود. بنابراین اگر شما دنبال تاریخچه تراکنش فردی بگردید بجای داشتن نام و تعداد بیتکوین (به عنوان مثال آقای صلح جو ۱ بیتکوین (BTC) ارسال کرد)، چنین چیزی خواهید داشت:
“1MF1bhsFLkBzzz9vpFYEmvwT2TbyCt7NZJ sent 1 BTC”
همانطور که مشاهده کردید مشخصات هویتی شخصی که بیتکوین ارسال کرده رمزگذاری شده و محفوظ میماند.
بنابراین ، در حالی که هویت واقعی فرد محفوظ میباشد، اما هنوز هم میتوان تمام تراکنشهایی را که توسط آدرس عمومی آنها انجام شده است مشاهده کرد. این سطح از شفافیت قبلاً هرگز در یک سیستم مالی وجود نداشته است.
اگر از منظر ارز دیجیتالی (cryptocurrency) بنگریم، چنانچه آدرس عمومی یکی از این شرکت های بزرگ را بشناسید ، به سادگی میتوانید آن را در یک مرورگر کپی کرده و به تمام تراکنش هایی که انجام داده اند دسترسی داشته باشید و این قضیه بالاجبار همه چیز را شفاف میکنید، چیزی که در گذشته اجباری در موردش وجود نداشته است.
گرچه باید قبول کنیم که همیشه اینطور نیست. ما میدانیم که اکثر این شرکت ها تراکنش های خود را، یا حداقل تمامی تراکنش های خود را با استفاده از ارز دیجیتالی انجام نمیدهند. اکنون تصور کنید چه میشد اگر بلاکچین برای مثال با زنجیره تامین آنها ادغام میشد؟
حال میشود دید که چرا چیزی شبیه به این می تواند برای صنعت مالی بسیار مفید باشد.
رکن سوم: تغییر ناپذیری
در بلاکچین تغییر ناپذیری به این معنا است که به محض ورود چیزی به زنجیره بلوک، نمی توان آن را دستکاری کرد.
می توانید تصور کنید که این موضوع چقدر میتواند برای موسسات مالی ارزشمند باشد.
تصور کنید اگر مردم بدانند که دیگر قادر نیستند تا به اسناد و مدارک و حساب های شرکتها دست ببرند، از چند مورد اختلاس میتوان جلوگیری کرد! و دلیل این موضوع همان قابلیت هَش رمزنگاری شده است.
به زبان ساده تر، هَشینگ (hashing) به معنای گرفتن ورودی با سایزهای متفاوت و تولید خروجی با یک اندازه ثابت میباشد.
حال بیایید ببینیم فرایند هَشینگ چگونه کار می کند. کاری که انجام میدهیم این است که یک سری ورودی های خاصی را وارد مکنیم. برای مثال قصد داریم از ( SHA-256 ) که معادل الگوریتم ایمن هشینگ 256 است استفاده کنیم.
?
همانطور که در الگوریتم SHA-256 مشاهده می کنید، مهم نیست ورودی شما چقدر بزرگ یا کوچک باشد، خروجی ما همیشه دارای طول ثابت 256بیت میباشد.
زمانی که شما با حجم وسیعی از دادهها و تراکنش ها سروکار دارید، این قضیه تبدیل به امری حیاتی میشود. بنابراین در اصل بجای حفظ دادهی ورودی ما میتوانیم هَش را مورد بررسی قرار دهیم.
یک تابع هش شده به کلاس ویژهای از توابع هش گفته میشود که دارای ویژگیهای مختلفی است که آن را برای رمزنگاری ایده آل می کند.
برای اینکه بگوییم که یک تابع هَش از نظر امنیتی مطمئن است باید یک سری ویژگیهایی را دارا باشد که یک ویژگی مهم آن به نام “اثر بهمنی” (Avalanche Effect) است ، حال این اثر بهمنی به چه معناست؟
اگر ما تغییر ناچیز در ورودی ایجاد کنیم، تغییراتی که در هَش منعکس میشوند گسترده خواهند بود.
بیاییم توسط SHA-256 آنرا امتحان کنیم:
?
مشاهده کردید؟ با اینکه حرف اول را فقط از حرف بزرگ لاتین به حرف کوچک تغییر دادیم اما میبینیم که تغییری که در هَش خروجی رخ داده به مراتب گسترده و وسیع است.
اکنون بیایم تا به مقوله قبلیمان که در مورد معماری یا ساختار بلاکچین بود بپردازیم.
چیزی که گفتیم چنین بود:
بلاکچین دارای لیستی مرتبط شامل داده و یک نشانگر هَش است که به بلوک قبلی اشاره دارد، و بدینصورت است که ما یک زنجیره واحد داریم. نشانگر هَش به چه معناست؟ نشانگر هَش نشانگریست که علاوه بر دارا بودن آدرس بلوک قبلی، هَش داده درون بلوک قبلی را نیز دارا میباشد. همین تفاوت ساده بلاک چین را امن و مطمئن میسازد.
تصور کنیم که هکری به بلوک سه حمله کرده و داده ها را تغییر میدهد. بخاطر ویژگیای که توابع هَش دارند، تغییر کوچکی در داده ها هَش را به کلی دگرگون میسازد. این بدین معناست که تغییر ناچیزی در بلوک سه، هَش های ذخیره شده در بلوک دو را تغییر میدهند که خود باعث تغییر در بلوک یک و… میشود و این امر به کلی زنجیره را تغییر میدهد که امری غیر ممکن است. این همان ویژگی است که بلاک چین ها را تغییر ناپذیر میکند.
شبکه های نوین :
متمرکز: سیستم های متمرکز یک قدرت مرکزی دارند که صحت امر را برای مخاطبان شبکه مشخص میکند.
فقط کاربران ممتاز و یا نهاد ها میتوانند در تاریخچه تراکنش ها دخل و تصرف داشته باشند یا تراکنش جدیدی را تایید کنند
?
غیر متمرکز: سیستم های غیر متمرکز هیچ قدرت مرکزی ای برای تایین صحت امر برای مخاطبان شبکه ندارند.
همه کاربران در شبکه میتوانند به تاریخچه تراکنش ها دسترسی داشته باشند یا تراکنش جدیدی راتایید کنند
?
عناصر تشکیل دهنده بلوک ها:
“بلوکها” در بلاکچین متشکلاند از تکههای دیجیتالی حاوی اطلاعات
?
آنها بطور مشخص دارای سه بخش هستند:
• بلوکها اطلاعات مربوط به تراکنشها نظیر تاریخ، زمان و مبلغ دلار(ریال) آخرین خرید شما از دیجی کالا را ذخیره میکنند. (توجه داشته باشید که دیجی کالا در اینجا صرفا جهت مثال بکار رفته و سایت خرده فروشی دیجی کالا حین نگارش این مقاله با قائدهی بلاکچین عمل نمی کند).
• بلوک ها اطلاعات مربوط به شخصی که در تراکنش شرکت میکند را ذخیره میکند. بلوکی برای خریدتان از دیجی کالا در نظر گرفته میشود که نام شما را بهمراه digikala.com,Inc ثبت میکند. بجای استفاده از نام حقیقی شما، خرید شما بدون هرگونه اطلاعات هویتی و با استفاده از یک امضای دیجیتالی منحصر به فرد ثبت میشود، چیزی شبیه به یک نام کاربری.
• بلوکها اطلاعاتی را که آنها را از دیگر بلوک ها متمایز میکند ذخیره میکنند. همانطور که ما اسم هایی داریم تا ما را از یکدیگر متمایز سازند، هر بلوک کد منحصر به فردی را که هَش (hash) نامیده میشود ذخیره میکند تا با استفاده از آن بتوانیم هر بلوک را از دیگری متمایز سازیم.
حال آنکه بلوکی که در بالا مثال زدیم اطلاعات تنها یک خرید از دیجی کالا را ذخیره میکند، اما آنچه که در واقعیت اتفاق میافتد کمی متفاوت است. تنها یک بلوک در بلاکچین بیتکوین در حقیقت میتواند تا سقف ۱مگابایت داده را ذخیره کند. بسته به سایز تراکنشها، یک بلوک به تنهایی میتواند تا چند هزار تراکنش را زیر یک سقف جای دهد.
بلاکچین چگونه کار میکند؟
وقتی یک بلوک دادهی جدیدی را ذخیره میکند، آن داده به زنجیره بلوک اضافه میشود. بلاکچین، همانطور که از نامش پیداست، متشکل از چند بلوک است که بصورت رشتهای بهم متصل می باشند. برای اینکه یک بلوک به زنجیره بلوک اضافه شود، به چهار چیز نیاز داریم:
•تراکنشی می بایست انجام شود.
بیاییم با همان مثال خرید دیجی کالا پیش برویم. بعد از اینکه بصورت شتابزده از رسید های پرداخت گذشتید، خریدتان را نهایی میکنید. همانطور که در بالا به آن پرداختیم، در بسیاری از موارد یک بلوک بطور بالقوه هزاران تراکنش را بصورت گروهی در میآورد، از این رو خرید شما بصورت پکیج همراه با اطلاعات تراکنش کاربر های دیگر در می آید.
•تراکنش می بایست تایید شود.
پس از انجام خرید، تراکنش شما باید مورد تایید قرار گیرد. در سایر اطلاعات اسناد یا پرونده های عمومی مانند کمیسیون بورس اوراق بهادار، ویکیپدیا، یا حتی کتابخانه محلی شما، شخصی مسئول وارسی اطلاعات جدید وارد شده میباشد. اما در بلاکچین این امر بر عهدهی شبکه ای از کامپیوتر هاست. وقتی شما خریدی از دیجی کالا انجام میدهید، آن شبکه کامپیوتری بسرعت بررسی میکند که آیا تراکنش به درستی انجام گرفته است یا خیر. به عبارت دیگر، آنها اطلاعات خرید را به همراه زمان تراکنش، مبلغ ریال(دلار) و خریدار تطبیق میدهند.(در ادامه به اینکه چگونه اینکار صورت میپذیرد خواهیم پرداخت.)
•تراکنش می بایست در یک بلوک ذخیره شود.
بعد اینکه تراکنش شما بعنوان یک تراکنش صحیح مورد تایید قرار گرفت، یک چراغ سبز دریافت میکند. مبلغ ریال(دلار) تراکنش، امضای دیجیتالی شما و امضای دیجیتالی خود دیجی کالا همه و همه در یک بلاک ذخیره میشود. آنجاست که تراکنش شما به صدها یا هزاران تراکنش دیگر شبیه به خود ملحق میشود.
•یک هَش باید به بلوک تعلق بگیرد.
تا زمانی که تمامی تراکنش های بلوک ها تایید شد، یک کد دارای شناسه منحصر بفرد (هَش)به آن تعلق میگیرد. به بلوک همچنین هَش آخرین بلوک اضافه شده به بلاکچین داده میشود. وقتی که تراکنش به اصطلاح هَش شد، آنوقت آن بلوک میتواند به بلاکچین یا زنجیره بلوک اضافه شود.
وقتی بلوک جدید به زنجیره بلوک اضافه شد، در دسترس عموم قرار میگیرد و برای همه، حتی شما، قابل مشاهده میشود. وقتی شما به زنجیره بلوک بیتکوین نگاه میکنید، میبینید که به داده تراکنش، اطلاعات مربوط به زمان، مکان و شخصی توسط آن بلوک به زنجیره اضافه شده دسترسی دارید.
برخی از کاربردهای بلاکچین در صنایع مختلف
نظرسنجی
با بلاکچین میتوان یک سیستم نظرسنجی پیاده کرد. ولی مهمترین و اصلیترین تفاوت در نظرسنجی بلاکچینی با نظرسنجیهای رایج، در «معتبر بودن دادههای» آن است زیرا در بلاکچین قابلیت تغییر و دستکاری دادهها وجود ندارد و مثلاً اگر ۷۰ درصد مردم بگویند گزینه یک بهتر از دو است، هیچکس نمی تواند این ۷۰ درصد را به ۶۹ درصد تبدیل کند. این در حالی است که در سیستمهای معمولی نظرسنجی، امکان تقلب وجود دارد! اعتبارسنجی و جلوگیری از تقلب در انتخابات الکترونیکی که به وسیله بلاکچین صورت میگیرد هم به جای خود قابل تامل است.
ارزهای دیجیتال
رشد ناگهانی بیتکوین و بازار ارزهای دیجیتال بیدلیل و بدون شایستگی نبوده است. این ارزها انتقال سریع، امن و ارزان مبالغ را در سراسر جهان ممکن میسازند. درحالی که سرویسهای مالی مختلفی مثل PayPal که تراکنشهای بینالمللی را انجام میدهد، وجود دارد، اما آنها درخواست کارمزدهای زیادی را در ازای هر تراکنش میکنند. دیگر روشهای پرداخت نقطه به نقطه نیز معمولا محدودیتهای خاصی دارند. مثل محدودیتهای مکانی و حداقل مقدار انتقالی. به همین دلیل است که کسب و کارها مانند کاربران عادی در حال گرویدن به استفاده از ارزهای دیجیتالی هستند. نه فقط به دلیل امنتر بودن آنها، بلکه به دلیل ایجاد آزادی و نبود قدرت مرکزی در کنترل حسابها.
بانکدری و پرداخت
اصلی ترین تاثیر بلاک چین بر روی صنعت مالی و فعالیت بانکداری است. میتوان گفت کاری که اینترنت با رسانهها کرد را بلاکچین با بانکها و موسسات مالی خواهد کرد. بلاک چین نقطه عطفی است از حرکت بانکداری سنتی به سمت بانکداری کاملا مدرن. افتتاح آسان حساب بانکی در دور افتادهترین مناطق جهان توسط بلاکچین به آسانی انجام خواهد شد. شفافیت های مالی بسیار بیشتر شده و هزینهها به شدت کاهش پیدا خواهد کرد. در آینده شعبه بانکی به صورتی که الان شاهد هستیم وجود خارجی نخواهد داشت!
بانک ها جریان عظیم انتقال پول را کنترل میکنند و از این راه سود هنگفتی هم به جیب می زنند. بنابراین وقتی بلاکچین و رمزارزها وارد ماجرا می شوند، حاشیه امنیت بانکها به خطر می افتد. می دانیم که بلاکچین چه ضرری به آن ها وارد می سازد. تپسکات میگوید سیستمهای پرداخت امروز به شکل بی اهمیتی پیچیده و کند هستند. در آینده تنها اطلاعات لازم برای تراکنش های وابسته به بلاکچین آن است که آیا خریدار به اندازه کافی پول دارد یا نه. برای رهن و گرو گرفتن، کاربر باید اطلاعات مربوط به درآمد، دارایی ها و تاریخچه تراکنش های مالی را هم داشته باشد. بانک ها احتمالا از بین نمی روند اما باید شیوه کارکرد خود را از انتقال پول به کارهای موثرتری تغییر دهند.
ذخیرهسازی داده
در حال حاضر شما برای ذخیرهسازی فایلهای خود از Dropbox یا Gdrive استفاده میکنید. مشکل اصلی استفاده از این سرویسدهندهها این است که شما باید به آنها اعتماد کنید. دولتها میتوانند آنها را مجبور کنند، اطلاعات شما را افشا کنند. اما با استفاده از تکنولوژی بلاکچین اطلاعات شما در رایانههای مختلف موجود در شبکه با رمزگذاری منحصر به فرد ذخیره میشود. همین امر باعث کاهش هزینهها خواهد شد. حتی اگر شما فضای اضافی در رایانهی خود دارید، میتوانید این فضا را اجاره دهید. Storj مثال خوبی از این موضوع است
.
بهترین زبان برای برنامهنویسی بلاک چین چیست؟
پاسخ این است که زبان یکتایی وجود نداشته و بر اساس اینکه چه پروژهای میخواهید انجام دهید کاملا متغیر است. زبانهای برنامهنویسی متعددی برای اینکار وجود دارد.
ممکن است توسعهدهندهای زبان C# را برای کار خود انتخاب کند درحالیکه توسعهدهندهی دیگری اسکریپتهای پایتون و یا جاوا اسکریپت همیشه محبوب را ترجیح دهد. میبینید کاملا بستگی به هدف شما دارد.
به طور کلی برنامهنویسی بلاکچین چهار حوزهی زیر را پوشش میدهد:
راهاندازی یک ICO
ساخت یک قرارداد هوشمند و یا برنامه غیرمتمرکز (Dapp)
ارتقاء یک بلاک چین موجود و یا ایجاد یک بلاک چین جدید
ساخت یک دفتر کل غیرمتمرکز نظیر هایپرلجر فابریک (fabric)
معیارهای انتخاب زبان
امنیت (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)
این زبان نخستین بار در سال 1985 توسط بیارنه استراستروپ به عنوان افزونهی زبان برنامهنویسی C به وجود آمد. ایدهی استراستروپ این بود که انعطافپذیری (flexibility)، امنیت (security) و کارایی (efficiency) زبان C را حفظ کرده اما به شیءگرایی آن بیفزاید. از همین رو زبان برنامهنویسی C به عنوان یک زبان برنامهنویسی ساخت یافته و ++C یک زبان شیءگرا تلقی میشود.
++C زبان برنامهنویسی قدرتمند، قدیمی و چندمنظورهای است که استفاده از آن برای برنامهنویسی هستهی بلاک چین بسیار متداول است. با این وجود به توسعهدهندگان تازه وارد هشدار داده میشود که یادگیری این زبان نسبت به همتایانش به علت وابستگی زیاد به نوع متغیر و دستورات قدیمیاش سخت است. با این وجود اگر سختی این راه را تحمل کرده و این زبان را به خوبی یاد بگیرید، درک عمیقی به شما خواهد داد که هیچ زبان دیگری قادر به ایجاد آن نیست.
در هر صورت دنیای بلاک چین به زبان ++C وابسته بوده و خبر خوش آنکه منابع بسیاری برای یادگیری این زبان در اختیار شما قرار دارد .
جاوا اسکریپت (Javascript)
جاوا اسکریپت یک زبان برنامهنویسی با وابستگی کم به نوع برای وب بوده و تمامی مرورگرها از آن پشتیبانی میکنند.
جاوا اسکریپت اولین زبانی بود که برای بهبود صفحات ایستای HTML، CSS و ایجاد واسطهای کاربری تکامل یافته به وجود آمد. تعدادی از این واسطهای کاربری شامل انیمیشنها، منوهای کاربران، کادرهای گفتگو و نقشههای تعاملی هستند.
جاوا اسکریپت رفتارهای صفحات وب در مرورگرهای مدرن را پیشرفتهتر ساخته است. تصور نمیشد روزی جاوا اسکریپت لایهی نمایش (presentation layer) وب را ترک کند اما این اتفاق با روی کار آمدن Node JS که آن را به سمت سرور برد و فریمورک انگولار (Angular) و یا سکوی کاربردی تحت وب، کتابخانهی متنباز ری اکت (React) و چارچوب متنباز ویو (Vue)، این اتفاق افتاده و پشتهی HTML/CSS سمت کاربر از نو نوشته شد و جاوا اسکریپت فول استک (هم سمت سرور و هم سمت کاربر) قدرتمندتر از قبل روی کار آمد.
جاوا اسکریپت برای تازه واردان زبانی نسبتا آسان بوده و در حال تکامل است و همچنین در تمامی بخشهای وب مدرن خود را ثابت کرده است.
پروژهی مبتنی بر بلاک چین لیسک (Lisk)، پروژهی بلاک چینی است که جلودار استفاده از جاوا اسکریپت است. صفحهی فرود (landing page) آنها اعتقادشان در خصوص اینکه میتوان با جاوا اسکریپت اکوسیستم کاملی یک بلاک چین را پیادهسازی کرد را بازگو میکند. لیسک به توسعهدهندگان امکان ساخت و استقرار برنامههای مبتنی بر بلاک چین با زبان جاوا اسکریپت را میدهد.
جاوا (Java)
جاوا زبان دیگری است که دانشمندان کامپیوتر و برنامهنویسان برای توسعهی مهارتهای برنامهنویسیشان از آن استفاده میکنند. جاوا شاهکلید صفحات وب HTML/Css است که وب جهان گستر را شکل میدهند. شاید همین مساله آن را به یک گزینهی هوشمندانه برای سازگاری با وبسایتهای سنتی و فناوری وب 3 بلاک چین تبدیل کرده است.
زبان جاوا برای ساخت بلاک چینهایی که بر خاصیت محرمانگی تمرکز دارند، مناسب است. غیرقابل تغییر (immutability) بودن فاکتور مهمی برای جلوگیری از هک و تقلب است.
پایتون (Python)
پایتون زبان نسبتا مدرنی است که تازهواردان به آن بسیار علاقه دارند. این زبان توسط خیدو فان روسوم (Guido van Rossum) با هدف سادگی و خوانایی دستورات به وجود آمد. پایتون از زمان انتشارش به عنوان یک زبان ساده و در عینحال قدرتمند و همراه با یک جامعهی پشتیبانی گسترده شناخته شده است. این منجر به یکپارچه شدن پایتون با تقریبا همهی پلتفرمها از کتابخانههای واسط کاربری تحت وب نظیر فلسک (Flask) گرفته تا بستهی نرمافزاری (NumPy) در یادگیری ماشین گردید.
با اینکه نمیتوان با زبان پایتون به تنهایی یک بلاک چین جدید نوشته و یا به قابلیتهای یک بلاک چین موجود افزود، برنامهی غیرمتمرکز نوشت و یا یک ICO برگزار کرد. اما حذف این زبان از چنین لیستی اشتباه است چراکه در تقریبا تمامی بلاک چینها، یک یا چند ابزار عمومی با پایتون و یا برای این زبان وجود دارد.
گو (Go)
زبان Go که فرم اختصاری واژهی Golang است، یک زبان برنامهنویسی عمومی نسبتا جدید است که در سال 2007 در گوگل توسعه یافته و برای کاربرد عموم در سال 2012 رونمایی شد. زبان Go ، یک زبان قوی و چندمنظوره است که با هدف ترکیب سادگی و کاربر پسند بودن زبانهای مدرنی مانند پایتون و جاوا اسکریپت، و کارایی و امنیت زبانهای قدیمیتری نظیر C توسعه یافت.
زبان Go یک زبان مفسری است و این بدین معنی است که میتواند به صورت مستقیم با سیستم عامل کار کند. این ویژگی انعطافپذیری بالایی را به هنگام استفاده از این زبان در بخشهای مختلف توسعهی یک پروژهی مبتنی بر بلاک چین میدهد. اگر قصد تغییر یک بلاک چین موجود را داشته باشید، اتریوم SDK پروتکلی دارد که به زبان Go نوشته شده است. اگر قصد نوشتن یک قرارداد هوشمند را نیز داشته باشید، بنیاد لینوکس پروژهی هایپرلجر فابریک را با زبان Go توسعه داده است.
سالیدیتی (Solidity)
سالیدیتی یک زبان با دامنه خاص مشابه جاوا اسکریپت است که توسط تیم اتریوم برای ساخت اپلیکیشنهای غیرمتمرکز در پلتفرم اتریوم ایجاد شده است. سالیدیتی تا به امروز سازگارترین و محبوبترین زبان دامنه خاص (DSL) است که از سوی جامعهی اتریوم و صنعت بلاک چین مورد پذیرش قرار گرفته است.
هر فردی که قصد ساختن یک برای غیرمتمرکز (Dapp) و یا برگزاری یک ICO را داشته باشد، زبان سالیدیتی یکی از مستقیمترین و بهترین راههایی است که میتواند از آن استفاده کند. از آنجایی که سالیدیتی پیش از هاردفورک اتریوم توسعه یافته، اتریوم و اتریوم کلاسیک هر دو از آن پشتیبانی میکنند. تیم کاردانو نیز به تازگی پشتیبانی خود از سالیدیتی را اعلام کرده است.
سالیدیتی به مرور به زبان دامنه خاص برنامهنویسی که توسط بسیاری از بلاک چینها پشتیبانی میشود تبدیل خواهد شد. این زبان با اولویت دادن به توسعهدهنده طراحی شده و دستورات آن شباهت زیادی به جاوا اسکریپت دارد.
سیمپیلیسیتی (Simplicity)
سیمپیلیسیتی یک زبان بسیار جدید برای برنامهنویسی بلاک چین است که توسط راسل اوکونر (Russell O’Connor) به وجود آمده و در نوامبر 2017 به بهرهبرداری رسید. این زبان نسبتا سطح بالا بوده و با هدف کاهش پیچیدگیهای اسکریپت بیت کوین به وجود آمده است. این زبان به عنوان یکی از بهترین زبانهای برنامهنویسی بلاک چین است که برای نوشتن قراردادهای هوشمند توسط توسعهدهندگان مبتدی و پیشرفته کاربرد دارد. سیمپیلیسیتی بهرهوری توسعهدهندگان را افزایش داده و سرعت توسعه را نیز بسیار بالا میبرد.
نتیجهگیری
بیت کوین و فناوری بلاک چین راه خود را در دگرگون کردن انتقال دادهها و داراییها ادامه خواهند داد. واضح است که این تاثیر جهانی بوده و تمامی صنایع را تحت تاثیر قرار خواهد داد. مهم نیست از کجا شروع کنید. اولین گام را برای یادگیری یکی از این زبانها بردارید. اگر بگوییم تعداد توسعهدهندگان امروزه از میزان افرادی که صنایع بدان نیاز دارند بسیار کمتر است، اغراق نکردهایم. پس فرصت را غنیمت شمرده و اگر به این حوزه علاقه دارید هر چه سریعتر به آن بپردازید تنها کافی است از خودتان بپرسید قصد انجام چه نوع پروژهای را داشته و چه مشکلی را میخواهید برطرف سازید.