Blockchain

Жорсткі форки, м’які форки, значення за замовчуванням і примус

Одним із важливих аргументів у просторі блокчейну є те, чи хардфорки чи софтфорки є кращим механізмом оновлення протоколу. Основна відмінність між ними полягає в тому, що м’які форки змінюють правила протоколу строго скорочення набір транзакцій, який є дійсним, тому вузли, які дотримуються старих правил, все одно потраплятимуть у новий ланцюжок (за умови, що більшість майнерів/валідаторів реалізують форк), тоді як хардфорки дозволяють раніше недійсним транзакціям і блокам стати дійсними, тому клієнти повинні оновити своїх клієнтів, щоб залишатися на хард-форку. Існує також два підтипи хардфорків: суворо розширюється жорсткі форки, які суворо розширюють набір дійсних транзакцій, тому фактично старі правила є м’яким форком щодо нових правил, і двосторонній хардфорки, де два набори правил несумісні в обох напрямках.

Ось діаграма Венна для ілюстрації типів вилок:

Переваги, які зазвичай називають для обох, такі.
  • Хардфорки надають розробникам набагато більше гнучкості в оновленні протоколу, оскільки їм не потрібно піклуватися про те, щоб нові правила «відповідали» старим правилам.
  • М’які вилки зручніші для користувачів, оскільки користувачам не потрібно оновлюватися, щоб залишатися в ланцюзі
  • М’які вилки рідше призводять до розриву ланцюга
  • Для програмних розгалужень потрібна лише згода майнерів/валідаторів (навіть якщо користувачі все ще використовують старі правила, якщо вузли, що створюють ланцюжок, використовують нові правила, тоді в ланцюжок у будь-якому випадку потраплять лише речі, дійсні за новими правилами); жорсткі вилки вимагають вибрати в згода користувачів

Окрім цього, одна основна критика, яку часто дають хардфоркам, полягає в тому, що хардфорки є «примусовими». Вид примусу, який тут мається на увазі, не є фізичною силою; скоріше, це примус через мережевий ефект. Тобто, якщо мережа змінює правила з A на B, то навіть якщо вам особисто подобається A, якщо більшості інших користувачів подобається B і вони переходять на B, тоді ви повинні перейти на B, незважаючи на ваше особисте несхвалення змін, щоб бути на та сама мережа, що й усі інші.

Прихильників хардфорків часто висміюють як спроби здійснити «вороже захоплення» мережі та «змусити» користувачів погодитися з ними. Крім того, ризик розриву ланцюга часто використовується, щоб назвати хардфорки «небезпечними».


Моя особиста точка зору полягає в тому, що ця критика є хибною, до того ж у багатьох випадках абсолютно протилежною. Ця точка зору не стосується Ethereum, Bitcoin або будь-якого іншого блокчейну; він виникає із загальних властивостей цих систем і застосовний до будь-якої з них. Крім того, наведені нижче аргументи стосуються лише суперечливих змін, коли значна частина принаймні однієї групи (майнери/валідатори та користувачі) не схвалюють їх; якщо зміна не викликає суперечок, то її, як правило, можна безпечно зробити, незалежно від формату розгалуження.

Перш за все обговоримо питання примусу. Жорсткі та м’які розгалуження змінюють протокол таким чином, що може не сподобатися деяким користувачам; будь-який зміна протоколу зробить це, якщо він має менше ніж точно 100% підтримки. Крім того, це майже неминуче принаймні деякі незгодних, за будь-якого сценарію, цінують ефект мережі від дотримання більшої групи більше, ніж вони цінують власні уподобання щодо правил протоколу. Отже, обидва типи розгалужень є примусовими, у значенні цього слова через ефект мережі.

Однак існує суттєва різниця між жорсткими та м’якими вилками: хардфорки є опціональними, тоді як м’які форки не дозволяють користувачам «вибирати» взагалі. Для того, щоб користувач міг приєднатися до жорстко розгалуженого ланцюга, він повинен особисто встановити пакет програмного забезпечення, який реалізує правила розгалуження, і група користувачів, які не згодні зі зміною правила навіть більше, ніж вони цінують мережеві ефекти, теоретично можуть просто залишитися на старий ланцюг – і, практично, така подія вже сталося.

