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

SegWit, также известный как Segregated Witness или Bitcoin Improvement Proposal (BIP) 141, был ответом на проблему масштабируемости биткойна или борьбу за обработку растущего количества транзакций, поскольку биткойн продолжал набирать популярность.

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

  • SegWit — это изменение протокола Биткойн. Он был внедрен в софт-форк оригинальной сети Биткойн после того, как дебаты о масштабируемости Биткойна достигли пика в конце 2017 года.
  • Bitcoin Cash, возможно, является основным конкурентом, поддерживаемым другой фракцией.
  • В настоящее время SegWit — это масштабируемое решение, используемое несколькими различными криптовалютными сетями, включая Litecoin.

Что такое SegWit?

Основная цель SegWit — повысить пропускную способность транзакций в сети блокчейн. Стоит отметить, что первой криптовалютой, реализовавшей SegWit, был не биткойн, а Litecoin.

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

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

Кроме того, SegWit исправил ошибку в протоколе Биткойн, что позволило пользователям изменять хеш-коды транзакций. Изменение всего лишь одного символа в цифровой подписи приводит к совершенно другому хешу транзакции. Поскольку подпись перемещается из данных транзакции в отдельные данные свидетеля, изменить идентификатор транзакции становится невозможно. Следовательно, SegWit — это решение проблемы гибкости транзакций.

Рождение SegWit

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

Вдобавок к этому разработчики считали серьезным риском то, что транзакции биткойнов станут более податливыми. Что может привести к манипуляциям, которые в итоге могут привести к потере сотен или тысяч монет в сети. Чтобы решить эту проблему, разработчики Bitcoin Core и Blockstream приступили к работе. После напряженной работы SegWit выступил с предложением, представленным 21 декабря 2015 года разработчиками Эриком Ломброзо, Джонсон Лау и Питером Вуилле.

SegWit предложил решить проблему гибкости транзакций и масштабируемости биткойна. Для этого SegWit предложил разделять биткойн-скрипты и криптографические подписи в новую блочную структуру пока блоки с транзакциями были в другой структуре. Все это можно было осуществить без нарушения возможности проверки подписей и транзакций в каждой структуре в любое время благодаря дереву Меркла.

Причина этого предложения заключалась в том, что для одной транзакции цифровые подписи составляли 65% от размера всей транзакции. Если отделить эти данные от остальных данных транзакции и переместить их в конец транзакции, то транзакции биткойнов станут намного меньше по размеру.

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

Благодаря этому усовершенствованию биткойна было решено одновременно две проблемы:

  • решение проблемы податливости транзакций;
  • повышение масштабируемости сети Биткойна;

Податливость транзакций

Еще одна вещь, которую SegWit делает помимо увеличения транзакционной емкости биткойна — это устранение ошибки гибкости транзакций. Гибкость — проблема для разработчиков и пользователей, которые хотят сослаться на предыдущую транзакцию в новой транзакции расходов до того, как предыдущая транзакция будет подтверждена в цепочке блоков. Эта проблема возникает из-за того, что для того, чтобы потратить биткойны, созданные предыдущей транзакцией, транзакция расходов должна ссылаться на TXID предыдущей транзакции. Если этот TXID может измениться, ссылка не будет выполнена, и транзакция расходов будет признана недействительной.

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

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

Вместо этого для создания идентификатора транзакции используются другие неотделимые части транзакции.

В частности, податливость транзакций была проблемой, препятствующей внедрению Lightning Network, которая полагается на обмен неподтвержденными транзакциями биткойна. Устранение ошибки гибкости транзакций не только повысило безопасность биткойна, но и позволило реализовать Lightning Network. В сочетании с SegWit, Lightning позволит биткойну обрабатывать миллионы транзакций в секунду, открывая путь для настоящего массового внедрения биткойна.

Lightning Network — еще одно предложение масштабируемости биткойна

Bech32

Помимо всего прочего SegWit представил два новых типа сценариев — способы отправки и получения биткойнов — и новую схему кодирования под названием Bech32. До SegWit адреса и закрытые ключи биткойнов кодировались с использованием Base58, в которой использовались как прописные, так и строчные буквы.

Bech32 был предложен и принят как усовершенствование по сравнению с Base58, потому что он оказался более подходящим для кодирования QR. Кроме того, Bech32 имеет встроенный механизм обнаружения ошибок, который помогает пользователям и кошелькам обнаруживать и даже исправлять опечатки или изменения в адресе.

