بیت کوین چگونه باید بهروزرسانی شود؟
یکی از مسائل بحثبرانگیز بیت کوین در پنج سال گذشته، نحوه فعالسازی سافت فورکها بوده است. از زمان ظهور بیت کوین تاکنون، مکانیسمهای مختلفی برای اعمال قابلیتهای جدید در این شبکه بهکار رفته است. این مکانیسمها در طول زمان با این هدف تکامل یافتهاند که اعمال قابلیتهای جدید تاحدممکن ایمن و بدون اختلال باشد.
تا سال ۲۰۱۷، ضمن تغییر مکانیسمهای فعالسازی، اجماعی کلی درباره آنها وجود داشت و اختلاف چندانی در کار نبود؛ اما هنگام اعمال سگویت (SegWit) این اتفاقنظر از میان رفت.
سگویت به محل اختلاف و جدل تبدیل شد و برای اولینبار بحثهایی بر سر چگونگی فعالسازی قابلیتهای جدید در بیت کوین شکل گرفت. پس از اعمال اولیه طرح بهبود BIP9 که برای اجراییشدن نیازمند ارسال سیگنال ازطرف ماینرها بود، اکثر قریببهاتفاق ماینرها و استخرهای استخراج از ارسال سیگنال در بلاکها خودداری کردند.
در آن زمان، بسیاری از کاربران نگران بودند که ماینرها با درخواست ایجاد هارد فورکی برای افزایش اندازه بلاک (Block Size)، فعالسازی قابلیت جدید را بهتأخیر بیندازند و آن را گروگان خواستههای خود کنند. این در حالی بود که سگویت اندازه بلاک را ازطریق سافت فورک افزایش میداد. در این میان سراسر اکوسیستم بیت کوین پر از طلاعات کاملاً و مبتنیبر دروغهای آشکار بود تا مخالفتها را در برابر ارتقأ سگویت برانگیزد.
طرح بهبود BIP148 و سافت فورک فعالشده توسط کاربر یا کاربرمحور (UASF) ماینرها را مجبور به فعالکردن سگویت کرد. دراینمیان، یکی از جریانهای فشار برای افزایش اندازه بلاک منصرف شد و جریان دیگری نیز که برای هارد فورک اقدام کرده بود درنهایت کنار گذاشته شد.
بااینحال، طرفداران بیت کوین از آن زمان عموماً از گفتوگو درباره چگونگی انجام و فعالسازی قابلیتهای جدید طفره میروند. این موضوع چنان مناقشهبرانگیز شده است که چیزی نمانده به تابو تبدیل شود.
در این مطلب که با کمک یادداشتی از وبسایت بیت کوین مگزین نوشته شده است، در تاریخچه پیشنهادها و اجرای مکانیسمهای فعالسازی بیت کوین گشتی میزنیم و برخی از مهمترین موارد را از دیدگاه نویسنده این مقاله مورد بررسی قرار میدهیم. از شما دعوت میکنیم تا انتهای این مطلب با ما همراه باشید.
فعالسازی ارتقای Flag Day
میتوان فعالسازی را فازبندی کرد؛ مثلاً:
if (blocknumber > ۱۱۵۰۰۰) maxblocksize = largerlimit
این [بهروزرسانی] میتواند از نسخههای بعدی شروع شود؛ یعنی وقتی نوبت به این شماره بلاک رسید و [تغییر] در شبکه اعمال شد، دیگر نسخههای قبلی که آن را در خود ندارند، از کار بیفتند.
بیت کوین تاک، ۴ اکتبر ۲۰۱۰
این نقلقولِ ساتوشی ناکاموتو به برهه زمانی پس از اعمال محدودیت اصلی اندازه بلاک در بیت کوین بازمیگردد. او در این اظهارنظر گفته است که چگونه میتوان در آینده اندازه بلاک را به خواست کاربران افزایش داد. گفتنی است در اوایل راهاندازی بیت کوین، وقتی کاربران چنین خواستهای را مطرح کردند، ناکاموتو با آن مخالفت کرد و در پاسخ به آنان در جملات بالا گفت که تا وقتی ضرورت ندارد، نباید این کار را انجام داد. ناکاموتو در آخرین اظهارنظرش درباره اندازه بلاک بیان کرد که درنهایت این تصمیم برعهده کاربران است که اندازه بلاک ثابت بماند یا تغییر کند.
این بهروزرسانی موسوم به «فعالسازی روز پرچم» (Flag Day Activation) است که در آن یک شماره بلاک یا مهر زمانی (Timestamp) انتخاب میشود و نودهای بهروزرسانیشده در آن مقطع قوانین جدید را اجرا میکنند.
در این میان هیچ سیگنالدهی عمومی یا هماهنگی قابلمشاهدهای در کار نیست. افراد کلاینت جدید را دانلود میکنند و هرکسی که بهروزرسانی را انجام داده است، قوانین را اجرا میکند و کسانی که بهروزرسانی را انجام ندادهاند، کاری نمیکنند.
بیشتر بخوانید: نود یا گره (Node) چیست؟
بد نیست بدانید که منظور از روز یا روزهای پرچم که در مبحث مدیریت سیستمهای رایانهای استفاده میشود به معنای ایجاد تغییراتی است که نیازمند راهاندازی مجدد سیستم یا دگرگونی در اندازه نرمافزار یا دادههای آن است.
آدرسهای پرداخت به اسکریپت هش یا همان P2SH با این روش بهروزرسانی شد. از دید فنی و از آنجاکه در فعالسازیهای روز پرچم نودهای روی شبکه فعالسازی قابلیت و قوانین جدید را پیادهسازی میکنند؛ بنابراین این فعالسازیها شکلی از UASF بهشمار میروند.
مشکل فعالسازی روزهای پرچم این است که سیگنالدهی عمومی ندارند که بتوان ازطریق آن فهمید چند درصد از ماینرها قوانین جدید را اجرا کردهاند. بههمیندلیل، برای همه کاربران مقدور نیست که ریسکهای بالقوه و احتمال انشعاب در زنجیره را بسنجند.
ارتقای BIP9
هدف از توسعه طرح بهبود BIP9 این بود که ریسک انشعاب زنجیره، هنگام اعمال سافت فورکها کمتر شود. ایده طرح مذکور این بود که ماینرها در بلاکهایی که استخراج میکنند، سیگنالی را بگنجانند و نرمافزار نود جدید، تنها هنگامی فعالسازی قابلیت تازه را آغاز کند که درصد مشخصی ( حدود ۹۵درصد) از استخراجکنندگان، سیگنال موافقت با آن قابلیت را داده باشند.
این کار باعث میشود که پیش از اجرای قوانین جدید بهوسیله نودها، بهصورت عمومی مشخص شود که چه تعداد از ماینرها قابلیت جدید را اجرا میکنند. البته واضح و مشخص است که ماینرها میتوانند دروغ بگویند و سیگنال نادرست ارسال کنند؛ اما مسئله این است که ازلحاظ اقتصادی انجام این کار عقلانی نیست. قابلیتهای CheckLockTimeVerify و CheckSequenceVerify هر دو با استفاده از طرح BIP9 پیادهسازی شدند و سگویت نیز در همان زمان اجرا شد.
عیب بزرگ بهکارگیری طرح BIP9 که در زمان فعالسازی سگویت نمایان شد، این بود که اقلیتی از ماینرها میتوانند با خودداری از ارسال سیگنال، فعالسازی یک قابلیت را متوقف کنند. صرفنظر از اینکه امکان استفاده از مکانیسمهای فعالسازی دیگر برای هر طرحی وجود دارد، طرح BIP9 عملاً حق وتویی به ماینرها میدهد که میتوانند با استفاده از آن از فعالسازی قابلیتی جدید در شبکه جلوگیری کنند.
ازاینرو، این مکانیسم فعالسازی (BIP9) قدرت نامتناسبی را برای کنترل قابلیتهای جدید در بیت کوین دراختیار ماینرها قرار میدهد. این در حالی است که ماینرها درواقع تأمینکنندگان خدمات برای کاربرها و هولدرها هستند و نباید چنین نفوذ بیحدی در فعالسازی قابلیتها داشته باشند.
ارتقای BIP148 و UASF
طرح BIP148 مکانیسم فعالسازی کاملاً بزرگ و جدیدی را پیادهسازی کرد که تا پیشازآن وجود نداشت. BIP148 برای فعالسازی قابلیتی جدید طراحی نشده بود؛ بلکه قرار بود مطمئن شود سگویت که در طرح BIP9 اعمال شده بود، فعال شده است.
همیشه این احتمال وجود دارد که یک سافت فورک در بلاک چین به هارد فورک منجر شود
دلیل تعیین ضربالاجل ۱اوت۲۰۱۷ نیز همین بود. اول اوت آخرین دوره دوهفتهای تنظیم سختی برای سیگنالدهی ماینرها پیش از پایان مهلت فعالسازی سگویت بود. از این تاریخ، همه کلاینتهای BIP148 ارسال سیگنال فعالسازی سگویت را در آن محدوده زمانی برای همه بلاکها الزامی کردند.
این مکانیسم طرح فعالسازی جدیدی بود که تا پیشازآن نه ضرورتش احساس شده بود و نه بهکار رفته بود. BIP148 در حقیقت برای اصلاح آنچه نقصی عمده در BIP9 تلقی میشد، انجام گرفت. این نقص از آنجا ناشی میشد که ممکن بود بر سر قابلیتی اجماع وجود داشته باشد؛ اما ماینرها میتوانستند فعالسازی را متوقف کنند.
ارتقای BIP91
BIP۹۱ طرح فعالسازی منحصربهفرد دیگری است که در سال ۲۰۱۷ در ارتباط با سگویت اعمال شد. در آن زمان، ماینرها تمایلی نداشتند که تسلیم طرح BIP148 شوند؛ اما همزمان نگران بودند که عواقب فعالسازی این طرح بدون سیگنالدهی ماینرها، به انشعاب بلاک چین بیت کوین منجر شود. BIP91 طراحی شد تا راهحلی را ارائه دهد که از انشعاب جلوگیری کند و همه را در همان بلاک چین نگاه دارد.
در این طرح آستانهای ۸۰درصدی تعیین شد؛ بدینشکل که اگر تعداد ماینرهایی که سیگنال فعالسازی سگویت را ارسال میکردند به این میزان رسید، ازآنپس همه بلاکهای فاقد سیگنال، از بلاک چین کنار گذاشته میشدند (مانند طرح BIP148).
هدف از این محدودیت، تضمین این مسئله بود که اگر BIP91 فعال شد، سازگاری و همگامی خود را با طرح BIP148 حفظ کند. این کار بهنوبه خود اعمال سگویت ازطریق BIP9 را فعال و همه را در یک زنجیره حفظ میکرد. درمجموع، هدف از همه این اقدامها آن بود که ماینرها انگیزه یا بهانهای برای ارسال سیگنال فعالسازی داشته باشند.
ارتقای BIP8
طرح BIP8 بهدلیل اتفاقی که در زمان فعالسازی سگویت افتاده بود، برای جایگزینی با BIP9 پیشنهاد شد. قرار بود این طرح مکانیسمی برای اعمال بهروزرسانیها ارائه کند که در آن هنگامی که (۹۰درصد) ماینرها به آستانه سیگنالدهی میرسند، بتوانند طرح را در هر مقطعی از محدوده زمانی پیادهسازی و اعمال کنند.
همچنین، طرح BIP8 با این هدف مطرح شد که همزمان مکانیسمی باشد که اگر تعداد مشخصی از ماینرها از ارسال سیگنال خودداری کردند، از فعالشدن فورک مطمئن شود. این همان متغیر lockinontimeout است. اگر مقدار این متغیر true باشد، قوانین اجماع در آخرین دوره سیگنالدهی، همه بلاکها را ملزم میکند که «باید» سیگنال فعالسازی را ارسال کنند تا فعالسازی قابلیت جدید تضمین شود.
ارتقای Speedy Trail
طرح Speedy Trial، فعالسازی تپروت (Taproot) را با موفقیت بهپایان رساند. تپروت مهمترین ارتقای شبکه بیت کوین از زمان افزایش ظرفیت بلاک در سال ۲۰۱۷ (۱۳۹۶) است که آن را با عنوان سگویت (SegWit) میشناسیم. کمترین چیزی که درباره طرح مذکور میتوان گفت، این است که انتخابی بسیار بحثبرانگیز از میان مکانیسمهای متعدد فعالسازی بود.
Speedy Trial درمجموع مانند مکانیسم فعالسازی BIP9 عمل میکند، با این تفاوت که محدوده زمانی فعالسازی آن کوتاهتر و آستانه سیگنالدهی ماینرها نیز مانند طرح BIP8 است. یکی از دلایل انتخاب Speedy Trial این بود که اگر اجماع آن نتوانست فعال شود، بتوان نسخهای از BIP8 را با متغییر lockinontimeout=True بهجای آن منتشر کرد. از دیدگاه بسیاری، Speedy Trial از لحاظ اصلاح مکانیسمهای فعالسازی، گامی برگشتی (Backward) بود.
ارتقای بیت کوین و آینده
شکست فعالسازی سگویت در سال ۲۰۱۷ توانایی اقلیت کوچکی از ماینرها را برای اختلال در اجماع شبکه و پیادهسازی قابلیتها آشکار کرد. این ایراد باید با استفاده همزمان از چندین مکانیسم فعالسازی متفاوت که بسیار پیچیده هم بود، اصلاح میشد.
این در حالی بود که مکانیسمهای یادشده تعاملات پیچیدهای باهم داشتند. درنهایت این کار با وجود ریسک بسیار زیادش، موفقیتآمیز بود؛ اگرچه احتمال داشت که بهراحتی به فاجعه ختم شود.
از دیدگاه من (نویسنده یادداشت منتشرشده در بیت کوین مگزین)، تمام مزیت عبور از طرح BIP9 این بود که از وقوع مجدد چنین قابلیتی جلوگیری میشد. شاید برخی استدلال کنند که موفقیت Speedy Trial بدیندلیل است که بازه زمانی پیش از بستهشدنِ محدوده فعالسازی در آن بسیار کوتاهتر است؛ اما استدلال من این است که اینطور نیست. Speedy Trial همچنان این ریسک را دارد که فعالسازی بهدلیل وجود رفتار مخرب یا پاسخگونبودن اقلیتی از ماینرها به شکست منتهی شود. در عین حال، این طرح چنین القا میکند که ماینرها قدرت «وتوکردن» اجماع میان بازیگران شبکه را دارند.
من فکر میکنم که مکانیسمهای فعالسازی در بلندمدت به همین نقطه ختم میشوند. با تداوم رشد بیت کوین، تعداد کاربران ناآگاه بیشتری به اکوسیستم میپیوندند. آنان در فرایند آشنایی با بیت کوین، شاهد تمامی این رویدادها خواهند بود و مهمتر از همه اینکه از این منظر به مکانیسمهای فعالسازی خواهند نگریست که «اینجا چه خبر است؟ چه کسی تصمیم میگیرد که چه چیزی فعال شود؟» پاسخ چیست؟ توسعهدهندگان و ماینرها و شرکتها کداماند؟
اگر کاربران به این نتیجه برسند که ماینرها تصمیمگیر هستند، نگاه بیشتر کاربران بهسمت ماینرها متمایل میشود و اگر توسعهدهندگان را تصمیمگیر بدانند، بهسمت توسعهدهندگان گرایش پیدا میکند. رویکرد فعلی طرفداران بیت کوین به این مسئله نحوه برخورد و تعامل کاربران آتی را مشخص خواهد کرد. درحالحاضر، دیدگاههای متفاوتی درباره نحوه مدیریت فعالسازی مطرح است.
دیدگاه من این است که بیت کوین کور (Bitcoin Core) یا ماینرها نباید در جایگاه اِعمال نسخههای جدید فعالسازی یا در جایگاهی که قدرت وتوکردن یا لغو فعالسازی را داشته باشند، ایفای نقش کنند. فکر میکنم در آینده همه قابلیتهای جدید باید ازطریق UASF و با استفاده از متغیر LOT=True در طرح BIP8 در شبکه اجرا شوند.
میراثی که ما برای آینده بهجا میگذاریم، باید سازمانی مردمی باشد. این سازمان نباید محصول گروهی مشهور باشد که مردم آنها را مانند داورانی ببینند که تصمیم میگیرند کدام قابلیت در پروتکل بیت کوین فعال شود و کدامیک نشود.
ما نباید این تصور را در میان کاربران جدید ایجاد کنیم که توسعهدهندگان تصمیم میگیرند چه چیزی انجام شود و چه چیزی انجام نشود.
این مسئله باعث میشود که استانداردهای بسیاری برای اعمال تغییرات جدید ایجاد و در همان سطوح بالا حفظ شود، نه اینکه به وضعیتی تنزل کند که کاربران تسلیمِ تصمیم متخصصان شوند. فعالسازی را میتوان ازطریق کلاینتهای بیرونی اعمال کرد.
این روش به ما امکان میدهد که هر «کلاینتِ فعالسازی» (Activation Client) موقتاً در طول مدت پیادهسازی قابلیتی جدید بهکار گرفته شود و پس از فعالسازی موفقیتآمیز، همه به بیت کوین کور بازگردند. بدینترتیب، دیگر به حفظ طولانیمدت کلاینتهای خارج از بیت کوین کور نیازی نیست و فرایند فعالسازی نیز از دوش توسعهدهندگان بیت کوین کور برداشته میشود.
ممکن است برخی بگویند که این کار ریسک انشعاب زنجیره در زمان سافت فورک را در پی دارد. در پاسخ باید گفت واقعیت این است که در زمان انجام سافت فورک، همیشه احتمال انشعاب وجود دارد. با استفاده از متغیر LOT=True میتوان پیش از وقوع فورک احتمالی از زمان بروز آن باخبر شد.
اگر قرار باشد که زنجیره منشعب شود، این اتفاق در دوره پایانی سیگنالدهی، یعنی زمانی که اولین بلاک فاقد سیگنال فعالسازی استخراج میشود، روی خواهد داد.
هرچه باشد، بیت کوین سیستمی بازارمحور است که در آن اجماع بهصورت داوطلبانه حاصل میشود. بهاعتقاد من، این فرایندی است که تلاش برای اصلاحش از آشفتگی، اقدامی اشتباه است و ماهیت بنیادی سیستم را دچار خدشه میکند.
در عین حال چنین تلاشهایی ناگزیر به کنترل متمرکزتر و ایجاد سیستمی تصمیمگیر منجر میشود و اجماع بیت کوین را از ماهیت غیرمتمرکزش دورتر میکند.
بااینهمه، این فقط دیدگاه شخصی من درباره مکانیسمهای فعالسازی در بیت کوین است و نظرهای متفاوتی دراینباره مطرح شده است. در نهایت هیچکس نباید در ارائه دیدگاهش تردید کند. اکنون وقت آن است که دراینباره بحث کنیم، نه اینکه مدام آن را بهتعویق بیندازیم.