ارزهای رمزنگاری شده فین‌تک

مشکل مقیاس‌پذیری بلاکچین / راهکارهای موجود برای حل این مشکل پیچیده

نوشته شده توسط حمید خارزی

من (Preethi Kasireddy) در حال معماری و پیاده‌سازی یک پروتکل جدید در اتریوم (Ethereum) بوده‌ام و شخصاً با مشکل مقیاس‌پذیری (scale) بلاکچین برای آینده رودررو شده‌ام و مجذوب حجم عظیم تحقیقات، مباحثات و از همه مهم‌تر، آزمایش‌های انجام‌گرفته پیرامون حل این مشکل هستم. در ادامه مطلب تعدادی راه‌حل‌ پیشنهادشده برای حل مشکل مقیاس‌پذیری بلاکچین و نقاط قوت و ضعف بخصوص هریک را شرح خواهم داد.

بلاک‌چین مقیاس‌پذیر نیست؛ اما امیدهایی هست!

ده سال پیش اولین مقاله بیت‌کوین منتشر شد و از آن روز شور و اشتیاق من در‌باره‌اش هرروز زیادتر شده است. روزی را به یاد می‌آورم که ارز رمزنگاری‌شده غیرمتمرکز یک هدف دست‌نیافتنی به نظر می‌رسید، ولی اکنون بالاخره در حال رایج شدن است. من مشتاقم که یک روز بالفعل شدن کاربردهای غیرمتمرکز آن را در عرصه مبادلات مالی، پیش‌بینی بازار و مدیریت دارایی مشاهده کنم.

بنیان این مهم بر بی‌نیاز بودن سامانه از اعتمادسازی استوار بوده (trustless systems) که بررسی‌اش از جذابیت بالایی برخوردار است؛ سامانه‌های احراز هویت، دارایی هوشمند (smart property)، مقابله با سانسور، بنیان‌های اجتماعی، ساختار خودکار و مدل‌های کنترل مانند سازمان نامتمرکز خودگردان (DAO) و… که جسورترین کاربردها هنوز به فکر کسی خطور نکرده است.

بااینکه عده‌ای از کارآفرینان و علاقه‌مندان پیشرو مشغول تلاش برای رسیدن به این رؤیا هستند اما ممکن است این فکرها هیچ‌وقت به واقعیت تبدیل نشود و قطعه گم‌شده پازل همان مشکل مقیاس‌پذیری بلاکچین است. بلا‌کچینی که امروز در اختیار ما است ازنظر مقیاس‌پذیری بسیار محدود است.

نمی‌خواهم بگویم که همه‌چیز این‌گونه خواهد ماند، اما واقعیت تلخ امروز ما این است که مانع اصلی در برابرمان همین مشکل مقیاس‌پذیری بلاکچین است که به عرصه فعال تحقیق در میان محققین ارزهای رمزنگاری‌شده تبدیل‌شده است.

 چرا مشکل مقیاس‌پذیری بلاکچین وجود دارد؟

تمام پروتکل‌های اجماع در بلاکچین (مانند بیت‌کوین (Bitcoin)، اتریوم، ریپل (Ripple) و تندرمینت (Tendermint)) در حال حاضر یک محدودیت چالش‌برانگیز دارند: هر گرهی که به‌طور کامل در شبکه مشارکت می‌کند باید تمام تراکنش‌ها را پردازش کند و این ناشی از مشخصه ذاتی غیرمتمرکز بودن بلاکچین است.

بااین‌که مکانیسم اجماع غیرمتمرکز دارای مزیت‌های کلیدی مانند تحمل خطا (fault tolerance)، بی‌طرفی سیاسی، امنیت زیاد و صحت بالا است، همه‌ی این‌ها به قیمت از دست رفتن مقیاس‌پذیری تمام می‌شود. تعداد تراکنش‌هایی که بلاکچین می‌تواند پردازش کند، هیچ‌وقت نمی‌تواند از تعداد تراکنش‌هایی که یک گره در شبکه قادر به انجام است فراتر رود. درواقع با افزایش تعداد گره‌های یک شبکه، به علت افزایش تأخیر بین گره‌ها (inter-node latency)، بلاکچین ضعیف‌تر می‌شود.

برای رسیدگی به تعداد بیشتری از تراکنش‌ها در سامانه‌های پایگاه داده سنتی، افزایش تعداد رایانه‌های سرور راه‌حل رایج برای ارتقای مقیاس‌پذیری است. در جهان بلاکچین غیرمتمرکز که هر گره باید تک‌تک تراکنش‌ها را پردازش و تائید کند، برای ارتقای سرعت شبکه باید تعداد رایانه‌ها در هر گره افزایش یابد. نداشتن کنترل روی تمام گره‌های عمومی ما را در بن‌بست قرار می‌دهد.

درنتیجه، در بلاکچین غیرمتمرکز یک پروتکل اجماع عمومی مجبور است بین بازده بالای تراکنش‌ها و سطح بالایی از غیرمتمرکز بودن یکی را انتخاب کنند.

به‌بیان‌دیگر با افزایش اندازه بلاکچین، نیاز شبکه به فضای ذخیره‌سازی، پهنای باند و قدرت پردازشی افزایش می‌یابد. زمانی خواهد رسید که بلاکچین چنان حجیم خواهد شد که تنها راه‌حل برای ادامه پردازش‌ها انجام آن در چند گره بخصوص در شبکه است و این یعنی وجود یک مرکزیت و از دست رفتن ویژگی غیرمتمرکز بودن بلاکچین.

