Inside Bitcoin
Opening the selected file…
Inside Bitcoin
Opening the selected file…
The code behind the network, with room to understand it.
Release published 2026-10-28 · Snapshot fetched 2026-11-01. Latest stable release at fetch time; development branches and Git history are excluded. Only the selected code window and visible folders load here.
1Bitcoin Core version 0.16.0 is now available from:3<https://bitcoincore.org/bin/bitcoin-core-0.16.0/>5This is a new major version release, including new features, various bugfixes6and performance improvements, as well as updated translations.8Please report bugs using the issue tracker at GitHub:10<https://github.com/bitcoin/bitcoin/issues>12To receive security and update notifications, please subscribe to:14<https://bitcoincore.org/en/list/announcements/join/>16How to Upgrade17==============19If you are running an older version, shut it down. Wait until it has completely20shut down (which might take a few minutes for older versions), then run the21installer (on Windows) or just copy over `/Applications/Bitcoin-Qt` (on Mac)22or `bitcoind`/`bitcoin-qt` (on Linux).24The first time you run version 0.15.0 or newer, your chainstate database will be converted to a25new format, which will take anywhere from a few minutes to half an hour,26depending on the speed of your machine.28Note that the block database format also changed in version 0.8.0 and there is no29automatic upgrade code from before version 0.8 to version 0.15.0 or higher. Upgrading30directly from 0.7.x and earlier without re-downloading the blockchain is not supported.31However, as usual, old wallet versions are still supported.33Downgrading warning34-------------------36Wallets created in 0.16 and later are not compatible with versions prior to 0.1637and will not work if you try to use newly created wallets in older versions. Existing38wallets that were created with older versions are not affected by this.40Compatibility41==============43Bitcoin Core is extensively tested on multiple operating systems using44the Linux kernel, macOS 10.8+, and Windows Vista and later. Windows XP is not supported.46Bitcoin Core should also work on most other Unix-like systems but is not47frequently tested on them.49Notable changes50===============52Wallet changes53---------------55### Segwit Wallet57Bitcoin 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.59A new `address_type` parameter has been added to the `getnewaddress` and `addmultisigaddress` RPCs to specify which type of address to generate.60A `change_type` argument has been added to the `fundrawtransaction` RPC to override the `-changetype` argument for specific transactions.62- All segwit addresses created through `getnewaddress` or `*multisig` RPCs explicitly get their redeemscripts added to the wallet file. This means that downgrading after creating a segwit address will work, as long as the wallet file is up to date.63- All segwit keys in the wallet get an implicit redeemscript added, without it being written to the file. This means recovery of an old backup will work, as long as you use new software.64- All keypool keys that are seen used in transactions explicitly get their redeemscripts added to the wallet files. This means that downgrading after recovering from a backup that includes a segwit address will work66Note 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.68P2WPKH 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.70### BIP173 (Bech32) Address support ("bc1..." addresses)72Full support for native segwit addresses (BIP173 / Bech32) has now been added.73This includes the ability to send to BIP173 addresses (including non-v0 ones), and generating these74addresses (including as default new addresses, see above).76A 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.78### HD-wallets by default80Due to a backward-incompatible change in the wallet database, wallets created81with version 0.16.0 will be rejected by previous versions. Also, version 0.16.082will only create hierarchical deterministic (HD) wallets. Note that this only applies83to new wallets; wallets made with previous versions will not be upgraded to be HD.85### Replace-By-Fee by default in GUI87The send screen now uses BIP125 RBF by default, regardless of `-walletrbf`.88There is a checkbox to mark the transaction as final.90The RPC default remains unchanged: to use RBF, launch with `-walletrbf=1` or91use the `replaceable` argument for individual transactions.93### Wallets directory configuration (`-walletdir`)95Bitcoin Core now has more flexibility in where the wallets directory can be96located. Previously wallet database files were stored at the top level of the97bitcoin data directory. The behavior is now:99- For new installations (where the data directory doesn't already exist),100wallets will now be stored in a new `wallets/` subdirectory inside the data101directory by default.102- For existing nodes (where the data directory already exists), wallets will be103stored in the data directory root by default. If a `wallets/` subdirectory104already exists in the data directory root, then wallets will be stored in the105`wallets/` subdirectory by default.106- The location of the wallets directory can be overridden by specifying a107`-walletdir=<path>` option where `<path>` can be an absolute path to a108directory or directory symlink.110Care should be taken when choosing the wallets directory location, as if it111becomes unavailable during operation, funds may be lost.113Build: Minimum GCC bumped to 4.8.x114------------------------------------115The minimum version of the GCC compiler required to compile Bitcoin Core is now 4.8. No effort will be116made to support older versions of GCC. See discussion in issue #11732 for more information.117The minimum version for the Clang compiler is still 3.3. Other minimum dependency versions can be found in `doc/dependencies.md` in the repository.119Support for signalling pruned nodes (BIP159)120---------------------------------------------121Pruned nodes can now signal BIP159's NODE_NETWORK_LIMITED using service bits, in preparation for122full 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.124Performance: SHA256 assembly enabled by default125-------------------------------------------------126The 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.128GUI changes129-----------130- Uses of "µBTC" in the GUI now also show the more colloquial term "bits", specified in BIP176.131- The option to reuse a previous address has now been removed. This was justified by the need to "resend" an invoice, but now that we have the request history, that need should be gone.132- Support for searching by TXID has been added, rather than just address and label.133- A "Use available balance" option has been added to the send coins dialog, to add the remaining available wallet balance to a transaction output.134- A toggle for unblinding the password fields on the password dialog has been added.136RPC changes137------------139### New `rescanblockchain` RPC141A new RPC `rescanblockchain` has been added to manually invoke a blockchain rescan.142The RPC supports start and end-height arguments for the rescan, and can be used in a143multiwallet environment to rescan the blockchain at runtime.145### New `savemempool` RPC146A new `savemempool` RPC has been added which allows the current mempool to be saved to147disk at any time to avoid it being lost due to crashes / power loss.149### Safe mode disabled by default151Safe 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.153### Renamed script for creating JSON-RPC credentials155The `share/rpcuser/rpcuser.py` script was renamed to `share/rpcauth/rpcauth.py`. This script can be156used to create `rpcauth` credentials for a JSON-RPC user.158### Validateaddress improvements160The `validateaddress` RPC output has been extended with a few new fields, and support for segwit addresses (both P2SH and Bech32). Specifically:161* A new field `iswitness` is True for P2WPKH and P2WSH addresses ("bc1..." addresses), but not for P2SH-wrapped segwit addresses (see below).162* The existing field `isscript` will now also report True for P2WSH addresses.163* A new field `embedded` is present for all script addresses where the script is known and matches something that can be interpreted as a known address. This is particularly true for P2SH-P2WPKH and P2SH-P2WSH addresses. The value for `embedded` includes much of the information `validateaddress` would report if invoked directly on the embedded address.164* For multisig scripts a new `pubkeys` field was added that reports the full public keys involved in the script (if known). This is a replacement for the existing `addresses` field (which reports the same information but encoded as P2PKH addresses), represented in a more useful and less confusing way. The `addresses` field remains present for non-segwit addresses for backward compatibility.165* For all single-key addresses with known key (even when wrapped in P2SH or P2WSH), the `pubkey` field will be present. In particular, this means that invoking `validateaddress` on the output of `getnewaddress` will always report the `pubkey`, even when the address type is P2SH-P2WPKH.167### Low-level changes169- The deprecated RPC `getinfo` was removed. It is recommended that the more specific RPCs are used:170* `getblockchaininfo`171* `getnetworkinfo`172* `getwalletinfo`173* `getmininginfo`174- The wallet RPC `getreceivedbyaddress` will return an error if called with an address not in the wallet.175- The wallet RPC `addwitnessaddress` was deprecated and will be removed in version 0.17,176set the `address_type` argument of `getnewaddress`, or option `-addresstype=[bech32|p2sh-segwit]` instead.177- `dumpwallet` now includes hex-encoded scripts from the wallet in the dumpfile, and178`importwallet` now imports these scripts, but corresponding addresses may not be added179correctly or a manual rescan may be required to find relevant transactions.180- The RPC `getblockchaininfo` now includes an `errors` field.181- A new `blockhash` parameter has been added to the `getrawtransaction` RPC which allows for a raw transaction to be fetched from a specific block if known, even without `-txindex` enabled.182- The `decoderawtransaction` and `fundrawtransaction` RPCs now have optional `iswitness` parameters to override the183heuristic witness checks if necessary.184- The `walletpassphrase` timeout is now clamped to 2^30 seconds.185- Using addresses with the `createmultisig` RPC is now deprecated, and will be removed in a later version. Public keys should be used instead.186- Blockchain rescans now no longer lock the wallet for the entire rescan process, so other RPCs can now be used at the same time (although results of balances / transactions may be incorrect or incomplete until the rescan is complete).187- The `logging` RPC has now been made public rather than hidden.188- An `initialblockdownload` boolean has been added to the `getblockchaininfo` RPC to indicate whether the node is currently in IBD or not.189- `minrelaytxfee` is now included in the output of `getmempoolinfo`191Other changed command-line options192----------------------------------193- `-debuglogfile=<file>` can be used to specify an alternative debug logging file.194- bitcoin-cli now has an `-stdinrpcpass` option to allow the RPC password to be read from standard input.195- The `-usehd` option has been removed.196- bitcoin-cli now supports a new `-getinfo` flag which returns an output like that of the now-removed `getinfo` RPC.198Testing changes199----------------200- The default regtest JSON-RPC port has been changed to 18443 to avoid conflict with testnet's default of 18332.201- Segwit is now always active in regtest mode by default. Thus, if you upgrade a regtest node you will need to either -reindex or use the old rules by adding `vbparams=segwit:0:999999999999` to your regtest bitcoin.conf. Failure to do this will result in a CheckBlockIndex() assertion failure that will look like: Assertion `(pindexFirstNeverProcessed != nullptr) == (pindex->nChainTx == 0)' failed.2030.16.0 change log204------------------206### Block and transaction handling207- #10953 `aeed345` Combine scriptPubKey and amount as CTxOut in CScriptCheck (jl2012)208- #11309 `93d20a7` Minor cleanups for AcceptToMemoryPool (morcos)209- #11418 `38c201f` Add error string for CLEANSTACK script violation (maaku)210- #11411 `339da9c` Change SignatureHash input index check to an assert (jimpo)211- #11406 `e12522d` Add state message print to AcceptBlock failure message (TheBlueMatt)212- #11062 `26fee4f` Mark mempool import fails that were found in mempool as 'already there' (kallewoof)213- #11269 `61fb806` CTxMemPoolEntry::UpdateAncestorState: modifySiagOps param type (donaloconnor)214- #11747 `e970396` Fix: Open files read only if requested (Elbandi)215- #11737 `46d1ebf` Document partial validation in ConnectBlock() (sdaftuar)216- #10699 `c090262` Make all script validation flags backward compatible (sipa)217- #10279 `214046f` Add a CChainState class to validation.cpp to take another step towards clarifying internal interfaces (TheBlueMatt)218- #11824 `d9fdac1` Block ActivateBestChain to empty validationinterface queue (TheBlueMatt)219- #12127 `9501dc2` Remove unused mempool index (sdaftuar)220- #12118 `44080a9` Sort mempool by min(feerate, ancestor_feerate) (sdaftuar)221- #8498 `0e3a411` Minimize the number of times it is checked that no money... (jtimon)222- #12368 `3f5012b` Hold mempool.cs for the duration of ATMP (TheBlueMatt)223- #12401 `d44cd7e` Reset pblocktree before deleting LevelDB file (Sjors)224- #12415 `f893824` Interrupt loading thread after shutdown request (promag)226### P2P protocol and network code227- #10596 `6866b49` Add vConnect to CConnman::Options (benma)228- #10663 `9d31ed2` Split resolve out of connect (theuni)229- #11113 `fef65c4` Ignore getheaders requests for very old side blocks (jimpo)230- #11585 `5aeaa9c` addrman: Add missing lock in Clear() (CAddrMan) (practicalswift)231- #11524 `5ef3b69` De-duplicate connection eviction logic (tjps)232- #11580 `1f4375f` Do not send (potentially) invalid headers in response to getheaders (TheBlueMatt)233- #11655 `aca77a4` Assert state.m_chain_sync.m_work_header in ConsiderEviction (practicalswift)234- #11744 `3ff6ff5` Add missing locks in net.{cpp,h} (practicalswift)235- #11740 `59d3dc8` Implement BIP159 NODE_NETWORK_LIMITED (pruned peers) *signaling only* (jonasschnelli)236- #11583 `37ffa16` Do not make it trivial for inbound peers to generate log entries (TheBlueMatt)237- #11363 `ba2f195` Split socket create/connect (theuni)238- #11917 `bc66765` Add testnet DNS seed: seed.testnet.bitcoin.sprovoost.nl (Sjors)239- #11512 `6e89de5` Use GetDesireableServiceFlags in seeds, dnsseeds, fixing static seed adding (TheBlueMatt)240- #12262 `16bac24` Hardcoded seed update (laanwj)241- #12270 `9cf6393` Update chainTxData for 0.16 (laanwj)242- #12392 `0f61651` Fix ignoring tx data requests when fPauseSend is set on a peer (TheBlueMatt)244### Wallet245- #11039 `fc51565` Avoid second mapWallet lookup (promag)246- #10952 `2621673` Remove vchDefaultKey and have better first run detection (achow101)247- #11007 `fc5c237` Fix potential memory leak when loading a corrupted wallet file (practicalswift)248- #10976 `07c92b9` Move some static functions out of wallet.h/cpp (ryanofsky)249- #11117 `961901f` Prepare for non-Base58 addresses (sipa)250- #10916 `e6ab88a` add missing lock to crypter GetKeys() (benma)
Independent explanations by MyBitcoinExplorer. Not affiliated with or endorsed by Bitcoin Core. Guides are educational and do not replace the source or its tests.
Bitcoin Core source © its contributors, distributed under the MIT license. Original notices and bundled third-party licenses are retained in the source tree.