Технология Segregated Witness (SegWit). Полный обзор с разбором как это все работает

04.01.2023
15 мин
3749
3
Технология Segregated Witness (SegWit). Полный обзор с разбором как это все работает. Заглавный коллаж статьи.

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

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

Требовалось решение, которое сможет изменить «правила игры». Одним из таких решений стал софтфорк биткоина — Segregated Witness (SegWit), который был активирован 24 августа 2017 в блоке 481 824. В этот же день была отправлена первая транзакция с использованием SegWit.

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

Что такое SegWit

SegWit — это софтфорк ядра блокчейна, необязательное и совместимое с предыдущими версиями программное обеспечение, которое позволит решить проблемы масштабируемости биткоина и снизит комиссии. Оно увеличивает эффективный размер блока, без фактического изменения лимита в 1 Мб.

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

В предложении по улучшению биткоина BIP141, приводится следующее определение: SegWit формирует новую структуру, называемую «witness», которая фиксируется в блоках отдельно от дерева Меркла транзакции (txid). Эта структура содержит данные, необходимые для проверки достоверности транзакции, но не требуемые для определения txid транзакции. В частности, скрипты и подписи перемещаются в эту новую структуру. «Свидетель» фиксируется в дереве, которое вставляется в существующий Корень Меркла блока через транзакцию coinbase для обеспечения совместимости софтфорка SegWit.

Определение выше сложное, но это наиболее сжатое определение для SegWit.

Данное обновление стало компромиссным решением проблем масштабируемости и пластичности от более радикальных предложений, какими являются хардфорки.
Bitcoin, который мы знаем в 2023 году, является таким, благодаря активации SegWit. Кроме того, без примененных решений, невозможно было бы внедрение сетей второго уровня поверх биткоина, по типу — Lightning Network и некоторых других, уже реализованных программных улучшений.

Что такое Дерево Меркла.
avatar Dmitriy Yurchenko
суперпост

Хронология событий — от идеи до реализации SegWit

ДатаСобытие
2012Дискуссии о необходимости решения проблемы пластичности транзакций.
2013Впервые была предложена идея по отделению данных о подписи от транзакции в отдельную структуру.
Июнь 2015Компания Blockstream разработала сайдчейн Sidechain Elements с отделенным свидетелем. Это был прототип SegWit.
Конец 2015Сформирована концепция Lightning Network, которая требовала решения проблемы пластичности.
Октябрь 2015Прозвучала идея внедрения SegWit в виде софтфорка.
Декабрь 2015SegWit презентован на биткоин конференции в Гонконге в виде софтфорка.
21 декабря 2015BIP141. SegWit официально оформлен как предложение по улучшению биткоина.
Январь 2016Запущена тестовая сеть BTC (SegNet).
Март 2016SegNet поддерживает тестовую версию Lightning Network.
23 Августа 2016Релиз Bitcoin Core 0.13.0 — с кодовой базой SegWit.
27 Октября 2016Релиз Bitcoin Core 0.13.1 — с расширенным описанием SegWit и какие он решает проблемы.
15 Ноября 2016Стартовал процесс «голосования» майнерами за проведение софтфорка.
Февраль 2017Обсуждение идеи включения SegWit с помощью UASF — решение тотального большинства полных узлов.
26 Апреля 2017SegWit активирован в блокчейне Litecoin.
23 Июля 2017Имплементация BIP91, за неделю до активации UASF, которая является MASF или софтфорк, который активируют майнеры.
1 Августа 2017Активация UASF.
8 Августа 2017 Фиксация (утверждение) протокола Segregated Witness.
24 Августа 2017SegWit активирован в блокчейне Bitcoin.
25 Августа 2017Добыт первый в истории блок больше 1 Мб.

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

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

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

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