چرا حل مشکل مقیاس‌پذیری بلاکچین دشوار است؟

بلاکچین باید به مکانیسمی دست پیدا کند که ضمن کاهش تعداد گره‌های لازم برای تائید تراکنش‌ها، اعتماد شبکه را به صحت تراکنش‌ها هم حفظ نماید. این امر ممکن است در ظاهر ساده به نظر آید اما ازنظر فنی بسیار سخت است.

  • اولاً با سلب اجازه از تمام گره‌ها برای تأیید صحت هر تراکنش‌، نیاز خواهیم داشت گره‌ها روش‌هایی آماری و اقتصادی برای حصول اطمینان از امنیت سایر بلاک‌ها در دست داشته باشند.
  • ثانیاً روشی برای تضمین در دسترس بودن داده‌ها نیاز خواهیم داشت. به‌بیان‌دیگر، حتی اگر در گرهی که توانایی تأیید مستقیم امنیت داده‌های بلوک را ندارند، امنیت به روشی محرز شده‌ باشد، اگر به هر علتی، اعم از قطع برق یا حمله هکرها در یک گره، این داده‌ها در دسترس نباشند، وضعیتی پیش می‌آید که هیچ تأییدکننده دیگری در شبکه نیز نخواهد توانست تراکنش را تأیید کرده یا بلوک جدیدی ایجاد کنند و درنتیجه شبکه در حالت کنونی گیر خواهد کرد.
  • ثالثاً، برای حصول مقیاس‌پذیری تراکنش‌ها باید توسط گره‌های مختلف به‌طور موازی پردازش شوند؛ با این‌ وجود، اجزای متعددی در فرایند تغییر حالت در بلاکچین هستند که قابلیت اجرای موازی را ندارند. حفظ تعادل میان کارایی و موازی‌سازی ما را با محدودیت‌هایی در چگونگی تغییر حالت بلاکچین مواجه می‌کنند.

اعداد چه می‌گویند

مشکل مقیاس‌پذیری بلاکچین در چه‌ حد مشکل امروز ما است؟ حداکثر ظرفیت پردازش تراکنش‌ها در یک گره اتریوم به‌صورت نظری بیش از ۱۰۰۰ تراکنش در ثانیه است. متأسفانه بازده واقعی به این اندازه نیست و علت این امر محدودیت حد سوخت (gas limit) اتریوم است که اکنون چیزی حدود ۶٫۷ میلیون سوخت برای هر بلوک است.

حد سوخت اتریوم

در اترویم سوخت مقیاسی برای اندازه‌گیری تلاش پردازشی است و برای هر عملیاتی میزان مشخصی سوخت اختصاص می‌یابد. برای مثال اطلاع از موجودی حساب ۴۰۰ سوخت، ایجاد یک قرارداد ۳۲۰۰۰ سوخت و ارسال یک تراکنش ۲۱٬۰۰۰ سوخت پردازش نیاز دارد.

تراکنش‌ها جایی برای درج حداکثر میزان سوختی که ارسال‌کننده حاضر به خرید آن است هم دارند. بنابراین، حد سوخت برای هر بلوک مشخص می‌کند چه تعداد تراکنش با حد سوخت‌های متفاوت در آنجا می‌شوند.

حد سوخت اتریوم را می‌توان معادل محدودیت ۱ مگابایتی بیت‌کوین برای حجم هر بلوک گرفت و تفاوت آن‌ها هم این است که حد سوخت در اتریوم به‌صورت پویا (dynamic) توسط استخراج‌گر (miners) تعین می‌شود درحالی‌که حجم بلوک در بیت‌کوین ثابت بوده و در پروتکل ثبت گردیده است.

حد سوخت یک محدودیت نرم در شبکه برای اختصاص توان پردازشی برای هر بلوک تعیین می‌کند. با احتساب حد سوخت ۶٫۷ میلیونی و فرض به‌طور متوسط ۲۱٬۰۰۰ سوخت مصرف‌شده برای یک تراکنش استاندارد به رقم ۳۰۰ تراکنش برای هر بلوک می‌رسیم. زمان متوسط هر بلوک در حال حاضر ۲۰ ثانیه است که ما را به عدد ۱۵ تراکنش در ثانیه می‌رساند. در تراکنش‌های پیچیده‌تر که تا ۵۰٬۰۰۰ سوخت مصرف شود، این رقم به ۷ تراکنش در ثانیه کاهش می‌یابد.

حد سوخت اتریوم

تعداد تراکنش‌ها روی شبکه اتریوم با سرعت قابل‌ملاحظه‌ای در حال افزایش است (رشد تقریبی ۵۰۰% در سال). ماه گذشته تعداد تراکنش‌های روزانه به ۴۴۰٬۰۰۰ عدد هم رسید و این یعنی چیزی حدود ۵ تراکنش در ثانیه!

به‌طور مشابه بیت‌کوین روی کاغذ محدودیت ۴۰۰۰ تراکنش در ثانیه و درواقع محدودیت سخت حدود ۷ تراکنش معمولی و ۳ تراکنش پیچیده در ثانیه را دارد.

