Что такое SegWit?

Что такое SegWit?

В 2017 году у Биткоина возникла проблема, которая грозила расколоть сообщество. Сеть могла обрабатывать, возможно, 3 транзакции в секунду. Комиссии резко возрастали. Блоки были переполнены. И у каждого было своё представление о том, как это исправить.

Победившее решение — SegWit, сокращение от Segregated Witness (разделённый свидетель). Оно было предложено Питером Вуйе, одним из ведущих разработчиков Bitcoin Core, и изменило структуру каждой биткоин-транзакции. Это не просто небольшая доработка, а фундаментальная переработка того, как данные помещаются внутри блока. Восемь лет спустя около 96% всех биткоин-транзакций используют адреса SegWit. Если вы покупали или отправляли биткоины в последние несколько лет, вы почти наверняка использовали его, даже не подозревая об этом.

В чём же заключалась реальная проблема?

Позвольте мне обрисовать вам картину 2016 года.

В биткоине существовал лимит в 1 МБ на каждый блок. Сатоши установил это ограничение ещё в 2010 году, чтобы предотвратить спам-атаки, и никто его не отменил. Блоки добываются примерно каждые 10 минут. При размере блока в 1 МБ это составляет около 1650 транзакций на блок. Если подсчитать, то получится примерно 2-3 транзакции в секунду для всей сети биткоина. Вся планета использует такой тонкий канал связи.

Visa, кстати, обрабатывает 65 000 транзакций в секунду. Так что да. Проблема.

К концу 2016 года каждый блок достигал предела в 1 МБ. Когда места не оставалось, пользователи биткоина начинали перебивать друг друга по комиссиям за транзакции, пытаясь подкупить майнеров, чтобы те выбрали их транзакцию первыми. Комиссии взлетели до небес. Отправка биткоинов на 10 долларов могла обойтись в 15 долларов комиссии. Это было бессмысленно.

А затем возникла более сложная проблема. Изменчивость транзакций. Постараюсь объяснить проще. Когда вы отправляете биткоины, сеть создает идентификатор для этой транзакции. До SegWit этот идентификатор формировался на основе всей транзакции, включая подписи. В чем подвох? Кто-то может перехватить вашу неподтвержденную транзакцию, изменить кодировку подписи (сохраняя ее технически действительной) и в итоге получить другой идентификатор для того же самого платежа. Тот же отправитель. Тот же получатель. Та же сумма. Другой идентификационный номер.

Почему это должно вас волновать? Потому что биржа Mt. Gox, потерявшая 840 000 BTC в 2014 году, стала жертвой именно этой уязвимости. И что еще важнее, любая система второго уровня, построенная поверх Биткоина (например, платежные каналы), должна ссылаться на транзакции по их идентификаторам. Если эти идентификаторы могут меняться, вся система рухнет.

Биткоин столкнулся сразу с двумя проблемами: слишком маленькими блоками и ненадежными идентификаторами транзакций. SegWit решил обе проблемы одним махом.

Как работает SegWit (без диплома по информатике)

Представьте себе биткоин-транзакцию как чек. Есть часть, где указано, кто кому платит и сколько. А внизу — ваша подпись, подтверждающая легитимность транзакции. До появления SegWit обе части объединялись в один блок, и всё это учитывалось в рамках лимита размера блока в 1 МБ.

Вот что беспокоило Питера Вуйле: данные подписи поглощали примерно 65% каждой транзакции. Большая часть каждого блока не записывала того, что произошло, а фиксировала подтверждение того, что кто-то дал добро. Это казалось расточительством.

Его идея: извлечь подписи и поместить их в отдельный раздел, называемый «свидетель». Данные транзакции остаются в основном блоке. Данные свидетеля хранятся отдельно. Они по-прежнему проверяются каждым узлом в сети. Просто их вес при расчете заполненности блока меняется.

Что произошло на практике? Количество транзакций в блоке увеличилось с примерно 1650 до 2700. Биткоин подскочил с 2-3 транзакций в секунду до 7-10. По-прежнему смешно по сравнению с Visa. Но для сети, которая задыхалась от собственного успеха, это был глоток свежего воздуха.

сегвит

Вес блока: новая математика

Вот тут-то и начинается самое интересное. Очевидным решением было бы просто изменить лимит в 1 МБ на 2 МБ. Но это привело бы к хардфорку. Каждому узлу в сети биткоина пришлось бы обновиться, иначе они бы выпали из цепочки. Хардфорки — это сложно. Люди остаются позади.

Питер Вуйл придумал нечто более умное. Вместо измерения блоков в необработанных байтах, SegWit использует «вес блока». Обычные данные транзакций учитываются как 4 единицы веса на байт. Данные свидетеля учитываются всего как 1 единица веса на байт. Максимальное количество единиц веса составляет 4 миллиона.

Что это означает на практике? Блок без данных свидетеля по-прежнему достигает максимального размера в 1 МБ, как и всегда. Старые узлы не видят ничего странного. Блок, насыщенный транзакциями SegWit, теоретически может достигать размера около 4 МБ. В реальном мире большинство блоков достигают размера от 1,5 до 2 МБ.

