Segregated Witness
![](http://upload.wikimedia.org/wikipedia/commons/thumb/6/6b/Segwit.svg/400px-Segwit.svg.png)
Segregated Witness (сокращенно SegWit) — реализованное обновление протокола, призванное решить проблему пластичности транзакций блокчейна Биткойн, а также увеличить её пропускную способность. Аналогичное обновление реализовано и для некоторых других криптовалют, таких как Litecoin, DigiByte, Groestlcoin и Vertcoin.[1]
SegWit является «мягким форком» и позволяет сети функционировать в прежнем режиме. Однако изменяется структура хранения данных в блоке и механизм проверки транзакций для полноценных узлов сети. Теперь подписи и сценарии выделяются в обособленную структуру, именуемую отдельным свидетелем (англ. segregated witness). Это позволяет основному блоку вместить больше транзакций, а также исключает вариативность идентификатора одной и той же транзакции.[1]
История
Проблема масштабируемости
![](http://upload.wikimedia.org/wikipedia/commons/thumb/7/73/Bitcoin_transactions_per_month.svg/400px-Bitcoin_transactions_per_month.svg.png)
В 2010 Сатоси Накамото ввёл ограничение на размер блока в 1 мегабайт. Ограничение позволило улучшить совместимость узлов сети, а также снизить эффективность DDoS-атак, но снизило максимальную пропускную способность сети до 3-7 транзакций в секунду. Последнее в дальнейшем оказало негативное влияние на способность сети к масштабированию. С ростом пользовательской базы и количества переводов стали расти и задержки — некоторые транзакции ожидали очереди несколько дней. Это также привело к росту комиссий за переводы, что резко снизило привлекательность Биткойна для мелких платежей.[2]
Предлагалось увеличить размер блока, что было реализовано в таких форках Биткойна, как Bitcoin XT, Bitcoin Classic, Bitcoin Unlimited, Lightning Bitcoin и самом успешном Bitcoin Cash.[3][4]
Пластичность транзакции
Ещё одной острой проблемой сети Биткойн являлась так называемая пластичность транзакции. Обычная структура транзакции Биткойна содержит криптографическую подпись, которая позволяет другим участникам сети проверить, действительно ли владелец биткойнов собрался их так потратить. Подпись рассчитывается на основе закрытого ключа для каждой транзакции, что исключает изменение данных самой транзакции. Идентификатором транзакции является её хэш, который вычисляется на основе всего тела транзакции. Малейшее изменение в транзакции изменяет её идентификатор.[5] На самом деле, можно изменить транзакцию, оставив её действительной (например, добавив необязательные служебные константы в подпись, которые существенно не изменяют сценарий).[6] При этом изменится её идентификатор, а значит модифицированная транзакция будет считаться совершенно новой и более того, сможет пройти верификацию у других узлов сети.[5]
Любой узел сети может модифицировать транзакцию и транслировать её остальным. Если модифицированная транзакция будет включена в блок основной ветки раньше оригинальной или в дальнейшем окажется в более длинной ветке, то исходная транзакция будет отвергнута, так как будет ссылаться на использованный выход (так же будут отвергнуты и ссылающиеся на неё).[7] Это создает множество проблем, так как некоторые системы проверяли факт проведения платежа по идентификатору. Также это усложняет реализацию технологий более высокого уровня, которые основываются на блокчейне Биткойна.[5]
Разработчики и раньше пытались решить эту проблему, но она так и не была полностью устранена до обновления SegWit.[8][9]
Предполагается, что с помощью пластичности транзакции было «незаконно» выведено 64 564 BTC из популярной в своё время площадки MtGox[10]. Сеть Bitcoin Cash подверглась масштабной атаке на пластичность транзакций вскоре после «хард-форка».[11]
Атака «дней рождения»
Мультиподписные адреса Биткойна используют P2SH и защищены с помощью HASH160 (хэш SHA-256 внутри RIPEMD-160[12]). Если злоумышленник владеет хотя бы 1 ключом из мультиподписного списка, то с учётом коллизии хэша он может снизить количество вариантов перебора до 280, что уже осуществимо для современных вычислительных систем[13].
Segregated Witness
Для решения обеих вышеупомянутых проблем было предложено обновление Segregated Witness. Суть заключается в вынесении подписей транзакций в одноименную структуру вне основной части, что значительно уменьшает последнюю, так как размер подписи составлял более 50 % от размера всей транзакции. Также это решает проблему пластичности транзакций, ведь подписи больше не влияют на хэш-идентификатор.[1][14]
Но теперь, чтобы проверить все транзакции, узлу нужно загружать расширенный блок (основной блок + отделенный свидетель). О готовности принять расширенный блок узел специально сообщает соседям. Остальные узлы принимают стандартные блоки в 1МБ, считая что транзакции не нуждаются в подписи. Блок подписей связывается с основной цепочкой с помощью дерева Меркла, расположенного в заголовке блока. От всех подписей так же как и от всех транзакций считаются хэши и заносятся в дерево. Суммарный хэш подписей присоединяется к хэшу первой транзакции (coinbase-транзакции) в дереве Меркла транзакций.[1][14]
Расширенный блок теоретически ограничен 4 мегабайтами, но фактически максимальный размер блока составляет чуть менее 2 МБ.[15]
В SegWit для защиты MultiSig-кошельков вместо P2SH используется P2WSH, защищенный SHA256. Это усложняет атаку «дней рождения» до 2128.[13]
Активация
Segregated Witness был предложен Питером Вюлле (Pieter Wuille) в конце 2015 года. Выпуск состоялся в октябре 2016 года — на 6 месяцев раньше запланированного срока. Активация должна была произойти после преодоления 95%-го порога участников, сигнализирующих о поддержке обновления. Но некоторые участники сети заявили, что поддержат обновление, только если в него будет добавлено увеличение размера основного блока (китайские пулы могли заблокировать введение SegWit.).[1] 23 мая 2017 года майнеры и разработчики подписали Нью-Йоркское соглашение[16], предполагавшее увеличение размера основного блока до 2 МБ в течение 6 месяцев (это обновление назвали SegWit2x). SegWit был активирован 24 августа 2017 года.[1]
Некоторые альткойны тоже решили реализовать SegWit. Так как многие альткойны основаны на коде Биткойна, это не составило для разработчиков особых трудностей. Первым из них активировал обновление Groestlcoin в январе 2017 года.[1]
Преимущества
- Совместим с предыдущими версиями ПО.[1]
- Увеличивает количество транзакций в блоке.[13]
- Снижает комиссионные сборы.[13]
- За счёт количества транзакций в блоке общие сборы майнеров могут увеличиться.[13]
- Уменьшает время ожидания в очереди.[13]
- Способствует масштабируемости Биткойна.[1]
- Устраняет пластичность транзакций.[13]
- Облегчает разработку и увеличивает эффективность и безопасность дополнительных надстроек (смарт-контракты, Lightning Network и т. д.).[13]
- Устраняет проблему квадратичного роста времени проверки транзакций.[13]
- Повышает надежность MultiSig-кошельков.[13]
Недостатки
- Увеличивает использование ресурсов узла сети.[17]
- Несколько усложняется проверка транзакций.[17]
- В то же время сборы майнеров могут сократится из-за введения надстроек.[17]
- Некоторые участники считают SegWit лишь временной мерой и настаивают на увеличении размера основного блока.[1]
- Дополнительная цепочка тоже требует обслуживания, в чём майнеры не особо заинтересованы. В сети Биткойн нет вознаграждения за проверку транзакций (в отличие от Dash). Майнеров сдерживает только высокая вероятность майнинга ошибочных блоков при высокой концентрации облегчённых клиентов (SPV-нод).[18]
Дальнейшее развитие
8 ноября 2017 года «хард-форк» SegWit2x был отложен на неопределённое время из-за отсутствия консенсуса.[19]
Благодаря обновлению SegWit существенно облегчается разработка и внедрение надстроек, а также увеличивается их безопасность и эффективность.[1] В ближайшее время планируется запуск Lightning Network.[13] Разрабатывается решение для увеличения гибкости смарт-контрактов Merklized Abstract Syntax Tree (MAST), которое также улучшает масштабируемость и повышает конфиденциальность.[20]
Примечания
- ↑ 1 2 3 4 5 6 7 8 9 10 11 The Long Road to SegWit: How Bitcoin’s Biggest Protocol Upgrade Became Reality (неопр.). Дата обращения: 14 декабря 2017. Архивировано 14 декабря 2017 года.
- ↑ Satoshi’s Best Kept Secret: Why is There a 1 MB Limit to Bitcoin Block Size (неопр.). Дата обращения: 24 декабря 2017. Архивировано 24 декабря 2017 года.
- ↑ A Controversial Bitcoin Alternative is Seeking a Comeback (неопр.). Дата обращения: 24 декабря 2017. Архивировано 1 декабря 2017 года.
- ↑ Differences Between Bitcoin Cash and Bitcoin (неопр.). Дата обращения: 24 декабря 2017. Архивировано 24 декабря 2017 года.
- ↑ 1 2 3 Transaction Malleability Explained
- ↑ Bitcoin Transaction Malleability Theory in Practice (неопр.). Дата обращения: 14 декабря 2017. Архивировано 14 декабря 2017 года.
- ↑ Bitcoin Developer Guide (неопр.). Дата обращения: 25 декабря 2017. Архивировано 28 декабря 2017 года.
- ↑ The Who, What, Why and How of the Ongoing Transaction Malleability Attack (неопр.). Дата обращения: 24 декабря 2017. Архивировано 24 декабря 2017 года.
- ↑ Bitcoin Core version 0.10.0 released (неопр.). Дата обращения: 24 декабря 2017. Архивировано 24 ноября 2017 года.
- ↑ Study: Mt. Gox May Have Lost Just 386 BTC Due to Transaction Malleability (неопр.). Дата обращения: 23 декабря 2017. Архивировано 23 декабря 2017 года.
- ↑ Bitcoin Cash network under attack (недоступная ссылка)
- ↑ Script - Bitcoin Wiki (неопр.). en.bitcoin.it. Дата обращения: 5 февраля 2021. Архивировано 4 февраля 2021 года.
- ↑ 1 2 3 4 5 6 7 8 9 10 11 Segregated Witness Benefits (неопр.). Дата обращения: 13 декабря 2017. Архивировано 26 апреля 2018 года.
- ↑ 1 2 Pieter Wuille: Segregated witness and its impact on scalability @ SF Bitcoin Devs (недоступная ссылка)
- ↑ Segregated Witness Activates on Bitcoin: This is What to Expect (неопр.). Дата обращения: 23 декабря 2017. Архивировано 1 декабря 2017 года.
- ↑ New York Agreement (неопр.). Дата обращения: 22 декабря 2017. Архивировано 7 августа 2017 года.
- ↑ 1 2 3 Segregated Witness Costs and Risks (неопр.). Дата обращения: 24 декабря 2017. Архивировано 21 февраля 2018 года.
- ↑ SPV mining (неопр.). Дата обращения: 14 декабря 2017. Архивировано 29 декабря 2017 года.
- ↑ 2x Called Off: Bitcoin Hard Fork Suspended for Lack of Consensus (неопр.). Дата обращения: 22 декабря 2017. Архивировано 3 января 2018 года.
- ↑ Inside MAST: The Little-Known Plan to Advance Bitcoin Smart Contracts (неопр.). Дата обращения: 22 декабря 2017. Архивировано 23 декабря 2017 года.
Литература
- Andreas M. Antonopoulos. Mastering Bitcoin.
Ссылки
- Segregated Witness Benefits
- Transaction Malleability Explained
- Understanding Segregated Witness (недоступная ссылка)
- So what is Segwit?
- The Long Road to SegWit: How Bitcoin’s Biggest Protocol Upgrade Became Reality
- Segregated Witness Upgrade Guide