Вчера, 24 ноября 2019 года, состоялся релиз Bitcoin Core 0.19.0 — 19-й версии основного клиента биткоина, запущенного Сатоши Накамото почти 11 лет назад (из-за проблемы, которая обнаружилась на поздней стадии процесса выпуска Bitcoin Core 0.19.0, для загрузки выпущена версия 0.19.0.1.) Ведущим мейнтейнером проекта по-прежнему является Владимир Ван дер Лаан. Последний релиз готовился в течение шести месяцев при участии более сотни разработчиков.
Аарон ван Вирдум из Bitcoin Magazine подготовил обзор основных изменений в новой версии клиента.
Адреса формата bech32 по умолчанию
Формат адреса bech32 (BIP 173) был введен ещё в Bitcoin Core 0.16.0, выпущенном в начале 2018 года, но теперь он впервые установлен по умолчанию.
Адреса Bech32 — это SegWit-адреса, начинающиеся с «bc1» (в отличие от адресов, начинающихся с 1 или 3). Эти адреса также немного длиннее и нечувствительны к регистру (нет различий между строчными и заглавными буквами), что обеспечивает большую защиту от ошибок ввода.
Поскольку ещё не все биткоин-кошельки поддерживают отправку на адреса bech32, пользователи Bitcoin Core 0.19.0 по-прежнему смогут вместо них сгенерировать адреса PS2H.
Два исходящих подключения узла
Узлы (или ноды) биткоина подключаются к другим узлам, вместе образуя одноранговую сеть. В этой сети узлы транслируют блоки, транзакции и ряд дополнительных данных транзакций.
Одноранговая сеть может подвергаться так называемой «атаки секционирования». Если злоумышленник контролирует достаточно большое количество узлов, он может потенциально «отрезать» определенные части сети биткоина и перехватывать весь трафик к ним. Отдельная часть сети могла бы, например, принять не самую длинную цепочку как действительную, что, в свою очередь, могло бы открыть возможность для атаки двойной траты.
Атака секционирования считается отмененной, если узел в разделенной части сети имеет хотя бы одно соединение с честным узлом в основной сети. Он получит и ретранслирует все транзакции и блоки, отклонив другие цепочки в пользу самой длинной. Один из способов реализовать это — устанавливать больше соединений узлов друг с другом, однако большее количество подключений требует больше памяти и пропускной способности.
Есть компромисс: Bitcoin Core 0.19.0 увеличивает значение по умолчанию для исходящих соединений на два, но эти два соединения используются только для ретрансляции блоков — они не ретранслируют транзакции или дополнительные данные транзакции. Это минимально увеличивает дополнительные требования к пропускной способности, в то же время затрудняя возможность реализации атаки секционирования.
Поддержка фильтров Блума по умолчанию отключена
Bitcoin Core — это полная реализация ноды сети. Это значит, что программа загружает и проверяет все блоки. Это самый безопасный и анонимный способ использования биткоина, но он не очень хорошо подходит для устройств с ограниченными ресурсами (к примеру, смартфонов). Поэтому смартфоны (а также многие десктопные кошельки) являются так называемыми «легкими клиентами», которые подгружают только часть последних данных сети.
Для безопасной загрузки этих данных используются фильтры Блума. Фильтр Блума — это вероятностная структура данных, используемая легкими клиентами для запроса данных из случайных полных нод в сети. Однако со временем стало ясно, что эти фильтры негативно влияют на анонимность пользователей: они, по сути, раскрывают все свои адреса полному узлу. Кроме того, поддержка запросов использует значительную часть ресурсов полного узла (без прямой выгоды для самого узла). По этим причинам Bitcoin Core 0.19.0 больше не поддерживает эти запросы по умолчанию, но пользователи могут включить поддержку запросов по желанию.
Важно подчеркнуть, что сеть биткоина почти наверняка будет продолжать поддерживать фильтры Блума в течение многих лет, даже если в новой версии никто не изменит настройки по умолчанию — просто потому, что старые узлы Bitcoin Core продолжают работать в течение многих лет после появления новых версий.
Поддержка компактной фильтрации блоков на стороне клиента
Альтернативой фильтрам Блума является более новое решение под названием «компактная фильтрация блоков на стороне клиента» (BIP 158). Компактная фильтрация, по сути, переворачивает концепцию фильтров Блума. Вместо легких кошельков, которые отправляют запросы на полные ноды, полные ноды создают фильтры для каждого блока. Легкие клиенты могут затем использовать эти фильтры, чтобы выяснить, были ли относящиеся к ним транзакции включены в блок. Если это так, легкий кошелек может загрузить весь блок и выберет из него все данные транзакции.
Сейчас узлы Bitcoin Core могут создавать фильтры локально, но пользователи Bitcoin Core 0.19.0 могут также сделать их доступными через удаленный вызов процедур (RPC) для приложений, работающих поверх узла (например, кошелек).
Тем не менее, фильтры пока не будут доступны в одноранговой сети. Это означает, что узел Bitcoin Core 0.19.0 не будет автоматически отправлять фильтры в кошельки других пользователей биткоина. Эта функция может быть добавлена в следующем релизе Bitcoin Core (или пользователи Bitcoin Core 0.19.0 могут предложить эту функцию через специальное приложение, работающее поверх их узла Bitcoin Core).
Поддержка протокола оплаты исключена
Платежный протокол (BIP 70) был разработан несколько лет назад, чтобы улучшить процесс оплаты биткоина. Помимо обычного платежа, транслируемого в сеть биткоина, пользователь и продавец могли сообщать дополнительную информацию о платеже, такую как адрес назначения (имя продавца) и адрес возврата в случае, если что-то пойдет не так с покупкой.
Хотя Bitcoin Core интегрировал платежный протокол, этот стандарт так и не получил широкого распространения. Вместо этого большинство кошельков по-прежнему используют более базовую версию (BIP 21) приема платежей: кликабельная ссылка или формат сканируемого QR-кода, который сообщает адрес и сумму платежа (единственное заметное исключение сегодня — это платежный оператор BitPay, который не поддерживает схему BIP 21, а использует модифицированную версию BIP 70).
Кроме того, в течение многих лет платежный протокол BIP 70 имел ряд уязвимостей в плане безопасности и конфиденциальности, в связи с чем кошельки сегодня активно отказываются от этого протокола. Bitcoin Core тоже планировал отказаться от BIP 70, так как его поддержка не считалось перспективной, но популярность BitPay вынуждала разработчиков откладывать исключение протокола.
В Bitcoin Core 0.19.0 BIP 70 был по умолчанию удален. Пользователи Bitcoin Core 0.19.0 могут скомпилировать свою ноду со специальной конфигурацией, чтобы по-прежнему использовать эту функцию.
Другие изменения
Помимо упомянутых выше изменений, в Bitcoin Core 0.19.0 есть длинный список других улучшений.
Например, теперь можно запустить урезанный (pruned) узел с момента установки, что позволяет пользователям с небольшим пространством на диске легко запускать новую ноду биткоина. В Bitcoin Core 0.19.0 также добавлены новые функции в протокол частично подписанных транзакций, который полезен для мультиподписи и CoinJoin-транзакций.