При проектировке блокчейна биткоина, чтобы система была жизнеспособной, создателям необходимо было найти баланс между:

  • Децентрализацией — любой может установить полную ноду, начат майнить, открытый программный код. Косвенно на этот параметр оказывает влияние размер блока: блок в 1 Мб мал для обработки большого количества транзакций, но увеличение размера блока, по заявлениям лагеря «децентралистов» способно нарушить баланс и привести к централизации сети, так как майнеры могут начать демпинговать комиссии, как следствие обрушение хешрейта из-за нецелесообразности майнинга, что катастрофически скажется на безопасности сети. С другой стороны, ограниченный размер блока в совокупности с ростом числа пользователей, неизбежно приведет к очередям в мемпуле и увеличению комиссий за транзакции, которые смогут платить только крупные компании и инвесторы — отток пользователей и потенциальный крах системы.
  • Пропускной способностью сети — скорость обработки транзакций зависит от трех факторов: количество транзакций, временной интервал между блоками и максимальный размер блока. Мы уже выяснили, что с ростом популярности, неизбежно растет количество транзакций в сети. Интервал между созданиями блока регулируется каждые 2016 блоков ≈ 10 минут. Максимально допустимый размер блока в сети биткоина составляет 1Мб, заложено алгоритмически Сатоши Накамото в 2010 году. Интересно что до 2010 года, размер блока был ограничен 32 Мб. Больше блок — больше транзакций в него «помещается».
  • Надежность и безопасность — чем больше децентрализованных вычислительных мощностей работает в сети биткоина, тем выше хешрейт и тем сложней совершить атаку на сеть.
  • Экономической моделью —  она построена таким образом, чтобы майнеры были экономически заинтересованны в поддержании стабильной работы сети биткоина. За счет мощности хешрейта растет безопасность и надежность сети, за это они получают вознаграждения. Заинтересованность должна быть в стабильности, но не в подчинении. И здесь также есть прямая зависимость с размером блока. Стабильная работа = стабильный бизнес, подчинение блокчейна = крах системы.

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

Существует 2 варианта внесения изменений в блокчейн:

  1. Хардфорк — новое программное обеспечение, которое несовместимо со старым и требует чтобы все участники сети обновили софт. Те кто не согласен может продолжить работу на старой цепочке блоков по предыдущим правилам.
  2. Сфотфорк — в этом случае участники сети на новом ПО могут взаимодействовать с теми кто не обновил софт и наоборот. Разделение цепочки на 2 отдельные не происходит.

Внедрению SegWit предшествовал ряд разногласий, как между отдельными компаниями, так и между условными лагерями «прогрессоров» и «децентралистов». В результате конфронтаций и отделения части майнеров произошел хардфорк биткоина — BCH (Bitcoin Cash). Отличием на начальном этапе стало непринятие SegWit и увеличение размера блока до 8Мб. В это время, в основной сети Bitcoin имплементация SegWit была реализована большинством майнеров, без обязательного порога в 95%, к этому моменту, порядка 80% узлов сети были готовы поддержать обновление.

Техническая сторона блокчейна и транзакций, как обоснование для внедрения SegWit

Биткоина как отдельной монеты в самом блокчейне не существует. В данном контексте про «монеты» принято говорить для упрощения понимания процессов и взаимодействия с экосистемой. Для понимания логики, необходимо понимание как именно работают транзакции в сети биткоина и что подразумевается под термином «Witness»/«Свидетель».

С технической точки зрения, на кошельках, связанных с сетью, хранится информация о транзакциях в блокчейне, или право собственности обладателя конкретной пары ключей. Баланс каждого адреса — это ссылки на набор транзакций, закрепленных в блокчейне, за данным адресом. Еще точнее — UTXO (неизрасходованный вывод транзакции) это и есть балансы кошельков биткоина.

Каждый UTXO может быть разделен на более мелкие или наоборот, несколько UTXO могут быть объеденины в один. Наименьшая возможная транзакция — 1 сатоши или 0,00000001 BTC. Для удобства восприятия информации, далее, где это будет уместно, мы будем называть неизрасходованный выход транзакции — монетами биткоина.

