77 / 7362017

Война за размер блока

Спор о пропускной способности Bitcoin и праве менять его правила

В 2015–2017 годах участники Bitcoin спорили, как проводить больше платежей, не делая самостоятельную проверку недоступной. Разногласия о размере блоков стали проверкой того, могут ли разработчики, майнеры и компании провести изменение без согласия пользователей.

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.

DOC · 001BIP 101 — Increase maximum block sizeДокументация DOC · 002BIP 141 — Segregated WitnessДокументация DOC · 003Bitcoin Core 0.13.1 — Segregated witness releaseДокументация DOC · 004BIP 148 — Mandatory activation of SegWitДокументация DOC · 005BIP 91 — Reduced threshold SegWit activationДокументация DOC · 006Digital Currency Group — Bitcoin Scaling Agreement at Consensus 2017Документация DOC · 007btc1 — SegWit2x implementation repositoryДокументация DOC · 008Bitcoin ABC — 0.14.6 releaseДокументация DOC · 009BIP 9 — Version bits with timeout and delayПервичный источник DOC · 010BIP 9 — Deployment assignmentsПервичный источник DOC · 011Bitcoin Core — Correcting misinformation on Segwit2x and btc1, 18 August 2017Первичный источник DOC · 012bitFlyer — Policy and stance regarding SegWit2x postponement, 9 November 2017Первичный источник DOC · 013Mike Hearn — Why is Bitcoin forking? Author essay reprinted by Ars Technica, 18 August 2015Первичный источник DOC · 014Mike Belshe et al. — Segwit2x suspension, 8 November 2017; message reproduced by BlockTribuneПервичный источник DOC · 015Bitcoin ABC v0.14.6 — Consensus limitsПервичный источник DOC · 016Bitcoin block 479808 — Header and timestamp via mempool.spaceПервичный источник DOC · 017Bitcoin block 481824 — Header and timestamp via mempool.spaceПервичный источник DOC · 018BIP 1 — Purpose and GuidelinesПервичный источник DOC · 019BIP 113 — Median time-pastПервичный источник
Обновлено: Сначала источники · Не является инвестиционной рекомендацией