SegWit — что такое SegWit (Segregated Witness)

SegWit или Segregated Witness — это форк для блокчейн сетей основанных на ядре Bitcoin (сам Bitcoin и его форки).

Данный форк (обновление) относится к классу легких — софт форк и не затрагивает основных принципов работы ядра и всей системы, но вносит небольшие изменения в информацию, записываемую в блок.

Суть данного форка заключается в том, чтобы вынести данные о подписях транзакций из основного блока в отдельную структуру, таким образом освободив в блоке дополнительное место. Таким образом каждая транзакция начинает занимать в блоке почти в два раза меньше места, а значит сам блок сможет вместить в 2 раза больше транзакций.

SegWit по сути является аддоном, содержащим подписи и некоторые другие данные. Важно здесь то, что данные SegWit полностью игнорируется старыми нодами, но признается новыми, включившими его поддержку. Более того, данные SegWit не хешируются заодно с другими частями транзакции для создания ID. Таким образом, и старые и новые ноды будут считать транзакции с SegWit валидными. Старые ноды будут их валидировать, поскольку с их точки зрения им вовсе не нужны подписи, а новые – потому, что нужная подпись находится в SegWit.

Поскольку и новые ноды с поддержкой Segregated Witness и другие ноды хешируют данные транзакции в один и тот же ID, консенсус по компоновке блоков будет достигнут, а следовательно, блокчейн также не будет вызывать споров.

Однако, есть небольшая проблема: если подписи не влияют на компоновку блокчейна, он уже не может являться доказательством того, что в транзакции включены корректные подписи.

Чтобы подписи всё равно включались в блокчейн, нода майнер с SegWit выполняет дополнительную операцию – создаёт дерево Меркля не только из транзакций, но и из SegWit, причём последнее полностью соответствует дереву транзакций. Корень дерева SegWit включается в поле ввода транзакции coinbase (базовая транзакция блока, начисляющая вознаграждение майнеру за найденный блок). Таким образом корень дерева SegWit меняет данные транзакции coinbase, её ID, а значит и заголовок – в результате меняется вся компоновка блокчейна.

Таким образом SegWit позволяет удалить подписи из транзакций, сохранив его неизменяемость и не нарушая ни одного из принятых правил консенсуса.

Сеть Litecoin применила SegWit в апреле 2017 года.

Сеть Bitctoin активировала SegWit 24 августа 2017 года.