(note: this is a temporary file, to be added-to by anybody, and moved to release-notes at release time)
Bitcoin Core version 0.15.0 is now available from:
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:
To receive security and update notifications, please subscribe to:
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)
bitcoin-qt (on Linux).
The first time you run version 0.15.0, 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. Upgrading directly from 0.7.x and earlier without redownloading the blockchain is not supported. However, as usual, old wallet versions are still supported.
The chainstate database for this release is not compatible with previous
releases, so if you run 0.15 and then decide to switch back to any
older version, you will need to run the old release with the
option to rebuild the chainstate data structures in the old format.
If your node has pruning enabled, this will entail re-downloading and processing the entire blockchain.
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.
Version 0.15 contains a number of significant performance improvements, which make Initial Block Download, startup, transaction and block validation much faster:
As a result, validating the blockchain during Initial Block Download (IBD) and reindex is ~30-40% faster, uses 10-20% less memory, and flushes to disk far less frequently. The only downside is that the on-disk database is 15% larger. During the conversion from the previous format a few extra gigabytes may be used.
-dbcache) is now actually used as cache. This reduces the flushing frequency by a factor 2 or more.
Fee estimation has been significantly improved in version 0.15, with more accurate fee estimates used by the wallet and a wider range of options for advanced users of the
estimaterawfee RPCs (See PR 10199).
estimatefeeRPC is now deprecated in favor of using only
estimatesmartfee(which is the implementation used by the GUI)
estimatesmartfeeRPC interface has been changed (See PR 10707):
nblocksargument has been renamed to
conf_target(to be consistent with other RPC methods).
estimate_modeargument has been added. This argument takes one of the following strings:
UNSET(which defaults to
errorsmember, which returns errors encountered during processing.
estimaterawfeeRPC is added to provide raw fee data. External clients can query and use this data in their own fee estimation logic.
Multi-wallet is enabled by using more than one
-wallet argument when starting Bitcoin, either on the command line or in the Bitcoin config file.
In Bitcoin-Qt, only the first wallet will be displayed and accessible for creating and signing transactions. GUI selectable multiple wallets will be supported in a future version. However, even in 0.15 other loaded wallets will remain synchronized to the node’s current tip in the background. This can be useful if running a pruned node, since loading a wallet where the most recent sync is beyond the pruned height results in having to download and revalidate the whole blockchain. Continuing to synchronize all wallets in the background avoids this problem.
Bitcoin Core 0.15.0 contains the following changes to the RPC interface and
bitcoin-cli for multi-wallet:
bitcoin-cli. All RPC calls and
bitcoin-clicommands continue to work as before.
<RPC IP address>:<RPC port>/endpoint, and
bitcoin-clicommands should be run as before. A node-level RPC method is any method which does not require access to the wallet.
<RPC IP address>:<RPC port>/wallet/<wallet name>/endpoint, for example
bitcoin-clicommands should be run with a
-rpcwalletoption, for example
bitcoin-cli -rpcwallet=wallet1.dat getbalance.
listwalletsRPC method is added to display which wallets are currently loaded. The names returned by this method are the same as those used in the HTTP endpoint and for the
Note that while multi-wallet is now fully supported, the RPC multi-wallet interface should be considered unstable for version 0.15.0, and there may backwards-incompatible changes in future versions.
Bitcoin Core has supported creating opt-in replace-by-fee (RBF) transactions
since version 0.12.0, and since version 0.14.0 has included a
bumpfee RPC method to
replace unconfirmed opt-in RBF transactions with a new transaction that pays
a higher fee.
In version 0.15, creating an opt-in RBF transaction and replacing the unconfirmed transaction with a higher-fee transaction are both supported in the GUI (See PR 9592).
In previous versions of Bitcoin Core, a portion of each block could be reserved for transactions based on the age and value of UTXOs they spent. This concept (Coin Age Priority) is a policy choice by miners, and there are no consensus rules around the inclusion of Coin Age Priority transactions in blocks. In practice, only a few miners continue to use Coin Age Priority for transaction selection in blocks. Bitcoin Core 0.15 removes all remaining support for Coin Age Priority (See PR 9602). This has the following implications:
-relaypriorityoptions which controlled relay of free transactions have therefore been removed.
-sendfreetransactionsoption has been removed, since almost all miners do not include transactions which do not attach a transaction fee.
-blockprioritysizeoption has been removed.
estimatesmartpriorityRPCs have been removed.
getrawmempoolRPCs no longer return
prioritisetransactionRPC no longer takes a
priority_deltaargument, which is replaced by a
dummyargument for backwards compatibility with clients using positional arguments. The RPC is still used to change the apparent fee-rate of the transaction by using the
-minrelaytxfeecan now be set to 0. If
minrelaytxfeeis set, then fees smaller than
minrelaytxfee(per kB) are rejected from relaying, mining and transaction creation. This defaults to 1000 satoshi/kB.
-printpriorityoption has been updated to only output the fee rate and hash of transactions included in a block by the mining code.
Version 0.14 introduced mempool persistence across restarts (the mempool is saved to a
mempool.dat file in the data directory prior to shutdown and restores the mempool when the node is restarted). Version 0.15 allows this feature to be switched on or off using the
-persistmempool command-line option (See PR 9966). By default, the option is set to true, and the mempool is saved on shutdown and reloaded on startup. If set to false, the
mempool.dat file will not be loaded on startup or saved on shutdown.
Version 0.15 introduces several new RPC methods:
abortrescanstops current wallet rescan, e.g. when triggered by an
importprivkeycall (See PR 10208).
combinerawtransactionaccepts a JSON array of raw transactions and combines them into a single raw transaction (See PR 10571).
estimaterawfeereturns raw fee data so that customized logic can be implemented to analyze the data and calculate estimates. See Fee Estimation Improvements for full details on changes to the fee estimation logic and interface.
getchaintxstatsreturns statistics about the total number and rate of transactions in the chain (See PR 9733).
listwalletslists wallets which are currently loaded. See the Multi-wallet section of these release notes for full details (See Multi-wallet support).
uptimereturns the total runtime of the
bitcoindserver since its last start (See PR 10400).
When using Bitcoin Core in multi-wallet mode, RPC requests for wallet methods must specify the wallet that they’re intended for. See Multi-wallet support for full details.
The new database model no longer stores information about transaction versions of unspent outputs (See Performance improvements). This means that:
gettxoutRPC no longer has a
versionfield in the response.
hash_serialized, which does not commit to the transaction versions of unspent outputs, but does commit to the height and coinbase information.
getutxosREST path no longer reports the
txversfield in JSON format, and always reports 0 for transaction versions in the binary format
estimatefee RPC is deprecated. Clients should switch to using the
estimatesmartfee RPC, which returns better fee estimates. See Fee Estimation Improvements for full details on changes to the fee estimation logic and interface.
gettxoutsetinfo response now contains
bogosize instead of
bytes_serialized. The first is a more accurate estimate of actual disk usage, but
is not deterministic. The second is unrelated to disk usage, but is a
database-independent metric of UTXO set size: it counts every UTXO entry as 50 + the
length of its scriptPubKey (See PR 10426).
signrawtransaction can no longer be used to combine multiple transactions into a single transaction. Instead, use the new
combinerawtransaction RPC (See PR 10571).
fundrawtransaction no longer accepts a
reserveChangeKey option. This option used to allow RPC users to fund a raw transaction using an key from the keypool for the change address without removing it from the available keys in the keypool. The key could then be re-used for a
getnewaddress call, which could potentially result in confusing or dangerous behaviour (See PR 10784).
estimatesmartpriority have been removed. See Removal of Coin Age Priority.
listunspent RPC now takes a
query_options argument (see PR 8952), which is a JSON object
containing one or more of the following members:
minimumAmount- a number specifying the minimum value of each UTXO
maximumAmount- a number specifying the maximum value of each UTXO
maximumCount- a number specifying the minimum number of UTXOs
minimumSumAmount- a number specifying the minimum sum value of all UTXOs
getrawmempool RPCs no longer return
currentpriority. See Removal of Coin Age Priority.
dumpwallet RPC now returns the full absolute path to the dumped wallet. It
used to return no value, even if successful (See PR 9740).
getpeerinfo RPC, the return object for each peer now returns an
addrbind member, which contains the ip address and port of the connection to the peer. This is in addition to the
addrlocal member which contains the ip address and port of the local node as reported by the peer (See PR 10478).
disconnectnode RPC can now disconnect a node specified by node ID (as well as by IP address/port). To disconnect a node based on node ID, call the RPC with the new
nodeid argument (See PR 10143).
The second argument in
prioritisetransaction has been renamed from
dummy since Bitcoin Core no longer has a concept of coin age priority. The
dummy argument has no functional effect, but is retained for positional argument compatibility. See Removal of Coin Age Priority.
resendwallettransactions RPC throws an error if the
-walletbroadcast option is set to false (See PR 10995).
The second argument in the
submitblock RPC argument has been renamed from
dummy. This argument never had any effect, and the renaming is simply to communicate this fact to the user (See PR 10191)
(Clients should, however, use positional arguments for
submitblock in order to be compatible with BIP 22.)
verbose argument of
getblock has been renamed to
verbosity and now takes an integer from 0 to 2. Verbose level 0 is equivalent to
verbose=false. Verbose level 1 is equivalent to
verbose=true. Verbose level 2 will give the full transaction details of each transaction in the output as given by
getrawtransaction. The old behavior of using the
verbose named argument and a boolean value is still maintained for compatibility.
Error codes have been updated to be more accurate for the following error cases (See PR 9853):
getblocknow returns RPC_MISC_ERROR if the block can’t be found on disk (for example if the block has been pruned). Previously returned RPC_INTERNAL_ERROR.
pruneblockchainnow returns RPC_MISC_ERROR if the blocks cannot be pruned because the node is not in pruned mode. Previously returned RPC_METHOD_NOT_FOUND.
pruneblockchainnow returns RPC_INVALID_PARAMETER if the blocks cannot be pruned because the supplied timestamp is too late. Previously returned RPC_INTERNAL_ERROR.
pruneblockchainnow returns RPC_MISC_ERROR if the blocks cannot be pruned because the blockchain is too short. Previously returned RPC_INTERNAL_ERROR.
setbannow returns RPC_CLIENT_INVALID_IP_OR_SUBNET if the supplied IP address or subnet is invalid. Previously returned RPC_CLIENT_NODE_ALREADY_ADDED.
setbannow returns RPC_CLIENT_INVALID_IP_OR_SUBNET if the user tries to unban a node that has not previously been banned. Previously returned RPC_MISC_ERROR.
removeprunedfundsnow returns RPC_WALLET_ERROR if
bitcoindis unable to remove the transaction. Previously returned RPC_INTERNAL_ERROR.
removeprunedfundsnow returns RPC_INVALID_PARAMETER if the transaction does not exist in the wallet. Previously returned RPC_INTERNAL_ERROR.
fundrawtransactionnow returns RPC_INVALID_ADDRESS_OR_KEY if an invalid change address is provided. Previously returned RPC_INVALID_PARAMETER.
fundrawtransactionnow returns RPC_WALLET_ERROR if
bitcoindis unable to create the transaction. The error message provides further details. Previously returned RPC_INTERNAL_ERROR.
bumpfeenow returns RPC_INVALID_PARAMETER if the provided transaction has descendants in the wallet. Previously returned RPC_MISC_ERROR.
bumpfeenow returns RPC_INVALID_PARAMETER if the provided transaction has descendants in the mempool. Previously returned RPC_MISC_ERROR.
bumpfeenow returns RPC_WALLET_ERROR if the provided transaction has has been mined or conflicts with a mined transaction. Previously returned RPC_INVALID_ADDRESS_OR_KEY.
bumpfeenow returns RPC_WALLET_ERROR if the provided transaction is not BIP 125 replaceable. Previously returned RPC_INVALID_ADDRESS_OR_KEY.
bumpfeenow returns RPC_WALLET_ERROR if the provided transaction has already been bumped by a different transaction. Previously returned RPC_INVALID_REQUEST.
bumpfeenow returns RPC_WALLET_ERROR if the provided transaction contains inputs which don’t belong to this wallet. Previously returned RPC_INVALID_ADDRESS_OR_KEY.
bumpfeenow returns RPC_WALLET_ERROR if the provided transaction has multiple change outputs. Previously returned RPC_MISC_ERROR.
bumpfeenow returns RPC_WALLET_ERROR if the provided transaction has no change output. Previously returned RPC_MISC_ERROR.
bumpfeenow returns RPC_WALLET_ERROR if the fee is too high. Previously returned RPC_MISC_ERROR.
bumpfeenow returns RPC_WALLET_ERROR if the fee is too low. Previously returned RPC_MISC_ERROR.
bumpfeenow returns RPC_WALLET_ERROR if the change output is too small to bump the fee. Previously returned RPC_MISC_ERROR.
Thanks to everyone who directly contributed to this release:
As well as everyone that helped translating on Transifex.