Today is the official release of Bitcoin Core 0.17.0, the 17th generation of the original Bitcoin client software launched by Satoshi Nakamoto almost 10 years ago and still the dominant implementation of Bitcoin on the network. Guarded by Bitcoin The main manager of the Wladimir van der Laan channel, this last major release was developed by about 135 employees in about seven months.
The result of well over 700 combined pull requests, Bitcoin Core 0.17.0 includes a number of performance improvements and bug fixes as well as other changes.
Here is an overview of some of these changes.
Better selection of coins
The coins in a portfolio are actually stored as separate blocks ("transaction output"). Usually there is a piece for every payment received; therefore, most blocks represent different amounts. When a payment is made from a wallet, several blocks are added to get enough money to make the payment, plus the commission. Often the different blocks do not add the exact amount needed, however, in which case an "exchange address" is added to the transaction, sending the remaining funds to the same portfolio.
Until now, the Bitcoin Core portfolio added several pieces together. Only then would he calculate and add the commission required to pay the transaction. But in some cases, adding the commission to the transaction meant that the added pieces were no longer sufficient, in which case another 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 commission for each block is calculated before being selected to be part of a transaction, in order to prevent new blocks from being added later. Secondly, the algorithm tries to combine different blocks in order to add the exact amount necessary, avoiding the need to "change addresses" (where the remaining "remainder" is sent) where possible. (Large portfolios with lots of blocks, like those handled by exchanges or other high-traffic entities, are less likely to need to change addresses than other portfolios.)
Furthermore, the Bitcoin Core 0.17.0 coin selection algorithm includes an optional privacy enhancement.
While it is against best practices, you can receive multiple payments at the same Bitcoin address. (This happens very often with donation addresses, for example). Reusing addresses is bad for privacy as it is obvious that all coins on that address and all payments made from that address come from the same user. But it is even worse when the different blocks linked to the same address are used in different transactions, linking them to blocks that were initially not associated with that address.
To solve this last problem, Bitcoin Core 0.17.0 offers users the ability to prioritize the pieces added to the same address together in a transaction and to leave any other piece out of the transaction, where possible.
Easily create and use new wallets
From Bitcoin Core 0.15.0, it has been possible to create different portfolios that operate independently from one another. These portfolios have all their separate Bitcoin addresses, private keys and, therefore, funds. Users can use different portfolios for different purposes; for example, a portfolio can be used for daily personal purchases, another for transactions related to commercial activities and a third only for trading. This can make accounting easier and more convenient, and users can more easily benefit from more privacy because the different portfolios can not be linked to each other by blockchain analysis.
However, until now, the new portfolios could only be created at the start of the node, and it was not available to users of the GUI (BitCore Core Wallet). Both these limitations are now resolved. Bitcoin Core 0.17.0 allows users to create new portfolios whenever they wish and offers this functionality in the GUI.
As an added bonus, Bitcoin Core 0.17.0 introduces a feature called "Scantxoutset". This allows users to quickly check if their new wallet already includes coins (for example, because private keys are imported from another portfolio) by checking the output of the unspent transaction (UTXO) set, instead of rescanning 39; complete transaction history.
Wallet update not HD to HD
While Bitcoin Core versions prior to 0.13.0 still required users to back up all their private keys, all versions of Bitcoin Core have since offered Hierarchical Deterministic (HD) portfolios. Users in the HD portfolio only need to memorize a seed sentence (a list of words) as a backup.
However, Bitcoin Core users who updated their Bitcoin Core system 0.13.0 and higher has not been able to create new HD wallets. An incompatibility between non-HD portfolios and HD wallets meant that these users were still stuck to back up all their private keys.
Bitcoin Core 0.17.0 now also allows these users to also upgrade to HD format. In addition, users of the Bitcoin Core portfolio that already had HD wallets can now choose to generate or import a new HD seed.
Look only at the wallets
Typically, Bitcoin wallets store private keys, which allow users to spend their own coins. But Bitcoin Core has also supported "Watch Only" addresses for some time. The private keys for these addresses are not stored in the wallet, but the coins associated with these addresses are still visible in the wallet. This allows users to easily accept payments and keep track of their funds while, for example, they store their private keys offline.
Bitcoin Core 0.17.0 takes this concept a step further and allows users to create specific Watch Only portfolios where each address is a control-only address. As a concrete example, this will make it easier to use Bitcoin Core to track funds in a hardware portfolio or paper portfolio in the form of HD seed.
Partially signed Bitcoin transactions
While many transactions are simple – one user pays another – Bitcoin also allows for more complex types of transactions. These include, for example, multisign (multisig) transactions in which multiple users must sign for sending funds, as well as CoinJoin transactions that enhance privacy, in which several users combine their independent transactions into one big transaction.
To better facilitate these types of transactions, Bitcoin Core 0.17.0 introduces the partially designed Bitcoin Transaction BIP 174 (PSBT) framework, designed by Andrew Chow. This framework allows Bitcoin Core users to partially sign a transaction, but also adds metadata to that partially signed transaction. This metadata can be used by someone else to complete the transaction.
PSBT will be particularly useful if the standard is adopted by other portfolios. As a potential use case, it could, for example, allow a user to protect their funds by locking them in a multisig account in which a transaction would require a signature created by the Bitcoin Core portfolio, as well as a signature from a hardware portfolio. Or it could allow Bitcoin Core users to participate in CoinJoin schemes with (other) portfolio users who preserve privacy.
For now, the partially signed transaction function is only for users who manage Bitcoin Core from the command line or through connected applications.
Pruning from the user interface
By storing all the Bitcoin (on chain) transactions that have ever happened, Bitcoin's blockchain is currently well over 180 gigabytes and growing every day. New Bitcoin Core users must download and validate all this data.
Thanks to a trick called "blockchain pruning", however, these users do not necessarily need to store all this data. In the elimination mode, the nodes will automatically forget the old transaction data and will only retain what is necessary to operate safely. Until now, the deletion mode could only be enabled via the command line.
For the first time, Bitcoin Core 0.17.0 offers a convenient GUI interface to enable deletion from the wallet, making it more accessible to casual and non-technical Bitcoin users who want to run a complete node for optimal security.
For more details on what's new in this latest version of Bitcoin Core, check out the Bitcoin Core 0.17.0 release notes or watch the Chaincode Labs engineer and Bitcoin Core contributor John Newberry at the London Bitcoin Devs convention.