مقیاس پذیری بلاکچین

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

0 146

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

در حالت کلی، یکی از اصلی‌ترین مفاهیم رمز ارزها، یعنی تاییدی که به اعتماد نیاز نداشته باشد، باعث به وجود آمدن مشکل بزرگ مقیاس پذیری شده است. در همه‌ی پروتکل‌های بلاکچین، هر گره همه‌ی وضعیت‌ها را همراه با تراز اکانت، کد قرارداد و تمام تاریخچه‌ی تراکنش ذخیره می‌کند تا بدون نیاز به اعتماد صحت تراکنش‌ها را تایید نماید. این سازوکار امنیت بسیار زیادی فراهم می‌کند ولی باعث محدودیت مقیاس پذیری می‌شود و اجازه نمی‌دهد که توان پردازش تراکنش‌ها در کل شبکه از توانی که در اختیار یک گره قرار دارد بیشتر شود. این مسئله یکی از بزرگ‌ترین متغیرهایی است که سقف حجم تراکنش‌های اجرایی بیت کوین یا اتریوم را در هر ثانیه به ترتیب به ۳ تا ۷ یا ۷ تا ۱۵ مورد محدود می‌کند. سرویس پرداخت ویزا در هر ثانیه می‌تواند حدود ۲۰۰۰ تراکنش انجام دهد و شبکه‌ای به بزرگی دستگاه‌های IoT با حدود ۵۰ میلیارد دستگاه قادر است تعداد این تراکنش‌ها را تا حد سرسام‌آوری افزایش دهد.

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

تعریف مسئله

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

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

در پایین‌ترین سطح از این مسئله، با مشکل تاخیر شبکه مواجه هستیم؛ یعنی چقدر طول می‌کشد تا اطلاعات از جایی به جای دیگر برود. این فرآیند به اندازه‌ی تراکنش بستگی دارد، اما در اکثر شبکه‌های جهانی این پروسه حدود ۲ تا ۳ ثانیه طول می‌کشد. در حال حاضر حجم تراکنش‌ها در بیت کوین ۵۰۰ بایت و در اتریوم ۱۵۰ بایت است، پس اگر می‌خواهیم با ویزا رقابت کنیم، شبکه‌ی ما باید بتواند ۸ مگابیت در ثانیه اطلاعات منتقل کند. این سرعت در مقیاس متوسط اینترنت جهانی کاملا رایج و عادی است.

این مسئله به‌لحاظ نرخ تئوری تراکنش‌ها یعنی گره‌های شبکه باید بتوانند در هر ثانیه ۵۰۰ بایت × ۲۰۰۰ تراکنش = ۱ مگابایت تراکنش پردازش کنند. پردازش تراکنش شامل دو پروسه‌ی هشینگ و تایید امضای ECDSA است. الگوریتم‌های رمزنگاری RIPEMD-160 و SHA256 با سرعتی معادل ۱۰۰ مگابایت در ثانیه اجرا می‌شوند، بنابراین ۲ هزار تراکنش می‌تواند ظرف حدود ۱۰ میلی ثانیه پردازش شود. این رقم آن قدر سریع است که لازم نباشد نگران چیزی باشیم.

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

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

در این حالت تنها مشکلی که از افزایش نرخ تراکنش به وجود می‌آید افزایش ملزومات فضای ذخیره‌سازی گره است که در نهایت می‌تواند به متمرکز شدن گره‌ها بر اساس بالاترین هزینه‌ی تجهیزات منجر شود. اگر نرخ تراکنش‌ها بر اساس افزایش اندازه‌ی بلاک یا نرخ تولید بلاک بالا برود، بلاکچین با نرخی متناسب رشد می‌کند. در حال حاضر، بلاکچین بیت کوین با نرخی حداکثری معادل ۱ گیگابایت در هر هفته رشد می‌یابد (حداکثر این نرخ در SegWit حدود ۴ گیگابایت است). اگر اندازه بلاک دو برابر شود، این نرخ می‌تواند به هفته‌ای ۲ گیگابایت، اگر سه برابر شود، هفته‌ای ۳ گیگابایت، به همین صورت افزایش پیدا کند. (فرض کنید اگر بیت کوین کش، با اندازه‌ی بلاک ۳۲ مگابایتی خود پر می‌شد، بلاکچین این شبکه روزانه باید ۴.۵ گیگابایت رشد پیدا می‌کرد.) اگر نرخ تولید بلاک افزایش یابد، این اتفاق هم اثر مشابه‌ای خواهد داشت، و اگر خیلی زود رخ دهد و ملزوماتی را برای فضای ذخیره‌سازی گره‌ها به وجود بیاورد که از تمکن مالی کاربران عادی به دور باشد، باعث به وجود آمدن ریسک متمرکز شدن گره‌ها می‌شود. بنابراین اگرچه این مسئله چیزی است که باید آن را به‌لحاظ زمان‌بندی پیاده‌سازی تکنیک‌های خاص مقیاس پذیری در مقایسه با هزینه‌ی تکنولوژی به خاطر داشته باشیم، ولی این اتفاق اصولا نگرانی مهمی نیست.

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