Bech32 также делает собственные адреса SegWit легко узнаваемыми, поскольку они используют только строчные буквы и начинаются с «bc1». Так как Bech32 использует только 32 символа, эти адреса немного длиннее, чем адреса Base58, но они занимают меньше места в самой цепочке блоков.

Bech32 также используется для кодирования счетов Lightning, которые начинаются с lnbc1

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

Есть два вида вилок — софт-вилки и хард-вилки.

Софт-форки обратно совместимы с узлами (компьютерами или серверами, на которых хранятся копии цепочки блоков биткойнов и на которых запущено старое программное обеспечение). С другой стороны, хард-форки не имеют обратной совместимости. При хард-форках узлы должны обновиться до нового протокола биткойна. В противном случае происходит разделение цепочки блоков, в результате чего создаются две отдельные криптовалюты (как произошло с Bitcoin Cash).

Чтобы свести к минимуму нарушение работы биткойна, SegWit был софт-форком

Хотя SegWit технически является софт-форком биткойна, он изменил одно из важных правил консенсуса биткойна. До SegWit каждый блок ограничивался 1 Мб данных, что равнялось примерно 1650 транзакциям в полном блоке. После внедрения SegWit полные блоки содержат около 2700 транзакций.

Этот новый метод измерения блоков позволил увеличивать размер блока не меняя при этом структуру цепи. Преимуществом стало и то, что от внедрения SegWit выигрывали и майнеры и пользователи.

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

Влияние SegWit на биткойн

SegWit произвел довольно серьезное изменение в обработке биткойн-транзакций. С одной стороны, он привнес в сеть биткойн софт-форк, который позволяет устаревшим узлам (без SegWit) и узлам SegWit работать одновременно. И все это без прерывания работы сети и нарушения ее безопасности.

С другой стороны, SegWit открыл двери для блоков биткойнов большего размера. Одним из самых больших структурных изменений SegWit является увеличение максимального размера блока биткойнов от 1 Мб до 4 Мб. Таким образом, SegWit гарантирует важные обновления размера блоков биткойнов без применения хард-форка и его последствий. Еще одно важное изменение в SegWit заключается в том, что он создал новый тип адресов биткойн, называемых адресами SegWit, которые начинаются с «bc1» или «3».

В дополнение к этому, SegWit позволяет пользователю с кошельком с поддержкой SegWit отправлять криптовалюту пользователю с устаревшим кошельком (и адресом). Таким образом, пользователь SegWit получает выгоду от более низкой стоимости транзакции и более быстрого подтверждения. То же самое может произойти и в обратном порядке: старый пользователь может отправлять криптовалюту пользователю с помощью SegWit, используя унаследованный адрес, но не пользуясь преимуществами SegWit.

Если Вы использовали биткойн-кошелек, который поддерживает SegWit, Вы могли заметить, что Ваш биткойн-кошелек имеет разные типы биткойн-адресов. Некоторые могут начинаться с «1», некоторые могут начинаться с «3», а некоторые могут начинаться с «bc1».

Адреса биткойна, начинающиеся с «1», являются устаревшими адресами, существовавшими до внедрения SegWit. Адреса, начинающиеся с «3», являются P2SH или многоцелевыми адресами, которые поддерживают транзакции, не относящиеся к SegWit и SegWit. Адреса, начинающиеся с «bc1», являются адресами bech32 или «родными» SegWit, которые являются новейшим форматом адресов только для SegWit с самой низкой комиссией за транзакции.

Биткойн и масштабируемость

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

Чтобы решить эту проблему, разработчики SegWit стремились смягчить ситуацию и заложить основу для новых форм масштабируемости. Для этого SegWit разделило скрипты и подписи транзакций на новую структуру. В то же время размер блока был увеличен до 1,8 Мб по сравнению с исходным размером блока в 1 Мб. Это сильно повлияло на масштабируемость и количество транзакций.

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

Хотя сеть Биткойн работает без каких-либо заметных инцидентов уже более 10 лет, было несколько случаев, когда транзакционные издержки достигали высоких сумм, которые больше не представлялись возможными. Следовательно, разработчики биткойнов обсуждали, как лучше всего масштабировать сеть для обработки растущих объемов транзакций в будущем.

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