Как передаются «монеты» внутри блокчейна биткоина или как устроены транзакции в блокчейне

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

  1. Входов/вводов (inputs) — эффективно разблокирует монеты, которые были заблокированы в предыдущих транзакциях, используя фрагменты данных, называемые входами. Входные данные включают сценарии о том, как разблокировать ввод, называемые scriptSigs. В транзакции часто указывается несколько входов. Все значения входов новой транзакции (то есть общая стоимость монет предыдущих выходов, на которые ссылаются входы новой транзакции) суммируются, и эта сумма (за вычетом комиссии за транзакцию) полностью используется выходами новой транзакции. ScriptSig – это первая половина скрипта (подробнее ниже). Данный скрипт содержит два компонента: подпись и открытый ключ. Открытый ключ должен совпадать с хэшем, указанным в скрипте подтвержденного вывода. Открытый ключ используется для проверки подписи получателя, который является производным от закрытого или приватного ключа.
  2. Выходов/выводов (outputs) — содержит инструкции по отправке биткоинов. ScriptPubKey — это вторая половина скрипта. Выходов может быть несколько, и они разделяют общую стоимость входов (определяют какое именно количество монет будет отправлено и кому). Поскольку каждый выход одной транзакции (UTXO) может быть использован только один раз в качестве ссылки на вход последующей транзакции, всю совокупную стоимость входов необходимо отправить в выход. Если входная стоимость составляет 50 BTC, но вы хотите отправить только 25 BTC, кошелек создаст два выхода стоимостью 25 BTC: один в пункт назначения, а другой обратно вам («сдача»). 

Разница между «высвобожденными» и «запертыми» монетами считается комиссиями, которые уплачиваются майнерам за то что они вписывают транзакции в новый блок. Транзакция coinbase создается майнерами при создании нового блока и содержит фиксированную награду за блок + комиссии за все транзакции. Coinbase транзакция отличается от обычной — у нее отсутствуют входы.

Важно: Транзакция Coinbase не имеет ничего общего с криптовалютной биржей Coinbase. 

На скриншоте вы можете видеть схему биткоин транзакции до внедрения SegWit. Все данные нанесенные на схему хешируются и таким образом, транзакции присваивается идентификатор — txid.

Структура биткоин-транзакций до SegWit. Источник.

Поле транзакции в структуре выходов (зеленая) — Pubkey Script (далее scriptPubKey), его еще называют locking script или запирающий скрипт (для создания новой транзакции), дает цели-указания по запиранию «монет» с привязкой к паре ключей (публичный и приватный) адресата. Это делает возможным использование «монет» исключительно владельцем адреса, на который они были отправлены.

Поле транзакции в структуре вводов (синяя) — Signature Script (далее scriptSig) его еще называют unlocking script (для полученной транзакции) — содержит информацию о подписях для открытия locking script, предоставляя доказательство владения адресом. «Открытие» производится с помощью криптографической подписи или приватного ключа. Под доказательством владения, подразумевается свидетельство или информация о «Свидетеле» или «Witness».

«Отпирания и запирания монет» производится создателями транзакций, то есть обычными пользователями, в автоматическом режиме с помощью программного обеспечения (кошельки). Далее все эти данные транслируются в сеть, пакеты информации передаются между узлами сети (ноды), которые проверяют валидность процесса разблокировки и блокировки. Если нода является майнером, то она может записать транзакцию в новый блок.

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

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

Адреса, публичные и приватные ключи в блокчейне

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

Адрес, который используется для «запирания» монет в scriptPubKey предоставляется принимающей стороной транзакции. Поскольку получатель создал этот адрес, используя закрытый ключ, известный только ему, он единственный, кто может создать действительный scriptSig, и, следовательно, единственный, кто может создать новую транзакцию и потратить заблокированный биткойн.

Подписи

Подпись (signature) в блокчейне — это криптографический прием, который использует приватный ключ, в сочетании с любыми другими данными для вычисления уникальной последовательности знаков. Мы уже знаем что открытый ключ это производная закрытого, соответственно публичный ключ можно использовать для подтверждения того что подпись была сгенерирована с помощью приватного ключа. Соответственно, подписи доказывают владение приватным ключом, без необходимости его раскрытия или предъявления кому бы то ни было.

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

Хеширование транзакций и блоков

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

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

