Каким будет реальный размер блока после активации SegWit

Благодаря SegWit2x, уже через неполный месяц мы, вероятно, пройдем через активацию SegWit. Размер блока будет заменен «весом» блока, объем транзакций будет увеличен, а комиссионные сборы станут ниже. Но каким образом это произойдет – не самый простой вопрос.

В последние недели споры об активации SegWit изменили свой вектор – теперь речь идет не о том, нужно ли активировать протокол, а том, как и когда это сделать. SegWit2x – объединение майнеров и компаний, которые хотят не только активировать протокол SegWit, но и произвести 2Мб хардфорк. Альфа-версия протокола имеет максимально возможный режим совместимости, что не предполагалось изначально. Он также поддерживает развертывание SegWit в Core с версии 0.13.1 и даже узлы UASF (о крайней мере, до хардфорка).

Альянс из 80% компаний, как майнеров, так и платформ, активирует SegWit до 1 августа. Но каким именно образом SegWit увеличит пропускную способность сети? Иногда говорят, что SegWit это «2Мб софтфорк», а иногда даже – «4Мб софтфорк», однако в тоже время можно услышать мнение, что SegWit обеспечить только пропускную способность, эквивалентную 1.5 или 1.8Мб.

Как SegWit обеспечит долгожданное увеличение объема транзакций и почему его так сложно оценить?

От размера к весу

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

В этом свете стоить отметить, что подписи занимают примерно 60% объема транзакции. Таким образом, если старые узлы, которые обеспечивают ограничение размера блока в 1Мб, продолжат работать с 40% необходимых данных, то тогда, конечно общая пропускная способность сети значительно увеличится.

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

4 * Non-Segwit-Data + 1 * SegWit-Data <= 4000 Kilobyte

Давайте рассмотрим это условие подробнее. «non SegWit data» — это все, что не входит в SegWit-extra-space: ID, отправитель, получатель, сумма, старые подписи. Размер этих данных умножается на четыре. Затем прибавляется пакет подписей SegWit, но только один за раз. Результат не должен превышать 4Мб.

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

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

… И обратно к размеру блока

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

Самое главное – необходимы две переменные. Во-первых, нужно знать сколько процентов всех транзакций – транзакции SegWit (m). Это очень сложный вопрос. Затем, необходимо узнать, сколько процентов от объема пространства блока занимают подписи (n). Это узнать относительно легко.

Если использовать эти переменные и формулу для вычисления веса блока и немного поработать с ними, то можно найти способ вычислить реальный размер блока. Портал BTCManager создал простой JavaScript, который моделирует пропускную способность SegWit с различными переменными. Создатели BTCManager попросили эксперта по Биткоину Йохена Хенике (Jochen Hoenicke) изучить формулу. Он ее упростил и исправил в ней значительные детали. Если вы попробуете поработать с этим скриптом, то увидите, что пропускная способность увеличивается по мере того, как увеличиваются значения переменных m и n, что было и так вполне очевидно. Давайте подробнее рассмотрим результаты.

Что мы знаем и чего мы не знаем

В первую очередь давайте обратимся к тому, чего мы не можем знать наверняка. Понять какой объем занимают подписи в блочном пространстве относительно легко. По словам Хенике, составившего список долей подписей во всех блоках с момента появления нулевого блока, подписи занимают от 60% до 63% блочного пространства. Это доля остается относительно стабильной величиной последние два года, то есть можно считать, что переменная n=60/65.

Более сложный вопрос – необходимо ли транзакциям SegWit на 10% больше пространства, чем старым транзакциям. В текущем развертывании SegWit использует так называемые адреса «nested P2SH», которые действительно нуждаются в этих 10%. Однако в будущем планируется, что появятся собственные SegWit адреса, которым это дополнительное пространство не нужно. Для симуляции, которая описана выше, в основном используется текущий формат адреса.

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

Как SegWit принимается сетью Биткоин?

Как правило, преимущество пропускной способности SegWit обозначается как «2Мб софтфорк». Это оценка в целом правильная, если каждая отправленная транзакция использует SegWit с собственным форматом. Что должно произойти, если SegWit решит принять 100% участников сети?

Весь набор UTXO (сокращение от «неизрасходованные выходы»), по сути, должен быть преобразован. Каждый вход или монета в блокчейне Биткоина должны быть отправлены со старого адреса на новый адрес SegWit. Только после этого транзакция сможет обеспечить большую пропускную способность путем «аутсорсинга» подписей. В настоящее время набор UTXO содержит 50 миллионов входов или примерно 2Гб пространства. Для полного преобразования потребовалась бы обработка транзакций Биткоина за две недели.

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

Оценка реальных размеров

Сколько времени займет преобразование значительной части UTXO? Какое увеличение пропускной способности можно ожидать в течение 6 месяцев? Точные цифры назвать невозможно. Все, что можно сделать – выделить три довода, которые говорят в пользу того, что пропускная способность увеличится от 40% до 80% в течение 6 месяцев:

  • Если обратиться к старому доброму принципу Парето, то 20% всего можно считать 80% всего. 20% компаний могут обеспечить 80% транзакций. Если такие крупные платформы, как Coinbase, BitPay, Bitcoin.de, BitStamp и другие крупные биржи и обработчики платежей примут SegWit, он может легко получить 80% поддержку.

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

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

В конце концов можно предположить, что принятие SegWit через полгода после его активации будет в лучшем случае 85%, а в худшем – 50%. При 50% вместимость блока будет 1, 25Мб, а при 85% — 1, 45Мб. Эти размеры будут в дальнейшем увеличиваться. Если начнут использоваться собственные адреса SegWit, а его принятие достигнет 90-95%, то размер блока может увеличиться до 1, 8Мб.