Какие преимущества?

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

SegWit представляет собой первый шаг к масштабируемости для Биткойна и нескольких других основных сетей криптовалюты. Для функционирования сети Биткойн необходимы быстрые и эффективные сети блокчейнов, и SegWit проложил путь к масштабированию сетей блокчейнов для широкого распространения, как прямо, так и косвенно.

  • Делает невозможными атаки на гибкость транзакций. Это достигается путем отделения данных подписи от остальных данных транзакции;
  • Увеличивает размер блока до 4 МБ;
    SPV (упрощенная проверка платежа). Благодаря уменьшению размера проверочных тестов и использованию полосы пропускания работа с транзакциями значительно ускорилась;
  • SegWit закладывает основу для протоколов масштабируемости, таких сетей как Lightning Network и биткойн решая проблему гибкости;
  • Снижает конкуренцию за приоритетные ставки между пользователями. Это, как следствие, снижает сетевые комиссии;

Каковы недостатки?

Несмотря на то, что принятие транзакций SegWit в сети Биткойн увеличивается и достигло рекордного уровня более 65% в начале 2020 года, возможные адаптации сети Биткойн занимают гораздо больше времени, чем в сетях альткойнов. С другой стороны, не все поддерживают транзакции SegWit даже сейчас.

Непрерывные дебаты о масштабировании, вероятно, были основной причиной нескольких хард-форков блокчейна Биткойн за последние несколько лет. Самым заметным из этих форков стал хард-форк Bitcoin Cash, который состоялся 1 августа 2017 года. Биткойн Cash снова “форкнул” 15 ноября 2018 года и увеличил лимит размера блока сети с 1 МБ до 8 МБ.

Интересный факт

Интересно что при первом знакомстве с SegWit он не был по достоинству принят членами сообщества, так как они не были уверены в том что SegWit сможет справиться с растущим количеством транзакций.

В попытке масштабировать биткойн некоторые члены сообщества биткойн предложили SegWit2x, который поддерживал идеи SegWit с единственным отклонением — SegWit2x предлагал удвоить вес блока до 2 Мб. Интересно, что тогда SegWit2x получил поддержку 95% майнеров. Более 50 компаний в индустрии биткойнов подписали соглашение, называемое Нью-Йоркским соглашением, обязуясь активировать SegWit2x и удвоить размер блока.

Однако, Нью-Йоркское соглашение (NYA) предполагало отхождение от процесса консенсуса биткойна с открытым исходным кодом. По этой причине NYA не получило достаточной поддержки со стороны операторов узлов и разработчиков и в конечном итоге потерпело неудачу.

Вместо этого анонимный разработчик, о котором раньше никто не слышал, предложил BIP 148, который получил поддержку операторов узлов и смог реализовать SegWit, отвергнув SegWit2x. Чтобы продвинуть это изменение, многие узлы приняли альтернативные реализации Bitcoin Core, что вынудило майнеров использовать SegWit.

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

Самые большие критики SegWit ушли и создали свой собственный форк — в данном случае хард-форк — под названием Bitcoin Cash.

Споры по поводу SegWit и SegWit2x продемонстрировали, что узлы, а не майнеры, предприятия или даже разработчики, контролируют сеть. Узлы, использующие собственное программное обеспечение, смогли подавить подавляющее большинство майнеров и внедрить SegWit, отвергнув SegWit2x.

Споры по поводу SegWit и SegWit2x продемонстрировали, что узлы контролируют сеть

Это вселяет уверенность в пользователях биткойна, что правила консенсуса биткойна, включая жесткое ограничение количества добытой монеты в 21 миллион, не могут быть изменены без согласия операторов узлов.

Активация SegWit в сети биткойн

21 июля 2017 года биткойн-майнеры выпустили новое обновление программного обеспечения. К этому времени майнеры следовали протоколу, изложенному в предложении по расширению биткойнов BIP-91. Это подготовило почву для этого обновления и окончательной активации SegWit. В этом предложении работа Люка Дашира была решающей для успеха этой операции.

8 августа 2017 года была достигнута еще одна важная веха. В то время было указано, что 100% пулов для майнинга биткойнов указали совместимость с SegWit. Однако SegWit не был полностью активирован до 21 августа. И наконец, 23 августа 2017 года SegWit официально активировался в сети во время майнинга блока 481822 с поддержкой 99,95% в сети.