در نظر داشته باشید که این محدودیت‌ها برای بلاکچین‌های خصوصی به این میزان نیستند. یک بلاک‌چین خصوصی می‌تواند به بیش از ۱۰۰۰ تراکنش در ثانیه هم دست پیدا کند. وقتی بلاکچین دست خودتان است می‌توانید اطمینان حاصل کنید تمام گره‌های شبکه رایانه‌های قدرتمند با پهنای باند سریع باشند. در حال حاضر برای حل مشکل مقیاس‌پذیری بلاکچین مجبوریم به هر گره قدرت پردازشی بیشتری اضافه کنیم. در شبکه‌های خصوصی که کنترل تمام گره‌ها مقدور است، این امر امکان‌پذیر است. در یک شبکه خصوصی همچنین می‌توان قسمتی از وظایف معمول را، مانند تشخیص واقعی بودن تمام گره‌ها، از دوش بلاکچین برداشت.

راه‌حل‌ها

واقعیت امر این است که هیچ‌یک از راه‌حل‌هایی که در ادامه خواهد آمد به‌تنهایی درمان قطعی مشکل مقیاس‌پذیری بلاکچین را در برندارد و هر یک سعی در بهبود تدریجی مقیاس‌پذیری خواهد داشت؛ اما در ترکیب با یکدیگر خواهند توانست چشم‌انداز امیدبخشی برای آینده مقیاس‌پذیری بلاکچین ترسیم کنند.

لطفاً در نظر داشته‌ باشید هدف این نوشتار مطرح کردن تمام پیچیدگی‌های فنی و قضاوت در مورد شایستگی‌های تمام راه‌حل‌های پیشنهادی نیست. هدف من ارائه نمایی کلی از برخی راه‌حل‌هایی است که از آن‌ها اطلاع داشته‌ام. همچنین فرض بر این ‌بوده که خواننده اطلاعات مقدماتی در مورد کارکرد بلاکچین دارد.

مشکل مقیاس‌پذیری بلاکچین چالشی است شناخته‌شده و تحقیقات در این حوزه چندین سال است به‌صورت فعال انجام می‌پذیرد. اگر ناکامی چندین ساله بیت‌کوین را زیر نظر داشته‌اید احتمالاً راه‌حل‌ سِگویت (SegWit) و افزایش اندازه بلاک به ۲ مگابایت به گوشتان خورده است.

این راه‌حل‌ها برای حل مشکل مقیاس‌پذیری بلاکچین بیت‌کوین متأثر از محدودیت حجم بلاک مطرح شدند که تعداد تراکنش‌های قابل جایگیری در هر بلاک را محدود کرده است. به خاطر همین مشکل است که شاهد تأخیر چندساعته و حتی چندروزه پردازش و تأیید تراکنش‌ها بوده‌ایم. چنانکه شرح آن رفت اتریوم هم با محدودیت‌هایی در مقیاس‌پذیری روبرو است.

تا موفق به حل مشکل مقیاس‌پذیری بلاکچین نشویم، سرعت رشد و گستردگی کاربردهای بلاک‌چین محدود خواهد بود.

راه‌حل اول: سِگویت (مختص بیت‌کوین)

هر تراکنش بیت‌کوینی شامل موارد زیر است:

ورودی:

  • جزئیات تراکنش‌های قبلی فرستنده.
  • کلید خصوصی (private key) منحصربه‌فرد فرستنده (scriptSig) که کافی بودن موجودی فرستنده را برای انجام تراکنش تأیید می‌کند.

خروجی:

  • مبلغ فرستادن
  • آدرس عمومی فرستنده (ScriptPubKey)

از میان این عناصر، امضای دیجیتال (کلید خصوصی) ازنظر اندازه از همه بزرگ‌تر است و ۶۰% الی ۷۰% حجم تراکنش را به خود اختصاص می‎‌دهد و فقط در مرحله تأیید لازم است.

شاهد مجزا (Segregated Witness) که به‌اختصار سِگویت (Segwit) خوانده می‌شود راه‌حلی است که در آن امضای تراکنش (شاهد) از باقی اطلاعات تراکنش جدا می‌گردد. امضا از درون بخش ورودی جداشده و در پایان تراکنش انتقال می‌یابد.

شاهد مجزا (Segregated Witness) سِگویت (Segwit)

علاوه بر این در سگویت، شاهد به فیلدی جدید در داده‌های تراکنش انتقال پیدا می‌کند و ما را قادر می‌سازد روش محاسبه اندازه بلوک را تغییر دهیم و به‌جای بایت بلوک‌های تراکنش را با واحدی جدید به نام وزن اندازه‌گیری کنیم. وزن نشان‌دهنده تقاضا و باری است که بلوک بر منابع هر گره تحمیل می‌کند. به‌طور مشخص به هر بایت از شاهد مجزا ۱ واحد وزن داده می‌شود و بایت‌های مربوط به دیگر بخش‌های بلوک ۴ واحد وزن محاسبه می‌گردد. حداکثر وزن مجاز برای یک بلوک چهار میلیون واحد تعیین می‌گردد و به بلوک حاوی شاهد مجزا اجازه می‌دهد میزان بیشتری داده نسبت به قبل در خود جای دهد. در عمل این کار باعث افزایش اندازه بلوک از ۱ مگابایت به چیزی حدود ۴ مگابایت می‎‌شود و توانایی بلاک‌چین برای انجام تراکنش‌ها را ۷۰% افزایش می‌دهد.

