الگوریتم تحمل خطای بیزانس (Byzantine Fault Tolerance) که اصطلاحاً BFT نامیده میشود، الگوریتم اجماع منحصربهفردی در شبکه بلاکچین است. این الگوریتم به شبکه بلاکچین کمک میکند تا اطلاعات نادرست را تشخیص دهد و آنها را حذف کند. در شرایط خاصی که برخی از نودهای شبکه بهدرستی کار نکنند؛ ولی عملکرد کل شبکه مطلوب و صحیح باشد، نهایتاً این عملکرد باعث اجماع در شبکه میشود. در این مقاله از بلاگ تترلند، الگوریتم تحمل خطای بیزانس (BFT) و الگوریتم اجماع تحمل خطای بیزانس عملی (pBFT) را بررسی کردهایم تا دلیل منحصربهفردبودن آن را پیدا کنیم.
تحمل خطای بیزانس یا BFT چیست؟
تحمل خطای بیزانس (BFT) امکانی برای شبکه غیرمتمرکز بلاکچین فراهم میکند تا اطلاعات نادرست را تشخیص دهد و آنها را حذف کند. طبیعتاً در شبکهای غیرمتمرکز که برای نشر اطلاعات به مجوز هیچ نهاد متمرکزی احتیاجی نیست، این احتمال زیاد است که افرادی اطلاعات نادرست منتشر کنند. اطلاعات نادرست ممکن است اطمینانپذیری تراکنشها و درنتیجه امنیت شبکه را بهخطر بیندازد. اگر شبکهای راهحلی مانند تحمل خطای بیزانس نداشته باشد، نمیتواند ازپسِ این اطلاعات نادرست بربیاید؛ بههمیندلیل، تحمل خطای بیزانس از اهمیت زیادی برخوردار است.
براساس این الگوریتم، حتی در شرایطی که برخی از مؤلفههای شبکه بلاکچین بهدرستی کار نکنند، شبکه میتواند مکانیزم اجماع را اجرا و تکمیل کند. ازآنجاکه این الگوریتم راهحلی برای مسئله ژنرالهای بیزانس (Byzantine Generals’ Problem) است، نام آن را تحمل خطای بیزانس (Byzantine Fault Tolerance) گذاشتهاند.
مسئله ژنرالهای بیزانس (Byzantine Generals’ Problem) چیست؟
سال ۱۹۸۲، مسئله ژنرالهای بیزانس برای اولینبار در مقالهای از توسعهدهندگان شرکت مایکروسافت ریسرچ مطرح شد. در این مقاله آمده است:
«تصور کنید چندین لشکر از ارتش بیزانس در حال آمادهسازی خود برای حمله به یک شهر هستند. هریک از این لشکرها را ژنرال خود رهبری میکند و در نقاط مختلفی، شهر را محاصره کردهاند. ژنرالها ازطریق پیامرسانها با یکدیگر در ارتباط هستند و باید برای حملهای هماهنگ تصمیم بگیرند و به اجماع برسند. بااینحال، برخی از ژنرالها ممکن است خائن باشند و هدفشان این باشد که از اجماع ژنرالهای وفادار جلوگیری کنند. ژنرالها باید درباره زمان حمله به شهر تصمیمگیری کنند و برای حمله همزمان به حداکثر قوای ارتش خود نیاز دارند.
ژنرالها باید الگوریتمی طراحی کنند که اولاً همه ژنرالهای وفادار روی اقدامی مشترک اجماع کنند؛ ثانیاً تعداد اندک ژنرالهای خائن نتوانند باعث اجماع ژنرالهای وفادار روی اقدام مخرب شوند. ژنرالهای وفادار از این الگوریتم پیروی، اما ژنرالهای خائن خلاف این الگوریتم و مطابق خواسته خود عمل میکنند. الگوریتم باید شرط اول را بدون توجه به کاری که ژنرالهای خائن انجام میدهند، تضمین کند. پس ژنرالهای وفادار نهتنها باید به اجماع برسند؛ بلکه باید اقدام مشترک موفقیتآمیزی نیز انجام دهند.»
اگرچه مسئله ژنرالهای بیزانس تقریباً شبیه مسئله دو ژنرال (پارادوکس دو ژنرال) است، پیچیدگیهای بیشتری دارد. بهعنوان مثال، در این مسئله ممکن است پیامرسانها اطلاعات نادرستی را منتقل کنند یا حتی پیامی را انتقال ندهند.
تحمل خطای بیزانس BFT در شبکه بلاکچین چگونه است؟
وقتی از رمزارزها سخن بهمیان میآید، تحمل خطای بیزانس اهمیت بیشتری پیدا میکند. اگر بخواهیم مسئله ژنرالهای بیزانس را به شبکه بلاکچین تشبیه کنیم، نودها یا گرههای شبکه همان ژنرالهای بیزانس هستند که باید با یکدیگر ارتباط برقرار کنند و بهدنبال راهحلی برای اجماع موفقیتآمیز باشند. در علم بلاکچین، به این راهحلها الگوریتم اجماع (Consensus Algorithms) میگویند.
راهحلهای بسیاری برای دستیابی شبکه به تحمل خطای بیزانس ارائه شده است؛ درنتیجه، الگوریتمهای اجماع متفاوتی در بین شبکههای بلاکچین وجود دارد که هرکدام راه و روش خاص خودشان را ارائه میکنند.
الگوریتمی که بیتکوین، اولین رمزارز جهان، برای تحمل خطای بیزانس ارائه کرد، الگوریتم اثبات کار یا PoS بود. از زمان معرفی بیتکوین در سال ۲۰۰۸، درکنار موفقیتهای بزرگترین رمزارز جهان، الگوریتم اثبات کار نیز ثابت کرده که یکی از الگوریتمهای مطمئن اجماع است. بااینحال، الگوریتم اجماعی که در این مقاله بررسی میکنیم، الگوریتمی است که نام تحمل خطای بیزانس در آن استفاده شده است: الگوریتم اجماع تحمل خطای بیزانس عملی (Practical Byzantine Fault Tolerance) یا بهاختصار pBTF.
الگوریتم اجماع تحمل خطای بیزانس عملی (pBTF) چگونه کار میکند؟
تحمل خطای بیزانس عملی (pBTF) یکی از الگوریتمهای اجماع است که اواخر دهه ۱۹۹۰، باربارا لیسکوف و میگل کاستر آن را برای حل مسائل تحمل خطای بیزانس ارائه دادند. بهطور خلاصه براساس الگوریتم تحمل خطای بیزانس عملی، ابتدا یک نود یا گره بهعنوان نود اصلی (Primary) یا رهبر مشخص میشود و نودهای دیگر بهعنوان نود ثانویه (Secondary) یا پشتیبان فعالیت میکنند. اگر نود اصلی از کار بیفتد، هر نود دیگری میتواند جایگزین آن شود.
همچنین، این الگوریتم تا زمانی کار میکند که حداکثر تعداد نودهای مخرب از یکسوم تعداد کل نودها بیشتر نباشد. بهعبارتدیگر، اگر برخی از نودهای شبکه بهدرستی کار نکنند یا مخرب باشند، شبکه همچنان میتواند به کارش ادامه دهد؛ البته تا وقتیکه تعداد نودهای مخرب کمتر از یکسوم تعداد کل نودهای شبکه باشد.
الگوریتم تحمل خطای بیزانس عملی (pBTF) شامل چهار فاز می شود:
- درخواست (Request): مشتری درخواست خود را برای نود اصلی ارسال میکند.
- پیش از آمادهسازی (Pre-prepare): نود اصلی این درخواست را برای تمام نودهای ثانویه ارسال میکند.
- آمادهسازی (Prepare): همه نودها (اصلی و ثانویه) سرویس درخواستشده را انجام میدهند.
- کامیت (Commit): درصورت تأیید سرویس انجامشده، برای مشتری ارسال میشود.
مزایا و معایب الگوریتم تحمل خطای بیزانس عملی (pBTF)
مزایا
- سرعت زیاد: الگوریتم تحمل خطای بیزانس عملی بدون نیاز به تأیید چندگانه انجام میشود و درنتیجه، اگر نودها روی یک بلاک به اجماع برسند، بلافاصله تأیید میشود.
- مصرف کم انرژی: الگوریتم pBFT به سختافزارهای محاسباتی پیچیده نیازی ندارد؛ بههمیندلیل، مصرف انرژیاش بسیار اندک و کاملاً با محیطزیست سازگار است.
- پاداش مناسب: اجماع در الگوریتم pBFT بهصورت کاملاً دستهجمعی انجام میشود؛ بههمیندلیل، هر نود با انگیزهای که دارد، تغییرات پاداش را کاهش میدهد.
معایب
- مقیاسپذیری اندک: ازآنجاکه هر نود باید با نودهای دیگر در ارتباط باشد، هزینههای ارتباطی افزایش مییابد؛ ازاینرو، برای شبکههای بزرگ کاربردی نیست.
- آسیبپذیری: این الگوریتم دربرابر حملههای Sybil آسیبپذیر است. طی این حمله، تعدادی از نودها متوقف میشوند و امنیت شبکه بهخطر میافتد و این مسئله بهدلیل کوچکبودن شبکه است.
کدام پروژهها از الگوریتم اجماع تحمل خطای بیزانس عملی (pBTF) استفاده میکنند؟
زیلیکا (Zilliqa)
شبکه بلاکچین زیلیکا از نسخه بهینهشده pBFT استفاده میکند و درواقع، ترکیبی از pBFT و PoW است. بدینصورت که برای هر صد بلاک، از الگوریتم اجماع PoW استفاده میکند. همچنین، برای کاهش هزینههای ارتباطی pBFT از مکانیزم چندامضایی بهره میبرد و بهگونهای عمل میکند که گروههای اجماع pBFT بهصورت محدود باشند.
هایپرلجر (Hyperledger Fabric)
این پلتفرم را بنیاد لینوکس پشتیبانی میکند و برای پیشبرد اهداف خود از نسخه مجاز الگوریتم pBFT بهره میبرد. پلتفرم هایپرلجر از گروههای اجماع کوچک استفاده میکند و به بلاکچینهای عمومی مثل اتریوم نیازی ندارد. بههمیندلیل، استفاده از pBFT گزینه مناسبی برای ارائه تراکنشهایی با توان عملیاتی بسیار زیاد در پلتفرم هایپرلجر است.