14 KiB
(note: this is a temporary file, to be added-to by anybody, and moved to release-notes at release time)
Bitcoin Core version version is now available from:
https://bitcoincore.org/bin/bitcoin-core-*version*/
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, 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.
Downgrading warning
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 -reindex-chainstate
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.
Compatibility
Bitcoin Core is extensively tested on multiple operating systems using the Linux kernel, macOS 10.10+, and Windows 7 and newer (Windows XP is not supported).
Bitcoin Core should also work on most other Unix-like systems but is not frequently tested on them.
From 0.17.0 onwards macOS <10.10 is no longer supported. 0.17.0 is built using Qt 5.9.x, which doesn't support versions of macOS older than 10.10.
Notable changes
Changed command-line options
-
-includeconf=<file>can be used to include additional configuration files. Only works inside thebitcoin.conffile, not inside included files or from command-line. Multiple files may be included. Can be disabled from command- line via-noincludeconf. Note that multi-argument commands like-includeconfwill override preceding-noincludeconf, i.e.noincludeconf=1 includeconf=relative.conf
as bitcoin.conf will still include
relative.conf.
GUI changes
- Block storage can be limited under Preferences, in the Main tab. Undoing this setting requires downloading the full blockchain again. This mode is incompatible with -txindex and -rescan.
RPC changes
Low-level changes
- The
createrawtransactionRPC will now accept an array or dictionary (kept for compatibility) for theoutputsparameter. This means the order of transaction outputs can be specified by the client. - The
fundrawtransactionRPC will reject the previously deprecatedreserveChangeKeyoption. sendmanynow shuffles outputs to improve privacy, so any previously expected behavior with regards to output ordering can no longer be relied upon.- The new RPC
testmempoolacceptcan be used to test acceptance of a transaction to the mempool without adding it. - JSON transaction decomposition now includes a
weightfield which provides the transaction's exact weight. This is included in REST /rest/tx/ and /rest/block/ endpoints when in json mode. This is also included ingetblock(with verbosity=2),listsinceblock,listtransactions, andgetrawtransactionRPC commands. - New
feesfield introduced ingetrawmempool,getmempoolancestors,getmempooldescendantsandgetmempoolentrywhen verbosity is set totruewith sub-fieldsancestor,base,modifiedanddescendantdenominated in BTC. This new field deprecates previous fee fields, such asfee,modifiedfee,ancestorfeeanddescendantfee. - The new RPC
getzmqnotificationsreturns information about active ZMQ notifications.
External wallet files
The -wallet=<path> option now accepts full paths instead of requiring wallets
to be located in the -walletdir directory.
Newly created wallet format
If -wallet=<path> is specified with a path that does not exist, it will now
create a wallet directory at the specified location (containing a wallet.dat
data file, a db.log file, and database/log.?????????? files) instead of just
creating a data file at the path and storing log files in the parent
directory. This should make backing up wallets more straightforward than
before because the specified wallet path can just be directly archived without
having to look in the parent directory for transaction log files.
For backwards compatibility, wallet paths that are names of existing data files
in the -walletdir directory will continue to be accepted and interpreted the
same as before.
Dynamic loading and creation of wallets
Previously, wallets could only be loaded or created at startup, by specifying -wallet parameters on the command line or in the bitcoin.conf file. It is now possible to load, create and unload wallets dynamically at runtime:
- Existing wallets can be loaded by calling the
loadwalletRPC. The wallet can be specified as file/directory basename (which must be located in thewalletdirdirectory), or as an absolute path to a file/directory. - New wallets can be created (and loaded) by calling the
createwalletRPC. The provided name must not match a wallet file in thewalletdirdirectory or the name of a wallet that is currently loaded. - Loaded wallets can be unloaded by calling the
unloadwalletRPC.
This feature is currently only available through the RPC interface.
Coin selection
- A new
-avoidpartialspendsflag has been added (default=false). If enabled, the wallet will try to spend UTXO's that point at the same destination together. This is a privacy increase, as there will no longer be cases where a wallet will inadvertently spend only parts of the coins sent to the same address (note that if someone were to send coins to that address after it was used, those coins will still be included in future coin selections).
Configuration sections for testnet and regtest
It is now possible for a single configuration file to set different options for different networks. This is done by using sections or by prefixing the option with the network, such as:
main.uacomment=bitcoin
test.uacomment=bitcoin-testnet
regtest.uacomment=regtest
[main]
mempoolsize=300
[test]
mempoolsize=100
[regtest]
mempoolsize=20
The addnode=, connect=, port=, bind=, rpcport=, rpcbind=
and wallet= options will only apply to mainnet when specified in the
configuration file, unless a network is specified.
'label' and 'account' APIs for wallet
A new 'label' API has been introduced for the wallet. This is intended as a replacement for the deprecated 'account' API. The 'account' can continue to be used in V0.17 by starting bitcoind with the '-deprecatedrpc=accounts' argument, and will be fully removed in V0.18.
The label RPC methods mirror the account functionality, with the following functional differences:
- Labels can be set on any address, not just receiving addresses. This functionality was previously only available through the GUI.
- Labels can be deleted by reassigning all addresses using the
setlabelRPC method. - There isn't support for sending transactions from a label, or for determining which label a transaction was sent from.
- Labels do not have a balance.
Here are the changes to RPC methods:
| Deprecated Method | New Method | Notes |
|---|---|---|
getaccount |
getaddressinfo |
getaddressinfo returns a json object with address information instead of just the name of the account as a string. |
getaccountaddress |
n/a | There is no replacement for getaccountaddress since labels do not have an associated receive address. |
getaddressesbyaccount |
getaddressesbylabel |
getaddressesbylabel returns a json object with the addresses as keys, instead of a list of strings. |
getreceivedbyaccount |
getreceivedbylabel |
no change in behavior |
listaccounts |
listlabels |
listlabels does not return a balance or accept minconf and watchonly arguments. |
listreceivedbyaccount |
listreceivedbylabel |
Both methods return new label fields, along with account fields for backward compatibility. |
move |
n/a | no replacement |
sendfrom |
n/a | no replacement |
setaccount |
setlabel |
Both methods now:
|
| Changed Method | Notes |
|---|---|
addmultisigaddress |
Renamed account named parameter to label. Still accepts account for backward compatibility if running with '-deprecatedrpc=accounts'. |
getnewaddress |
Renamed account named parameter to label. Still accepts account for backward compatibility. if running with '-deprecatedrpc=accounts' |
listunspent |
Returns new label fields. account field will be returned for backward compatibility if running with '-deprecatedrpc=accounts' |
sendmany |
The account named parameter has been renamed to dummy. If provided, the dummy parameter must be set to the empty string, unless running with the -deprecatedrpc=accounts argument (in which case functionality is unchanged). |
listtransactions |
The account named parameter has been renamed to dummy. If provided, the dummy parameter must be set to the string *, unless running with the -deprecatedrpc=accounts argument (in which case functionality is unchanged). |
getbalance |
account, minconf and include_watchonly parameters are deprecated, and can only be used if running with '-deprecatedrpc=accounts' |
Low-level RPC changes
-
When bitcoin is not started with any
-wallet=<path>options, the name of the default wallet returned bygetwalletinfoandlistwalletsRPCs is now the empty string""instead of"wallet.dat". If bitcoin is started with any-wallet=<path>options, there is no change in behavior, and the name of any wallet is just its<path>string. -
Passing an empty string (
"") as theaddress_typeparameter togetnewaddress,getrawchangeaddress,addmultisigaddress,fundrawtransactionRPCs is now an error. Previously, this would fall back to using the default address type. It is still possible to pass null or leave the parameter unset to use the default address type. -
Bare multisig outputs to our keys are no longer automatically treated as incoming payments. As this feature was only available for multisig outputs for which you had all private keys in your wallet, there was generally no use for them compared to single-key schemes. Furthermore, no address format for such outputs is defined, and wallet software can't easily send to it. These outputs will no longer show up in
listtransactions,listunspent, or contribute to your balance, unless they are explicitly watched (usingimportaddressorimportmultiwith hex script argument).signrawtransaction*also still works for them. -
The
getwalletinfoRPC method now returns anhdseedidvalue, which is always the same as the incorrectly-namedhdmasterkeyidvalue.hdmasterkeyidwill be removed in V0.18. -
The
getaddressinfoRPC method now returns anhdseedidvalue, which is always the same as the incorrectly-namedhdmasterkeyidvalue.hdmasterkeyidwill be removed in V0.18.
Other API changes
- The
inactivehdmasterproperty in thedumpwalletoutput has been corrected toinactivehdseed
Logging
-
The log timestamp format is now ISO 8601 (e.g. "2018-02-28T12:34:56Z").
-
When running bitcoind with
-debugbut without-daemon, logging to stdout is now the default behavior. Setting-printtoconsole=1no longer implicitly disables logging to debug.log. Instead, logging to file can be explicitly disabled by setting-debuglogfile=0.
Transaction index changes
The transaction index is now built separately from the main node procedure,
meaning the -txindex flag can be toggled without a full reindex. If bitcoind
is run with -txindex on a node that is already partially or fully synced
without one, the transaction index will be built in the background and become
available once caught up. When switching from running -txindex to running
without the flag, the transaction index database will not be deleted
automatically, meaning it could be turned back on at a later time without a full
resync.
Miner block size removed
The -blockmaxsize option for miners to limit their blocks' sizes was
deprecated in V0.15.1, and has now been removed. Miners should use the
-blockmaxweight option if they want to limit the weight of their blocks'
weights.
Python Support
Support for Python 2 has been discontinued for all test files and tools.
Credits
Thanks to everyone who directly contributed to this release:
As well as everyone that helped translating on Transifex.