سِگویت علاوه بر مشکل مقیاس‌پذیری بلاکچین، مشکل امنیتی «چکش‌خواری تراکنش» (transaction malleability) را هم حل کرده و باعث ارتقای امنیت هم می‌شود.

راه‌حل دوم: بلوک ۲ مگابایتی (مختص بیت‌کوین)

اگرچه کاربران بیت‌کوین حامیان پر و پا قرص سگویت هستند، در طرف دیگر استخراج‌گران یا همان ماینر‌ها طرفدار تغییر کلی پروتکل (hard fork) و افزایش اندازه بلوک از ۱ مگابایت به ۲ مگابایت هستند. ایده اصلی این است که با افزایش اندازه بلوک، تعداد بیشتری تراکنش در هر بلوک می‌تواند جای گیرد و شبکه بتواند تعداد بیشتری تراکنش در هر ثانیه انجام دهد.

بلوک ۲ مگابایتی بیت‌کوین

برنامه افزایش اندازه بلوک مدت‌ها میان جامعه بیت‌کوین محل مناظرات داغی بوده است و از آغاز سال ۲۰۱۵ با نزدیک شدن اندازه بلوک‌ها به محدودیت سخت ۱ مگابایت کنونی اقبال بیشتری پیداکرده ‌است.

راه‌حل سوم: کانال حالت در خارج زنجیره

کانال‌های حالت (State Channel) اساساً مکانیسمی هستند که به‌وسیله‌ی آن‌ها فعل‌وانفعالاتی که به‌طورمعمول روی خود بلاک‌چین صورت می‌پذیرند، به خارج بلاک‌چین انتقال می‌یابند.

این امر به‌صورت رمزنگاری‌شده و از طریقی امن انجام می‌گیرد و بی آن‌که ریسک دخالت دیگران را زیاد کند، باعث صرفه‌جویی در هزینه و افزایش سرعت می‌گردد. باور من این است که کانال‌های حالت در آینده قسمت مهمی از فناوری خواهد بود که مشکل مقیاس‌پذیری بلاکچین را حل خواهد کرد.

طرز کار یک کانال حالت بدین قرار است:

  • قسمتی از حالت بلاکچین از طریق چند امضا یا نوعی قرارداد هوشمند قفل‌شده است و تنها راه به‌روزرسانی‌اش آن است که مجموعه بخصوصی از مشارکت‌کنندگان کاملاً موافق این کار باشند.
  • مشارکت‌کنندگان با ایجاد و امضای رمزنگاری‌شده تراکنش‌ها بین خودشان به‌روزرسانی‌هایی انجام می‌دهند اما آن را برای ثبت به بلاکچین عرضه نمی‌کنند. هر به‌روزرسانی جدیدی روی قبلی نوشته می‌شود.
  • یک مدت بعد، بالاخره مشارکت‌کنندگان حالت را به بلاکچین ارسال می‌کنند و با این کار کانال حالت بسته‌شده و حالت برای بار دیگر از حالت قفل خارج می‌شود.

مراحل اول و سوم شامل عملیات بلاکچین می‌شوند که در شبکه منتشرشده، کارمزد پرداخته و منتظر تأیید می‌مانند؛ اما در مرحله دوم بلاکچین به‌هیچ‌وجه درگیر نمی‌شود. مرحله دوم می‌تواند شامل بی‌نهایت به‌روزرسانی باشد و بدون محدودیت زمانی بازبماند.

این‌گونه بلاکچین به‌صورت خالص به‌عنوان لایه توافق تسویه نهایی (settlement layer) به کار می‌رود و در آن فقط آخرین تراکنشی که در پی مجموعه‌ای از تعاملات صورت گرفته پردازش می‌شود. با این کار بار زیادی از دوش بلاکچین برداشته می‌شود.

کانال حالت در خارج زنجیره

کانال‌های حالت علاوه برافزایش ظرفیت تراکنش، دو ویژگی مثبت دیگر هم به ارمغان می‌آورند: سرعت بیشتر و کارمزد کمتر.

چون اکثر تراکنش‌ها خارج از بلاک‌چین رخ می‌دهند، در به‌روز‌رسانی بین دو نفر دیگر نیازی به‌صرف زمان برای پردازش و تأیید شبکه نیست و پرداخت‌ها می‌توانند آنی پردازش شوند. علاوه بر این با انتقال اکثر تراکنش‌ها به خارج از بلاک‌چین دیگر نیازی به پرداخت کارمزد برای همه تراکنش‌ها نخواهد بود و ثبت تعداد اندکی از تراکنش‌ها روی بلاکچین برای ثبت توافق تسویه کانال‌های حالت کافی است.

این ایده به صورت‌های متعددی پیاده‌سازی شده است. برای مثال شبکه لایتنینگ (lightning) یک شبکه غیرمتمرکز است که با استفاده از قراردادهای هوشمند (smart contracts) از کانال‌های حالت برای حل مشکل مقیاس‌پذیری بلاکچین بهره می‌برد و قادر است پرداخت‌های آنی و مقیاس‌پذیر را روی شبکه برای مشارکت‌کنندگان تأمین نماید.

