سمیرا ابراهیم پور | 1396.01.03

سافت فورک ها، هارد فورک ها، اجبار ها و پیش فرض ها

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

نمودار ون زیر انواع فورک را نشان می دهد:

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

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

سافت فورک ها برای کاربران مناسب تر است، چرا که نیازی به ارتقا جهت ماندن در زنجیره ندارند.

احتمال اینکه سافت فورک ها منجر به انشعاب در زنجیره شوند بسیار کمتر است، در حالی که گاهی از خطر انشعاب در زنجیره برای نشان دادن “نا امن” بودن هاردفورک استفاده می شود.

سافت فورک تنها به موافقت استخراج کنندگان/اعتباردهندگان احتیاج دارد (حتی اگر کاربران همچنان از قوانین قدیمی استفاده کنند، اما نودهایی که زنجیره را می سازند از قوانین جدید استفاده کنند، پس در هر صورت چیزهایی که تحت قوانین جدید معتبر هستند وارد زنجیره می شوند)؛ هاردفورک ها به موافقت اختیاری کاربران احتیاج دارند.

گذشته از اینها، یکی از انتقادهای اصلی که به هاردفورک ها وارد می شود این است که  هاردفورک ها “اجباری” هستند. این اجبار تحمیل فیزیکی نیست، بلکه اجباری از طریق اثر شبکه است. اینطور است که اگر شبکه قوانین را از A به B تغییر دهد، حتی اگر شما شخصا از A خوشتان می آید ولی اکثر کاربران از B خوششان می آید و از A به B تغییر داده اند، در نتیجه شما نیز برای آنکه در همان شبکه ای که سایرین قرار دارند باشید باید بر خلاف تمایل خود، قوانین را از A به قوانین B تغییر دهید.


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

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

با این حال تفاوتی اساسی بین هاردفورک ها و سافت فورک ها وجود دارد. هاردفورک ها را می توان انتخاب کرد، در حالی که سافت فورک ها به کاربران اجازه انتخاب کردن را نمی دهد. برای اینکه کاربری به زنجیره یک هاردفورک بپیوندد باید شخصا بسته نرم افزاری که قوانین فورک را پیاده سازی می کند را نصب کند، همچنین کاربرانی که با تغییر قوانین مخالف هستند می توانند (به صورت نظری) روی زنجیره قدیمی باقی بمانند.

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

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


حال بیایید نگاهی به فورک های بحث برانگیز بیاندازیم مخصوصا زمانی که ترجیحات استخراج کنندگان/تایید کنندگان در تضاد با ترجیحات کاربران است. در اینجا سه مورد وجود دارد: (لف) هاردفورک های دو طرفه، (ب) هاردفورک های با گسترش محدود و (پ) چیزی که از آن با عنوان “سافت فورک فعال شده توسط کاربر” (UASF) یاد می شود. دسته ی چهارمی هم وجود دارد که در آن استخراج کنندگان سافت فورکی را بدون رضایت کاربران فعال می کنند که جلوتر به آن خواهیم پرداخت.

ابتدا به هاردفورک دوطرفه می پردازیم. در بهترین حالت، با وضعیتی ساده روبرو هستیم. هر دو سکه در بازار داد و ستد می شوند و معامله گران (traders) ارزش نسبی این دو را تصمیم گیری می کنند. برای مورد ETC/ETH شواهد دلگرم کننده ای وجود دارد که استخراج کنندگان تصمیم می گیرند که قدرت هش خود را با توجه به نسبت قیمتی، به سکه ای اختصاص دهند که بیشتترین سود را برای آنها داشته باشد، جدای از دیدگاه ایدئولوژیک خود.

 

حتی اگر برخی از استخراج کنندگان طی ترجیحات ایدئولوژیک خود به یکی از آنها روی بیاورند، احتمال آن وجود دارد که به اندازه کافی استخراج کنندگانی وجود داشته باشند که می خواهند بین نسبت قیمت و نسبت قدرت هش تطابق ایجاد کنند و این دو را هم تراز کنند.

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

لبه دوم آن است که اگر اختلاف بسیار زیاد باشد، در نتیجه زنجیره بزرگتر می تواند به زنجیره کوچکتر حمله 51درصدی بکند. البته حتی در مورد انشعاب ETH/ETC با نسبت 10:1 هم این اتفاق نیافتاد. هرچند همیشه این امکان وجود دارد که اگر استخراج کنندگان در زنجیره غالب برای جدایی، اجبار را ترجیح بدهند.


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

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

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


آخرین مورد فورکی که در بالا به آن اشاره شد سافت فورک فعال شده توسط کاربر (UASF) بود. در این حالت، کاربر بدون آنکه زحمت گرفتن توافق جمعی از سمت استخراج کنندگان را به خود بدهد، قوانین سافت فورک را فعال می کند. انتظار می رود که استخراج کنندگان نیز بدون درنظر گرفتن منافع اقتصادی وارد این راه شوند. اگر بسیاری از کاربران با UASF همراه نشوند در نتیجه انشعاب سکه به وجود خواهد آمد و این موضوع منجر به اتفاق افتادن سناریویی مشابه با هاردفورک با گسترش محدود می شود، با این تفاوت که “خطر در معرض نابودی بودن” که باعث بی اعتباری هاردفورک می شد، در اینجا باعث نفع این فورک می شود. حتی اگر UASF امکان انتخاب بدهد، از عدم تقارن اقتصادی برای پیش بردن خود به سمت موفقیت استفاده می کند.

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

حالا سه مجموعه قانون داریم:

  1. قوانین اصلی که کد اجرایی X در آن همیشه معتبر است.
  2. قوانینی که کد اجرایی X تنها در صورتی معتبر است که بقیه تراکنش ها با قوانین جدید کار کنند.
  3. قوانینی که کد اجرایی X در آن همیشه نامعتبر است.

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



دیدگاه هایی که در این مقاله ارائه شده اند، متعلق به نویسنده می باشند و لزوماً مربوط به Coiniran نمی باشد و نباید به آن نسبت داده شود.



Source & Images via vitalik , cdn1