فورک در دنیای ارز دیجیتال به چه معناست و چرا وجود فورکها به نظر تهدیدی برای آینده ارزهای دیجیتال میباشد؟ آیا وجود فورکها تاثیر بسزایی در آینده بلاکچین دارد یا خیر؟ و تفاوت بین هاردفورک و سافتفورک در چیست؟
هاردفورک در مقابل سافتفورک
در اصطلاح برنامه نویسی، "چنگال یا فورک" یک اصلاح کد منبع باز است. معمولاً کدی که فورک میشود مشابه کد اصلی است، اما تغییراتی در کد اصلی ایجاد میکند که باعث تغییراتی در سیستم کلی خواهد شد. فورکها باعث میشوند یک پروژه به دو یا چند قسمت تقسیم شود که این اتفاق زمانی رخ میدهد که مسیر نسخه اصلی مورد قبول نباشد و با کپی کردن کدمنبع و ایجاد تغییراتی در آن، برنامهای جدید از دل برنامه قبلی بیرون میآید. گاهی اوقات از فورک برای آزمایش یک فرآیند استفاده میشود، اما در مورد ارزهای رمزنگاری شده، بیشتر برای اجرای یک تغییر اساسی یا ایجاد یک دارایی جدید با ویژگیهای مشابه (اما نه کاملا یکی) با ویژگی اصلی استفاده میشود. همهی فورکها عمدی نیستند.
در یک پایگاه با کد منبع باز که به طور گسترده توزیع شده، زمانی که همه گرهها اطلاعات یکسانی را تکرار نکنند، فورک میتواند به طور تصادفی اتفاق بیفتد. معمولاً این فورکها شناسایی و حل میشوند، اما اکثر فورکهای ارزهای دیجیتال به دلیل اختلاف نظر بر سر ویژگیهای تعبیهشده است. نکتهای که باید در مورد فورکها در نظر داشت این است که آنها یک "تاریخچه مشترک" دارند. سابقه تراکنشها در هر یک از زنجیرهها (قدیمی و جدید) قبل از جدا شدن یکسان است.
هاردفورک
دو نوع فورک در برنامهنویسی وجود دارد: فورکسخت و فورکنرم. هاردفورک تغییری اساسی در پروتکل ایجاد کرده و نسخههای قدیمیتر را نامعتبر میکند. اگر نسخههای قدیمیتر به کار خود ادامه دهند، در نهایت با پروتکل متفاوت و با دادههای متفاوت نسبت به نسخه جدیدتر مواجه میشوند که باعث سردرگمی قابل توجه و خطای احتمالی میشود.
در بیتکوین، یک هاردفورک می تواند موجب تغییرات اساسی در سیستم آن شود. تغییراتی مانند تغییر اندازه بلوک، سخت کردن حل معمای رمزنگاری ، محدود کردن برای دستیابی به اطلاعات اضافی و غیره. تغییر در هر یک از این قوانین میتواند باعث شود بلوکها توسط پروتکل جدید پذیرفته شوند، اما نسخههای قدیمیتر آن را رد کنند و این امر منجر به مشکلات جدی خواهد شد و همچنین از دست دادن سرمایه نیز در آن امکان پذیر است. به عنوان مثال، اگر محدودیت اندازه بلوک از 1 مگابایت به 4 مگابایت افزایش یابد، یک بلوک 2 مگابایتی توسط گرههایی که نسخه جدید را اجرا میکنند پذیرفته میشود، اما توسط گرههایی که نسخه قدیمیتر را اجرا میکنند، رد میشود.
تصور کنید یک بلوک 2 مگابایتی توسط یک گره به روز شده، تایید شده و به بلاک چین اضافه می شود. اگر بلوک بعدی توسط گرهای که نسخه قدیمیتری از پروتکل را اجرا میکند تأیید شود، چه؟ سعی می کند بلاک خود را به بلاک چین اضافه کند، اما تشخیص میدهد که آخرین بلوک معتبر نیست. بنابراین، آن بلوک را نادیده میگیرد و اعتبار جدید آن را به بلاک قبلی متصل میکند. ناگهان دو بلاک چین دارید، یکی با بلوکهای نسخه قدیمیتر و یکی با بلوک نسخه جدید، اینکه کدام زنجیره سریعتر رشد میکند بستگی به این دارد که کدام گرهها بلوکهای بعدی را تأیید کنند، و حتی ممکن است دو زنجیره (یا بیشتر) به طور موازی به طور نامحدود رشد کنند.
این اتفاق یک هاردفورک است و میتواند بسیار خطرناک باشد، زیرا ممکن است بیتکوینهایی که در یک بلوک جدید خرج میشوند، دوباره روی یک بلوک قدیمی نیز خرج شوند (زیرا تجار، کیف پولها و کاربرانی که کد قبلی را اجرا میکنند، نمی توانند کد جدید نامعتبر را از کد قدیمی تشخیص دهند. تنها راه حل این است که یک زنجیره به نفع دیگری رها شود، که شامل ضرر برخی ماینرها میشود (خود تراکنشها از بین نمیروند، فقط دوباره تخصیص داده میشوند). یا، همه گرهها باید همزمان به نسخه جدیدتر سوئیچ کنند، که دستیابی به آن در یک سیستم غیرمتمرکز و گسترده دشوار است. یا، بیتکوین تقسیم میشود، که این اتفاق افتاده است (بیتکوین کش).
چنگال نرم یا سافتفورک
سافتفورک هنوز هم میتواند با نسخه های قدیمیتر کار کند. به عنوان مثال، اگر یک پروتکل به گونهای تغییر کند که قوانین را سختتر کند، یک تغییر ظاهری را اجرا کند یا تابعی را اضافه کند که به هیچ وجه بر ساختار تأثیری نداشته باشد، بلوک های نسخه جدید توسط گرههای نسخه قدیمی پذیرفته میشوند. ولی برعکس، نسخه جدیدتر و "محکم تر" بلاک های نسخه قدیمی را رد میکند.
در بیتکوین، ماینرهای نسخه قدیمی در حالت ایدهآل متوجه میشوند که بلاکهای آنها رد شده است و آن را ارتقا میدهند. با ارتقای بیشتر ماینرها، زنجیره با بلاکهای عمدتاً جدید طولانیتر میشود، و باعث میشود تعداد بلاکهای نسخه قدیمی کم شود، از آنجایی که نسخههای جدید توسط گرههای قدیمی و ارتقا یافته پذیرفته میشوند، بلوکهای نسخه جدید در نهایت برنده میشوند. به عنوان مثال، میگویند که اجماع تصمیم گرفت اندازه بلاک را از حد فعلی 1 مگابایت به 0.5 مگابایت کاهش دهد. گرههای نسخه جدید بلاکهای 1 مگابایتی را رد میکنند و بر روی بلاک قبلی (اگر با نسخه بهروزرسانی شده کد استخراج میشد) ساخته میشوند، که باعث فورک موقت میشود.
به این اتفاق سافتفورک میگویند و قبلاً چندین بار اتفاق افتاده است. در ابتدا، بیتکوین محدودیت اندازه بلاک نداشت. معرفی محدودیت 1 مگابایتی از طریق سافتفورک انجام شد، زیرا قانون جدید «سختتر» از قانون قبلی بود. تابع pay-to-script-hash، که کد را بدون تغییر ساختار بهبود میبخشد، نیز با موفقیت از طریق سافتفورک اضافه شد. این نوع اصلاحیه معمولاً نیازمند آن است که اکثر ماینرها آن را ارتقا دهند، که این امر امکانپذیر است و احتمال مختل شدن آن بسیار کم میباشد. سافتفورکها بر خلاف هاردفورکها خطر دوبار مصرفشدن را ندارند، زیرا کاربرانی که گرههای قدیمی را اجرا میکنند، هر دو بلاک نسخه جدید و قدیمی را میخوانند.