آناتومی تراکنش‌ها

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

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

 

کد بالا بدون عناوین و فاصله‌هایی که در آن وجود دارد به شکل زیر است:

 

وقتی همه چیز تنظیم شد، باید تراکنشی را امضا کنیم که نشان می‌دهد ما مالک آدرس خروجی آن تراکنش هستیم. این امضا خود شامل امضایی با رمزنگاری DER است که همراه با کلید خصوصی و کلید عمومی مربوطه به صورت DER رمزنگاری ساخته شده. سپس از این امضا برای جایگزین کردن بخش <scriptSig:scriptPubKey> از ورودی استفاده می‌کنیم و در نتیجه تراکنش ما تکمیل می‌شود. این امضا برای 00128307 BTC برابر است با:

 

یا:

 

در این‌جا می‌توانید ببینید که وقتی تراکنش امضا شد، همین امضا حدود ۶۵ درصد از کل اطلاعات تراکنش را تشکیل می‌دهد. پس این قسمت برای کار کردن روی کاهش وزن تراکنش بسیار مناسب است. این همان کاری است که SegWit انجام می‌دهد. این سیستم شاهد (امضا) را از اطلاعات تراکنش جدا می‌کند، و با جابجا کردن آن در درخت مرکل تراکنش کوین بیس، وزن آن را تا ۶۵ درصد کاهش می‌دهد. این سازوکار در کنار تغییر چگونگی ارزیابی اندازه بلاک، اساسا اندازه‌ی بلاک را چهار برابر می‌کند.

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

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

تراکنش‌های اتریوم به خاطر فریم‌ورک اکانت/ترازشان خیلی ساده‌ترند. در اتریوم، برای تامین خروجی نیازی به تامین ورودی نیست، در نتیجه فقط به کد زیر نیاز دارید:

 

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

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

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

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

واضح‌ترین مشکلی که از افزایش اندازه‌ی بلاک به وجود می‌آید افزایش فضای ذخیره‌سازی لازم برای حفظ یک گره کامل است. در مورد بیت کوین کش که اخیرا اندازه‌ی بلاک خود را به ۳۲ مگابایت افزایش داده، اندازه‌ی این بلاکچین روزانه ۴.۵ گیگابایت افزایش می‌یابد. این اتفاق هزینه‌ی لازم برای نگهداری از گره‌های کامل را افزایش می‌دهد و در نتیجه شبکه را متمرکز می‌کند. دوباره باید بگوییم که این نگرانی بیشتر به بحث زمان و هزینه‌ی فن‌آوری مربوط است و ارتباط چندانی به حوزه‌ی امنیت ندارد.

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

تاثیرات این اتفاق توسط Sompolinsky بررسی شده است. آن‌ها دریافتند که متوسط سرعت تکثیر بلاک ۲ ثانیه به اضافه‌ی ۰.۰۸ ثانیه به ازای هر کیلوبایت از بلاک بوده (این میزان به خاطر پیشرفت‌های تکثیر تراکنش به ۰.۰۰۸ ثانیه به ازای هر کیلوبایت کاهش یافته است). این فاکتور برای یک بلاک کامل ۳۲ مگابایتی نیازمند ۲۵۸ ثانیه (۴.۳ دقیقه) است تا آن بلاک در لبه‌ی شبکه تکثیر شود، این یعنی گره‌هایی که به مرکز جدیدترین بلاکِ کشف‌شده نزدیک‌تر هستند زمان بسیار بیشتری برای آغاز فرآیند ایجاد بلاک بعدی نیاز دارند، و در نتیجه باعث متمرکزتر شدن شبکه می‌شوند.

relation between block size and time

تصویر ۱: زمان تکثیر بلاک در برابر اندازه بلاک در پنل سمت چپ نشان می‌دهد که تکثیر بلاک با بلاک‌های ۱ مگابایتی SegWit بیت کوین، بیش از ۶۰ ثانیه طول می‌کشد تا به ۵۰ درصد از گره‌های شبکه نفوذ کند.

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

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

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

برای مقابله با این مشکل، به جای ایجاد یک بلاک بزرگ در هر ۱۰ دقیقه، چرا سرعت این فرآیند را افزایش نمی‌دهیم و همین مقدار اطلاعات را در زمانی مشابه به قطعه‌های کوچک‌تر و قابل مدیریت‌تر منتقل نمی‌کنیم؟