شبکه لایتنینگ در ابتدا برای بیت‌کوین خلق‌شده بود اما اکنون به نظر می‌رسد اجازه انجام سایر تراکنش‌ها هم ممکن باشد.

رِیدن نتورک (raiden network) معادل لایتنینگ نتورک برای اتریوم است و از کانال‌های حالت خارج از بلاکچین برای ارتقای مقیاس‌پذیری و انجام تراکنش‌های آنی با اتریوم بهره می‌برد.

راه‌حل چهارم: بخش‌بندی

بخش‌بندی (sharding) در دنیای بلاکچین مشابه بخش‌بندی پایگاه داده در سامانه‌های نرم‌افزاری معمول است. در پایگاه داده سنتی، یک بخش (shard) درواقع یک پارتیشن افقی از داده‌ها است که روی یک نمونه (instance) مجزا از سرور پایگاه داده (database server) ذخیره‌ می‌شود. این امر باعث تقسیم بار روی سرور‌های مختلف می‌گردد.

بخش‌بندی (sharding) بلاکچین

مشابه همین کار در بخش‌بندی بلاکچین، حالت کلی بلاکچین به چندین بخش (shard) تقسیم‌شده و هر قسمتی از حالت روی گره متفاوتی از شبکه ذخیره خواهد شد.

بخش‌بندی (sharding) بلاکچین

تراکنش‌های روی شبکه بسته به این‌که روی کدام بخش تأثیر می‌گذارند به گره متفاوتی هدایت خواهند شد. هر بخش قسمت کوچکی از حالت کل بلاکچین را به‌صورت موازی پردازش می‌کند.

بخش‌بندی (sharding) بلاکچین

برای برقراری ارتباط بین بخش‌ها نیاز به یک مکانیسم‌ برای انتقال پیام است (message passing). پیاده‌سازی این مکانیسم هم به روش‌های متعددی انجام‌گرفته است. در اتریوم از پارادایم رسید (receipt) برای این‌ امر استفاده‌شده است. وقتی در یک بخش تراکنشی اجرا می‌شود و حالت بخش محلی خود را تغییر می‌دهد، هم‌زمان با این کار یک رسید هم ایجاد می‌شود. این رسید بر روی یک حافظه اشتراکی فقط خواندنی میان بخش‌ها به اشتراک گذاشته می‌شود.

بخش‌بندی (sharding) بلاکچین

در حالت کلی، برای بخش‌بندی بلاکچین نیاز به شبکه‌ای داریم که با حفظ امنیت کامل، هر گره شبکه فقط بخش کوچکی از تمام تراکنش‌ها را پردازش کند و این چالش بسیار بزرگی است.

بخش‌بندی (sharding) بلاکچین

همان‌طور که قبلاً اشاره شد، در شبکه بلاکچین فرض بر آن است که هر گرهی در شبکه به هیچ گره دیگری اعتماد ندارد و باوجوداین لازم است تراکنش‌ها بر روی حالت واحدی که در رایانه‌های دیگر پرداز شده اجماع داشته باشند. با توجه به عدم وجود اعتماد بین گره‌ها، یک گره روی بخش الف نمی‌تواند به گره‌های روی ‌بخش‌ ب صرفاً بگوید تراکنشی انجام‌گرفته؛ بلکه باید وقوع این تراکنش را به نحوی ‌اثبات نماید.

بخش‌بندی (sharding) بلاکچین

با توجه به اینکه هدف بخش‌بندی این است که نیاز نباشد هر گرهی در شبکه تمام تراکنش‌ها را تأیید کند؛ باید مکانیسمی طراحی کنیم که تعیین کند کدام گره کدام بخش را تأیید نماید. این کار باید با حفظ امنیت انجام گیرد و فرصت حمله به هکرها ندهد.

دلیل دیگری که پیاده‌سازی بخش‌بندی را دشوار می‌کند این است که یک تراکنش اجراشده روی بلاکچین می‌تواند وابسته به هر قسمتی از حالت قبلی بلاکچین وابسته باشد و این مهم انجام موازی کارها را با مشکل مواجه می‌کند. علاوه بر این، موازی‌سازی باید با روشی محفوظ از خطا چالش وضعیت رقابتی (race condition) را هم کنترل نماید.

چگونگی پیاده‌سازی بخش‌بندی روی اترویم برای حل مشکل مقیاس‌پذیری بلاکچین جزئیات فنی مفصلی دارد؛ مانند اینکه چگونه با ایجاد انگیزه کریپتو-اکونومیکی (cryptoeconomic) بازیگران از تقلب کردن و ارسال اطلاعات نادرست به دیگر گره‌ها بازداشته می‌شوند.

راه‌حل پنجم: پلاسما

پلاسما (Plasma) به‌تازگی معرفی‌شده و در میان راه‌حل‌های مشکل مقیاس‌پذیری بلاکچین جزو امیدوارکننده‌ترین‌ها است.

اساساً پلاسما یک سری از قرارداد‌ها است که مضاف بر یک بلاکچین ریشه (root blockchain) (مثل بلاکچین اصلی اتریوم) اجرا می‌شوند. بلاکچین ریشه صحت حالت زنجیره‌های پلاسما را کنترل می‌کند. این کار به‌وسیله مکانیسمی به نام گواه تقلب (fraud proofs) انجام می‌پذیرد که در آن گره‌ها با اثبات ریاضی می‌توانند نامعتبر بودن یک بلوک را مشخص کنند.