Це вірно як у випадку жорстких вилок, що розширюються, так і у випадку двосторонніх хард-вилок. Однак у випадку з м’якими вилками якщо розгалуження вдається, нероздвоєний ланцюг не існує. Отже, м’які форки чітко інституційно віддають перевагу примусу, а не відокремленню, тоді як хардфорки мають протилежне упередження. Мої власні моральні погляди спонукають мене віддавати перевагу відокремленню, а не примусу, хоча інші можуть відрізнятися (найпоширенішим аргументом є те, що мережеві ефекти дійсно дуже важливі, і важливо, щоб «одна монета керує ними всіма“, хоча існують і більш помірковані версії цього).

Якби мені довелося здогадатися, чому, незважаючи на ці аргументи, софт-форк часто називають «менш примусовим», ніж хард-форк, я б сказав, що це тому, що він відчуває, що хард-форк «змушує» користувача встановити оновлення програмного забезпечення, тоді як з м’якою вилкою користувачам «не потрібно» взагалі нічого робити. Однак ця інтуїція є помилковою: важливо не те, чи повинні окремі користувачі виконувати простий бюрократичний крок, натискаючи кнопку «завантажити», а скоріше те, чи є користувач чи ні змушені погодитися на зміну правил протоколу що вони воліли б не прийняти. І за цією метрикою, як згадувалося вище, обидва типи форків зрештою є примусовими, і саме хардфорки виявляються дещо кращими у збереженні свободи користувача.

Тепер давайте подивимося на дуже суперечливі форки, особливо форки, де конфліктують налаштування майнера/валідатора та налаштування користувача. Тут є три випадки: (i) двосторонні хардфорки, (ii) жорсткі форки, що суворо розширюються, і (iii) так звані «м’які форки, активовані користувачем» (UASF). Четверта категорія — майнери активують софтфорк без згоди користувача; ми дійдемо до цього пізніше.

По-перше, двосторонні жорсткі вилки. У кращому випадку ситуація проста. Дві монети торгуються на ринку, і трейдери визначають відносну вартість двох монет. У випадку з ETC/ETH ми маємо переконливі докази того, що майнери з великою ймовірністю просто призначають свій хешрейт монетам на основі співвідношення цін, щоб максимізувати свій прибуток, незалежно від своїх власних ідеологічних поглядів.

Навіть якщо деякі майнери сповідують ідеологічні уподобання до тієї чи іншої сторони, надзвичайно ймовірно, що буде достатньо майнерів, які готові вирішити будь-яку невідповідність між співвідношенням ціни та коефіцієнтом хеш-потужності та привести їх у відповідність. Якщо картель шахтарів намагається сформуватися, щоб не видобувати в одному ланцюжку, з’являються величезні стимули до переходу.

Тут є два крайніх випадки. По-перше, це ймовірність того, що через неефективний алгоритм коригування складності вартість видобутку монети падає, оскільки ціна падає, але складність не знижується, щоб компенсувати це, що робить видобуток дуже збитковим, і немає майнерів, які бажають видобувати за певну суму. втрати, щоб продовжувати штовхати ланцюг вперед, доки його складність не повернеться в рівновагу. Це не було з Ethereum, але цілком можливо як у випадку з біткойнами. Отже, ланцюжок меншості може просто так і не зрушити з місця, і тому він загине. Зазначимо, що нормативне питання про чи добре це чи ні залежить від ваших поглядів на примус проти сецесії; як ви можете собі уявити з того, що я написав вище, я особисто вважаю, що такі ворожі алгоритми налаштування складності ланцюга меншості погані.

Другий граничний випадок полягає в тому, що якщо відмінність дуже велика, великий ланцюг може на 51% атакувати менший ланцюг. Навіть у випадку поділу ETH/ETC із співвідношенням 10:1 цього не сталося; тому це точно не дано. Однак це завжди можливо, якщо майнери в домінуючому ланцюзі віддають перевагу примусу, ніж дозволу на відокремлення, і діють відповідно до цих цінностей.