Изменение любой части данных о транзакции, которая включена в любой предыдущий блок, изменит txid транзакции, и она изменит хеш того блока и хеши всех последующих блоков. Ноды не примут подобные изменения в идентификации блоков, поскольку это будет противоречить консенсусу алгоритма существования биткоина — «доказательство работы» (Proof-оf-Work), на которой работает блокчейн биткоина. При этом сущность проблемы пластичности транзакций заключается именно в изменении txid конкретной транзакции, но об этом немного позже.

Техническая часть SegWit

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

Так как SegWit был развернут в качестве софтфорка, обязательным требованием является чтобы с новыми правилами могли взаимодействовать условно «старые» ноды, которые не обновили программное обеспечение. Выглядит это примерно так — новые типы выходов транзакции, которые создаются по новым правилам, с «точки зрения» «старых» нод могут смотреться странно из-за применения scriptPubKeys со странным значением, напомним что этот скрипт считается locking script (запирающий). Странность заключается в том, что scriptPubKeys, который обычно служит для «запирания» транзакций, в новых случаях сообщает о том что «подпись не требуется и кто угодно может потратить транзакцию».

Для «старых» нод подобные параметры выглядят безумными, так как в их «понимании» кто угодно может создать новый scriptSig (unlocking script), и потратить транзакцию на свое усмотрение. Транзакция выглядит безумной, но она не противоречит правилам, поэтому «старые» ноды посчитают ее валидной и перенаправят к другим узлам.

В это же время, ноды с поддержкой SegWit, заметят больше информации для обработки. Текст, который «старые» ноды посчитали бессмысленным в scriptPubKey, «новые» ноды воспримут как четкие указания к конкретным действиям. Подобно обычным выводам, для этого нового типа вывода потребуется одна или несколько подписей, чтобы разблокировать монеты. Но в отличие от обычных выходных данных, этот новый тип выходных данных не требует включения подписи в scriptSig последующей транзакции. Вместо этого потребуется, чтобы подпись была включена в совершенно новую часть структуры транзакции — Witness.

Witness представляет собой «надстройку», которая содержит подписи и некоторые дополнительные данные. Witness игнорируются старыми нодами, но распознаются новыми. А данные, которые они содержат, не хэшируются вместе с другими частями транзакции в txid транзакции.

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

В этой схеме есть важный нюанс с подписями. По факту, подписи есть, но они не включаются в хеш блока «по-старой схеме», при этом подпись не может отсутствовать в структуре блока, в противном случае, в блокчейне не будет доказательства того что в транзакцию были включены валидные подписи. Решение проблемы пластичности, с соблюдением канонов выглядит следующим образом — майнер, вместо того, чтобы создавать одно дерево Меркла из всех транзакций, он отдельно создает дерево Меркла из всех данных Witness, чтобы отразить дерево транзакций. Witness Merkle Root (корневой хеш) включается в поле ввода транзакции coinbase и хешуриется вместе с ней. Таким образом, Witness Merkle Root изменяет данные транзакции coinbase, ее идентификатор транзакции, в последствии влияет на заголовок блока и, в конечном итоге, на состав блокчейна. Консенсус — соблюден.

Схема работы блокчейна биткоина до, и после активации SegWit

Теперь для полноты картины, давайте посмотрим схему формирования блоков с учетом новых структур:

Структура биткоин-транзакций до SegWit. Источник.

Информация о подписях изымается из обычного дерева Меркла. В блоке формируется отдельное дерево хеша, после чего данные хешируются через добавление в транзакцию coinbase. Оба корня хешей — транзакций и данных Witness хешируются в заголовок, с оставшимися данными. Таким образом исключается любая возможность внести изменения как в TXID транзакции, так и в хеш заголовка блока.

Эффективный размер блока — увеличение пропускной способности

Среднедневной размер блока в блокчейне биткоина. Источник

Среднедневной размер блока в блокчейне биткоина находится в диапазоне 1.2 — 1.3 Мб. Вертикальной линией в центре графика отмечена дата внедрения SegWit, после чего ограничение в 1 Мб фактически было пройдено.