پلاسما بلاکچین

بلاکچین‌ها در یک سلسله‌مراتب درختی انتظام یافته‌اند و با هر شاخه به‌عنوان یک بلاکچین که خودش تاریخچه خودش را دارد رفتار می‌شود. ضمناً پردازش‌های هر شاخه قابلیت نگاشت کاهش پیچیدگی (map-reducable) را هم دارا هست.

این زنجیره‌های فرزند (child) را بلاکچین پلاسما می‌خوانیم که هر‌یک زنجیره‌ای درون بلاکچین هستند.

پلاسما بلاکچین

بلاکچین پلاسما محتویات خود را برای زنجیره‌ی ریشه آشکار نمی‌کند و فقط هش‌های هدر‌های بلوک (blockheader hashes) به زنجیره‌ی ریشه ارسال می‌شوند که برای تشخیص صحت بلوک کافی است. اگر روی زنجیره‌ی ریشه گواهی برای اثبات تقلب یافت شود، بلوک برمی‌گردد و فرستنده تنبیه می‌شود (به‌بیان‌دیگر حل مشکل بیزانس).

نتیجه‌ای که به دست می‌آید آن است که بلاکچین ریشه فقط میزان اندکی از تعداد بلاکچین فرزند را پردازش می‌کند که باعث کاهش ارسال داده به بلاکچین ریشه شده و انجام محاسبات به‌مراتب بزرگ‌تری را ممکن می‌سازد.

پلاسما بلاکچین

علاوه بر این، داده‌ها فقط میان کسانی انتشار می‌یابد که خواهان تأیید صحت حالتی خاص هستند. این امر مقیاس‌پذیری اجرای قراردادها (contracts) را بیشتر می‌کند؛ چون دیگر نیاز نیست تمام گره‌ها ناظر بر تمام زنجیره‌ها باشند. به‌جای این کار، گره‌ها فقط بر مواردی که ازنظر اقتصادی بر آن‌ها تأثیر می‌گذارند نظارت کرده و با تشخیص تقلب و اعمال تنبیه بر گره متقلب صحت اطلاعات را تضمین می‌نمایند.

روش گواه تقلب به هر طرفی اجازه می‌دهد بر بلوک‌های نامعتبر نظارت داشته و صحت تمام تغییرات حالت را تأیید کنند.

اگر حمله‌ای روی یک زنجیره واقع شود، مشارکت‌کنندگان می‌توانند به‌سرعت و بدون صرف هزینه قابل‌توجه همگی از زنجیره فرزند تخریب‌شده خارج شوند.

پلاسما بلاکچین

پلاسما بلاکچین

پلاسما شاید مشابه پیاده‌سازی کانال‌های حالت به نظر برسد؛ اما در پلاسما نیازی به آنلاین بودن تمام مشارکت‌کنندگان برای به‌روزرسانی حالت نیست. علاوه بر این نیازی به ارسال اطلاعات به بلاکچین ریشه جهت همکاری و تأیید تراکنش‌ها هم نیست.

پلاسما بلاکچین

با ترکیب پلاسما و کانال حالت می‌توان ترتیبی اندیشید که کانال حالت لایه رابط اصلی (interface) برای پرداخت‌های مالی با سرعت‌بالا باشد و پلاسما وظیفه اعمال به‌روزرسانی‌ها در حالت را با تحمیل حداقل بار روی زنجیره ریشه عهده‌دار شود.

راه‌حل ششم: پردازش خارج از زنجیره

تروبیت (TrueBit) مثالی از حل مشکل مقیاس‌پذیری بلاکچین با استفاده از پردازش خارج از زنجیره‌ است که مقیاس‌پذیری تراکنش‌ها میان قراردادهای هوشمند (smart contracts) در اتریوم‌ را امکان‌پذیر کرده است.

اساساً تروبیت هم مانند کانال‌های حالت از یک ‌لایه خارج بلاکچین برای کشیدن بار اصلی استفاده می‌کند. به‌بیان‌دیگر سامانه‌ای است که پردازش را به روشی قابل‌تأیید در خارج زنجیره اجرا می‌کند تا هزینه پردازش را به‌مراتب پایین‌تر آورد. طرز کار آن به شرح زیر است:

به‌جای تمام گره‌های شرکت‌کننده، تنها مشارکت‌کنندگان بخصوصی در شبکه که حل‌کننده (Solver) نامیده می‌شوند وظیفه پردازش را بر عهده می‌گیرند. این مهم به‌وسیله قراردادهای هوشمند انجام می‌گیرد که در آن راه‌حل مسئله به‌ضمیمه میزانی اعتبار (deposit) ارسال می‌شود. در صورت درست بودن راه‌حل، به حل‌کننده پاداش داده‌شده و اعتبارش بازگردانده می‌شود. در غیر این صورت زمانی که حل‌کننده تقلب کرده باشد، اعتبار ضبط می‌شود. اختلاف‌نظرها در بلاکچین توسط بازی تأیید (Verification Game) صورت می‌گیرد.

بازی تأیید این‌گونه است:

