Bitcoin Forum
July 16, 2024, 06:56:14 PM *
News: Latest Bitcoin Core release: 27.0 [Torrent]
 
   Home   Help Search Login Register More  
Pages: [1]
  Print  
Author Topic: Что нам делать с размером блоков  (Read 458 times)
nor9845 (OP)
Legendary
*
Offline Offline

Activity: 1190
Merit: 1004



View Profile
June 02, 2015, 09:18:48 AM
 #1

Что нам делать с размером блоков

Некоторые участники сообщества выступают за то, чтобы дать блокам достигнуть предельного размера, мотивируя это тем, что ничего страшного не случится — просто возникнет рынок комиссий. Всем нравится рынок, разве нет? Как кто-то может возражать?

На самом деле возражать могут многие, и по той же причине, по которой никто не приветстсвовал бы появление нового рынка адресов 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 года, я немного нервничал и сказал “Думаю, если мы исчерпаем ресурсы, худшее, что произойдет, это перерыв в работе на несколько часов. Или на день”.

Эндрю посмотрел на меня так, как если бы я сошел с ума. “Да… но это плохо. Это появится в новостях”.

В новостяхHuh Ну конечно, это появится в новостях. Едва ли у Google когда-нибудь были перерывы в работе. У них репутация компетентной высокопрофессиональной компании. Если бы служба Google Earth стала недоступной на несколько часов из-за недостатка ресурсов… это было бы признком некомпетентности и, разумеется, привлекло бы внимание ведущих телекомпаний.

Как же обычные пользователи Биткойна отреагируют, когда услышат о крахах узлов, растущих очередях транзакций и внезапной эпидемии двойных трат… и все это по причине давно ожидаемого события с невероятно простым решением?

Они придут к выводу, что сообщество разработчиков Биткойна некомпетентно. Это попадет в новости.

И когда держатели Биткойна, не являющиеся его повседневными пользователями, будут просыпаться и читать эти истории, они придут к выводу, что, пожалуй, они неверно оценили будущую ценность Биткойна… что он так и не станет валютой будущего.

Когда наблюдаются внезапные колебания цены Биткойна, количество транзакций резко растет, потому что люди переводят свои монеты на биржи. Это очень хорошо заметно на графиках. Если многие люди внезапно утратят веру в Биткойн и его курс начнет падать, они решат, что пришло время выходить из Биткойна. Монеты, долго лежавшие без движения, потекут на биржи… очередь транзакций вырастет еще больше.
nor9845 (OP)
Legendary
*
Offline Offline

Activity: 1190
Merit: 1004



View Profile
June 02, 2015, 09:19:56 AM
 #2

Что нам делать с размером блоков ( продолжение )


Последствия

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

Жизнь продолжится, и Биткойн выживет. Но он потеряет критический импульс. В мире цифровых валют он займет такое же место, какое досталось MySpace среди социальных сетей. Верные сторонники Биткойна усомнятся в нем, а компании, пытавшиеся вывести его в мейнстрим, обратятся к другой перспективной технологии. Люди, которые с помощью криптовалют хотели сделать мир лучше, придут к выводу, что обычные потребители никогда не обратят внимание на их предложения, и тоже оставят сообщество.

Модернизированный код

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

Давайте представим, что в Bitcoin Core вводится ограничение на размер пула в памяти, благодаря которому память не может исчерпаться из-за большого количества транзакций.

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

Итак… блоки и пул в памяти заполняются до предела. Биткойн останавливается: он не может “переварить” больше транзакций.

Что происходит дальше? Одно из следующего.

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

Кошелек пытается передать транзакцию в сеть, но не получает отказ или получает отказ только от половины узлов. Чуть ниже я объясню, почему это возможно. Узлы, которые получили транзакцию, пытаются ретранслировать ее, но не у всех пул в памяти содержит одинаковые данные, так что транзакцию не удастся надежно распространить по сети. Она может попасть в одни майнинг-пулы, но не в другие. Она может не пересечь сеть и не попасть к получателю средств. Если получатель не увидит ее, вам не удастся купить свой товар. Если он получит транзакцию, но она поступит не ко всем майнерам, 6-часовое окно подтверждения половины транзакций НАМНОГО увеличится — до суток или даже больше. Пользователь будет зол, что его деньги застряли в кошельке и он даже не может продать их за рабочую валюту.

Кошелек выясняет, что его транзакция не попала в пул в памяти, и решает попробовать еще раз с большей комиссией. Он отправляет транзакцию заново, и узлы соглашаются заменить ею транзакцию с наименьшей комиссией. Однако отправитель отброшенной транзакции отключился от Интернета и не знает, что случилось, а его транзакция никогда не будет подтверждена. В конечном итоге он заметит это и попытается увеличить комиссию, но, опять же, никто не гарантирует, что у него все получится во второй раз, третий или четвертый… после нескольких попыток этот пользователь будет зол, что его деньги застряли в кошельке и он даже не может продать их за рабочую валюту.
Почему кошельки могут не получить сообщение об отказе? Дело в том, что некоторые разработчики Bitcoin Core считают, что его следует использовать только для отладки и что приложения не должны на него полагаться. Таким образом, нет никакой гарантии, что кошелек узнает о том, что его транзакция не была обработана, а это означает, что мы снова возвращаемся к проблеме бесконечного времени подтверждения.

Заключение

По моему мнению, невозможно, чтобы Биткойн попал в ситуацию перегрузки блоков и вышел из нее без ущерба для репутации и без уменьшения пользовательской аудитории. А поскольку Биткойн является первой, наиболее известной и наиболее популярной криптовалютой, сама идея и все сообщество неизбежно понесет значительный ущерб. Чтобы предотвратить это, важно увеличить ограничение размера блоков. Времени для этого пока достаточно.



Майк Хирн (Mike Hearn)

http://bitnovosti.com/2015/06/02/crash-landing/
Pages: [1]
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!