Today marks the official release of Bitcoin Core 0.16.0, the 16th generation of Bitcoin’s original software client launched by Satoshi Nakamoto a little over nine years ago. Overseen by Bitcoin Core lead maintainer Wladimir van der Laan, this latest major release was developed by some 100 contributors over a span of five months.
As is usual for new releases, Bitcoin Core 0.16.0 includes performance improvements, bug fixes and other optimizations. This release in particular includes several added features in the wallet interface. Most notably, Bitcoin Core 0.16.0 makes Segregated Witness (SegWit) fully available for wallet users, which is what most of the effort was focused on, and it is also why this release is sometimes referred to as a “SegWit special.”
Here’s an overview of some of the most notable changes.
Segregated Witness in the Wallet Interface
Segregated Witness was, of course, the main Bitcoin protocol upgrade of 2017, if not the biggest protocol upgrade ever. It introduced a whole new block data structure for upgraded nodes — while non-upgraded nodes could continue to function as normal. Among other benefits, SegWit replaced Bitcoin’s block size limit with a block “weight” limit, allowing for blocks with up to 4 megabytes of transaction data and, therefore, increased transaction capacity on the network.
Segregated Witness itself was first introduced in Bitcoin Core 0.13.1, released in October 2016. The upgrade activated in August of 2017. However, Bitcoin Core 0.16.0 is the first Bitcoin Core version to let wallet users generate SegWit addresses for receiving payments. This means that when the funds received on these addresses are spent in a payment later, Bitcoin Core wallet users utilize the added block space offered by SegWit. All else being equal, these users should be able to pay lower fees compared to non-SegWit transactions.
Bitcoin Core is not the first wallet to enable Segregated Witness for users; several other wallets had already introduced this feature over the past six months. Since the Bitcoin Core development team wrote and proposed the upgrade, it was notable that the feature had not been available for Bitcoin Core wallet users — until now.
Bech32: Bitcoin’s New Address Format
Accompanying the introduction of SegWit in the Bitcoin Core wallet is a new address format known as “bech32.” This address format, developed by former Blockstream CTO Gregory Maxwell and Blockstream developer Dr. Pieter Wuille, is recognizable as it starts with “bc1” instead of the 1 or 3 that Bitcoin addresses usually start with. More importantly, bech32 addresses use fewer characters than the current address format, because there’s no longer a distinction between lowercase and capital letters. This reduces the potential for human mistakes (for example, when an address is read out loud). Bech32 addresses are also designed to limit other types of mistakes such as these caused by typos.
Additionally, bech32 offers benefits in the context of SegWit wallet support. So far, most wallets that offer SegWit do so by “wrapping” it into P2SH outputs (with addresses starting with a 3). To spend coins from such an address, users must reveal a piece of code — the “redeem script” — to show that the coins were really locked up in a SegWit output. With the new bech32 addresses, this step can be skipped, which means that spending from a SegWit address will require a little less data to be transmitted over the Bitcoin network and included in the blockchain.
Since not all Bitcoin wallets support bech32 addresses yet, Bitcoin Core 0.16.0 users will be able to choose whether they want to generate a bech32 receiving address for payments or a P2SH address, with P2SH still being the default for now. The Bitcoin Core wallet of course supports sending transactions to any type of Bitcoin address.
Replace-by-Fee as the Default Sending Option
As Bitcoin blocks have been filling up over the past couple of years, not all transactions on the network fit in the first available block that is mined. Instead, miners typically prioritize the transactions that include the most fees. If users want to have their transactions confirmed quickly, they should include a high enough fee. For less urgent transactions, a lower fee should suffice. Many wallets include fee-estimation algorithms to calculate what fee level will have a transaction confirmed within varying timeframes.
However, the Bitcoin network deals with inherent unpredictability in terms of the speed at which blocks are found, and the number of transactions that is being transmitted at any time. This can make it difficult to include the right transaction fee, meaning that users may have to wait longer for a confirmation than they’d intended.
Since Bitcoin Core 0.15.0, wallet users have been able to add a “replace-by-fee” tag to their transactions. With such a tag, nodes and miners on the network know that the sender may want to replace that transaction with a newer transaction that includes a higher fee. This effectively lets Bitcoin Core wallet users easily bump their transactions up in line to have it confirmed faster.
Bitcoin Core 0.16.0 makes replace-by-fee the default sending option for the first time. Users can still opt out of adding a replace-by-fee tag to their transactions by unticking a box, but their transactions will be replaceable if they don’t untick it. This should prevent users from unwittingly depriving themselves of their options and noticing only when it’s too late that they could have easily bumped up their transactions.