Segregated Witness (SegWit) — обновление протокола Биткоина, активированное в августе 2017 года. Оно изменило структуру данных транзакции, исправило критическую уязвимость и увеличило эффективную ёмкость блока. SegWit стал фундаментом для развёртывания сети Lightning.

Основное изменение

Legacy-транзакции (до SegWit)

В традиционных (legacy) транзакциях Биткоина данные подписи (код разблокировки, «witness») располагались внутри каждого входа транзакции. Идентификатор транзакции (TXID) вычислялся из всех данных, включая подписи.

SegWit-транзакции

В SegWit весь код разблокировки выносится в отдельное поле. TXID вычисляется только из данных о движении биткоинов, но не из подписей.

Результат: TXID больше не зависит от подписей. Это и есть суть “Segregated Witness” — «отделённый свидетель».

Преимущества SegWit

1. Исправление пластичности транзакций

Пластичность транзакций — уязвимость, при которой третья сторона могла изменить подпись транзакции (не нарушая её валидность) и тем самым изменить TXID. Получатель думал, что транзакция не прошла, хотя биткоины уже были переведены.

SegWit устранил эту проблему, исключив подписи из расчёта TXID. Теперь TXID фиксирован с момента создания транзакции.

Почему это важно: пластичность транзакций делала невозможным надёжную работу Lightning Network. SegWit открыл путь для развёртывания Лайтнинга.

2. Увеличение ёмкости блока

SegWit ввёл новую метрику — вес транзакции (weight units):

  • Обычный байт данных = 4 единицы веса
  • Байт witness-данных (подписей) = 1 единица веса

Максимальный вес блока: 4 000 000 единиц. Это эквивалентно ~1 МБ для обычных данных и ~4 МБ для чисто witness-данных. На практике полный блок с SegWit-транзакциями вмещает около 1,8 МБ данных — почти вдвое больше, чем до обновления.

3. Снижение комиссий для SegWit-транзакций

Поскольку данные подписей считаются «дешевле» (1 единица веса против 4), транзакции с SegWit-адресами платят меньшие комиссии.

4. Новые типы адресов

SegWit ввёл новые форматы адресов:

  • P2SH-P2WPKH (начинаются с 3) — «обёрнутый» SegWit, обратно совместимый
  • P2WPKH (bech32, начинаются с bc1q) — нативный SegWit
  • P2WSH (bech32, начинаются с bc1q) — нативный SegWit для скриптов

Подробнее — на странице типы биткоин-адресов.

SegWit как софт-форк

SegWit был активирован как софт-форк: старые узлы продолжали принимать SegWit-блоки как валидные (хотя и не проверяли witness-данные). Это обеспечило плавный переход без принудительного обновления всей сети.

Активация SegWit сопровождалась острыми дебатами — войной за размер блока; В итоге предложение SegWit2x (увеличение блока до 2 МБ в дополнение к SegWit) было отвергнуто сообществом, и SegWit активировался без этого изменения.

Значение для экосистемы

SegWit стал одним из важнейших обновлений Биткоина:

  • Разблокировал развёртывание Lightning Network
  • Сделал транзакции более дешёвыми и компактными
  • Заложил основу для дальнейших улучшений, реализованных в Taproot

Источники

Дополнительные материалы