release-notes-0.16.0.md raw

Bitcoin Core version 0.16.0 is now available from:

<https://bitcoincore.org/bin/bitcoin-core-0.16.0/>

This is a new major version release, including new features, various bugfixes and performance improvements, as well as updated translations.

Please report bugs using the issue tracker at GitHub:

<https://github.com/bitcoin/bitcoin/issues>

To receive security and update notifications, please subscribe to:

<https://bitcoincore.org/en/list/announcements/join/>

How to Upgrade ==============

If you are running an older version, shut it down. Wait until it has completely shut down (which might take a few minutes for older versions), then run the installer (on Windows) or just copy over /Applications/Bitcoin-Qt (on Mac) or bitcoind/bitcoin-qt (on Linux).

The first time you run version 0.15.0 or newer, your chainstate database will be converted to a new format, which will take anywhere from a few minutes to half an hour, depending on the speed of your machine.

Note that the block database format also changed in version 0.8.0 and there is no automatic upgrade code from before version 0.8 to version 0.15.0 or higher. Upgrading directly from 0.7.x and earlier without re-downloading the blockchain is not supported. However, as usual, old wallet versions are still supported.

Downgrading warning


Wallets created in 0.16 and later are not compatible with versions prior to 0.16 and will not work if you try to use newly created wallets in older versions. Existing wallets that were created with older versions are not affected by this.

Compatibility ==============

Bitcoin Core is extensively tested on multiple operating systems using the Linux kernel, macOS 10.8+, and Windows Vista and later. Windows XP is not supported.

Bitcoin Core should also work on most other Unix-like systems but is not frequently tested on them.

Notable changes ===============

Wallet changes


Segwit Wallet

Bitcoin Core 0.16.0 introduces full support for segwit in the wallet and user interfaces. A new -addresstype argument has been added, which supports legacy, p2sh-segwit (default), and bech32 addresses. It controls what kind of addresses are produced by getnewaddress, getaccountaddress, and createmultisigaddress. A -changetype argument has also been added, with the same options, and by default equal to -addresstype, to control which kind of change is used.

A new address_type parameter has been added to the getnewaddress and addmultisigaddress RPCs to specify which type of address to generate. A change_type argument has been added to the fundrawtransaction RPC to override the -changetype argument for specific transactions.

Note that some RPCs do not yet support segwit addresses. Notably, signmessage/verifymessage doesn't support segwit addresses, nor does importmulti at this time. Support for segwit in those RPCs will continue to be added in future versions.

P2WPKH change outputs are now used by default if any destination in the transaction is a P2WPKH or P2WSH output. This is done to ensure the change output is as indistinguishable from the other outputs as possible in either case.

BIP173 (Bech32) Address support ("bc1..." addresses)

Full support for native segwit addresses (BIP173 / Bech32) has now been added. This includes the ability to send to BIP173 addresses (including non-v0 ones), and generating these addresses (including as default new addresses, see above).

A checkbox has been added to the GUI to select whether a Bech32 address or P2SH-wrapped address should be generated when using segwit addresses. When launched with -addresstype=bech32 it is checked by default. When launched with -addresstype=legacy it is unchecked and disabled.

HD-wallets by default

Due to a backward-incompatible change in the wallet database, wallets created with version 0.16.0 will be rejected by previous versions. Also, version 0.16.0 will only create hierarchical deterministic (HD) wallets. Note that this only applies to new wallets; wallets made with previous versions will not be upgraded to be HD.

Replace-By-Fee by default in GUI

The send screen now uses BIP125 RBF by default, regardless of -walletrbf. There is a checkbox to mark the transaction as final.

The RPC default remains unchanged: to use RBF, launch with -walletrbf=1 or use the replaceable argument for individual transactions.

Wallets directory configuration (-walletdir)

Bitcoin Core now has more flexibility in where the wallets directory can be located. Previously wallet database files were stored at the top level of the bitcoin data directory. The behavior is now:

wallets will now be stored in a new wallets/ subdirectory inside the data directory by default.

stored in the data directory root by default. If a wallets/ subdirectory already exists in the data directory root, then wallets will be stored in the wallets/ subdirectory by default.

-walletdir=<path> option where <path> can be an absolute path to a directory or directory symlink.

Care should be taken when choosing the wallets directory location, as if it becomes unavailable during operation, funds may be lost.

Build: Minimum GCC bumped to 4.8.x

The minimum version of the GCC compiler required to compile Bitcoin Core is now 4.8. No effort will be made to support older versions of GCC. See discussion in issue #11732 for more information. The minimum version for the Clang compiler is still 3.3. Other minimum dependency versions can be found in doc/dependencies.md in the repository.

Support for signalling pruned nodes (BIP159)


Pruned nodes can now signal BIP159's NODENETWORKLIMITED using service bits, in preparation for full BIP159 support in later versions. This would allow pruned nodes to serve the most recent blocks. However, the current change does not yet include support for connecting to these pruned peers.

Performance: SHA256 assembly enabled by default


The SHA256 hashing optimizations for architectures supporting SSE4, which lead to ~50% speedups in SHA256 on supported hardware (~5% faster synchronization and block validation), have now been enabled by default. In previous versions they were enabled using the --enable-experimental-asm flag when building, but are now the default and no longer deemed experimental.

GUI changes


RPC changes


New rescanblockchain RPC

A new RPC rescanblockchain has been added to manually invoke a blockchain rescan. The RPC supports start and end-height arguments for the rescan, and can be used in a multiwallet environment to rescan the blockchain at runtime.

New savemempool RPC

A new savemempool RPC has been added which allows the current mempool to be saved to disk at any time to avoid it being lost due to crashes / power loss.

Safe mode disabled by default

Safe mode is now disabled by default and must be manually enabled (with -disablesafemode=0) if you wish to use it. Safe mode is a feature that disables a subset of RPC calls - mostly related to the wallet and sending - automatically in case certain problem conditions with the network are detected. However, developers have come to regard these checks as not reliable enough to act on automatically. Even with safe mode disabled, they will still cause warnings in the warnings field of the getneworkinfo RPC and launch the -alertnotify command.

Renamed script for creating JSON-RPC credentials

The share/rpcuser/rpcuser.py script was renamed to share/rpcauth/rpcauth.py. This script can be used to create rpcauth credentials for a JSON-RPC user.

Validateaddress improvements

The validateaddress RPC output has been extended with a few new fields, and support for segwit addresses (both P2SH and Bech32). Specifically:

Low-level changes

* getblockchaininfo * getnetworkinfo * getwalletinfo * getmininginfo

set the address_type argument of getnewaddress, or option -addresstype=[bech32|p2sh-segwit] instead.

importwallet now imports these scripts, but corresponding addresses may not be added correctly or a manual rescan may be required to find relevant transactions.

heuristic witness checks if necessary.

Other changed command-line options

Testing changes


0.16.0 change log


Block and transaction handling

P2P protocol and network code

Wallet

RPC and other APIs

GUI

Build system

Tests and QA

Documentation

Refactoring

Miscellaneous

Credits =======

Thanks to everyone who directly contributed to this release:

As well as everyone that helped translating on Transifex.