Block Size War — период споров о пропускной способности и правилах Bitcoin, кульминацией которых в 2017 году стали активация SegWit, отделение Bitcoin Cash и приостановка намеченного форка SegWit2x. Это три разных события с разными причинами и техническими механизмами.
Представим две обычные потребности. Анна хочет отправить биткоины без долгого ожидания и высокой комиссии. Павел запускает полный узел — компьютер, самостоятельно проверяющий блоки и транзакции. Он хочет проверять свои деньги без дорогого оборудования. Обе потребности разумны, но больше данных в каждом блоке означает больше передачи и проверок. Вокруг этого баланса и шла Block Size War. Блок — это набор транзакций, который добавляется к общей истории платежей в сети. Анна и Павел — условные персонажи. В реальных спорах 2015–2017 годов участвовали разработчики, операторы майнинга, бирж, кошельков и пользователи. Разногласия касались пропускной способности сети и безопасного способа изменений. У Bitcoin не было директора, который мог бы выбрать вариант и приказать всем перейти на него. [1] [11] [13]
До SegWit правила ограничивали блок размером 1 MB, то есть 1 000 000 байтов. Это не фиксированное число платежей: транзакции занимают разный объём. Новый блок появляется в среднем примерно раз в десять минут. Если спрос на место превышает вместимость блоков, майнеры обычно предпочитают транзакции с более высокими ставками комиссий, а остальные ждут. Сторонники крупных блоков хотели добавить место прямо в базовой сети и сохранить доступные платежи. Оппоненты опасались требований к соединению, компьютерам и быстрому распространению блоков. Если меньше людей смогут проверять самостоятельно, больше пользователей будут полагаться на чужие сервисы. Само повышение лимита не ускоряет создание блоков и не гарантирует низких комиссий навсегда: важны спрос и фактическое использование места. [1] [2] [13]
Разработчик может написать программу, майнер — создать по ней блок. Но оператор Full Node выбирает правила, которые проверяет его узел. Даже большинство вычислительной мощности не может заставить неизменённый узел принять блок, нарушающий его правила. Мощность помогает выбирать между допустимыми цепочками; недопустимый блок она не делает допустимым. Это не даёт каждому узлу голос на всемирных выборах и не позволяет одному человеку запретить другим уйти. Компании выбирают, что принимать, майнеры — что добывать, пользователи — чему придавать ценность. Несовместимые правила могут привести к двум сетям. Поэтому соглашение бизнеса могло поддержать изменение, но не автоматически переписать программы и решения всех участников. [11] [12]
Предложения оформляли как BIP — Bitcoin Improvement Proposal. Такой документ объясняет предложение, чтобы другие могли его изучить и обсудить. Присвоение номера ещё не означает, что сеть его приняла. Gavin Andresen предложил в BIP 101 повысить лимит до 8 MB с дальнейшим ростом по заданному расписанию. План предусматривал приблизительное удвоение каждые два года и условия активации. Mike Hearn вместе с Andresen продвигал Bitcoin XT — альтернативную программу, предлагавшую этот путь. Однако публикация программы ещё не меняла правила всей сети. Старые узлы отклонили бы блок сверх прежнего лимита. Это был Hard Fork: расширение набора разрешённых блоков, для принятия которых требовались другие правила. Поэтому спор вышел за пределы вопроса о дополнительном месте. Кто перейдёт, как согласовать переход и что произойдёт, если значительная часть участников откажется? [1] [18] [13]
Eric Lombrozo, Johnson Lau и Pieter Wuille описали другой подход в BIP 141. SegWit изменил устройство данных транзакций и ввёл вес блока с пределом 4 000 000 weight units. Часть witness содержит, в частности, данные для проверки права потратить средства. Они не исчезли, их не перестали проверять; изменился их учёт в расчёте веса. Вместимость зависит от состава транзакций, а не от простого разрешения обычных четырёхмегабайтных блоков. Вес определяет, как данные учитываются в лимите блока: байт базовых данных считается за 4 единицы, а байт дополнительных данных, связанных с witness, — за 1. Поэтому транзакции одинакового размера в байтах могут занимать разную долю допустимого веса. Пропускная способность зависит и от используемых типов транзакций. Для подходящих транзакций SegWit также устранил возможность менять идентификатор путём изменения данных подписи. Это облегчило построение платёжных каналов Lightning Network. Его спроектировали как Soft Fork: новые допустимые блоки укладываются в старые правила, хотя старые узлы не проверяют все новые ограничения. Bitcoin Core 0.13.1 содержал механизм активации; сам выпуск программы ещё не включал SegWit. [2] [3]
23 мая 2017 года Digital Currency Group опубликовала New York Agreement — соглашение компаний и майнеров. Поддержка SegWit сочеталась в нём с обещанием Hard Fork до 2 MB в течение шести месяцев. Второй шаг стал известен как SegWit2x, его реализацией был проект btc1. Для части участников это был приемлемый компромисс: каждая сторона получала часть желаемого. Другие отвергали второе изменение и способ его продвижения. Поддержка компании не означала согласия всех её клиентов. Позднее Bitcoin Core прямо уточнил: btc1 не является обязательным обновлением его программы, а поддержка SegWit не равна поддержке SegWit2x. Это важно при чтении новостей тех лет: две перемены в одном соглашении всё равно оставались разными изменениями правил. [6] [7] [11]
Автор под псевдонимом Shaolin Fry предложил BIP 148 — вариант UASF, то есть Soft Fork, активируемого пользователями. С 1 августа 2017 года по Median Time Past узлы с этим правилом должны были отклонять блоки без сигнала SegWit, если его активация ещё не была зафиксирована или выполнена. Расхождение между добычей и приёмом блоков грозило разделением сети. Это не был безопасный переключатель, которым все пользователи управляли вместе. Median Time Past — значение посередине отсортированного списка временных меток последних 11 блоков, а не время на часах каждого пользователя. Сигналом служила отметка в заголовке блока, выражавшая поддержку майнером данного внедрения; сама отметка ещё не включала новые правила. James Hilliard описал в BIP 91 координацию майнеров с меньшим порогом: 269 из 336 блоков, примерно 80 %. После запуска участники должны были отклонять блоки без сигнала для исходного развёртывания SegWit. Июльская координация снизила риск конфликта вокруг августовского срока. Она не означала, что сам SegWit уже зафиксирован или активен в июле: он продолжал проходить собственный механизм BIP 9. [4] [5] [9] [19]
Bitcoin Cash отделился 1 августа 2017 года. Программа Bitcoin ABC поддерживала более крупные блоки для этой ветви, тогда с лимитом по умолчанию 8 MB. После разделения у сетей были разные правила и собственные монеты. Общая прежняя история не позволяла свободно переносить последующие платежи между BTC и BCH. Bitcoin Cash не был SegWit2x, а Bitcoin ABC — btc1. Путаница в названиях смешивает августовское разделение с другим, позднее приостановленным планом. Различалась и replay protection — защита от повторения транзакции на другой цепочке. Для пользователя это имело практический смысл: действие в одной ветви не должно случайно тратить средства и в другой. Кроме того, общие ключи нельзя было бездумно вводить в произвольный инструмент, обещавший новые монеты. [8] [15] [11]
SegWit перешёл в состояние LOCKED_IN с блока 479 808, 9 августа 2017 года. Период принятия решения завершился; перед применением новых правил оставался ещё период ожидания. Активация произошла на блоке 481 824, 24 августа. Эти высоты разделяют 2 016 блоков. Июльский BIP 91, августовская фиксация и сама активация — разные события. Оставался второй шаг SegWit2x, намеченный на высоту 494 784. 8 ноября организаторы во главе с Mike Belshe объявили о приостановке: по их сообщению, достаточного согласия для плавного перехода добиться не удалось. Bitcoin не потерял уже активный SegWit, а отдельный Bitcoin Cash не исчез. Завершилась именно эта попытка превратить поддержку компаний и майнеров в увеличение лимита Bitcoin. [9] [10] [12] [14] [16] [17]
Спор показал, что Bitcoin можно менять, но написать код, собрать подписи компаний и добиться принятия правил — разные задачи. Он не доказал, что разработчики лишены влияния, майнеры неважны или все будущие решения закончатся одинаково. Пропускная способность, доступная проверка и согласие участников не обеспечиваются простым переименованием обновления. Читая новое предложение, сначала выясните, что оно меняет, какие узлы после этого разойдутся во мнениях и как будет устроена активация. Затем различайте предложение, выпущенную программу и реально действующие правила. Тогдашние BIP и код документируют механизмы; заявления сторон — их позиции. Ни одно отдельное заявление участника само по себе не является беспристрастной историей всего конфликта. [1] [6] [11] [12]
Для полной картины прочитайте эту статью вместе с SegWit, Soft Fork, Hard Fork, Full Node, Bitcoin, Правила консенсуса. На эту статью также ссылаются Soft Fork, Hard Fork, Block Weight, Jeff Garzik.