На протяжении последнего года вы вероятно что-то слышали об интенсивном обсуждении текущего ограничения размера блока в блокчейне Bitcoin, а может и сами принимали в нем участие. Дискуссия в последнее время проходит все масштабнее и оживленнее, особенно после того, как около полугода назад главный разработчик кода Биткойна Гэвин Андресен обратился к сообществу с предложением увеличить максимальный размер блока, заложенный в алгоритм в данный момент. Давайте разберемся подробнее, о чем речь и попробуем понять, что ждет биткойн с технической стороны.

Что случилось?

Для начала обозначим некоторые ключевые моменты:

  1. Сегодня майнеры добывают в среднем один блок каждые 10 минут;
  2. В каждом блоке может храниться максимум 1 Мб данных;
  3. Такое ограничение заложено в код биткойна, но пропускная способность сети этим не ограничивается;
  4. В блок размером 1 Мб можно вместить данные примерно о 3-5 тысячах простых транзакций (между двумя кошельками с небольшим количеством входов и выходов), то есть сеть в данный момент пропускает в среднем 7 транзакций в секунду. Для сегодняшнего количества пользователей это не критично, но для будущего массового использования очень мало;
  5. Количество транзакций, которые вмещаются в один блок, сокращается, во-первых, за счет многоадресных транзакций - например, рассылка пулами вознаграждения майнерам. А во-вторых, за счет того, что некоторые компании используют цепочку блоков биткойна для передачи данных или поддержания реестра (компания Factom, проект Counterparty, биржа Nasdaq). Именно о таком нефинансовом применении цепочки блоков в последнее время столько разговоров.

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

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

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

Среди главных преимуществ биткойна все выделяют быстрые и дешевые переводы средств, но с текущим размером блока со временем не станет ни того, ни другого.

Зачем было ограничиваться всего 1 мегабайтом?

В 2010 году о биткойне написали на популярном айтишном сайте Slashdot.org, благодаря чему на едва появившуюся технологию обратило внимание множество пользователей. Однако среди них оказались и не самые добропорядочные, и сеть биткойна начала подвергаться многочисленным атакам. Создатель биткойна Сатоши Накамото и другие разработчики из сообщества быстро на это среагировали и внесли несколько поправок в протокол, чтобы сделать его более устойчивым. Одной из этих поправок как раз стало решение установить предел размера блока в 1 Мб.

Гэвин Андресен так описывает те события:

В 2010 году, когда о биткойне впервые написал Slashdot и курс биткойна начал расти, Сатоши применил несколько быстрых решений для защиты от разного рода DOS-атак. Одним из них стало уменьшение предельного размера блока до одного мегабайта. 

До этого ограничения не было, но в действительности размер блока не мог превышать 32 Мб – максимального размера сообщения в протоколе p2p. С самого начала подразумевалось, что предел размера блока нужно будет повышать, когда для обработки всего объема транзакций будет необходимость в больших блоках.

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

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

Один из ведущих разработчиков Майк Херн опубликовал письмо от Сатоши конца 2010 года, в котором он рассуждал о размере блока.

Вот его фрагмент:

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

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

Увеличиваем размер блока. Как быть?

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

Изначально Гэвин Андресен предложил такое решение, которое потребовало бы хардфока лишь один раз - с автоматическим увеличением размера блока в заданные временные интервалы. Однако, его предложение было встречено шквалом критики как от других разработчиков, так и от многих участников сообщества, в следствие чего он согласился на компромиссное временное решение.

Сейчас он предлагает увеличить размер блока до 20 Мб в качестве временной меры, чтобы дать разработчикам больше времени для поиска окончательного решения. Тем не менее, и такое предложение было встречено критически некоторыми разработчиками и биржами, в частности китайскими BTCChina и Huobi. Часть из них уже согласны на менее значительное увеличение максимального размера блока - возможно до 8, а не 20 Мб.

Важно отметить, что ограничение в мегабайтах – это просто максимально возможный размер блока, фактические же размеры будут определяться объемом транзакций и поведением майнеров. Даже когда будет принято решение об увеличении размера, блоки не станут сразу же увеличиваться, так же как и сейчас при текущем варианте протокола фактический размер блока вовсе не обязательно достигает 1 Мб.

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

Нужно ли начинать паниковать?

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