В зависимости от того, насколько вы следите за всем, что происходит в мире биткоина, на протяжении последних нескольких лет вы, так или иначе, скорее всего что-то слышали об интенсивном обсуждении касаемо текущего ограничения размера блока в цепочке блоков биткоина, а может и сами принимали в нем участие. Дискуссия в последнее время проходит все масштабнее и оживленнее, особенно после того, как в начале года главный разработчик кода биткоина Гэвин Андресен обратился к сообществу с предложением увеличить размер блока, заложенный в алгоритм в данный момент. Давайте разберемся поподробнее, о чем вообще речь, и попробуем понять, что ждет биткоин с его технической стороны.
Что случилось?
Для начала, чтобы все было понятно, обозначим некоторые ключевые моменты:
- Сегодня майнеры добывают один блок в среднем каждые 10 минут;
- В каждом блоке сегодня может храниться максимум 1 Мб данных;
- Такое ограничение заложено в код биткоина, но пропускная способность сети этим не ограничивается;
- В блок размером 1 Мб можно вместить данные примерно о 3-5 тысячах простых транзакций (между двумя кошельками с небольшим количеством входов и выходов), то есть сеть в данный момент пропускает в среднем 7 транзакций в секунду (для сегодняшнего количества пользователей это не критично, но для будущего массового использования очень мало);
- Количество транзакций, которые вмещаются в один блок, сокращается, во-первых, за счет многоадресных транзакций (например, рассылка пулами вознаграждения майнерам), а во-вторых, за счет того, что некоторые компании используют цепочку блоков биткоина для передачи своих данных или поддержания реестра (примеры: компания Factom, проект Counterparty, биржа Nasdaq). Именно о таком нефинансовом применении цепочки блоков в последнее время столько разговоров.
До недавнего момента блоки довольно редко заполнялись данными целиком, так что многие вообще не обращали внимания на существование ограничения размера. Однако вместе с тем, как признание биткоина растет, и им начинает пользоваться все больше людей, увеличивается, соответственно, и количество транзакций, в результате чего блок в цепочке все больше заполняется данными.
Неделю назад группа добровольных исследователей устроила «тест на стрессоустойчивость» сети путем «спама» цепочки блоков множеством транзакций на крохотные суммы, в результате которого на протяжении 8 часов каждый блок в сети был заполнен целиком, и большое количество транзакций, не уместившихся в блоки, остались неподтвержденным.
Также стоит отметить, что некоторые пользователи при переводе биткоинов умышленно увеличивают размер вознаграждения майнерам, чтобы их транзакция была приоритетной для подтверждения, то есть подтверждение обычных транзакций может происходить уже во втором, третьем и так далее блоках, а значит занимать по времени 20, 30 и даже больше минут (а иногда и пару часов). Конечно, разрабатываются различные программные решения, чтобы при оплате биткоином вам не приходилось стоять по полчаса на кассе в ожидании подтверждения, но технически все именно так, как описано выше, и с ростом масштабов использования биткоина такие задержки будут случаться все чаще и чаще.
То есть среди главных преимуществ биткоина все выделяют быстрые и дешевые переводы средств, но с текущим размером блока со временем не станет ни того, ни другого.
Зачем было ограничиваться всего 1 мегабайтом?
В 2010 году о биткоине написали на популярном айтишном сайте Slashdot.org, благодаря чему на едва появившуюся технологию обратило внимание множество пользователей. Однако среди них оказались и не самые добропорядочные, и сеть биткоина начала подвергаться многочисленным атакам. Создатель биткоина Сатоши Накамото и другие разработчики из сообщества быстро на это среагировали и внесли несколько поправок в протокол, чтобы сделать его более устойчивым. Одной из этих поправок как раз стало решение установить предел размера блока в 1 Мб. Гэвин Андресен так описывает те события:
В 2010 году, когда о биткоине впервые написал Slashdot, и курс биткоина начал расти, Сатоши применил несколько быстрых решений для защиты от разного рода DOS-атак. Одним из них стало уменьшение предела размера блока до одного мегабайта (до этого ограничения не было, но в действительности размер блока не мог превышать 32 Мб — максимального размера сообщения в протоколе p2p). С самого начала подразумевалось, что предел размера блока нужно будет повышать, когда для обработки всего объема транзакций будет необходимость в больших блоках.
До того момента у биткоина не было ограничения на размер блока, и оно было введено как мера против злоумышленников, которые могли преднамеренно создавать большие блоки с целью обрушить еще совсем молодую на тот момент сеть. Такие атаки в принципе возможны и сегодня, именно поэтому и необходимо ограничение размера, но сейчас сеть уже довольно устойчива к ним, и они, по сути, стали неэффективными.
В то время объем транзакций был очень малым, и считалось, что одного мегабайта хватит как для защиты сети, так и для резервного пространства для будущего роста объемов транзакций, прежде чем масштабы сети будут увеличены. Тем не менее, до недавнего времени разработчики откладывали вопрос масштабирования, и если для традиционного финансового программного обеспечения отсутствие глобальных изменений скорее может быть плюсом, то в случае с биткоином, это по-настоящему сдерживает его потенциал.
Один из ведущих разработчиков Майк Хирн опубликовал письмо от Сатоши конца 2010 года, в котором он рассуждал о размере блока, вот его фрагмент:
Размер можно будет вновь увеличить, когда мы приблизимся к лимитам и будем уверены, что все работает как нужно. В конце концов, когда появится много софта, размер всей цепочки блоков не будет играть особой роли. Пока же для работы с биткоином каждому пользователю приходится скачивать всю цепочку блоков целиком, было бы неплохо ее уменьшить до разумных пределов.
Окей, увеличиваем размер блока. Как быть?
Прежде всего, изменение протокола биткоина таких масштабов требует так называемого хардфорка, то есть внесения изменений в существующий код биткоина, с которыми вынуждены будут согласиться все пользователи, или, как минимум, основные майнеры и биржи. Не станем вдаваться в технические подробности, скажем только, что это не так просто. Пока уже на протяжении трех лет разработчики спорят о том, как именно модифицировать код, время идет, и сеть постоянно растет, то есть чем дальше, тем сложнее будет «безболезненно» вносить изменения. Именно поэтому важно остановиться на таком решении, которое в будущем не потребует еще одного хардфорка.
Изначально Гэвин Андресен предложил такое решение, которое потребовало бы хардфорка лишь один раз, с автоматическим увеличением размера блока в заданные временные интервалы. Однако, его предложение было встречено шквалом критики как от других разработчиков, так и от многих участников сообщества, в следствие чего он согласился на компромиссное временное решение.
Сейчас он предлагает увеличить размер блока до 20 Мб в качестве временной меры, чтобы дать разработчикам больше времени для поиска окончательного решения. Тем не менее, и такое предложение было встречено критически некоторыми разработчиками и биржами, в частности китайскими BTCChina и Huobi, хотя часть из них уже выступила за незначительное увеличение размера блока, возможно до 8, а не 20 Мб.
Важно отметить, что ограничение в мегабайтах – это просто максимально возможный размер блока, фактические же размеры будут определяться объемом транзакций и поведением майнеров. Даже когда будет принято решение об увеличении размера, блоки не станут сразу же увеличиваться, так же как и сейчас при текущем варианте протокола фактический размер блока вовсе не обязательно достигает 1 Мб.
Также стоит иметь в виду, что у майнеров есть стимул генерировать блоки меньшего размера, так как они быстрее публикуются в сети, давая им больший шанс получить награду. Если блок публикуется с задержкой, награда достанется другому майнеру, чей блок будет опубликован быстрее. Поэтому даже при общем согласии на увеличение размера блока, майнеры, вероятно, также будут предлагать собственные варианты с учетом соотношения своих рисков и прибылей.
Все так запутано, нужно начинать паниковать?
Конечно, нет. А также не стоит особо беспокоиться насчет последствий хардфорка, ведь так или иначе решения об изменениях будут приниматься в условиях открытого рынка. То, что сообщество участвует в обсуждении, является важным аспектом любого проекта с открытым исходным кодом, и так или иначе, окончательное решение будет приниматься большинством участников сети. Внесение изменений сейчас запланировано на март 2016 года.
Существует множество мнений и непрекращающихся споров на тему изменения протокола биткоина, как и множетсво обоснований «за» и «против». Нам очень интересно мнение читателей о грядущих изменениях. Не стесняйтесь отписываться в комментариях или спрашивать, если что-то непонятно.