Что нам делать с размером блоковНекоторые участники сообщества выступают за то, чтобы дать блокам достигнуть предельного размера, мотивируя это тем, что ничего страшного не случится — просто возникнет рынок комиссий. Всем нравится рынок, разве нет? Как кто-то может возражать?
На самом деле возражать могут многие, и по той же причине, по которой никто не приветстсвовал бы появление нового рынка адресов IPv4. По мере исчерпания IP-адресов приходится прибегать к хитростям вроде трансляции адресов (NAT), а корпорации вынуждены покупать их на аукционах, что в целом плохо для Интернета. Остается утешать себя тем, что это временная проблема, которая будет решена благодаря переходу на протокол IPv6.
Однако в действительности это не имеет значения, потому что предположение, что рынок всех рассудит, ошибочно. Я не думаю, что комиссии станут высокими и стабильными, если Биткойн достигнет предела масштабируемости. Я считаю, что вместо этого Биткойн постигнет крах.
В этой статье я проанализирую два сценария.Первый — что случится, если в следующем году (когда блоки начнут заполняться до предела) мы будем использовать практически такое же ПО, как сегодня.
Второй — что случится, если мы будем использовать некую гипотетическую модернизированную версию Bitcoin Core и кошельков.
В обоих случаях я предполагаю, что размер блока ограничен 1 МБ.
Тот же код, что и сегодняЧто случится, если размер блоков Bitcoin Core исчерпается?
Транзакции поступают в систему примерно с одинаковой частотой, которая немного снижается по воскресеньям. Они поступают в пул — область в памяти, где транзакции хранятся до их добавления в блокчейн. Больше нигде транзакции не хранятся. В случае перезапуска узла локальная копия пула очищается, хотя, конечно, транзакции остаются в памяти других узлов.
Первое, что произойдет по мере приближения к предельному размеру блоков, это существенное увеличение времени подтверждения транзакций. Согласно симуляции Монте-Карло, проведенной Дейвом Хадсоном (Dave Hudson), при 80% заполнении блоков половина транзакций будут подтверждаться за 20 минут. При полном же заполнении блоков половине транзакций придется ждать более 6 часов.
Но на самом деле этого не случится, потому что при полном заполнении блоков подлинная частота транзакций будет еще выше, из-за чего сформируется постоянная очередь транзакций, ждущих обработки.
В Bitcoin Core нет кода для обработки постоянной и растущей очереди транзакций — они просто накапливаются в памяти, пока у узла не завершаются ресурсы. В этот момент может произойти одно из трех:
Работа узла может невероятно замедлиться из-за постоянной подкачки.
Узел может аварийно завершить работу, когда ему не удастся выделить память.
Работа узла может быть завершена ядром операционной системы.
Все три варианта плохи. Bitcoin Core не перезапускается автоматически. Если узел завершает работу или зависает, его владелец должен каждый раз перезапускать его вручную.
Более того, почти все кошельки не знают, насколько велика очередь необработанных транзакций. Они позволят пользователям отправлять деньги независимо от того, насколько большим стал пул в памяти. Таким образом, по мере увеличения очереди у узлов начнет заканчиваться память и они станут завершать работу, а на их перезапуск требуется время.
Казалось бы, перезапуск узлов поможет смягчить ситуацию, потому что узел забудет все транзакции и вернется к нормальной работе. Однако с этим связаны две проблемы. Во-первых, это значительно упрощает проведение атаки двойной траты, из-за чего денежные расчеты внезапно станут менее надежным. Во-вторых, кошельки так и не узнают, что что-то пошло не так — они просто будут видеть, что их транзакции не подтверждаются. А кошельки запрограммированы так, чтобы заново транслировать неподтвержденные транзакции в сеть. Из-за этого память узлов снова быстро исчерпается и очередь необработанных транзакций станет еще больше.
Я не знаю, насколько быстро реализуется такой сценарий, но поскольку Bitcoin Core принимает все действительные транзакции без каких-либо ограничений, крах узла в итоге неизбежен.
Что произойдет дальше?Ну, пользователи заметят, что транзакции не подтверждаются. Они начнут выражать недовольство задержками еще раньше, но после этого они начнут жаловаться по-настоящему. Некоторые из них могут потерять деньги — например, пользователи могут организовать очную сделку, один из них переведет деньги с настольного компьютера или веб-кошелька на телефон, а ко времени прибытия на место транзакция все еще не будет подтверждена, из-за чего сделка сорвется.
Мы знаем это потому, что в прошлом мы уже были достигли “мягкого ограничения на размер блока”. Оно имеет место, если майнеры по умолчанию создают блоки меньше определенного размера, который даже меньше, чем 1 МБ. В 2013 году было достигнуто мягкое ограничение в 250 КБ, и транзакции начали накапливаться, а пользователи жаловаться. Некоторые майнинг-пулы повысили свои мягкие ограничения и начали создавать бОльшие блоки, так что довольно быстро все успокоились, но уже тогда встречались те же аргументы, которые можно слышать сейчас: “Нет проблем, просто платите бОльшие комиссии!”
Почему рынок комиссий не поможетМного говорят о “рынке комиссий”, и действительно, есть признаки зарождения такого рынка. Проблема в том, что в кратковременном масштабе это только усугубит перегрузку Биткойна и даже сделает его более централизованным. Почему?
Комиссии в настоящее время очень низки. Когда начнет формироваться очередь транзакций, а узлы — завершать работу, каждый будет думать “Одним центом больше, одним меньше — это ерунда. Я могу себе это позволить”. Давайте предположим на мгновение, что получатель платежа может увеличить комиссию, если транзакция долго не подтверждается (предложение child-pays-for-parent). Пытаясь увеличить комиссию для такой транзакции, контрагенты сгенерируют другую транзакцию, которая усилит нагрузку на сеть и только ускорит крах узлов.
Хорошего способа автоматического выбора комиссии не существует. Даже если вы решите немного увеличить комиссию из-за длительного ожидания подтверждения, вас легко смогут обойти другие узлы, которые чуть позже заплатят немного больше. Единственный способ выяснить, что ваша комиссия недостаточна, это точно установить, что транзакция не подтверждается. Однако даже если комиссия достаточно высока (см. данные моделирования по приведенной выше ссылке), на подтверждение транзакции все равно требуется много часов, так что выяснить это трудно. Таким образом, после нескольких часов ожидания вы попытаетесь увеличить комиссию с помощью другой транзакции, но ничего не изменится, потому что каждый будет наращивать комиссии наименьшими интервалами, не желая тратить деньги впустую. Вы будете платить все больше, и все равно не получите то, за что платите!
Кошельки с упрощенным подтверждением платежей (SPV) не смогут узнать, какова конкуренция на рынке комиссий, без существенных изменений протокола (для чего требуется форк). В настоящее время они используют жестко закодированные значения комиссий, что почти всегда работает приемлемо. В ситуации с перегрузкой они вынуждены будут обращаться к доверенному стороннему сервису. Сторонники аргумента “небольшие блоки способствуют децентрализации” игнорируют эту проблему, но на самом деле многие пользователи, которые используют наиболее практичный на сегодня тип децентрализованных кошельков, получат МЕНЕЕ децентрализованное ПО.
Но как майнеры будут зарабатывать без комиссий?
Этот вопрос задают очень часто, так что следует дать пояснения. Ни я, ни Гэвин не считаем, что рынок комиссий может решить проблему заполнения блоков. Похоже, он просто не работает экономически. Какую же роль на самом деле играют комиссии? Их основное предназначение сегодня (а я считаю, что и в будущем) — это обеспечить защиту Биткойна от спама и дать пользователям возможность указать для своих транзакций приоритет. В идеальном мире большинство транзакций были бы бесплатными и только кошельки, отправляющие транзакции очень быстро (например, кошельки для обмена), должны были бы платить комиссии. Отметим, что даже бесплатные транзакции в некотором смысле выгодны для майнеров, потому что они увеличивают ценность всей биткойн-сети. Кроме того, отсутствие комиссий в Биткойне может быть важно для некоторых пользователей по психологическим причинам.
Как отреагировали бы пользователи?Плохо. Много лет назад я шел по коридору Google со своим новым ментором Эндрю Кирмсом (Andrew Kirmse). Он сказал, что я буду заниматься планированием распределения ресурсов и развертыванием кластеров для Google Earth.
Мне было 22 года, я немного нервничал и сказал “Думаю, если мы исчерпаем ресурсы, худшее, что произойдет, это перерыв в работе на несколько часов. Или на день”.
Эндрю посмотрел на меня так, как если бы я сошел с ума. “Да… но это плохо. Это появится в новостях”.
В новостях
Ну конечно, это появится в новостях. Едва ли у Google когда-нибудь были перерывы в работе. У них репутация компетентной высокопрофессиональной компании. Если бы служба Google Earth стала недоступной на несколько часов из-за недостатка ресурсов… это было бы признком некомпетентности и, разумеется, привлекло бы внимание ведущих телекомпаний.
Как же обычные пользователи Биткойна отреагируют, когда услышат о крахах узлов, растущих очередях транзакций и внезапной эпидемии двойных трат… и все это по причине давно ожидаемого события с невероятно простым решением?
Они придут к выводу, что сообщество разработчиков Биткойна некомпетентно. Это попадет в новости.
И когда держатели Биткойна, не являющиеся его повседневными пользователями, будут просыпаться и читать эти истории, они придут к выводу, что, пожалуй, они неверно оценили будущую ценность Биткойна… что он так и не станет валютой будущего.
Когда наблюдаются внезапные колебания цены Биткойна, количество транзакций резко растет, потому что люди переводят свои монеты на биржи. Это очень хорошо заметно на графиках. Если многие люди внезапно утратят веру в Биткойн и его курс начнет падать, они решат, что пришло время выходить из Биткойна. Монеты, долго лежавшие без движения, потекут на биржи… очередь транзакций вырастет еще больше.