Неделю назад, 24 августа, технология Segregated Witness, или Segwit, наконец была активирована абсолютным большинством мощности хэширования сети Биткоина. Segwit исправляет несколько важных ошибок, существовавших в протоколе, улучшает масштабирование путем увеличения эффективного размера блока, а также предоставляет больше возможностей для развертывания решений второго уровня поверх базового блокчейна.
Однако, через неделю после активации, которой ждали почти два года, никакого видимого эффекта работы SegWit до сих пор не заметно. Очередь транзакций и комиссии остаются на прежних уровнях, а иногда и заметно вырастают. Размер большинства блоков остается на прежнем уровне около 1МБ. И даже биржевой курс биткоина топчется почти на месте, показывая вялую восходящую динамику.
Почему же эта перспективная и широко разрекламированная технология, с которой связывали решение почти всех насущных проблем Биткоина, так и не заработала в полную силу? Чтобы разобраться в этом, придется несколько отступить от рекламы и громких событий и найти причины в первоисточнике - то есть в самом блокчейне.
Почти два года дебатов
В декабре 2015 года был выпущен исходный код для Segregated Witness (Segwit). Предполагалось, что это обновление поможет справиться с проблемой пластичности транзакций, которая позволяет внести изменения в ID транзакции до того, как она подтверждается в блокчейне. Помимо этого, SegWit предлагает способ частичного масштабирования Биткоина, хотя и не самого эффективного.
Почти два года технология не могла получить поддержку 95% мощности хэширования, которая была необходима для этого. Предполагалось, что обновление будет реализовано через софтфорк, то есть будет соответствовать всем существующим правилам консенсуса и будет совместимо с предыдущими версиями протокола, что особенно важно для тех, кто не хочет обновляться.
Кто-то считает, что состоявшаяся активация Segwit – прямой результат шантажа внедрением BIP148, вынудившего майнеров наконец-то активировать обновление после всех споров. Более реалистичное мнение состоит в том, что Нью-Йоркское соглашение послужило причиной того, что ключевые игроки экосистемы смогли договориться для выражения общей поддержки Segwit.
BIP91 был выпущен в июле в рамках реализации Нью-Йоркского соглашения, чтобы снизить порог активации до 80% мощности хэширования. Когда BIP91 выполнил свою задачу, все майнеры сети начали голосовать за SegWit, и он был зафиксирован в начале августа. В течение двух недель периода фиксации обновления, пользователи и организации могли обновить свои клиенты Биткоина для того, чтобы работать с Segwit. Тем не менее, большинство не сделали этого или не начали использовать имеющиеся возможности.
Как работает Segwit
С точки зрения масштабирования самое заметное нововведение состоит в том, что понятие размера блока было исключено из SegWit, вместо этого теперь существует понятие веса блока. По терминологии SegWit, существует два типа данных, которые содержатся в транзакции. Во-первых, есть фактические данные транзакции (non-witness data), такие как адрес, значения выходов, исполняемые скрипты-условия и т.д. Также есть данные подписей (witness data), которые представляют собой всю информацию, которая необходима только при подтверждении транзакции, а затем эти данные по сути никогда не используются снова.
Segwit позволяет уменьшить номинальный размер транзакции за счет второго вида данных. 1000 транзакций в 1Кб очевидно быстро заполнят текущий размер блока, однако помните о том, что понятия размер блока больше нет – оно было заменено весом блока, новый лимит которого установлен на уровне 4 000 000 «единиц веса» (WU).
Количество единиц веса в данных транзакции – это количество байт в данных транзакции, умноженное на 4. Данные подписей (witness data) считаются прямым переводом на единицы веса в соотношении 1:1.
Предположим, что в пуле неподтвержденных транзакций (mempool) есть 1000 транзакций, все по 1 Кб данных. Теперь предположим, что в каждой из транзакций 400 байт это witness data, а остальные 600 байт - данные транзакции. 600 байт для данных транзакций теперь равняются 2 400 единицам веса, тогда как witness data приравниваются к 400 единицам, что дает общий вес транзакции в 2 800 единиц. Все эти транзакции вместе будут занимать всего 2 800 000 единиц из 4 000 000 единиц, оставляя место для большего количества транзакций.
Если брать транзакции, аналогичные описанным выше, в блок можно поместить еще около 430 транзакций реальным размером 1кб. При этом реальный размер блока при добавлении дополнительных транзакций увеличится до ~1.43 Мб, но "" лишние 430 Кб будут вынесены за пределы блока, таким образом "очищенный" блок будет по-прежнему укладываться в лимит 1Мб.
По расчетам исследователей, средняя экономия места за счет подписей составляет примерно половину общего объема данных, то есть после полного переходя на SegWit реальный размер блока будет составлять около 1.8 Мб. В некоторых случаях, если в блоке будет много мультиподписных транзакций, возможен и больший размер блока. До установленного лимита в 4Мб (4 000 000 WU) может дотянуть только блок, состоящий из одних подписей, что в реальности, разумеется, невозможно.
Поскольку размер в байтах транзакции без подписей становится меньше, то и комиссионный сбор за такую транзакцию будет меньше. В среднем, комиссия также уменьшится в 1.8 раза, хотя для отдельно взятой транзакции эта разница может отличаться в обе стороны. Экономия в четыре раза, о которой пишут в некоторых СМИ, также является идеальной недостижимой величиной, как и блок размером 4 Мб.
Кроме того, разработчики SegWit предусмотрели еще одну возможность "облегчения" блокчейна. Как только SegWit транзакция подтверждена сетью, более ненужные witness data могут быть удалены из базы данных. Однако, такой режим хранения (witness pruning) не совместим с транзакциями без поддержки Segwit и до полного перехода, вероятно, применяться не будет, иначе узел потеряет возможность участвовать в распространении транзакций, созданных другими узлами. В частности, текущая версия Bitcoin Core не поддерживает эту функцию.
Как использовать Segwit?
Теперь вернемся к сложившейся ситуации. Почему же после активации SegWit масштабирование сети не улучшилось? Дело в том, что SegWit внедрялся как софтфорк - это значит, что его можно, но не обязательно использовать. И его не используют, так как для этого нужно производить дополнительные действия, а большинство пользователей не хотят, не умеют или просто не знают, что нужно делать. Для того, чтобы Segwit помог действительно увеличить пропускную способность сети, потребуются недели или даже месяцы, пока он не получит широкое распространение.
Что нужно сделать
Транзакции Segwit могут быть отправлены только с адресов Segwit, имеющих другой формат по сравнению с традиционными, и получены только на адреса SegWit. Поэтому с каждого адреса, который сейчас содержит монеты, они должны быть отправлены на адрес Segwit. И даже после этого может остаться приличное количество пользователей, не доверяющих Segwit и не желающих его использовать. Что в общем никому не мешает – в этом основной плюс софтфорка. Он не вынуждает пользователей, не согласных с обновлением, принимать его до тех пор, пока подавляющее большинство транзакций не перейдет на формат SegWit.
Чтобы вы могли использовать Segwit и отправлять транзакции Segwit, вам нужно отправить свои монеты в кошелек, который генерирует адреса Segwit. В противном случае, это будет обычная транзакция. Для того, чтобы получать Segwit транзакции в свой кошелек, необходимо создать комплект SegWit-адресов. Это адреса типа P2SH и начинаются с 3.
Какие кошельки поддерживают SegWit?
На данный момент известно о следующих кошельках, поддерживающих SegWit-адреса и транзакции:
Bitcoin Core: SegWit-транзакции доступны, но в графическом интерфейсе операций с ними нет, только в командной строке или через API. Это существенно снижает количество пользователей, которые смогут принимать и отправлять segwit-транзакции с помощью самого популярного кошелька для биткоина.
Для того, чтобы создать адреса SegWit в кошельке Bitcoin Core, необходимо использовать следующую команду в консоли кошелька или командной строке операционной системы:
addwitnessaddress addr где addr - уже задействованный в вашем кошельке традиционный адрес. Команду нужно выполнить для всех адресов с ненулевым балансом для отправки segwit-транзакций, и для неиспользованных адресов, чтобы принимать segwit-транзакции в своем кошельке.
Легкие (SPV) и мобильные кошельки. Достоверно известна поддержка Segwit-транзакций только кошельками BitGo, GreenAddress, OpenBazaar, остальные разработчики пока не заявляли об этом. Вероятно у многих других кошельков она уже есть, хотя пользователям об этом может быть неизвестно.
Аппаратные кошельки: производители аппаратных криптовалютных кошельков на этот раз отличились. Все три основных аппаратных кошелька - Trezor, Ledger и Keepkey, уже поддерживают создание и использование адресов Segwit, для этого потребуется только установить последнюю версию прошивки устройства.
Текущая ситуация
Таким образом, при желании пользователи могут переходить на SegWit не меняя кошелька. Но происходит это слишком медленно, чтобы давать видимый эффект. Количество SegWit транзакций растет, но их доля в общем количестве составляет чуть больше 0.5%. На конец дня 1 сентября она поднялась до 0.83%. Согласитесь, величина далеко не достаточная для того, чтобы последствия стали заметны на практике.
Первая segwit-транзакция в сети была проведена инженером BitGo, Бенедиктом Чаном, 25 августа. Однако, она носила в основном демонстрационный характер. С тех пор количество segwit-транзакций растет, и в последние два дня их количество держатся около 1800 штук в сутки. Однако, это немногим более 0.5% от общего суточного количества транзакций в блокчейне. Поэтому, количество блоков, размер которых превышает 1Мб пока невелико, и превышение лимита редко исчисляется даже в нескольких десятках килобайт. Самый большой блок размером 1067 Кб был зафиксирован 27 августа.
Все это делает понятным тот факт, что очередь неподтвержденных транзакций в первые дни после активации не торопилась уменьшаться. Некоторые разочарованные члены сообщества и СМИ по привычке обвинили во всем майнеров, точнее Antpool и компанию Bitmain, которые якобы саботируют SegWit (за который они перед этим голосовали) путем добычи пустых блоков, что способствует росту очереди транзакций. Очевидные факты, что пустые и полупустые блоки в этот день добывали четыре пула (Antpool, BTCC, BTC.com и 1Hash) а также то, что Antpool известен этим с момента своего появления в 2014 году, были традиционно проигнорированы. Кроме того, в связи с ажиотажем вокруг более прибыльного майнинга BCH, оттянувшего на себя значительную долю майнеров, блоки в основной сети в эти дни добывались несколько реже обычного, что также вызывало увеличение очереди транзакций.
После 25 августа майнинг BCH снова стал менее выгодным, чем в основной цепи, и блудные майнеры вернулись. Очередь транзакций начала понемногу уменьшаться. К концу дня 1 сентября, несмотря на слабый эффект от SegWit, очередь транзакций упала до приемлемых величин в несколько тысяч, но автоматически вычисляемые комиссии пока держатся на уровне около 300 сатоши за байт. Тем не менее, уже есть возможность отправлять транзакции с вручную назначенной комиссией в несколько раз ниже, и они с высокой вероятностью будут подтверждены через несколько блоков.
Что касается массового принятия SegWit, то его, очевидно, не следует ждать в ближайшие дни и даже недели. Разработчики и операторы кошельков, пользователи и бизнес постепенно будут переходить на segwit-адреса, но процесс может растянуться на месяцы. Дополнительным стимулом для перехода может стать успешный запуск платежей Lightning Network и других разработок, использующих SegWit.