Глава 12: Bitcoin Unlimited
Поскольку Bitcoin Classic не смог набрать должную поддержку, в конце лета 2016 года сторонники крупных блоков сошлись на новом клиенте, увеличивающем лимит размера блока при помощи хардфорка, под названием Bitcoin Unlimited. Можно было бы подумать, что этот клиент просто снимает ограничение на размер блока, и теперь в блокчейне смогут быть блоки любого размера. Если бы это было так, Bitcoin Unlimited стал бы гораздо более успешным предложением. Однако если взглянуть на Bitcoin Unlimited более подробно, то окажется, что он не только очень сложен, но и имеет серьезные технические недостатки. Принятие такого сложного и уязвимого предложения было еще одной грандиозной стратегической ошибкой крупноблочников. Среди сторонников малых блоков такое направление развития вызывало восторг, но об этом, разумеется, требовалось помалкивать – пусть крупноблочники будут прочно ассоциироваться с поддержкой слабого клиента. Bitcoin Unlimited был не только клиентом, но и официальной организацией с членством, уставом, президентом и голосованием участников.
Ключевая идея Bitcoin Unlimited заключалась в том, что майнеры и пользователи добавляли своим клиентам параметры, связанные с лимитом размера блока. Это а) максимальный размер генерации (MG) (только для майнеров): локальный лимит размера блока, который не будет превышен майнером, производящим блок; б) чрезмерный размер блока (EB): это размер блока, до которого его будет принимать узел и майнер; и в) глубина принятия (AD): это количество подтверждений, которое требуется блоку, прежде чем узел примет его, даже если размер блока больше EB. Критики утверждали, что если каждый устанавливает свои собственные правила, это означает, что сеть не будет сходиться к одной версии истории. Это предложение отличается от основной консенсусной особенности Биткоина: майнеры достраивают валидную цепь, которая накопила больше "работы" в Proof-of-Work. Новый клиент не только не делает этого, но и вводит концепцию глубины принятия AD, в которой майнеры могут сначала попытаться построить более короткую валидную цепь, однако, если они проиграют гонку, они могут затем перепрыгнуть на несколько блоков вперед к более длинной цепи, которая теперь внезапно объявляется валидной (больше маленьких блоков позволят получить больше субсидий на блок, прим. ред.). В Bitcoin Unlimited не было такой методологии активации, как у XT или Classic; просто предполагалось, что он каким-то образом станет новым Биткоином после обновления майнеров. Поэтому многие сочли это предложение еще более радикальным, чем предшествующие.
Стремясь узнать больше о Bitcoin Unlimited, в начале декабря 2016 года я посетил рекламное мероприятие Bitcoin Unlimited в Шэньчжэне (Китай). На мероприятии и во время промо-тура выступили: Роджер Вер, активный промоутер Bitcoin Unlimited; Джейк Смит; несколько сотрудников Bitcoin.com; члены организации Bitcoin Unlimited; некоторые из разработчиков Bitcoin Unlimited; и Хайпо Ян, генеральный директор майнинг-пула ViaBTC.
Первым выступил Роджер Вер, с синхронным переводом на китайский язык. Он говорил очень ясно и убедительно, отмечая следующие моменты:
- Он был первым, кто инвестировал в биткоин-стартапы;
- С 2009 года, когда был запущен Биткоин, до 2015 года блоки не были полными, а транзакции были дешевыми. Bitcoin Core целенаправленно использует стратегию полных блоков, что является серьезным изменением экономических свойств протокола;
- До этого момента успех Биткоина обеспечивался низкими комиссиями за транзакции;
- План развития всегда состоял в том, чтобы увеличить лимит размера блока, и это явно было заявлено всеми, но теперь появились новые люди и препятствуют этому;
- На Reddit широко распространена цензура, и предложения по увеличению размера блока не обсуждаются. Таким образом, Bitcoin Core не хочет, чтобы люди принимали собственные решения;
- Команда Bitcoin Core понимает компьютерный код, но не понимает экономику;
- Команда Bitcoin Core хочет, чтобы Биткоин был сетью межбанковских расчетов с высокими комиссиями; Сатоши хотел, чтобы Биткоин стал электронными пиринговыми наличными, именно так и был озаглавлен Whitepaper Биткоина;
- Есть альткоины, которые ждут своего часа, и если размер блока не увеличится, эти монеты заберут сетевой эффект Биткоина себе, раз уж Биткоин больше не сможет быть назван простым и удобным в использовании.
Я и раньше видел, как Роджер высказывал многие из этих замечаний. Беспощадность и настойчивость, с которыми Роджер мог повторять эти сообщения снова и снова по всему миру, производили впечатление. Роджер явно был чрезвычайно убежден в своей правоте, и это делало его послания очень эффективными и убедительными. Роджер был безжалостным и результативным представителем лагеря борцов за крупные блоки.
Роджер закончил свое выступление заявлением о том, что майнеры и пользователи должны перейти с Bitcoin Core на Bitcoin Unlimited. Однако он так и не упомянул никаких подробностей о новых механизмах, внедряемых в Bitcoin Unlimited. Несколько дней спустя в Гонконге прошло мероприятие Bitcoin Unlimited с аналогичной программой. Помнится, я размышлял о том, как же обидно, что Роджер сосредоточил всю свою энергию на этом внутреннем конфликте, вместо вовлечения в Биткоин новых пользователей и торговых площадок, как он делал это в прошлом.
Следующим выступающим в Шэньчжэне был Джерри Чан. Джерри говорил об идее стихийного консенсуса (emergent consensus, EC), которая заключается в том, что правила системы не являются фиксированными, а гибко реагируют на обстоятельства, а не навязываются разработчиками сверху вниз. EC это система, разработанная для решения проблемы, заключающейся в том, что если майнеры и узлы устанавливают свои собственные правила, они будут создавать несовместимые цепи блоков. Он пояснил, что в рамках новой модели майнеры смогут сами устанавливать лимит размера блока, и, благодаря системе EC, все блоки будут объединяться в единую цепь. Джерри привел различные примеры этого процесса в природе:
Вещи будут самоорганизовываться. Это обычное дело в природе. Молекулы воды организуются в снежинки, но не по воле Божьей, а потому что молекулы воды имеют форму, позволяющую им выстраиваться в шестиугольники и образовывать конструкции типа "снежинка". Птицы – разве кто-нибудь учит птицу, как следовать за вожаком стаи? Нет. Они могут буквально заснуть, пролетая сотни километров, и все равно не разбиваются. Core заставляет вас поверить в то, что если вы позволите майнерам или пользователям решать все самостоятельно, случится полное дерьмо. Но при внедрении эмерджентного консенсуса лимит размера блока будет возникать сам, вполне естественным образом.
Конечно, утверждение Джерри о том, что текущие правила Биткоина были наложены сверху Bitcoin Core, было ложным представлением того, как видели систему сторонники малых блоков. В мире малых блоков правила определяются узлами, которые уже запущены пользователями. Эти правила очень жесткие, и их изменение требует широкого согласия сообщества. Похоже, что крупноблочникам никогда не удавалось аккуратно передать эту картину мира – то ли потому что они ее не понимали, то ли потому что точное описание статус кво делало их предложения не такими уж убедительными.
Актуальность мнения о том, что в природе многие системы сами приходят к равновесию или имеют структуру, не требуя планирования или согласования правил, в контексте Биткоина была неясна. К этому моменту Биткоин уже был очень успешным; сеть работала достаточно надежно в течение семи лет, преодолевая любые проблемы. Похоже, это вызвало в сообществе определенную степень самоуспокоенности, поскольку люди стали слишком оптимистичны в отношении надежности системы. Отвечая на вопрос о некоторых потенциальных слабостях Bitcoin Unlimited, его сторонники часто говорили, что Биткоин антихрупкий и справится с любыми вызовами. Аргумент о том, что Bitcoin Unlimited будет надежным, потому что Биткоин настолько силен, что почти невозможно сделать что-то некорректное или вредное для Биткоина, казался мне невероятно слабым.
В дополнение к трем указанным параметрам в Bitcoin Unlimited также было нечто, именуемое "липкий шлюз". Если порог AD для узла превышен, он будет принимать блоки любого размера в течение 24 часов. В качестве обоснования указывалось предотвращение застревания AD-блоков за вершиной после увеличения размера блока, когда была создана последовательность из более крупных блоков. У этого решения было непреднамеренное, ироничное и извращенное последствие: дальнейшее увеличение лимита размера блока в течение 24 часов вынудит клиенты с более низким лимитом размера блока (EB) продолжать наиболее длинную цепь блоков, а клиенты с большим лимитом застрянут на более короткой цепи. Похоже, Bitcoin Unlimited был плохо сконструирован, и все возможные сценарии его работы не были продуманы. Это указывало на то, до какой степени отчаяния к тому моменту успели дойти в лагере крупных блоков.
У Bitcoin Unlimited было еще несколько недостатков, в том числе так называемая "медианная EB-атака". Поскольку EB был, по сути, правилом консенсуса, и выбранные майнерами параметры EB были включены в их блоки, злоумышленники могли видеть распределение значений EB в сети. Враждебный майнер мог в результате выбрать среднее значение EB, чтобы, скажем, разделить цепь и хэшрейт майнинга на две группы произвольного размера. Это было похоже на критическую уязвимость. Отвечая на вопрос об этом, сторонники Bitcoin Unlimited обычно утверждали, что майнеры не глупы и не позволят этому случиться. Они также иногда утверждали, что для предотвращения этого майнеры и пользователи будут использовать одно и то же значение EB. Однако, если все майнеры и пользователи сходятся на одном и том же значении EB, желая предотвратить разделение цепи, это выглядит довольно похоже на модель безопасности, отстаиваемую сторонниками малых блоков, со всеобщим принятием единого набора правил. Чтобы увеличить лимит размера блока в Bitcoin Unlimited, нужно изменить настройки EB на большее значение, и тогда откроется вышеописанная уязвимость.
Bitcoin Unlimited также внес другие изменения в программное обеспечение, напрямую не связанные с ограничением размера блока. Разработчики Bitcoin Unlimited создали технологию для более быстрого распространения блоков, названную xThin, в отличие от аналогичной системы в Bitcoin Core под названием компактные блоки. В разработке были и другие идеи, такие как параллельная проверка блоков и гибкие транзакции. Гибкие транзакции были новым форматом транзакций, похожим на SegWit, который, как сообщается, также исправляли уязвимость замены идентификатора транзакции. По плану предполагалось полностью запретить транзакции старого стиля (то есть ввести нулевое ограничение размера блока для транзакций старого стиля), а затем заставить всех пользователей принять новый формат транзакции. Ирония в том, что это была гораздо более агрессивная версия SegWit, против которой выступали разработчики Bitcoin Unlimited. SegWit по существу сохранил старый лимит в 1 МБ для старых транзакций и добавил больше места в блоках для новых транзакций.
Таким образом, было похоже, что многие из этих функций и предложений вовсе не были вызваны технической целесообразностью. Скорее можно было говорить о культурных различиях, о самолюбии и о желании быть вовлеченными в разработку Биткоина. Большинство крупноблочников к этому моменту уже просто ненавидели как мелкоблочников, так и разработчиков Bitcoin Core. Им не нравилась сама мысль о том, что именно лагерь малых блоков контролирует Биткоин, им тоже хотелось быть его частью. Из-за этого желания большей активности Bitcoin Unlimited расширил сферу своей деятельности за пределы простого увеличения лимита размера блока и охватил множество областей. В конечном итоге это оказалось ошибкой и привело к краху Bitcoin Unlimited. После того, как война за размер блока закончилась, некоторые в сообществе Bitcoin Unlimited признали эти ошибки.
Ранее, пока разработчики BU имели наибольшее влияние среди всех групп, выступающих за крупные блоки, некоторые из нас полагали, что BU следует сосредоточиться только на простой модификации кода Core путем увеличения лимита размера блока, вместо того, чтобы пытаться заставить все сообщество принять сложный алгоритм размера блока ("стихийный консенсус"). Мы также хотели, чтобы BU на время прекратил попытки реализовать свою версию гибких блоков. Важнейшей проблемой было увеличение размера блока и отход от версии Core с минимальными отвлекающими факторами. Настойчивое желание команды BU добавить кучу сложного кода вместо того, чтобы сосредоточиться на простоте, дало неприятные последствия, поскольку код BU имел несколько ошибок, приводивших к сбою в работе узлов. Это произвело у всего биткоин-сообщества впечатление, что разработчикам BU действительно нельзя доверять писать надежный код, и что им следует соизмерять свои амбиции со своими навыками программирования/тестирования.
Другой член сообщества прокомментировал:
Оглядываясь назад, мы видим, что внедрение EC было серьезной ошибкой.
Удивительно, но, несмотря на все эти потенциальные уязвимости, Bitcoin Unlimited пользовался поддержкой всего лагеря крупных блоков, от Брайана Армстронга из Coinbase до Гэвина, Джихана Ву и Роджера Вера. Никто из них особо не интересовался нюансами и появлением новых параметров. Им просто нужны были блоки побольше. Bitcoin Unlimited также получил поддержку со стороны майнинг-пулов, включая ViaBTC, GBMiners и BTC.TOP, также росло и число узлов, которые его поддерживали. Первым пулом, который поддержал его, был ViaBTC, майнинг-пул, который получил инвестиции от Bitmain и, по-видимому, в значительной степени находился под контролем Джихана Ву. Также считалось, что Bitmain контролирует и пул BTC.TOP. В начале 2017 года от 15 до 20 процентов хэшрейта Биткоина указали на поддержку Bitcoin Unlimited. Bitmain также напрямую управлял пулами, такими как Antpool, который начал сигнализировать о поддержке Bitcoin Unlimited в марте 2017 года. Это увеличило поддержку Bitcoin Unlimited среди майнеров до диапазона от 45 до 55 процентов, уровня, на котором он оставался большую часть 2017 года.
Несколько биткоин-разработчиков из лагеря малых блоков обвинили некоторых майнеров в подделке голосов в поддержку Bitcoin Unlimited. Они заявили, что операторы пула изменили настройки пула для добавления в блоки данных, указывающих на Bitcoin Unlimited, несмотря на то, что для создания блоков все еще использовался Bitcoin Core. Они смогли определить это, изучив транзакции в блоках, которые, по-видимому, были выбраны с помощью нового алгоритма в Bitcoin Core, который в Bitcoin Unlimited не был реализован. Эти очевидные "фальшивые голоса" иногда называли ложными флагами. Некоторые мелкоблочники, которые считали, что Bitcoin Unlimited плох сам по себе, рассматривали эти фальшивые флаги как еще один пример злонамеренного поведения. Сигналы майнеров о том, какие правила консенсуса они применяют, должны быть механизмом, обеспечивающим плавное обновление правил протокола. Ложный сигнал можно считать подходом, который делает обновления более опасными. Фактически, ложная отметка в пользу Bitcoin Unlimited может рассматриваться как атака на Bitcoin Unlimited, так как это может привести к неудаче при активации. Крупноблочники, похоже, не распознали это и с энтузиазмом отреагировали на рост поддержки хэшрейта для Bitcoin Unlimited. Для них это было значительным импульсом. Флаги майнеров оставались важным политическим посланием, независимо от того, были ли голоса фальшивыми.
30 января 2017 года майнер, работающий под управлением Bitcoin Unlimited, произвел блок размером более 1 Мб. Возможно, это был первый произведенный блок с достаточным доказательством работы размером более 1 Мб. Вероятно, это была какая-то ошибка или случайность, так как за этим не было видно явной координации. Биткоин-узлы в сети отклонили блок как недействительный, что, по мнению сторонников малых блоков, как раз показывало, почему перед проведением хардфорка требуется согласие пользователей. Крупноблочники, такие как Роджер Вер, пытались замять этот инцидент, утверждая, что застрявшие блоки (stale blocks) возникают постоянно, не признавая, что этот конкретный блок был не просто устаревшим, но и недействительным.
В марте 2017 года произошло событие, которое нанесло значительный ущерб репутации Bitcoin Unlimited. Количество доступных узлов Bitcoin Unlimited внезапно резко упало.
Согласно Nodecounter, все шло своим чередом примерно в 18:00, когда было 776 активных узлов. Затем началось быстрое падение, и в 19:00 оставалось уже 696 узлов. Дно обозначилось в 23:00, когда осталось всего 182 узла. В 9 часов утра следующего дня все вернулось к норме, в строю было 626 узлов. Думаю, если мы скажем, что BU отреагировал с невероятной быстротой или что 100% упавших узлов вернулись за это время в строй, это будет не очень корректным заявлением.
На самом деле падение было связано с критической DoS-уязвимостью, скрывающейся в коде xThin для Bitcoin Unlimited, не имевшем никакого отношения к лимиту размера блока. Уязвимостью воспользовались, что привело к сбою почти всех узлов Bitcoin Unlimited. Сторонники малых блоков активно привлекали внимание многих криптовалютных медиа к этому эпизоду. Падение узлов также расширило круг тех, кто принялся пристально следить за проектом. Раньше многие просто считали BU очередным клиентом с увеличенными блоками, но теперь они начали задавать более важные вопросы, например: что это за организация и зачем нужен президент? Почему они меняют аспекты кода, не связанные с размером блока? Для чего нужен параметр AD? Есть ли другие критические ошибки?
Bitcoin Unlimited так и не смог полностью восстановиться после инцидента в марте 2017 года. Сама ошибка была не так уж и ужасна, однако в лагере малых блоков ей успешно воспользовались, чтобы привлечь внимание к другим огрехам в Bitcoin Unlimited. Сага о Bitcoin Unlimited была одним из худших периодов войны для крупноблочников, который они, вероятно, предпочли бы забыть. Они позволили себе руководствоваться самолюбием, гневом и разочарованием, поддержав плохо разработанный клиент, и тем изрядно порадовали своих противников. Еще раз подчеркиваю: после того, как Bitcoin Unlimited был заброшен, почти ни один из крупноблочников не высказал раскаяния. Никто из них, похоже, не брал на себя ответственность и не задумывался, почему настаивать на клиенте с таким количеством потенциальных уязвимостей было опасно и потенциально разрушительно для Биткоина.
К марту 2017 года напряженность в сообществе еще больше возросла. Теперь акцент сместился на идею о том, что крупноблочники перейдут на Bitcoin Unlimited, а затем также атакуют исходную цепь с малыми блоками, добывая пустые блоки и превращая в невостребованные (orphan) любые блоки, которые содержат транзакции. Такая стратегия должна была в результате убить цепь с малыми блоками. Джихан даже публично обсуждал идею атаки на Биткоин:
Возможно, атаковать его нет необходимости. Но атака – всегда один из вариантов.
Гэвин тоже сказал нечто подобное:
Не допустить, чтобы форк меньшинства по хэшрейту подтвердил хоть одну транзакцию – хорошая идея. Консенсус Накамото ! = Единодушие.
Ранний биткоинер Мени Розенфельд, который до этого момента в основном держался в стороне от войны за размер блока, описал ситуацию следующим образом:
Гэвин Андресен, Питер Ризун и Джихан Ву в положительном ключе высказались в дискуссии о возможности того, что цепь хэшрейт-большинства атакует цепь меньшинства (посредством эгоистичного майнинга и DoS пустых блоков).
Это позор и противостоит всему, что представляет собой Биткоин. Биткоин – это добровольные деньги. Люди используют его, потому что хотят, а не потому что их принуждают.
По сути, они говорят, что если некоторые из нас хотят использовать валюту, описываемую текущим протоколом Bitcoin Core, то начать атаку, чтобы уговорить нас использовать их деньги – это нормально. Но нет, это не нормально – это постыдно, это моральное банкротство. Даже если им это удастся, они останутся с фиатными деньгами, а не с Биткоином.
Истинное генетическое разнообразие может быть достигнуто только при одновременном сосуществовании нескольких протоколов, конкурирующих друг с другом и эволюционирующих в самую сильную возможную версию Биткоина.
Это выходит за рамки конкретных дебатов о достоинствах BU и Core.
Тон крупноблочников самым явным образом изменился. Ранее они заявляли, что не будет никакого разделения и цепи малых блоков, а теперь активно обсуждали атаку на такую цепь. В начале апреля я беседовал с одним из ключевых сотрудников Джихана в Гонконге. Он сообщил мне, что сторонники крупных блоков выделили бюджет в размере 100 миллионов долларов США для атаки на цепь малых блоков. План состоял в том, чтобы потратить эти деньги на энергию, добычу пустых блоков в цепи малых блоков и “орфанизацию” (отторжение) любых блоков с транзакциями. По его словам, это по сути "убьет цепь". Я спросил, почему он хочет убить цепь малых блоков, и он объяснил, что мелкоблочники "застопорили Биткоин на годы, и они этого заслужили". Сама идея о том, чтобы потратить 100 миллионов долларов США только на то, чтобы отомстить своему противнику в войне, поистине иллюстрирует масштабы трясины, в которой мы оказались на том этапе конфликта. Я спросил, что произойдет после того, как будут потрачены 100 миллионов долларов США. Разве мелкоблочники не смогут возродить свою цепь? Похоже, у него не было на этот вопрос однозначного ответа. После долгой паузы он объявил, что они, возможно, попытаются собрать еще денег и атаковать снова.
Пока шел 2017 год, и война вступила в свой 18-й месяц, страдания с обеих сторон только усилилась. Джихан и большинство майнинг-пулов все еще не сигнализировали о поддержке SegWit, и цель в 95 процентов казалась почти недостижимой. Крупноблочники считали активацию SegWit поражением для своей стороны, поскольку блокирование SegWit было одним из важнейших рычагов контроля в их распоряжении. Это был единственный крупный козырь, который остался у их лагеря, и они не хотели его терять. Это действительно вызвало разочарование у сторонников малых блоков, однако, как мы помним, эта сторона была терпеливой, и смотрела на десятилетия вперед. Для крупноблочников ожидание чего-либо было гораздо более болезненным. Эта боль имеет большое значение для объяснения угроз атаки на цепь малых блоков.