Размер блока ограничен алгоритмически в 1 Мб, но это параметр регулирует «старую» структуру хранения данных, а на новаторскую реструктуризацию данное правило не распространяется, так все решили и согласились, что данный факт не противоречит консенсусу биткоина. Перемещение подписей из их привычного места в блоке в отдельную структуру Witness, по факту высвободило эффективное место в блоке. Такой фокус означает, что в каждом блоке может быть записано больше транзакций, что в итоге увеличивает пропускную способность сети в целом.

«Старые» ноды не замечают новую структуру «Witness», соответственно они не учитывают ее вес, поэтому для них лимит в 1 Мб будет по-прежнему соблюдаться, а для «новых» нод, которые видят истинный размер, ограничение в 1 Мб было заменено новым — 4 Мб (максимально допустимый), а эффективный в пределах 1.6 — 2 Мб.

По заявлениям разработчиков — если все кошельки перейдут на использование SegWit, сеть сможет поддерживать примерно на 70% больше транзакций.

Проблема и исправление пластичности транзакций

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

Пластичность транзакции — это некритическое для безопасности и работоспособности, преднамеренное или случайное изменение части содержимого транзакции. А именно данные подписи в scriptSig, после ее формирования отправителем, до этапа записи транзакции в блок, недобросовестными нодами или майнерами, с целью изменить хеш (txid) всей транзакции. Как следствие создается клон, транзакции, но с другим TXID, 2 транзакции конкурируют за то кто первый будет записан майнерами в новый блок. Такая манипуляция не нарушает консенсус сети, записана будет только 1 транзакция, другая будет отклонена. Но вносит путаницу в системе учета транзакций, так изначально сформированная транзакция, а точнее ее хеш (TXID) отображается как неподтвержденная, этаже транзакция записывается в блок, но уже с другим «мутировавшим» TXID и доходит до получателя. Но отправитель, отслеживая перевод монет только по оригинальному TXID видит что транзакция не добавлена в блок и до получателя не дошла, хотя по факту монеты списались с его баланса и уже находятся на другом адресе, чтобы это увидеть достаточно отследить транзакции по целевому адресу или посмотреть состояние адреса отправителя и все созданные исходящие переводы.

Как SegWit решает проблему пластичности — все данные, изменения в которых приводят к изменению хеша транзакции, в следствии манипуляций с подписями, изолируются в новой структуре транзакции Witness, а попадая в блок хешируются особым образом (описано выше). Это исключает несанкционированное изменение TXID транзакции, что закрывает проблему пластичности или податливости транзакций к изменениям ее идентификатора.

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

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

Адрес «А» отправляет монеты в транзакции т1 адресу «Б», монеты уже отображены на адресе «Б» и с помощью «трюков» могут быть отправлены дальше, даже без подтверждения т1 в блокчейне. Адрес «Б», используя «трюки» отправляет монеты в транзакции т2 адресу «В» и если кошельком это предусмотрено, то они могут отображаться на балансе адреса «В», даже при условии, что т1 еще не подтверждена. В данной ситуации, в идеальном мире проблемы не возникнет, постепенно все транзакции будут добавлены в блоки, но в реальном мире случаются нюансы. А именно — если TXID транзакции т1 будет изменен, это будет означать что адрес «Б» получит монеты в полном объеме, но созданная ранее и отправленная на адрес «В» транзакции т2 не сможет сослаться на предыдущую транзакцию. Простыми словами она не сможет «объяснить свое происхождение», а блокчейн требует чтобы все транзакции были взаимосвязанны для отслеживания и их валидации в блокчейне. Как следствие т2 будет отменена и монеты исчезнут с адреса «В» и будут возвращены адресу «Б». Если адрес «Б» окажется добросовестным, он создаст повторно транзакцию с теми же значениями что были в т2 и отправит ее на адрес «В», но если это не так, адрес «В» станет жертвой мошеннической схемы.

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

Работа сайдчейнов или сетей второго уровня поверх блокчейна биткоина. SegWit и Lightning Network

Ситуация описанная выше, а именно off-chain транзакции используются для работы сайдчейнов, или сетей второго уровня, для быстрой и недорогой передачи монет внутри основной сети биткоина. Соответственно, безопасная работа сетей второго уровня невозможна без разрешения проблемы пластичности.
SegWit сделал любую функцию, которая основывается на неподтвержденных транзакциях, безопасной и удобной в проектировании. Наиболее известный блокчейн второго уровня, реализация которого стала возможной после внедрения Segregated Witness —  Lightning Network.