مجموعه‌ای از مشارکت‌کنندگان به نام تأییدکننده (Verifier) در شبکه وجود دارند که صحت کار حل‌کننده‌ها را در خارج بلاکچین چک می‌کنند. اگر هیچ تأییدکننده‌ای خطا ارسال نکند، سامانه راه‌حل را قبول خواهد کرد. اگر یکی از تأیید کنندگان صحت راه‌حل را زیر سؤال ببرد، برای حل اختلاف‌نظر بازی به مجموعه مراحل جدیدی کشیده‌ می‌شود که مشارکت‌کنندگان دیگری به نام داور (Judge) باقدرت پردازشی محدود درباره اختلاف‌نظرها داوری می‌کنند. سامانه طوری طراحی‌شده است که اطمینان حاصل شود که کار انجام‌شده توسط داوران در مقایسه باکار موردنیاز برای انجام همان وظیفه در خارج بلاکچین ناچیز باشد.

در پایان این بازی، اگر حل‌کننده واقعاً تقلب کرده باشد، کشف‌شده و مجازات خواهد شد. در غیر این صورت، تأییدکننده‌ای که چالش را آغاز کرده بود قیمت منابع مصروف در فرایند بازی را خواهد پرداخت.

پردازش خارج از زنجیره بلاکچین

در آخر، برای توجیه تأیید کننده‌ها در مورد واقعی بودن امکان وجود خطا و تشویق آن‌ها برای مشارکت، تروبیت کار جالبی انجام می‌دهد. تروبیت خودش گاهی حل‌کنندگان را مجبور به ایجاد خطا می‌کند! به این صورت که مدل پاداش‌ده‌ی سیستم عوض‌شده و از حل‌کننده ارسال پاسخ اشتباه خواسته می‌شود. این امر تضمین می‌کند همیشه پاداشی برای تأیید کننده‌ها تراکنش وجود داشته باشد.

به‌طور خلاصه، پروتکل به همه اجازه ایجاد وظیفه پردازشی و دریافت پاداش در قبال انجام پردازش را می‌دهد. ساختار پاداش‌ده‌ی در سیستم صحت پاسخ‌ها را تضمین می‌کند. با این کار فرایند تأیید از دوش بلاکچین اتریوم برداشته‌شده و مطابق با پروتکلی مجزا می‌تواند بدون پایبندی به محدودیت سوخت اتریوم به هر میزان پردازش افزایش باید.

دیگر راه‌حل‌های پیشنهادی:

تعدادی راه‌حل در جامعه فعالین ارزهای رمزنگاری‌شده مطرح‌شده که به نظر من جالب هستند. اگرچه راه‌حل‌ها به‌طور مستقیم برای حل مشکل مقیاس‌پذیری بلاکچین ارائه نشده‌اند، به‌طور غیرمستقیم بر ارتقاء سطح مقیاس‌پذیری اثر می‌گذارند.

اثبات-سهام

مشابه اثبات-کار (Proof-of-work)، اثبات-سهام (Proof of stake) مکانیسمی برای اجماع است که امنیت بلاکچین را در برابر خرج-مضاعف (doublespend) تضمین می‌کند.

در بلاکچین‌های متکی به اثبات-کار سنتی، ماینرها صحت داده‌های بلاکچین را با رقابت برای حل کردن معمای ریاضی و دریافت پاداش در برابر اثبات-کار تأمین می‌کنند. آن‌ها برای تأیید تراکنش از قدرت پردازشی استفاده می‌کنند و با دارا بودن قدرت بالای پردازش، توانایی تأثیر در شبکه هم متناسب با آن افزایش می‌یابد. در اثبات-سهام، سهامداران به‌جای قدرت پردازشی با پول (مثلاً در اتریوم با اتر) رأی می‌دهند.

بلاکچین تعدادی گره تأییدکننده بخصوص را زیر نظر می‌گیرد که به آن‌ها اعتبارسنج (validator) خواهیم گفت. اعتبارسنج‌ها برای شرکت در تأیید بلوک‌ها باید میزانی اعتبار (deposit) امنیتی اختصاص دهند. به این کار تضمین (bonding) می‌گویند. اگر یک گره اعتبارسنج محصولی ایجاد کند که بر اساس روشی مبتنی بر رمزنگاری در پروتکل غیر معتبر باشد، مبلغ تضمین اختصاص‌یافته توسط آن‌ها ضبط‌شده و مجوز مشارکت آن‌ها در فرایند اجماع باطل می‌گردد؛ اما اگر کارشان درست باشد، تضمینشان بازگشته و مبلغی را هم به‌عنوان کارمزد تراکنش دریافت می‌کنند.

به‌صورت مؤثری اعتبارسنج‌ها با شرط بستن خلاف جهت اجماع نهایی پول ازدست‌داده و با شرط‌بندی هم‌جهت با آن پول می‌برند. به‌صورت مشابهی در یک سیستم اثبات-کار، هر ماینر باقدرت پردازش خود (hash power) روی بلوکی که تأیید خواهد شد شرط می‌بندد. اگر شرطشان اشتباه باشد و بخواهند تقلب کنند، هر بلوکی که ایجاد کنند یتیم (orphan) خواهد بود و پول از دست خواهند داد.

