В суматохе последних дней, связанной с кризисами в разных концах света - Европе и Китае, мы уже начали забывать о технических проблемах в сети Bitcoin. В самом деле, когда вся Европа наблюдает за саммитом по Греции, валятся китайские акции, а курс Биткоина за несколько дней растет и падает на десятки долларов - очереди транзакций и работа программистов отходят на второй план.
Атака спамом транзакций идет без перерывов уже почти неделю и задержка платежей утратила новизну. Некоторые прозевавшие начало "праздника" даже придумали "вторую волну атаки", хотя она не прекращалась ни на минуту.
Упорству неизвестного спамера можно позавидовать - уже с 10 июля размер очереди стабилизировался в диапазоне 12-20 тысяч транзакций, но он продолжает упорно рассыпать по сети свою "пыль". Она причиняет некоторые неудобства, возможно даже заставляет кого-то чихать, но большая часть пользователей уже не обращает на нее внимания.
Между тем, разработчики ядра Биткоина не сидели без дела и прошлой ночью выпустили большое обновление - версию Bitcoin Core 0.11.0. В свете последних событий она очень актуальна, так как большая часть изменений направлена именно на борьбу со спамом и оптимизацию хранения блокчейна, чего пользователи ждали уже давно. Из-за постоянного роста базы данных количество полных узлов в сети начало сокращаться, а без них обеспечение децентрализации невозможно. Способ на данный момент придуман достаточно странный, но его возможно доработать.
Скачать новую версию можно на официальном сайте Bitcoin.org. Версия 0.11.0 обратно совместима с версиями 0.10.*, тогда как перейти на более старые без повторной загрузки блокчейна уже невозможно из-за изменения механизма синхронизации блоков.
Так как я давно не запускал свой кошелек и еще не проверял новой параллельной загрузки, то решил удалить свою копию блокчейна и закачать ее "с чистого листа". Новый кошелек быстро установился и запустился. Закачка нового блокчейна стартовала через минуту и пошла достаточно резво, по сравнению со старыми версиями, поедая дисковое пространство со скоростью нескольких десятков мегабайт в минуту.
Кроме небольших косметических изменений интерфейса, все осталось по-прежнему. Но окно отправки платежа со включенными "экспертными" опциями стало богаче, в частности теперь имеется более гибкое управление комиссиями.
Но невидимые для пользователя компоненты клиента изменились еще более значительно. Итак, традиционный список главных изменений:
- Защита от "спама транзакций" (transaction flooding):
a) Для мониторинга использования памяти кошельком введена команда для вывода информации по mempool - массиву неподтвержденных транзакций. Это команда getmempoolinfo.
б) Появилась возможность фильтровать ретрансляцию транзакций вашим узлом по минимально заложенному объему комиссии. По умолчанию установлено значение в 1000 сатоши (0.00001 BTC). Его можно поменять с помощью команды minrelaytxfee. Транзакции с комиссией меньше заданного значения, будут отвергаться кошельком и не будут ретранслироваться другим узлам.
в) Еще одна команда позволяет задать количество бесплатных транзакций, которое клиент будет размещать в mempool, а при майнинге включать в блок. Это команда limitfreerelay, по умолчанию стоит значение 15.
Эти значения можно задавать и в файле bitcoin.conf. Более существенные меры для борьбы со спамом обещаны в следующем релизе.
- Обрезка файла блоков (Block file pruning). База данных блокчейна состоит из четырех основных компонентов: базы неистраченных выходов (UTXO), индекса блоков, данных отката (undo) и "сырых блоков" (raw blocks), полученных по сети.
"Обрезка" позволяет удалять два последних компонента, как только они были использованы и внесены в индекс. Пользователь может задать вручную размер накапливаемых данных. Минимальное значение - 550 Мб. Оно задано из расчета, что кошелек сможет хранить в "сыром" виде не меньше 288 блоков - то есть примерно за двое суток. Если отведенное место заполнено, более старые блоки удаляются.
На данный момент "обрезка" несовместима с ретрансляцией блоков. Узел со включенной функцией обрезки не может работать, как полноценный член сети - он хранит не весь блокчейн, а только неистраченные выходы и небольшое количество последних блоков. По сути, это нечто среднее между полным и легким кошельком. При начальной синхронизации обрезка удаляет старые блоки "на лету". Таким образом, чтобы превратить "обрезанный" кошелек в полный, нужно провести полную ресинхронизацию блокчейна. В будущих версиях разработчики обещают придумать более элегантное решение.
- Другие важные изменения:
а) Оптимизация использования памяти. Путем управления кэшем UTXO, уменьшением необходимой памяти для поддержки соединений и уменьшения количества потоков, что снижает использование виртуальной памяти.
б) Улучшен механизм расчета комиссии и отбора транзакций для включения в блок.
в) Возможность отключения ретрансляции транзакций командой -walletbroadcast=0. Такой кошелек будет принимать транзакции, но не передавать их на другие. Передачу транзакций можно будет организовать с помощью отдельных скриптов, в том числе направлять их через Tor. Эта функция может пригодиться сторонникам максимальной анонимности.
г) Также через Tor можно будет создавать и отдельные соединения, таким образом кошелек сможет работать в "сером" режиме - и в публичной, и в анонимной сети.
Кроме этого, в обновлении есть множество более мелких изменений и исправлений. Полный список на английском языке можно увидеть здесь или в справочных файлах на github.