Прелесть этого в том, что SegWit был выпущен как софтфорк. Узлы, которые так и не обновились, продолжали работать. Они просто не могли видеть данные свидетелей в новом разделе. Блокчейн биткоина не разделился. Не было «старого биткоина» и «нового биткоина». Одна цепочка, одна сеть, обратно совместимая. Уже одно это — инженерный успех, которому уделяется недостаточно внимания.

До SegWit После SegWit
Размер блока: максимум 1 МБ Вес блока: максимум 4 миллиона единиц веса.
Примерно 1650 транзакций на блок. ~2700 транзакций на блок
2-3 TPS 7-10 TPS
Данные подписи внутри блока Данные подписи находятся в отдельном поле для свидетеля.
Идентификаторы транзакций включали подписи. Идентификаторы транзакций, основанные исключительно на основных данных.

Исправление проблемы с гибкостью транзакций

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

Итак, вот в чем дело. До появления SegWit, когда ваш биткоин-кошелек создавал транзакцию, идентификатор транзакции (называемый TXID) вычислялся на основе всего содержимого транзакции, включая подпись. И вот что странно: цифровые подписи могут быть представлены в нескольких допустимых форматах. Одна и та же подпись, одно и то же подтверждение права собственности, но немного отличающаяся последовательность байтов.

Это означало, что кто-то мог перехватить вашу неподтвержденную транзакцию, перекодировать подпись другим, но столь же допустимым способом и передать её. Сеть подтвердила бы измененную версию. Тот же отправитель, тот же получатель, та же сумма. Но совершенно другой TXID.

Я понимаю. Звучит странно. Но это имело большое значение. Представьте, что вы создаете систему, в которой шаг B ссылается на идентификатор шага A. Если кто-то может изменить идентификатор шага A после его отправки, но до подтверждения, шаг B перестанет работать. Вся ваша логическая цепочка рухнет.

SegWit исправил это, вычисляя TXID только на основе частей, не являющихся полем свидетеля. Теперь подпись находится в поле свидетеля, отдельно от идентификатора. Никто не может ее изменить. Идентификатор транзакции заблокирован раз и навсегда.

SegWit и сеть Lightning

Вот почему исправление уязвимости имело значение. Сеть Lightning Network — это способ, с помощью которого Биткоин планирует обрабатывать миллионы платежей в секунду. Мы с вами открываем платежный канал. Мы отправляем биткоины друг другу, вне основного блокчейна. Когда мы заканчиваем, в блокчейне рассчитывается только окончательный чистый баланс. Одна транзакция в блокчейне Биткоина вместо сотен.

Технология Lightning работает за счет построения цепочек транзакций, которые ссылаются друг на друга по своим идентификаторам. Если кто-то может изменить идентификатор в процессе транзакции, транзакция возврата средств, которая защищает вас, становится недействительной. Вы можете потерять деньги. Вся концепция платежного канала зависит от стабильности идентификаторов.

SegWit сделал их стабильными. И точка. Без этого решения развертывание Lightning было бы слишком рискованным. А без Lightning биткоин навсегда застрял бы на уровне 7-10 транзакций в секунду. Это не платежная сеть. Это расчетный уровень для крупных игроков.

Я рассуждаю так: SegWit был не просто обновлением. Это был фундамент. Taproot в 2021 году, сеть Lightning, даже надписи Ordinals в 2023 году. Ничего из этого не произошло бы без структурных изменений, внесенных в августе 2017 года.

Форматы адресов: устаревший, обернутый и собственный SegWit.

Вы когда-нибудь замечали, что некоторые биткоин-адреса начинаются с "1", некоторые с "3", а некоторые с "bc1"? Это обновление SegWit отображается в вашем кошельке.

Адреса, начинающиеся с "1", устарели. Старый формат. SegWit недоступен. Вы платите больше всего комиссий. Если ваш кошелек по-прежнему выдает такие адреса, обновите программное обеспечение.

Адреса, начинающиеся с "3", защищены SegWit. Биткоин-транзакция использует SegWit внутри, но защищена таким образом, что даже старые кошельки, которые не знакомы с SegWit, могут отправлять на них биткоины. Это дешевле, чем традиционные способы, но не самый дешевый вариант.

Адреса, начинающиеся с "bc1q", используют встроенную технологию SegWit, также известную как Bech32. Это действительно полезная технология. Самые низкие комиссии. Лучшая проверка ошибок (формат адреса лучше выявляет опечатки). И сегодня 96% транзакций используют именно её.

Вы также можете увидеть адреса "bc1p". Это адреса Taproot, более новая версия 2021 года, основанная на SegWit. Это другая тема, но стоит знать об их существовании.

Тип адреса Начинается с Уровень платы SegWit?
Наследие (P2PKH) 1 Высший Нет
Wrapped SegWit (P2SH) 3 Середина Да (в упаковке)
Встроенный SegWit (Bech32) bc1q Самый низкий Да (родной язык)
Главный корень (Bech32m) bc1p Самый низкий Да + Корневая система

