Вчера, 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 продолжают работать в течение многих лет после появления новых версий.