Другие нововведения SegWit для нод, майнеров и разработчиков

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

  • Линейное масштабирование операций входа — оптимизация хеширования подписей, с целью уменьшения затраты временных и аппаратных ресурсов на операции узлами сети.
  • Управление версиями скрипта — SegWit, добавляет номер версии для скриптов. Язык программирования ядра биткоина по сути состоит из элементарных скриптов. Отдельные проблемы и обновления теперь могут решаться добавлением новых версий скриптов в ядре биткоина. Благодаря этому, стало возможным внедрить, например, Подписи Шнора в обновлении Taproot.
  • Снижение роста UTXO или оптимизация аппаратных издержек для полных нод и майнеров — база данных неизрасходованных UTXO хранится в оперативной памяти полных узлов, это позволяет не допустить двойных трат. Однако количество UTXO растет пропорционально популярности проекта. SegWit уменьшает стоимость комиссий примерно на 75% тех транзакций, которые не увеличивают количество существующих UTXO, иными словами вводится система стимулов.

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

Все типы и форматы адресов Bitcoin, включая новые SegWit и Taproot

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

P2PK — Pay to Public Key

P2PK Входы и Выходы в сети Биткоин. Источник

Это не совсем адрес. Pay-to-PubKey — дословно переводится как оплата на публичный ключ. Первые биткоин транзакции использовали в качестве «адресата» полный публичный ключ, без его хеширования. Такой формат передачи монет имеет 3 недостатка:

  1. Пониженная безопасность.
  2. Некомфортное хранение и передача информации.
  3. Высокие комиссии.

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

Legacy — P2PKH (Pay to Public Key Hash)

P2PKH входы и выходы в сети биткоин. Источник.

Самый старый тип адреса, использовался практически с начала существования биткоина. Это уже хеш публичного ключа, как можно понять из расшифровки абревиатуры — Pay-to-PubKey-Hash. Данный формат был введен Сатоши Накамото. После 2018 (внедрение софтфорка SegWit) года наблюдается тенденция к снижению использования данного типа адресов.

Формат адреса чувствителен к регистру, всегда начинается с цифры «1», в данном формате адресов не применяются следующие символы: заглавные буквы O, I, строчная l и число 0, дабы исключить подмену символов и неоднозначность. Имеет следующий вид (пример):

«1Nmmnj9AHi3ngF1DzHUTCb2tBNWxG4cxXd»

Legacy (P2PKH) совместим со всеми кошельками в сети биткоин. Недостатки — самые высокие комиссии и низкая скорость хеширования данных при транзакциях.

Script — P2SH (Pay to Script Hash)

P2SH входы и выходы в сети биткоин. Источник.

Введен в 2012 году, в BIP16. Pay-to-Script-Hash — оплата на хеш скрипта. Позволяет привязывать монеты к хешу скрипта и создавать различные сценарии, соответственно вносит разнообразие для применения, например — создание адресов с мультиподписью, перекладывание комиссии на получателя.

Формат адреса идентичный Legacy, но начинается с цифры «3». Также чувствителен к регистру! Имеет следующий вид (пример):

«3BN8j6i3SfAGuBuQyRACS9ZkWNBu2tKFWG»

Совместим со всеми кошельками. Сниженная комиссия за транзакции, в сравнении с адресами Legacy. Также может быть родным адресом SegWit, но когда говорят про адреса SegWit, имеют в виду адреса — Bech32.

SegWit (Bech32) — P2WPKH (Pay to Witness Public Key Hash)

График процентного соотношения использования SegWit транзакций от всех остальных в системе. Источник.

Такой формат биткоин адресов был предложен в 2016 году, в BIP173, активирован в конце августа 2017 года. Pay to Witness Public Key Hash — оплата на хеш скрипта свидетеля. Адрес полностью реализует весь потенциал софтфорка SegWit, описанный в этой статье. Как видно из последнего скриншота, транзакции SegWit — тотально доминируют в экосистеме. 