Сколько вы на самом деле экономите на комиссиях?

Вот что на самом деле интересует моих друзей, не разбирающихся в технике. Насколько дешевле?

Компания Unchained провела расчеты. Стандартная транзакция SegWit с одной подписью позволяет сэкономить около 53% на комиссиях по сравнению с традиционными системами. Если использовать схему с двумя из трех мультиподписей (распространенную в сфере хранения активов), экономия составит около 64%. Это не округление. В загруженный день, когда пользователи традиционных систем платят 30 долларов за транзакцию, с нативной системой SegWit вы заплатите менее 15 долларов.

Почему? Опять же, математика веса блока. Данные свидетеля учитываются как 0,25 виртуальных байта вместо 1. Ваша транзакция занимает меньше места в блоке. Майнеры берут за нее меньше. Все просто.

Если ваш биткоин-кошелек по-прежнему выдает адреса, начинающиеся с "1", вы тратите деньги впустую при каждой отправке. Переключитесь на встроенный SegWit. Пять минут работы. Coinbase, Ledger, Trezor, BlueWallet, Sparrow — все они его поддерживают. Никаких недостатков нет.

сегвит

Споры: почему SegWit едва не сорвался?

Честно говоря, эта часть интереснее, чем технические аспекты. SegWit чуть не провалился еще до запуска.

На первый взгляд, борьба была проста. Одна группа, «крупные блокировщики», хотела увеличить лимит размера блока с 1 МБ до 8 МБ или выше. Больше места, больше транзакций. Простое решение. Bitmain, крупнейший в мире майнер биткоинов, решительно поддержал эту группу. Некоторые обвиняли Bitmain в противодействии SegWit, потому что это уничтожило бы ASICBOOST — секретную технологию, встроенную в их майнинговые чипы, которая давала им преимущество в скорости по сравнению с конкурентами. Bitmain это отрицал. Криптомир им не поверил.

Другая группа состояла в основном из разработчиков Bitcoin Core и людей, запускающих полные узлы дома. Их аргумент: если сделать блоки в 8 раз больше, потребуется в 8 раз больше пропускной способности, хранилища и вычислительной мощности для работы узла. Через несколько лет только центры обработки данных и майнинговые фермы смогут позволить себе проверку блокчейна биткоина. Децентрализация тихо умрет.

Я следил за этим в режиме реального времени, и у меня действительно было ощущение, что Биткоин может не пережить эти споры. Люди кричали друг на друга в Твиттере, Реддите и на конференциях. В Нью-Йорке даже состоялась закрытая встреча («Нью-Йоркское соглашение»), где группа компаний пыталась заключить сделку, объединяющую SegWit с последующим увеличением размера блока. Эта сделка тоже сорвалась.

Что произошло на самом деле: SegWit был активирован 1 августа 2017 года как софтфорк, инициированный пользователями. Майнеры биткоина, которые выступали против него, отделились и в тот же день создали Bitcoin Cash (BCH). BCH изначально имел блоки размером 8 МБ (сейчас 32 МБ) и не содержал SegWit. Он существует до сих пор. Его цена составляет ничтожно малую долю от цены биткоина.

Некоторые называют 1 августа «Днем независимости биткоина». Суть в том, что окончательное слово в вопросе правил биткоина осталось за операторами узлов, а не за майнинговыми компаниями. Этот прецедент важнее любой строки кода в самом обновлении SegWit.

Внедрение SegWit сегодня

Дискуссия окончена. По состоянию на 2025 год 96% биткоин-транзакций используют SegWit. Его поддерживают все основные кошельки и биржи. Если вы до сих пор используете устаревшие адреса, единственное объяснение — это программное обеспечение, которое вы не обновляли годами.

Обновление SegWit также открыло двери для всего последующего. Taproot появился в ноябре 2021 года и добавил подписи Шнорра поверх структуры SegWit. Ordinals появились в 2023 году и начали добавлять JPEG-изображения в пространство данных свидетелей, созданное SegWit. Мнения по поводу последнего пункта разделились, но суть остается прежней: SegWit создал это пространство, а разработчики его заполнили.

Так важен ли для вас лично SegWit? Если вы вообще используете биткоин, то да. Откройте настройки своего кошелька и проверьте формат адреса. Если он начинается с "bc1q", то всё в порядке. Если он начинается с "1", вам следует перейти на SegWit сегодня же. Более низкие комиссии, более быстрые подтверждения во время перегрузки сети и полный доступ к платежам Lightning.

В повседневной жизни вы никогда не задумываетесь о системе SegWit. Это всего лишь водопроводная система под полом. Но если бы её не установили в 2017 году, весь дом уже давно бы затопило.

Ready to Get Started?

Create an account and start accepting payments – no contracts or KYC required. Or, contact us to design a custom package for your business.

Make first step

Always know what you pay

Integrated per-transaction pricing with no hidden fees

Start your integration

Set up Plisio swiftly in just 10 minutes.