Вчера состоялся официальный релиз Bitcoin Core 0.17.0 – семнадцатой версии оригинального программного клиента биткоина. Над разработкой новой версии в течение 7 месяцев трудились 135 программистов под руководством Владимира ван дер Лаана (Wladimir van der Laan).
В результате обработки более 700 запросов на добавление функций был проведен целый ряд улучшений и исправлений ошибок. Ниже представлен обзор некоторых изменений.
Улучшенный выбор входов
Монеты в кошельке хранятся в виде отдельных фрагментов («входов транзакций»). Каждому полученному платежу соответствует свой фрагмент; следовательно, большинство фрагментов представляют собой разные суммы. При отправлении крупной транзакции из кошелька фрагменты объединяются и формируют сумму, необходимую для осуществления платежа с учетом комиссии. Однако зачастую собрать точную сумму не получается, в этом случае к транзакции добавляется «адрес для сдачи», отправляющий оставшиеся деньги в кошелек отправителя.
Вплоть до настоящего момента кошелек Bitcoin Core собирал разные фрагменты, и только после этого вычислял и добавлял комиссию, необходимую для оплаты транзакции. Однако в некоторых случаях после добавления комиссии средств не хватало и приходилось включать в транзакцию еще один дополнительный фрагмент.
Клиент Bitcoin Core 0.17.0 вводит алгоритм под названием «Метод ветвей и границ», разработанный специалистом компании BitGo Марком Эрхардтом (Mark Erhardt). Он обеспечивает сразу два улучшения. Во-первых, комиссия за каждый фрагмент подсчитывается до того, как его включают в транзакцию. Это делается, чтобы избежать дополнительного добавления фрагментов. Во-вторых, алгоритм пытается подобрать фрагменты таким образом, чтобы они содержали точную сумму, избегая необходимости обращения к «адресам для сдачи». (Большие кошельки, содержащие множество пакетов, наподобие кошельков бирж, реже пользуются адресами сдачи, чем другие кошельки). Кроме того, алгоритм выбора монет в Bitcoin Core 0.17.0 содержит дополнительное улучшение конфиденциальности.
Хотя получать сразу несколько платежей на один и тот же адрес биткоина не рекомендуется, на деле такая практика существует (например, так происходит со счетами на биржах и с различными адресами для отправления пожертвований). Такое использование кошельков неблагоприятно влияет на конфиденциальность, поскольку не составляет никакого труда связать определенные транзакции с адресом и вычислить, что они принадлежат одному пользователю.
Для решения этой проблемы Bitcoin Core 0.17.0 предоставляет пользователям возможность добавлять в транзакцию фрагменты в порядке приоритета, включая в нее фрагменты, привязанные к одному адресу и оставляя остальные фрагменты в кошельке.
Простота создания и использования новых кошельков
После выхода клиента Bitcoin Core 0.15.0 появилась возможность создавать несколько кошельков, действующих автономно друг от друга. Все эти кошельки имеют собственные адреса, закрытые ключи и, соответственно, баланс. Разные кошельки можно использовать в разных целях: например, один кошелек можно использовать для ежедневных покупок, другой – для бизнес-транзакций, а третий – для трейдинга. Это упрощает ведение учета и повышает конфиденциальность пользователей, поскольку кошельки никак не привязываются друг к другу.
Тем не менее, до настоящего времени новые кошельки можно было создавать только при запуске консольной версии, и это было недоступно пользователям кошелька Bitcoin Core с графическим интерфейсом (GUI). Теперь оба этих ограничения сняты. Bitcoin Core 0.17.0 позволяет пользователям создавать новые кошельки в том числе через GUI.
В качестве дополнительного преимущества Bitcoin Core 0.17.0 вводит функцию под названием «Scantxoutset». С ее помощью пользователи могут быстро проверить наличие средств в новом кошельке (например, когда закрытые ключи импортируются из другого кошелька), посредством проверки неизрасходованных выходов транзакции (UTXO), не сканируя всю историю транзакций.
Обновление до HD-кошельков
Если версии, предшествующие Bitcoin Core 0.13.0, требовали от пользователей делать резервное копирование всех закрытых ключей, то все последующие версии Bitcoin Core вместо этого предлагают использовать иерархические детерминированные (Hierarchical Deterministic, HD) кошельки. В качестве бэкапа пользователям HD-кошелька нужно хранить только seed-фразу, обычно состоящую из 12 слов.
Тем не менее, пользователи Bitcoin Core, обновившие свою систему до версии Bitcoin Core 0.13.0 и новее, могли создавать новые HD-кошельки. Несовместимость между обычными кошельками и кошельками HD означала, что пользователям приходилось продолжать делать резервное копирование всех своих закрытых ключей или перевести все биткоины на адреса HD-кошелька.
Bitcoin Core 0.17.0 также позволяет пользователям обновиться до формата HD. Кроме того, пользователи кошельков Bitcoin Core, у которых уже есть HD-кошельки, могут по желанию сгенерировать или импортировать новую seed-фразу.
Кошельки Watch Only
Кошельки Биткоина обычно хранят закрытые ключи, что позволяет пользователям тратить свои средства. Но Bitcoin Core также поддерживает адреса под названием «Watch Only» (только для наблюдения). Закрытые ключи к этим адресам не хранятся в кошельке, однако привязанные к ним монеты видны в интерфейсе кошелька без возможности совершать транзакции. Это позволяет пользователям с легкостью получать платежи и отслеживать свои средства, храня закрытые ключи в оффлайне.
Bitcoin Core 0.17.0 продвигает эту модель на шаг вперед и позволяет пользователям создавать особые кошельки Watch Only, каждый адрес в которых является адресом Watch Only.
Частично подписанные транзакции
Несмотря на то, что большинство криптовалютных транзакции являются простыми (один пользователь платит другому), Биткоин также предполагает более сложные виды транзакций. К ним принадлежат, например, транзакции с мультиподписью (multisig) или ориентированные на конфиденциальность транзакции с перемешиванием CoinJoin.
Для упрощения такого рода транзакций Bitcoin Core 0.17.0 представляет систему "частично подписанных транзакций" (PSBT), основанную на решении BIP 174. Эта система позволяет пользователям Bitcoin Core подписывать транзакцию частично, а также добавляет к такой частично подписанной транзакции метаданные. Впоследствии эти метаданные может использовать для завершения транзакции кто-то другой.
На данный момент функция частично подписанных транзакций предназначается только для пользователей, запускающих Bitcoin Core с командной строки или через взаимодействующие приложения.
Усечение блокчейна через пользовательский интерфейс
Поскольку в блокчейне хранятся абсолютно все транзакции за историю существования Биткоина, в настоящее время его размер уже превысил 180 гигабайт и продолжает расти. Новым пользователям приходится загружать и подтверждать все эти данные.
Однако, благодаря обходному маневру под названием «усечение блокчейна» пользователям не обязательно хранить всю эту информацию. В режиме усечения узлы сети автоматически забывают о данных старых транзакций и хранят только информацию, необходимую им для безопасного функционирования. До настоящего времени режим отсечения можно было активировать только через командную строку при запуске кошелька.
Bitcoin Core 0.17.0 впервые предлагает доступ к этой функции из графического интерфейса, что позволяет использовать режим отсечения прямо из кошелька, делая его более доступным для не обладающих техническими знаниями пользователей.
Более подробно ознакомиться с изменениями новой версии Bitcoin Core можно в комментариях к Bitcoin Core 0.17.0.