
ویتالیک بوترین یکی از مغزهای متفکر پایهگذار شبکه اتریوم است. این نابغه روس یکی از مهمترین افراد فعال در حوزه بلاکچین است. از این رو در مجموعه میهن بلاکچین تصمیم گرفتیم تا مطالب بلاگ شخصی او که به نوعی تاریخ زنده بلاکچین است را برای علاقمندان ترجمه کنیم. مطلبی که در ادامه میآید ترجمهای از مطلبی به همین نام در سایت بوترین است که در تاریخ ۱۴ مارچ ۲۰۱۷ منتشر شد. با این مطلب خواندنی همراه باشید.
یکی از موضوعات مورد بحث در فضای بلاکچین، انتخاب هاردفورک یا سافتفورک به عنوان مکانیسم ارتقای پروتکل است. تفاوت اصلی بین این دو در این است که در سافتفورک قوانین پروتکل تغییر میکنند. این کار با محدود کردن مجموعه تراکنشهایی که معتبر هستند انجام میپذیرد (باید اکثریت نودها تغییر قوانین پروتکل را بپذیرند). بنابراین نودهایی که هنوز با قوانین قدیم کار میکنند همچنان روی شبکه جدید کار خواهند کرد. در حالیکه هاردفورک به تراکنشها و بلاکهای نامعتبر گذشته این اجازه را میدهد که مجاز شوند. بنابرین استفادهکنندهها باید تجهیزات خود را بهروزرسانی کنند تا در این زنجیره فورک شده باقی بمانند. هاردفورک خود به دو زیرشاخه تقسیم میشود: هاردفورکهای کاملا انبساطی (Strictly Expanding) که تعداد تراکنشهای مجاز شبکه را به شدت گسترش میدهد و در واقع قوانین گذشته، سافت فورکی برای قوانین تازه خواهند بود و هاردفورکهای دوطرفه (bilateral) که در آن مجموعه قوانین پروتکل اصلی و پروتکل هاردفورک شده با هم منطبق نیستند. در دیاگرام ون زیر انواع فورکها نشان داده شده است.
مزایایی که هرکدام از این فورکها دارند به شرح زیر است:
- هاردفورک انعطاف بیشتری برای ارتقای پروتکل به توسعهدهندگان میدهد. زیرا لازم نیست تا قوانین جدید تابعی از قوانین قدیمی باشند.
- سافتفورک راحتی بیشتری را به کاربران میدهد. زیرا برای باقی ماندن در زنجیره، بروزرسانی الزامی نیست.
- سافتفورک معمولا منجر به چند پارگی زنجیره نمیشود.
- سافتفورک به پذیرش از سوی ماینرها (ولیدیتورها) نیاز دارد (حتی اگر کاربران از قوانین قدیمی پیروی کنند و نودها از قوانین جدید، تنها مواردی مجاز خواهند بود و در زنجیره باقی خواهند ماند که تحت قوانین جدید تایید شدهاند) در حالی که در هاردفورک به انتخاب فعالانه از سمت کاربران نیاز هست.
جدا از این موارد، انتقادی که به هاردفورکها وارد است اجباری بودن آنهاست. منظور از این اجبار جنبه فیزیکی آن نیست بلکه اجباری است که از طریق تاثیرات شبکه ایجاد میشود. اگر قوانین شبکه از A به B تغییر کنند، حتی اگر همچنان ترجیح شما استفاده از A باشد ولی اکثریت شبکه B را انتخاب کنند، شما هم باید از B پیروی کنید تا با دیگران در یک شبکه یکسان باقی بمانید.
هاردفورک و زیرمجموعههای آن عموما به دلیل «تلاش برای تصرف خشن» شبکه و «مجبور» کردن کاربران به همراهی مورد انتقاد قرار میگیرند. به علاوه به خاطر خطر گسستگی شبکه برخی آن را ناامن میدانند.
از دید شخص من (ویتالیک) این انتقادات اشتباه و در برخی موارد عقبمانده هستند. دیدگاه زیر منحصر به اتریوم یا بیت کوین یا هر بلاکچین دیگری ندارد بلکه از جنبههای عمومی این سیستمها نشات میگیرد و قابل تعمیم به هرکدام از آنهاست. به علاوه این دیدگاه در خصوص موارد چالشبرانگیز صدق میکند مثل زمانی که بخش زیادی از یک گروه مهم (مثا ماینرها و یا کاربران) با فورک مخالف باشند. اگر تغییر مناقشهبرانگیز نباشد، فارغ از آن که چه روشی برگزینید، عموما خطری پروتکل را تهدید نمیکند.
اول از همه باید در مورد اجبار صحبت کنیم. هاردفورکها و سافتفورکها هر دو پروتکل را در جهتی تغییر میدهند که بعضی کاربران نمیپسندند. هر تغییری در پروتکل که ۱۰۰٪ حمایت را نداشته باشد اینگونه است. بنابرین در هر دو نوع فورک اجبار را به فرم اثر شبکه داریم.
یک تفاوت اساسی بین هاردفورک و سافتفورک وجود دارد و آن این است که در هاردفورک بحث انتخاب وجود دارد. کاربری که میخواهد به زنجیره هاردفورکشده ملحق شود، باید شخصا نرمافزاری را نصب کند تا قوانین جدید لحاظ شود. کاربرانی که با تغییر مخالفند میتوانند بدون ارتقای نرمافزار خود در زنجیره قبلی باقی بمانند. کما اینکه این اتفاق در گذشته نیز اتفاق افتاده است.
در مورد هر دو نوع هاردفورک این قضیه صدق میکند. اما در سافتفورک بعد از وقوع فورک، اگر فورک موفق باشد، زنجیره فورک نشدهای وجود نخواهد داشت. بنابرین در سافتفورکها به شکلی بنیانی به اجبار گرایش دارند تا جداییخواهی در حالی که در هاردفورکها وضعیت برعکس است. اصول اخلاقی شخص من (ویتالیک) به جداییطلبی بیشتر متمایل است هر چند باقی افراد ممکن است نظرات متفاوتی داشته باشند (مهمترین نظر مخالف مشترکی که وجود دارد این است که اثر شبکهای بسیار مهم است و لزوم آیندهای که تنها یک کوین بر دیگر کوینها فائق آید، ایجاب میکند تا به اجبار تن دهیم، هرچند نظرات متعادلتری نیز در این خصوص وجود دارد).
با این وجود عموم مردم سافتفورک را نسبت به هاردفورک کمتر اجباری میدانند. این دیدگاه از اینجا ناشی میشود که هاردفورک کاربران را به نصب آپدیتهای نرمافزاری مجبور میکند در حالی که در سافتفورک کاربران لازم نیست تا کار خاصی را انجام دهند. این استدلال اشتباه است. مسئله این نیست که آیا هر کاربر لازم است تا کار ساده فشار دادن دکمه دانلود را انجام دهد. بلکه مسئله این است که آیا هر کاربر مجبور به پذیرش تغییر در قوانین پروتکل خواهد بود که ممکن است با آن موافق نباشد و با این معیار هردو نوع فورک نهایتا اجبار را دارند و در این بین هاردفورک در این زمینه عملکردش با اجبار کمتری همراه است.
حال نگاهی به فورکهای بحثبرانگیز میاندازیم. به خصوص آنهایی که خواستههای ماینر و کاربر در تعارض هستند. سه حالت وجود دارد: هاردفورکهای دو طرفه، هاردفورکهای کاملا انبساطی و سافتفورکهای فعال شده توسط کاربر (UASF). دسته چهارمی نیز وچود دارد که در آن ماینرها بدون رضایت کاربر یک سافت فورک را فعال میکنند؛ به این موضوع خواهیم پرداخت.
- هارد فورک دو طرفه: در بهترین حالت، شرایط بسیار ساده خواهد بود. دو کوین در بازار مبادله میشوند و معاملهگران تصمیم میگیرند که ارزش آنها بر حسب هم چقدر باشد. در مورد جفت ETH/ETC شواهد روشنی داریم که ماینرها ترجیح میدهند که هشریت خود را به نسبت قیمت هر کدام به آن اختصاص دهند تا بیشترین سود را بدست آورند و تعصبی به هیچکدام از آنها ندارند.
حتی اگر ماینرهای باشند که اختصاص هشریت خود را بر مبنای دیدگاه شخصی خود اختصاص دهند، تعداد ماینرهای کافی وجود خواهند داشت که به نحوی آربیتراژ کنند تا نسبت اختصاص هشریت با توجه به نسبت قیمت بین دو کوین انجام شود. اگر گروهی از ماینرها به هدف ماین نکردن بر روی زنجیرهای تشکیل شود، انگیزههای (مالی) متقنی برای شکست خوردن این کارتل وجود خواهد داشت.
دو حالت خاص در اینجا قابل توجه است. نخست اینکه این احتمال وجود دارد به خاطر الگوریتم تعیین سختی ناکارا، ارزش ماینینگ پایین آید زیرا قیمت کوین افت کرده است اما سختی به تناسب آن پایین نرفته است و به همین دلیل ماین کردن دیگر به صرفه نیست و ماینری حاضر نیست که با تحمل ضرر به ماین کردن (و ادامه زنجیره) اقدام کند تا اینکه سختی به شرایط تعادل بازگردد. این اتفاق در خصوص اتریوم رخ نداد اما ممکن است برای بیت کوین رخ دهد. در این صورت، زنجیره اقلیت ممکن است هیچگاه نتواند پا بگیرد و خواهد مرد. دقت کنید که پرسش در خصوص اینکه آیا این کار خوبی است یا نه بستگی به عقاید شما در خصوص اجبار یا جداییطلبی دارد؛ همانطور که پیشتر اشاره کردم با توجه به عقیده شخصیام، اعتقاد دارم که چنین الگوریتمهای سختی که سبب سختتر شدن کار زنجیرهّای اقلیت میشوند بد هستند.
حالت دوم این است که اگر نابرابری زیادی وجود داشته باشد، زنجیره اکثریت میتواند حمله ۵۱٪ به زنجیره کوچکتر را داشته باشد. البته در مورد ETH/ETC با وجود نسبت ۱۰ به ۱ این اتفاق نیفتاد؛ بنابراین این مساله را نمیتوان حتمی در نظر گرفت. با این حال این احتمال همواره وجود دارد که ماینرهای زنجیره غالب اجبار را به جداییطلبی ترجیح دهند و بر اساس این اصل عمل نمایند.
- هاردفورک کاملا انبساطی: از آنجایی که زنجیره فورک نشده تحت قوانین زنجیره فورک شده معتبر است بنابرین اگر زنجیره فورک شده قیمتی پایینتر از زنجیره فورک نشده داشته باشد نتیجه آن پایینتر بودن هشریت آن نسبت به زنجیره فورک نشده خواهد بود. بنابرین طبق قوانین کلاینت اولیه (زنجیر اصلی) و کلاینت فورک شده، زنجیره فورک نشده به عنوان بلندترین زنجیره انتخاب خواهد شد و زنجیره فورک شده نابود خواهد شد.
استدلالهایی در خصوص احتمال ذاتی موفقیت چنین فورکهایی وجود دارد، چرا که احتمال نابودی زنجیره فورک شده خود را در قیمت منعکس خواهد کرد و با پایین آمدن قیمت، انگیزه برای اختصاص هشریت به آن پایینتر میآید و این سبب ایجاد دور باطلی میشود که به نابودی زنجیره ختم خواهد شد. از نظر من این استدلال درستی است و دلیل خوبی برای این قضیه است که هر هاردفورک ادامهداری باید از نوع دوطرفه باشد.
توسعه دهندگان بیت کوین آنلیمیتد (Bitcoin Unlimited) این پیشنهاد را مطرح کردند که به صورت دستی پس از انجام هاردفورک، آن را به شکل دوطرفه تبدیل نمایند. اما انتخاب بهتر در این مورد این است که دوطرفه بودن در سازوکار داخلی گنجانده شود. به عنوان مثال در مورد بیت کوین اگر قانونی در مورد ممنوعیت بعضی از کدهای (opcode) بدون استفاده وضع شود و بعد از آن تراکنشی که حاوی آن کدها باشد روی زنجیره فورک نشده انجام شود، میتوان از آن بلوک زنجیره فورک نشده را برای همیشه نامعتبر دانست. در مورد اتریوم، با توجه به جزییات متنوعی که در خصوص نحوه محاسبه حالت وجود دارد، تقریبا تمامی هاردفورک به صورت اتوماتیک دو طرفه خواهند بود. سایر زنجیرهها نیز بنابر معماری آنها ویژگیهای متفاوتی را در این زمینه دارند.
- سافتفورکهای توسط کاربر فعال شده (UASF): در اینجا کاربران میتوانند بدون توجه به اجماع ماینرها آن را فعال کنند؛ انتظار میرود ماینرها به دلیل صرفه اقتصادی با کاربران همراه شوند. اگر کاربران زیادی از این فورک استقبال نکنند، گسستی در شبکه رخ خواهد داد و شرایطی مشابه هاردفورک کاملا انبساطی پیش خواهد آمد با این تفاوت که خلاف وضعیت هاردفورک کاملا انبساطی، این بار خطر نابودی زنجیره فورک نشده را تهدید میکند. اگرچه UASF به صورت انتخابی عمل میکند اما با استفاده از عدم تقارن در مسائل اقتصادی، خود را در جهت موفقیت قرار میدهد (اگر یک فورک اینچنینی نتواند محبوبیت لازم را کسب کند، منجر به شکاف زنجیره خواهد شد).
به هر حال UASF بازی خطرناکی است. به عنوان مثال فرض کنید توسعهدهندگان یک پروژه میخواهند بخشی از کد پروژه که همه تراکنشهای گذشته را تایید کرده است را با کدی که تنها بعضی از آنهایی را تایید می کند که مطابق با یک ویژگی جدید هستند، جایگزین کنند. ویژگی جدیدی که از نظر فنی یا دیگر وجوه، مطابق میل ماینرها نیست. در صورتی که ماینرها مخالف این تغییر باشند، میتوانند به صورت یک طرفه سافتفورکی را تهیه کنند که تمام تراکنشهایی که از ویژگی سافتفورک اشاره شده استفاده میکنند را نامعتبر کند. در این وضعیت ما ۳ مجموعه قانون خواهیم داشت:
- قوانین اصلی که در آن کد X معتبر است
- قوانینی که در آن کد X تنها زمانی معتبر است که سایر تراکنشها با قوانین جدید مطابقت داشته باشند
- قوانینی که در آن کد X همواره نامعتبر است
توجه شود که مورد دوم خود سافتفورکی برای مورد اول است و مورد سوم سافتفورکی برای گزینه دوم است. فشار اقتصادی در این وضعیت به نفع مورد سوم است بنابراین سافتفورک مورد دوم شکست میخورد.
نتیجه این است که سافتفورکها بازی خطرناکی هستند و اگر ماینرها به مقابله با این نوع سافتفورک اقدام کنند وضعیت حتی بغرنجت رخواهند شد. هاردفورکهای کاملا انبساطی نیز خطرناکاند. سافتفورکهای فعال شده توسط ماینر ذاتی اجباری دارند در حالی که سافتفورکهای توسط کاربر فعال شده کمتر اجباری خواهند بود. هرچند هنوز به دلیل فشار اقتصادی تقریبا اجباری هستند و بنابرین مخاطرات خود را به همراه دارند. اگر واقعا تغییری پایدار را در زنجیره میخواهید و هزینههای بالای اجتماعی آن را متقبل شدهاید، از هارفورک دوطرفه استفاده کنید. برای جلوگیری از حمله تکرار (replay attack) زمان بگذارید و به بازار اجازه دهید تا تصمیم بگیرد.