زمان بلاک: سریع بودن خوب است؟

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

با استفاده از منطق بالا، هر ثانیه‌ای که می‌گذرد و گره هنوز از جدیدترین بلاک اطلاع نیافته، شانس تولید بلاک بیات توسط آن گره بسته به زمان سپری‌شده و زمان بلاک افزایش می‌یابد. زمان بلاک برای بیت کوین ۱۰ دقیقه (۶۰۰ ثانیه) است. اگر ۵ ثانیه طول بکشد تا گره شما از وجود بلاک جدید آگاه شود، احتمال این که گره شما بلاک جدیدی بسازد که در آن زمان ارتباطی با آن بلاک جدید نداشته باشد ۰.۸ درصد افزایش می‌یابد. این افزایش ناچیز است، ولی همچنان صفر نیست. در شبکه‌ی فعلی بیت کوین (با SegWit)، برای یک بلاک کامل حدود ۳۵ ثانیه طول می‌کشد تا در شبکه تکثیر شود، بنابراین احتمال این که گره‌های موجود در لبه‌ی شبکه بلاک بیات بسازند ۵.۸ درصد افزایش پیدا می‌کند. این مقدار دیگر ناچیز نیست و حقیقت آن است که این اتفاق دائما رخ می‌دهد. نمودار زیر در سال ۲۰۱۳ تهیه شده و وضعیت تکثیر را در شبکه‌ی بیت کوین نشان می‌دهد.

Histogram of blockchain forks

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

علت اصلی مشکل

اگرچه می‌توانیم با دستکاری این متغیرها، توان خروجی شبکه را کمی افزایش دهیم، ولی با این راهکار به این زودی‌ها نمی‌توانیم به سطح عملکرد ویزا برسیم. اتریوم با زمان بلاک ۱۵ ثانیه و حداکثر اندازه‌ی بلاک ۹۰ کیلوبایت مثال خوبی برای این مسئله است. این شبکه هر ۱۰ دقیقه ۳.۶ مگابایت بلاک می‌سازد، و این مقدار تقریبا با وضعیت کنونی بیت کوین SegWit برابر است. ولی در این شرایط نیز در هر ثانیه صرفا می‌توانیم ۱۵ تا ۳۰ تراکنش داشته باشیم.

صبر کنید…

پس اتریوم چطور با زمان بلاک ۱۵ ثانیه‌ای خود این قدر خوب عمل می‌کند. حتما نرخ بیات آن‌ها بسیار زیاد است! بله، همین طور است. همان طور که در تکنیک بالا توضیح دادیم، زمان بلاک ۱۵ ثانیه‌ای با متوسط اندازه‌ی بلاک ۲۵ کیلوبایتی یعنی زمان تکثیر به حدود ۳ ثانیه می‌رسد؛ این هم یعنی نرخ تولید بیات شبکه به ازای هر بلاکی که پذیرفته می‌شود ۰.۲ بلاک بیات است (یعنی روزانه حدود ۱۲۰۰ بلاک! این میزان بلاک انرژی بسیار زیادی هدر می‌دهد). این مقدار با حجم اطلاعاتی که در حال حاضر در شبکه می‌بینیم مطابقت دارد. خوشبختانه، آن‌ها در هنگام طراحی بلاکچین به فکر این مسئله بوده و این قابلیت را در اختیار شبکه قرار داده‌اند تا امنیت بیشتری به وجود بیاید. آن‌ها برای مقابله با این ضعف امنیتی و ریسک متمرکز شدن، تکنیک تازه‌ای ساختند که سرعت تولید بلاک را افزایش می‌دهد. Sompolinsky در هنگام بررسی تکنیک‌های ممکن برای رفع مشکل مقیاس پذیری بیت کوین روش GHOST را پیشنهاد کرد. این روش تعریف زنجیره‌ی اصلی را از بلندترین زنجیره به زنجیره‌ای تغییر داد که بیشترین بلاک بیات را دارد تا بتواند محاسبه کند و ببیند که کدام بلاک بیشترین حمایت را از طرف مکانیزم اثبات کار دارد. روش GHOST مشکلات مربوط به تولید بیات و ایجاد انشعاب را برطرف کرده، پس از افزودن آن‌ها در بلاکچین به آن‌ها پاداش می‌دهد و انرژی لازم برای ایجاد این بلاک‌های بیات را هدر نمی‌دهد.

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

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

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

شاید از این مطالب هم خوشتان بیاید.

ارسال پاسخ

آدرس ایمیل شما منتشر نخواهد شد.