در این مقاله به بررسی تفاوت های دو مفهوم سافت فورک (Soft Fork) و هارد فورک (Hard Fork) می پردازیم ، همراه داتیس نتورک باشید.
به طور کلی در برنامهنویسی دو نوع فورک: سخت (هارد فورک) و نرم (سافتفورک) وجود دارد. هارد فورک تغییری در یک پروتکل است که باعث نامعتبر شدن نسخههای پیشین میشود. اگر نسخههای قبلی همچنان به اجرا درآیند، در نهایت پروتکل کاملا متفاوتی پیدا خواهند کرد و دیتای آنها نسبت به نسخه جدید متفاوت خواهد شد.
این مساله باعث سردرگمیشدید میشود و ممکن است به خطا بیانجامد. در بیتکوین، گاهی برای تعریف پارامترهایی همچون اندازه بلوک، دشواری مسائل رمزنگاریشدهای که نیاز به حل دارند، محدودیت اطلاعات اضافی قابل افزودن و غیره، لازم است از هارد فورک استفاده شود. بروزرسانی و ایجاد تغییر در هر یک از این قوانین باعث میشود بلوکها از سوی یک پروتکل جدید پذیرفته شوند اما از سوی نسخههای قبلی رد شوند؛ در نتیجه مشکلات بزرگی ایجاد میشود که حتی ممکن است وجوه از دست بروند.
برای نمونه اگر قرار است محدودیت اندازه بلوک از 1 MB به 4 MB افزایش داده شود، آنگاه یک بلوک 2 MB از سوی گرههایی که با نسخه جدید کار میکنند پذیرفته میشود اما از سوی گرههایی که با نسخهی قبلی کار میکنند مردود اعلام میشود. فرض کنیم این بلوک 2 مگابایتی توسط یک گره بهروزشده تایید میشود و به بلاکچین افزوده میشود، اگر بلوک بعدی توسط گرهی که با نسخهی قبلی پروتکل کار میکند تایید شود آنگاه چه رخ میدهد؟ گره سعی میکند بلوک خود را به بلاکچین بیفزاید اما متوجه میشود که آخرین بلوک اضافه شده معتبر نیست؛ در نتیجه آن بلوک را نادیده میگیرد و بلوک جدید خود را به جای قبلی میگذارد و ناگهان دو بلاکچین خواهیم داشت؛ یکی از آنها حاوی هر دو نوع بلوک قدیم و جدید است و دیگری تنها با بلوکهای نسخهی قدیمیکار میکند.
اینکه کدام زنجیره سریعتر رشد میکند به گرههایی بستگی دارد که اعتبار بلوکهای بعدی را تایید میکنند و امکان دارد در ادامه باز هم انشعابهایی ایجاد شود و همچنین این امکان وجود دارد که دو یا چند زنجیره هم راستا با یکدیگر همچنان ادامه پیدا کنند. هارد فورک به این صورت بوده و معمولا با آشفتگی همراه است.
هارد فورکها ریسک زیادی هم دارند زیرا ممکن است بیتکوینهای پرداخت شده در یک بلوک جدید امکان خرج شدن در یک بلوک قدیمیتر را داشته باشند (زیرا بازرگانان، کیف پولها و کاربرانی که کد قبلی را اجرا میکنند، متوجه خرج شدن در کد جدیدی که از نظر آنها نامعتبر است نخواهند شد). تنها راه حل ممکن این است که یکی از انشعاب را رها کنیم و کار را با یک زنجیره ادامه دهیم. این کار باعث میشود برخی استخراجکنندگان شانس خود را از دست بدهند (خود تراکنش ها گم نمیشوند بلکه به مکان جدیدی انتقال پیدا میکنند).
راه دیگر آن است که تمامیگرهها همزمان به نسخه جدیدتر بیایند؛ انجام این کار در سیستم نامتمرکزی که به شدت گسترده میباشد کاری بسیار سخت است؛ اگر هیچکدام از این راهها عملی نباشد، بیتکوین منشعب میشود. اتفاقی که قبلا افتاده و بیتکوینکش (bitcoin cash) نمونه آن است.
سافت فورک این قابلیت را دارد که همچنان با نسخههای قدیمیتر کار کند. برای نمونه اگر با اعمال قوانین سختگیرانهتر، یک پروتکل تغییر پیدا کند و تغییری کلی اعمال شود یا تابع جدیدی افزوده شود که به هیچ وجه روی ساختار تاثیر نمیگذارد، آنگاه بلوکهای نسخهی جدید توسط گرههای نسخهی قدیمی پذیرفته میشوند. عکس این روند امکان پذیر نیست و نسخهی جدید که سختگیرانهتر است، بلوکهای نسخهی قدیمی را قبول نخواهد کرد.
در بیتکوین، در حالت ایده آل استخراجکنندگان نسخه قدیمی متوجه میشوند که بلوکهای آنها رد شده است و در نتیجه خود را ارتقاء میدهند. هرچه استخراجکنندگان بیشتری به نسخه جدید ارتقاء پیدا کنند، زنجیرهی دارای بیشترین بلوکهای جدید بلندتر میشود و در نتیجه کار بلوکهای نسخهی قدیمی مدام سختتر شده و ماینرها به فکر ارتقاء میافتند و به این ترتیب سیستم خود را اصلاح میکند. از آنجایی که بلوکهای نسخه جدید هم از سوی گرههای قدیمی و هم از سوی گرههای ارتقاء یافته پذیرش میشوند، در نهایت بلوکهای نسخهی جدید برنده خواهند شد.
برای نمونه فرض کنید، جامعه یک پول دیجیتال تصمیم بگیرد اندازهی بلوک را از حداکثر محدودهی 1MB به 0.5MB کاهش دهد. گرههای نسخه جدید بلوکهای 1 مگابایتی را رد خواهند کرد و (در صورتی که استخراج با نسخه بهروزرسانی شده کد صورت گیرد)، کار ساخت را روی بلوک قبلی انجام خواهند داد؛ در نتیجه یک فورک موقت ایجاد میشود. این یک سافتفورک است و تاکنون بارها اتفاق افتاده است.
در اصل بیتکوین برای اندازه بلوک محدودیتی نداشت و ایجاد محدودیت 1MB در بیتکوین به واسطهی یک سافت فورک صورت گرفت، چرا که قانون جدید « سختتر » از قبلی بود. تابع پرداخت به هش اسکریپت (pay-to-script-hash) که بدون ایجاد تغییر در ساختار کد آن را گسترش میدهد نیز به شکل موفقیتآمیزی از طریق یک سافت فورک به سیستم اضافه شده است. این قبیل پیوستها اغلب تنها نیازمند ارتقاء توسط بخش بزرگی از استخراجکنندگان هستند و در نتیجه به آسانی میسر میشوند و کمتر اختلاف و تضاد ایجاد مینمایند.
سافت فورکها برخلاف هارد فورکها فاقد ریسک خرج دوباره میباشند، زیرا بازرگانان و کاربرانی که با گرههای قدیمیکار میکنند هر دو نوع بلوک نسخهی قدیمیو جدید را میخوانند. برای مشاهدهی نمونههایی از تغییرات که نیازمند سافت فورک هستند به softfork wishlist مراجعه نمایید.