В формате адреса используются только строчные буквы. Всегда начинается с «bc1q». Длинна адреса может варьироваться до 90 символов. Имеет следующий вид (пример):

«bc1qw508d6qejxtdg4y5r3zarvary0c5xw7kv8f3t4»

Совместим со всеми кошельками и адресами, исключения только очень старые кошельки. Наименьшие комиссии за транзакцию, среди рассмотренных форматов адресов и высокая скорость обработки. Адрес считается стандартом в экосистеме биткоина по состоянию на 2023 год.

Taproot (bech32m) —  P2TR (Pay to Taproot)

График процентного соотношения использования Taproot транзакций от всех остальных в системе. Источник

В ноябре 2021 года, вместе с вторым по значимости после SegWit, обновлением в сети Taproot был введен новый формат биткоин адресов P2TR (Pay to Taproot) или bech32m. Еще большая оптимизация комиссий за транзакции.

В формате адреса используются только строчные буквы. Всегда начинается с «bc1p». Имеет следующий вид (пример):

«bc1peu5hzzyj8cnqm05le6ag7uwry0ysmtf3v4uuxv3v8hqhvsatca8ss2vuwx»

Рост за 2022 год процентного соотношения использования адресов Taproot составил больше 1.5%, с 0,24% в начале года, до 1.84% к концу года. Не все кошельки биткоина поддерживают данный тип адреса, но постепенно принятие будет увеличиваться, как это происходило с адресами SegWit.

Еще не все кошельки поддерживают создание адреса формата bech32m. Также некоторые биржи и сервисы не разрешают переводы на Taproot адреса.

Адрес типа P2WPKH, он же SegWit (Bech32) — наиболее оптимальный вариант если стоит выбор какой адрес биткоина использовать. Он совместим практически со всеми остальными адресами, кошельками, биржами и сервисами, исключение — только устаревшие кошельки.

SegWit и SegWit2x

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

Заключение

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

Биткоин, в свое время стал прорывной технологией, но без глобальных улучшений программного обеспечения, каким в свое время стал «Отделенный Свидетель» не было бы того развития и возможно, не было бы того BTC, которого мы знаем сегодня.

Некоторая часть технической информации взята, переведена и адаптирована с сайта bitcoinmagazine.com где в свою очередь при подготовке материала использовались комментарии соучредителей Blockstream Питера Вуилле и Марка Фриденбаха, генерального директора Ciphrex Эрика Ломброзо и технического директора Blocktrail Рубена де Вриса, по сути это люди, которые участвовали в разработке Segregated Witness.

Будет интересно

Часто задаваемые вопросы

В данном контексте подразумевается формат биткоин адреса. У Native SegWit адреса начинаются с «bc1q», это формат (Bech32) или P2WPKH (Pay to Witness Public Key Hash), в то время как под SegWit подразумевают P2SH (Pay to Script Hash), начинается этот формат адресов с цифры «3». А имеет отношение к SegWit по той причине, что для переводов используются скрипты.
Это новый тип адресов биткоина, который был внедрен для оптимизации работы с софтфорком SegWit, в том числе оптимизации комиссий, более быстрой обработки транзакций и повышения безопасности.
Самое масштабное обновление программного кода биткоина, призванное решить проблему пластичности транзакций и увеличить масштабируемость сети. Однако, данное решение применялось и на других проектах, наиболее известный — Litecoin.
Это вид голосования в децентрализованной сити за то или иное предложение по улучшению, в данном случае майнеров, которые установкой или не установкой обновленного программного обеспечения сигнализируют или не сигнализируют о поддержке конкретного обновления в сети. Если определенный процент «проголосует за», это будет означать фиксацию предложения, а далее следует реализация, в том порядке, как это было прописано в документе.

Как вам статья?

3
0

статьи на эту же тему

Решения второго уровня для биткоина...
avatar Nikita Tipikin-Holovko
20.03.2024
Халвинг биткоина в 2024 году: когда...
avatar Andrew Makarov
06.03.2024
Что такое биткоин-ETF и как он влияет на...
avatar Ivan Pavlovskyy
09.01.2024