اثبات-سهام چگونه به حل مشکل مقیاس‌پذیری بلاکچبن کمک می‌کند؟

یک مثال برای این کار بخش‌بندی (sharding) است. اجرای بخش‌بندی همراه با اثبات-کار ازنظر امنیتی دشوار است. به یاد بیاورید که با بخش‌بندی، مسئولیت اعتبار سنجی و تأیید را میان گره‌ها تقسیم می‌کنیم به‌طوری‌که نیاز نباشد هر گرهی تمام پردازش را انجام دهد. در اثبات-کار پیاده‌سازی به‌گونه‌ای است که گمنامی به‌طور کامل برقرار باشد؛ و اینجا است که مشکل بروز می‌کند. اگر امنیت یک بخش (shard) باقدرت پردازش محدود یک ماینر برقرار باشد، یک هکر با هدایت قدرت پردازش بزرگی به آن بخش می‌تواند باعث ایجاد اختلال در شبکه گردد. فرض کنید بخش الف ۹۰% قدرت پردازش و بخش ب تنها ۱۰% آن را در اختیار داشته باشد. بخش الف می‌تواند با اختصاص تنها ۵٫۱% از قدرت پردازش خود به بخش ب حمله کند (حمله اکثریت).

ثبات-سهام (Proof of stake)

در اثبات-سهام اتریوم اما ماجرا متفاوت است چون به‌نوعی طراحی‌شده است که گره‌های اعتبارسنج هویت مشخصی دارند (آدرس اتریوم). با دانستن هویت آن‌ها و انتخاب تصادفی مجموعه‌ای از گره‌های اعتبارسنج برای پردازش مجموعه‌ای از تراکنش‌ها روی یک بخش، توانایی حمله به یک بخش معین از اعتبارسنجان سلب می‌شود.

کمک دیگر اثبات-سهام به مقیاس‌پذیری (در مورد اتریوم) آن است که برخلاف اثبات-کار که توکن (token) جدید برای ماینرهای تأییدکننده بلوک صادر می‌شود، درآمد در اثبات-سهام عموماً منحصر به کارمزد تراکنش است. درنتیجه در صورت توانایی سرور، انگیزه افزایش محدودیت سوخت برای هر بلوک در آن‌ها ایجاد می‌شود تا با جای گرفتن تراکنش بیشتر در هر بلوک کارمزد بیشتری کسب کنند. محدودکننده این افزایش چیزی نیست جز توانایی گره‌های دیگر، زیرا در صورت بر هم خوردن همگامی (synchronization) در گره‌های کندتر، درآمدشان کاهش خواهد یافت.

اجاره بلاکچین (مختص اتریوم)

هدف راه‌حل اجاره بلاکچین (Blockchain rent) این است که میزان داده‌ای را که در شبکه ذخیره می‌شود کاهش دهد تا از این طریق سرعت انجام تراکنش‌ها افزایش یابد. در اتریوم کاربران در قبال مراحل پردازشی، حافظه، سوابق پردازش و حافظه بلندمدت حاضر به دادن پاداش هستند. هدف این است که ذخیره‌سازی (storage) از این میان حرف شود.

در سیستم فعلی، معیار پرداخت پاداش برای فضای ذخیره‌سازی بایت است. در اجاره بلاکچین معیار بایت*زمان خواهد بود. از طریق تغییر معیار پاداش در پروتکل، شبکه سبک‌تر شده و زمان تراکنش‌ها کاهش می‌یابد.

ذخیره‌سازی غیرمتمرکز

راه‌حل دیگر برای سبک‌تر کردن شبکه استفاده از یک سرویس ذخیره‌سازی غیرمتمرکز (Decentralized storage) مانند سوارم (Swarm) است. سوارم یک پروتکل اشتراک داده همتابه‌همتا (peer-to-peer) برای اترویم است که به شما اجازه می‌دهد کد برنامه را خارج از بلاکچین اصلی و در گره‌های سوارم مرتبط با بلاکچین ذخیره کنید. فرضیه اصلی آن است که به‌جای ذخیره همه‌چیز روی بلاکچین، فقط داده‌هایی که به‌صورت محلی مکرراً درخواست می‌شوند روی بلاکچین ذخیره‌شده و باقی از طریق سوارم روی ابر (cloud) ذخیره شود.

ذخیره‌سازی غیرمتمرکز

نتیجه‌گیری

این بحث به‌طور غول‌آسایی پیچیده است. امیدوارم این نوشته توانسته باشد تصویری کلی از دلیل اهمیت مشکل مقیاس‌پذیری بلاکچین و راه‌حل‌های ممکن به شما عرضه داشته باشد.

من بر این عقیده‌ام که احتمالاً یک‌ راه‌حل تنها برای حل قطعی مشکل مقیاس‌پذیری بلاکچین وجود ندارد، اما فکر می‌کنم ترکیبی از آن‌ها بتوانند به‌مرور این مسئله را حل کنند؛ و آن‌وقت خواهیم دید چه جهش بزرگی در کاربردهای بلاکچین کلید خواهد خورد.

منبع: HackerNoon

درباره نویسنده

حمید خارزی

مشاور فن‌آوری کسب‌و‌کار، علاقه‌مند به مطالعات میان‌رشته ای فن‌آوری و علوم انسانی

دیدگاهتان را بنویسید

/* ]]> */