Далі розглянемо жорсткі форки, що розширюються. У SEHF існує така властивість, що нерозгалужений ланцюг є дійсним за правилами розгалуження, тому якщо форк має нижчу ціну, ніж нерозгалужений ланцюг, він матиме меншу хеш-потужність, ніж нерозгалужений ланцюг, і тому ланцюжок без розгалужень буде прийнято як найдовший за правилами оригінального клієнта та розгалуженого клієнта – і тому роздвоєний ланцюг “буде знищено».

Існує аргумент, що, таким чином, існує сильне вроджене упередження проти успіху такого форку, оскільки ймовірність того, що роздвоєний ланцюжок буде знищено, буде вкладено в ціну, штовхаючи ціну нижче, що робить ще більш імовірним те, що ланцюжок буде знищений. знищено... Цей аргумент здається мені вагомим, і тому це дуже вагома причина будь-який суперечливий хардфорк двосторонній, а не суворо розширюється.

Розробники Bitcoin Unlimited пропонують вирішити цю проблему шляхом зробити двосторонню жорстку вилку вручну після того, як це станеться, але кращим вибором було б зробити двосторонність вбудованою; наприклад, у випадку з біткойнами можна додати правило, щоб заборонити деякий невикористаний код операції, а потім зробити транзакцію, що містить цей код операції, у нерозгалуженому ланцюжку, так що за правилами розгалуження нерозгалужений ланцюжок відтоді буде вважається назавжди недійсним. У випадку Ethereum через різні деталі того, як працює обчислення стану, майже всі хардфорки є двосторонніми майже автоматично. Інші ланцюги можуть мати різні властивості залежно від їхньої архітектури.

Останній тип вилки, згаданий вище, - це м'яка вилка, що активується користувачем. У UASF користувачі вмикають правила soft fork, не намагаючись отримати консенсус від майнерів; Очікується, що шахтарі просто потраплять у чергу через економічний інтерес. Якщо багато користувачів не погодяться з UASF, то відбудеться розкол монети, і це призведе до сценарію, ідентичного суворо розширюваному хардфорку, за винятком – і це справді хитра й підступна частина концепції – той самий тиск «ризику анігіляції», який сильно негативно впливає на роздвоєний ланцюг у жорсткій вилці, що суворо розширюється, натомість сильно сприяє роздвоєному ланцюгу в UASF. Незважаючи на те, що UASF є опт-ін, він використовує економічну асиметрію, щоб схилятися до успіху (хоча упередженість не є абсолютною; якщо UASF явно непопулярний, він не матиме успіху і просто призведе до розколу ланцюга).

Однак UASF є небезпечною грою. Наприклад, припустімо, що розробники проекту хочуть створити патч UASF, який перетворює невикористаний код операції, який раніше приймав усі транзакції, на код операції, який приймає лише транзакції, які відповідають правилам якоїсь нової цікавої функції, хоча й такої, що політично чи технічно суперечливий і не подобається шахтарям. Шахтарі мають хитрий і підступний спосіб дати відсіч: вони можуть в односторонньому порядку реалізувати софтфорк, активований майнером, який робить усі транзакції за допомогою функції, створеної софтфорком, завжди невдалими.

Тепер у нас є три набори правил:

  1. Оригінальні правила, де код операції X завжди дійсний.
  2. Правила, де код операції X дійсний, лише якщо решта транзакції відповідає новим правилам
  3. Правила, де код операції X завжди недійсний.

Зверніть увагу, що (2) є софт-форком відносно (1), а (3) є софт-форком відносно (2). Тепер існує сильний економічний тиск на користь (3), і тому софт-форк не досягає своєї мети.

Висновок такий. М’які форки — це небезпечна гра, і вони стають ще небезпечнішими, якщо вони суперечливі й майнери починають відбиватися. Строго розширювані хардфорки також є небезпечною грою. М'які вилки, активовані майнером, є примусовими; М'які форки, активовані користувачем, менш примусові, хоча все ще досить примусові через економічний тиск, і вони також мають свої небезпеки. Якщо ви дійсно хочете внести суперечливі зміни та вирішили, що високі соціальні витрати на це того варті, просто зробіть чистий двосторонній хардфорк, витратите деякий час, щоб додати належний захист від повторного відтворення, і дайте ринку розібратися .

джерело: https://vitalik.eth.limo/general/2017/03/14/forks_and_markets.html