مخفیترین راز ساتوشی: چرا سایز هر بلاک بیت کوین ۱ مگابایت است؟
هر کس که با نام بیت کوین آشنایی داشته باشد، از وجود مشکل محدودیت سایز بلاک و مقیاس پذیری در شبکه آن مطلع است. ولی آیا تاکنون به چگونگی پیدایش این محدودیت ها فکر کرده ایم؟
بد نیست با این امید که بتوان: «از بحران های آتی با درک صحیحی از گذشته جلوگیری کرد»، نگاهی به چگونگی بروز محدودیت در شبکه بیت کوین بیاندازیم.
داستان بیت کوین را از زیان کاربران آن می خوانیم:
روزی روزگاری، در سرزمینی دور…
در سال ۲۰۱۰، آن زمان که کارشناسان به محدودیت سایز بلاک پی بردند، بیت کوین وضعیت متفاوت تری نسبت به امروز داشت. ادمین (انجمن Bitcointalk) و (گروه بیت کوین در ردیت /r/bitcoin) با نام کاربری Theymos، در یادداشت خود نوشته است:
۱- هیچکس انتظار استخراج دست جمعی pool mining در شبکه را نداشت. تصور همه این بود که ماینرها فول نود هستند و تقریبا تمام فول نودها در شبکه ارز دیجیتال استخراج می کنند
۲- روی کار آمدن تراشه های ASIC برای من غیر منتظره بود. این تراشه ها بیش از حد فضای استخراج ارز دیجیتال را متمرکز می کنند.
۳- تأیید پرداخت ساده یا SPV ضعیف تر از آنچه در نظر داشتم است. در واقع اگر اکثریت گسترده جامعه اقتصادی که فول نودها را اجرا میکنند وجود نداشته باشد، از ماینرها هرکاری برای قانون شکنی در شبکه برمیآید.
۴- بازار کارمزد نه آنطور که من توصیف کردم کار می کند و نه آنگونه که ساتوشی برای دلایل اقتصادی در نظر داشته (که البته توضیحشان طولانی است).
ظاهرا اواخر سال ۲۰۱۰، ساتوشی آینده نگری کرده و به این فکر افتاده است: سایز بلاک بیت کوین باید محدود بشود، مگرنه بعضی از ماینرها بلاک های بزرگی را استخراج می کنند و سایر ماینرها توانایی انجام این کار را ندارند. آن وقت ممکن است بلاک چین از هم بپاشد! بنابرین ساتوشی ناکاموتو برای جلوگیری از این امر محدودیت ۱ مگابایتی را به کد بیت کوین اضافه کرد و این راز را پیش خودش نگه داشت.
ماجرا پلیسی میشود
ساتوشی ناکاموتو راز این تغییر جدید را پیش از راه افتادن آن جایی فاش نکرده است. احتمالا عده ای از این کد مخفی بو برده اند و بنابر درخواست ساتوشی به قولی صدایش را درنیاورده اند. ساتوشی برای کاهش احتمال وقوع حملات DDOS سعی در مخفی نگه داشتن این کد داشته است، در غیر این صورت هکرها راه استفاده از سایز بلاک نامحدود را پیدا می کردند و شبکه بیت کوین در معرض حمله DDOS قرار می گرفت.
در یادداشت Theymos نوشته شده است:
ساتوشی هرگز از کانال IRC استفاده نکرده، و زیاد انگیزه و اهداف خود را برای هر چیز شرح نداده است. او تا زمان کامل شدن این تغییر، راز آن را پیش خود نگه داشت و از کسانی که به آن پی برده بودند نیز خواسته بود همین کار را بکنند. هدف از این پنهان کاری جلوگیری از بروز آشفتگی و اختلاف نظر بر سر این تغییرات ادامه دار در میان هکرها بود.
شاید ساتوشی فکرش را هم نمی کرده که یک روز سایز یک مگابایت در بلاک بیت کوین دردسر بالا بیاورد! در آن زمان، مرتبه بزرگی سایز بلاک بیت کوین به طور متوسط کوچکتر از یک مگابایت بوده است. لابد ساتوشی ناکاموتو با خود گفته که فعلا برای چاره اندیشی و پیدا کردن یک راه حل وقت هست، و هر زمان لازم شد فکری به حال آن می کند:
در آینده اگر لازم بود یک تغییر جدید را در شبکه اعمال می کنیم. برای نمونه:
(if (blocknumber > ۱۱۵۰۰۰
maxblocksize = largerlimit
تغییر نامبرده می تواند از نسخه های بعد شروع بشود؛ یعنی زمانی که نوبت به یک بلاک معین رسید در شبکه اعمال بشود و نسخه های قبلی که آن را در خود ندارند، از کار بیافتند.
با نزدیک شدن به یک شماره بلاک مشخص، می توان برای اطلاع رسانی در خصوص آپدیت نسخه های قدیمی تر اعلان فرستاد.
مسلما ساتوشی پیش بینی نکرده بود که تغییری به کوچکی یک کد ساده در سایز بلاک بیت کوین، می تواند طوفان به پا کند.
مشکلات قابل پیش بینی
یکی از کاربران BitcoinTalk به نام Kiba در قسمت دیدگاه های گپ «افزایش سایز بلاک بیت کوین» نوشته است:
در صورتی که الان بروزرسانی را انجام بدهیم، بعدها مجبور نیستیم در صورت رشد اقتصاد بازار بیت کوین همه را متقاعد کنیم.
کاربر دیگری به نام Jeff Garzik در پاسخ به این دیدگاه ساتوشی (یکی از کاربران ارشد bitcointalk) که «در صورت لزوم این محدودیت همواره می تواند برداشته شود، تا ظرفیت پشتیبانی از انجام تراکنش ها در شبکه بالا برود» نوشته است:
به نظر من تمام این ها جنبه تبلیغاتی دارد. نظر مردم به راحتی نسبت به یک سیستم جلب نمی شود. مخصوصا اگر شبکه از لحاظ فنی قادر به پشتیبانی از تراکنش های زیاد نباشد.
چرا یک مگابایت؟
خیلی ها این سوال را می پرسند: چرا ساتوشی ناکاموتو سایز بلاک بیت کوین را مثلا به هشت مگابایت محدود نکرده است؟
پاسخ اینجاست؛ به سه دلیل:
۱- اول اینکه نیازی نبود. سایز بزرگترین بلاک هایی که تا آن زمان استخراج شده بودند کمتر از یک مگابایت بود و مسلما وجود ظرفیت بالاتر از یک مگابایت برای بلاک ها ضرورتی نداشته است.
۲- تغییر آن از لحاظ فنی به سادگی جایگزین کردن یک کد به جای یک کد دیگر بوده است.
۳- بلاک های بزرگتر از لحاظ فنی بیشتر کار می بردند.
در سال ۲۰۱۰، فناوری اینترنت به گونه ای بود که بلاک های بزرگ تر نمی توانستند به درستی توزیع بشوند. دو سال پیش، Theymos مساله مشخص و قابل درکی را یادآوری کرده است:
برای این که یک node سازنده در شبکه باشیم لازم است فورا بلاک های جدید را برای دیگران (بالاتر از هشت نفر) آپلود کنیم. بنابرین بلاک های ۸ مگابایتی به ظرفیت Upstream (انتقال داده از سرویس گیرنده به سرویس دهنده-آپلود) بالایی نیاز دارند. چیزی شبیه به این:
(۸ MB * ۸ bits * ۷ peers) / ۳۰ seconds = ۱۵ Mbit/s
اکثر افراد با توجه به طرح فعلی شبکه و عدم وجود ظرفیت upstream بالا در آن قادر به انجام این کار نیستند، از این رو شبکه از هم فرو می پاشد: برای همه ظرفیت آپلود کافی در شبکه وجود ندارد، پس نمی توانند به موقع بلاک ها را دانلود کنند، بدین ترتیب شبکه از حالت sync خارج شده و وضعیت زنجیره وار جهانی در آن موقتا مغشوش و به هم ریخته می شود.
سگویت و شبکه لایتنینگ
برای تایید شدن هر تراکنشی که در سیستم بیت کوین انجام می شود، ده دقیقه زمان لازم است. هر چه زمان تایید تراکنش کمتر باشد، مطلوبتر است. در هر بلاک به اندازه یک مگابایت از تراکنش های مختلف قرار می گیرد. درصورتیکه در این فضا تراکنش های بیشتری قرار گیرند، در هر ده دقیقه تعداد بیشتری تراکنش تایید می شود و به همان نسبت سرعت عمل در شبکه بالا خواهد رفت. سگویت باعث کمتر شدن سایز هر تراکنش ببیت کوین و افزایش کارآیی بلاک می شود.
با ورود سگویت قسمت های مختلفی از شبکه بیت کوین تغییر پیدا می کند؛ امروزه بیت کوین برای حذف انعصاف پذیری مضر، افزایش ظرفیت بلاک، و جدا کردن امضا از اطلاعات تراکنش، کدی به نام سگویت (Segregated Witness (SegWit را به کار می بندد. سگویت ایجاد بلاک های بزرگ تر از ۱ مگابایت را ممکن می سازد.
همانطور که گفته شد سگویت مشکل انعطاف پذیری تراکنش ها یا malleability را رفع می کند و مسیر خلق شبکه لایتنینگ را هموار.
شبکه لایتنینگ یک راه پرداختی برای کاربران بیت کوین و یا بازرگانان است. این شبکه به آن ها کمک می کند برای انتقال وجه و انجام معاملات امن و عاری از نیاز به «سبک اعتماد»، یک کانال پرداختی ایجاد کنند، بدون اینکه سابقه تراکنش هایی که انجام می دهند در بلاک چین ثبت شود. بدین ترتیب حجم بزرگی از بلاک چین برداشته می شود، آن وقت کامپیوترهای نسبتا قدرتمند هم قادر به پشتیبانی از آن خواهند بود. با لایتنینگ امکان ایجاد کانال های پرداخت بین افراد فراهم شده است. در این حالت فقط یک بار گشایش این کانال بر روی بلاک چین ثبت میشود و تا هر زمان که دو طرف مایل باشند می توانند از طریق این کانال با همدیگر تراکنش داشته باشند. در پایان، زمانی که این دو طرف دیگر تراکنشی بین همدیگر نداشتند می توانند صرفاً بسته شدن کانال پرداخت را در بلاک چین ثبت نمایند. با این کار ظرفیت انجام تراکنش ها بالا می رود و تنها بخش کوچکی از بلاک چین اشغال می شود (زنجیره بلاک چین خیلی بزرگ نمی شود.)
شبکه لایتنینگ هنوز آماده بهره برداری کامل در mainnet نیست، اما می توان برای ورود به آن از محیط های آزمایشی یا testnet استفاده کرد. استفاده از این شبکه اختیاری خواهد بود، کاربران می توانند تراکنش های خود را مطابق با میل و اختیار خود به صورت عادی یا از طریق این شبکه انجام بدهند.
قیمت بیت کوین ده هزار دلار یعنی چه