Today marks the official release of Bitcoin Core 0.17.0, the 17th generation of Bitcoin’s original software client launched by Satoshi Nakamoto almost 10 years ago and still the dominant Bitcoin implementation on the network today. Overseen by Bitcoin Core lead maintainer Wladimir van der Laan, this latest major release was developed by some 135 contributors over a span of about seven months.
The result of well over 700 merged pull requests, Bitcoin Core 0.17.0 includes a range of performance improvements and bug fixes, as well as other changes.
Here’s an overview of some of these changes.
Improved Coin Selection
Coins in a wallet are effectively stored as separate chunks (“transaction outputs”). There is typically one chunk for each received payment; therefore, most chunks represent different amounts. When a payment is made from a wallet, different chunks are added together to make up an amount that’s large enough to make the payment, plus the fee. The different chunks often don’t add up to the exact amount needed, however, in which case a “change address” is added to the transaction, sending any leftover funds back to the same wallet.
Up until now, the Bitcoin Core wallet added different chunks together. Only then would it calculate and add the fee required to pay for the transaction. But in some cases, adding the fee to the transaction meant that the added chunks no longer made up a large enough amount, in which case an additional chunk had to be included.
Bitcoin Core 0.17.0 introduces the “Branch and Bound” algorithm designed by BitGo engineer Mark Erhardt. This offers two concrete improvements. First, the fee for each chunk is calculated before it is selected to be part of a transaction in order to avoid new chunks having to be added later. Second, the algorithm tries to match different chunks so they add up to the exact amount needed, avoiding the need for “change addresses” (where the leftover “change” gets sent) where possible. (Big wallets with lots of chunks, like those operated by exchanges or other high-traffic entities, are less likely to need change addresses than other wallets.)
Additionally, the coin selection algorithm in Bitcoin Core 0.17.0 includes an optional privacy improvement.
While it is against best practices, it’s possible to receive multiple payments to the same Bitcoin address. (This happens a lot with donation addresses, for example.) Reusing addresses is bad for privacy in itself as it’s obvious that all the coins on that address and all payments made from that address are from the same user. But it’s even worse when the different chunks tied to the same address are used in different transactions, linking them to chunks that weren’t initially associated with that address.
To fix this last problem, Bitcoin Core 0.17.0 gives users the option to prioritize adding chunks tied to the same address together in a transaction and to leave any other chunks out of the transaction where possible.
Easily Create and Use New Wallets
Since Bitcoin Core 0.15.0, it’s been possible to create several wallets that operate independently of each other. These wallets all have their own separate Bitcoin addresses, private keys and, therefore, funds. Users can utilize the different wallets for different purposes; for example, one wallet can be used for personal day-to-day purchases, another for business-related transactions, and a third just for trading. This can make accounting easier and more convenient, and users can more easily benefit from increased privacy as the different wallets cannot be linked to each other by blockchain analysis.
However, up until now, new wallets could only be created when starting up the node, and it was not available for Bitcoin Core wallet (GUI) users. Both of these limitations are now resolved. Bitcoin Core 0.17.0 lets users create new wallets whenever they’d like, and it offers this feature in the GUI.
As an added benefit, Bitcoin Core 0.17.0 introduces a feature called “Scantxoutset.” This lets users quickly verify whether their new wallet already includes coins (for example, because the private keys are imported from another wallet) by checking the unspent transaction output (UTXO) set, instead of rescanning the entire transaction history.
Non-HD to HD Wallet Upgrade
Whereas Bitcoin Core versions older than 0.13.0 still required users to back up all their private keys, all Bitcoin Core versions since have offered Hierarchical Deterministic (HD) wallets instead. HD wallet users only need to store one seed phrase (a list of words) as a backup.
However, Bitcoin Core users who upgraded their system to Bitcoin Core 0.13.0 and newer were unable to create new HD wallets. An incompatibility between non-HD wallets and HD wallets meant that these users were still stuck backing up all their private keys.
Bitcoin Core 0.17.0 now lets these users upgrade to the HD format as well. In addition, Bitcoin Core wallet users who already had HD wallets can…