В технологии блокчейна хардфорки и мягкие форки — это два разных способа обновления сетевых протоколов. Они существенно различаются по способу реализации, и эти различия могут напрямую влиять на структуру и работу сети блокчейн.
Хард Форк
Хард-форк — это изменение правил, при котором новая версия сети больше не совместима со старой версией. В результате блокчейн разделяется на две отдельные ветви, которые работают параллельно и не влияют друг на друга.
Софт-форк
Мягкая вилка — это изменение правил, при котором узлы, принявшие новые правила, по-прежнему могут взаимодействовать с узлами, которые не были обновлены. При этом новая версия сети остается совместимой со старой версией.
Сравнение
Хард-форк
Пример: ДАО 2016.
Старая версия несовместима с новой сетью.
Работает по разным протоколам
Софт-форк
Пример: СегВит 2017
Новая сеть остается совместимой со старой версией.
Работает в соответствии с той же общей структурой протокола
Анализ ситуации
Хард Форк
Например, предположим, что половина узлов сети хотят увеличить размер блока с 2 МБ до 3 МБ. Если блок размером 3 МБ отправляется узлам старой версии, эти узлы отклонят его, поскольку их правила по-прежнему определяют 2 МБ как максимальный размер блока. В этом случае сеть разделяется на два отдельных протокола, и каждый филиал может использовать разную валюту. Все балансы счетов копируются из исходной цепочки в новую цепочку. Например, если до форка у пользователя было 20 BTC, тогда у него будет 20 BTC в исходной цепочке и 20 новых BTC в новой цепочке.
Софт-форк
Например, если исходный размер блока составляет 2 МБ, а половина сетевых узлов вводит более строгое правило, ограничивающее размер блока 1 МБ, блоки размером более 1 МБ будут считаться недействительными обновленными узлами. Однако узлы старой версии по-прежнему могут получать и транслировать блоки. В этой ситуации новая сеть по-прежнему может охватывать все узлы, не ограничиваясь различными версиями правил. Segregated Witness (SegWit) Биткойна является типичным примером софт-форка. В этом обновлении разумным образом появился новый формат блоков и транзакций. Узлы, которые не были обновлены, по-прежнему могут получать информацию о блоках, но они не принимают участия в проверке нового формата транзакции.
