doc/release-notes/release-notes-0.18.0.md
Bitcoin Core version 0.18.0 is now available from:
https://bitcoincore.org/bin/bitcoin-core-0.18.0/
This is a new major version release, including new features, various bug fixes 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/
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 later. Upgrading directly from 0.7.x and earlier without redownloading the blockchain is not supported. However, as usual, old wallet versions are still supported.
Bitcoin Core is supported and extensively tested on operating systems using the Linux kernel, macOS 10.10+, and Windows 7 and newer. It is not recommended to use Bitcoin Core on unsupported systems.
Bitcoin Core should also work on most other Unix-like systems but is not as 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. Additionally, Bitcoin Core does not yet change appearance when macOS "dark mode" is activated.
In addition to previously-supported CPU platforms, this release's pre-compiled distribution also provides binaries for the RISC-V platform.
If you are using the systemd unit configuration file located at
contrib/init/bitcoind.service, it has been changed to use
/var/lib/bitcoind as the data directory instead of
~bitcoin/.bitcoin. When switching over to the new configuration file,
please make sure that the filesystem on which /var/lib/bitcoind will
exist has enough space (check using df -h /var/lib/bitcoind), and
optionally copy over your existing data directory. See the systemd init
file section for more details.
For advanced users who have both (1) enabled coin control features, and (2) are using multiple wallets loaded at the same time: The coin control input selection dialog can erroneously retain wrong-wallet state when switching wallets using the dropdown menu. For now, it is recommended not to use coin control features with multiple wallets loaded.
getblocktemplate will fail if the segwit rule is not
specified. Calling getblocktemplate without segwit specified is
almost certainly a misconfiguration since doing so results in lower
rewards for the miner. Failed calls will produce an error message
describing how to enable the segwit rule.A warning is printed if an unrecognized section name is used in the
configuration file. Recognized sections are [test], [main], and
[regtest].
Four new options are available for configuring the maximum number of messages that ZMQ will queue in memory (the "high water mark") before dropping additional messages. The default value is 1,000, the same as was used for previous releases. See the ZMQ documentation for details.
The rpcallowip option can no longer be used to automatically listen
on all network interfaces. Instead, the rpcbind parameter must be
used to specify the IP addresses to listen on. Listening for RPC
commands over a public network connection is insecure and should be
disabled, so a warning is now printed if a user selects such a
configuration. If you need to expose RPC in order to use a tool like
Docker, ensure you only bind RPC to your localhost, e.g. docker run [...] -p 127.0.0.1:8332:8332 (this is an extra :8332 over the
normal Docker port specification).
The rpcpassword option now causes a startup error if the password
set in the configuration file contains a hash character (#), as it's
ambiguous whether the hash character is meant for the password or as a
comment.
The whitelistforcerelay option is used to relay transactions from
whitelisted peers even when not accepted to the mempool. This option
now defaults to being off, so that changes in policy and
disconnect/ban behavior will not cause a node that is whitelisting
another to be dropped by peers. Users can still explicitly enable
this behavior with the command line option (and may want to consider
contacting the Bitcoin Core
project to let us know about their use-case, as this feature could be
deprecated in the future).
The systemd init file (contrib/init/bitcoind.service) has been changed
to use /var/lib/bitcoind as the data directory instead of
~bitcoin/.bitcoin. This change makes Bitcoin Core more consistent with
other services, and makes the systemd init config more consistent with
existing Upstart and OpenRC configs.
The configuration, PID, and data directories are now completely managed
by systemd, which will take care of their creation, permissions, etc.
See systemd.exec(5)
for more details.
When using the provided init files under contrib/init, overriding the
datadir option in /etc/bitcoin/bitcoin.conf will have no effect.
This is because the command line arguments specified in the init files
take precedence over the options specified in
/etc/bitcoin/bitcoin.conf.
A new short document about the JSON-RPC interface describes cases where the results of an RPC might contain inconsistencies between data sourced from different subsystems, such as wallet state and mempool state. A note is added to the REST interface documentation indicating that the same rules apply.
Further information is added to the JSON-RPC documentation about how to secure this interface.
A new document
about the bitcoin.conf file describes how to use it to configure
Bitcoin Core.
A new document introduces Bitcoin Core's BIP174 Partially-Signed Bitcoin Transactions (PSBT) interface, which is used to allow multiple programs to collaboratively work to create, sign, and broadcast new transactions. This is useful for offline (cold storage) wallets, multisig wallets, coinjoin implementations, and many other cases where two or more programs need to interact to generate a complete transaction.
The output script descriptor documentation has been updated with information about new features in this still-developing language for describing the output scripts that a wallet or other program wants to receive notifications for, such as which addresses it wants to know received payments. The language is currently used in multiple new and updated RPCs described in these release notes and is expected to be adapted to other RPCs and to the underlying wallet structure.
A new --disable-bip70 option may be passed to ./configure to
prevent Bitcoin-Qt from being built with support for the BIP70 payment
protocol or from linking libssl. As the payment protocol has exposed
Bitcoin Core to libssl vulnerabilities in the past, builders who don't
need BIP70 support are encouraged to use this option to reduce their
exposure to future vulnerabilities.
The minimum required version of Qt (when building the GUI) has been increased from 5.2 to 5.5.1 (the depends system provides 5.9.7)
getnodeaddresses returns peer addresses known to this node. It may
be used to find nodes to connect to without using a DNS seeder.
listwalletdir returns a list of wallets in the wallet directory
(either the default wallet directory or the directory configured by
the -walletdir parameter).
getrpcinfo returns runtime details of the RPC server. At the moment,
it returns an array of the currently active commands and how long
they've been running.
deriveaddresses returns one or more addresses corresponding to an
output descriptor.
getdescriptorinfo accepts a descriptor and returns information about
it, including its computed checksum.
joinpsbts merges multiple distinct PSBTs into a single PSBT. The
multiple PSBTs must have different inputs. The resulting PSBT will
contain every input and output from all of the PSBTs. Any signatures
provided in any of the PSBTs will be dropped.
analyzepsbt examines a PSBT and provides information about what
the PSBT contains and the next steps that need to be taken in order
to complete the transaction. For each input of a PSBT, analyzepsbt
provides information about what information is missing for that
input, including whether a UTXO needs to be provided, what pubkeys
still need to be provided, which scripts need to be provided, and
what signatures are still needed. Every input will also list which
role is needed to complete that input, and analyzepsbt will also
list the next role in general needed to complete the PSBT.
analyzepsbt will also provide the estimated fee rate and estimated
virtual size of the completed transaction if it has enough
information to do so.
utxoupdatepsbt searches the set of Unspent Transaction Outputs
(UTXOs) to find the outputs being spent by the partial transaction.
PSBTs need to have the UTXOs being spent to be provided because
the signing algorithm requires information from the UTXO being spent.
For segwit inputs, only the UTXO itself is necessary. For
non-segwit outputs, the entire previous transaction is needed so
that signers can be sure that they are signing the correct thing.
Unfortunately, because the UTXO set only contains UTXOs and not full
transactions, utxoupdatepsbt will only add the UTXO for segwit
inputs.
Note: some low-level RPC changes mainly useful for testing are described in the Low-level Changes section below.
getpeerinfo now returns an additional minfeefilter field set to
the peer's BIP133 fee filter. You can use this to detect that you
have peers that are willing to accept transactions below the default
minimum relay fee.
The mempool RPCs, such as getrawmempool with verbose=true, now
return an additional "bip125-replaceable" value indicating whether the
transaction (or its unconfirmed ancestors) opts-in to asking nodes and
miners to replace it with a higher-feerate transaction spending any of
the same inputs.
settxfee previously silently ignored attempts to set the fee below
the allowed minimums. It now prints a warning. The special value of
"0" may still be used to request the minimum value.
getaddressinfo now provides an ischange field indicating whether
the wallet used the address in a change output.
importmulti has been updated to support P2WSH, P2WPKH, P2SH-P2WPKH,
and P2SH-P2WSH. Requests for P2WSH and P2SH-P2WSH accept an additional
witnessscript parameter.
importmulti now returns an additional warnings field for each
request with an array of strings explaining when fields are being
ignored or are inconsistent, if there are any.
getaddressinfo now returns an additional solvable boolean field
when Bitcoin Core knows enough about the address's scriptPubKey,
optional redeemScript, and optional witnessScript in order for the
wallet to be able to generate an unsigned input spending funds sent to
that address.
The getaddressinfo, listunspent, and scantxoutset RPCs now
return an additional desc field that contains an output descriptor
containing all key paths and signing information for the address
(except for the private key). The desc field is only returned for
getaddressinfo and listunspent when the address is solvable.
importprivkey will preserve previously-set labels for addresses or
public keys corresponding to the private key being imported. For
example, if you imported a watch-only address with the label "cold
wallet" in earlier releases of Bitcoin Core, subsequently importing
the private key would default to resetting the address's label to the
default empty-string label (""). In this release, the previous label
of "cold wallet" will be retained. If you optionally specify any
label besides the default when calling importprivkey, the new label
will be applied to the address.
See the Mining section for changes to getblocktemplate.
getmininginfo now omits currentblockweight and currentblocktx
when a block was never assembled via RPC on this node.
The getrawtransaction RPC & REST endpoints no longer check the
unspent UTXO set for a transaction. The remaining behaviors are as
follows: 1. If a blockhash is provided, check the corresponding block.
2. If no blockhash is provided, check the mempool. 3. If no blockhash
is provided but txindex is enabled, also check txindex.
unloadwallet is now synchronous, meaning it will not return until
the wallet is fully unloaded.
importmulti now supports importing of addresses from descriptors. A
"desc" parameter can be provided instead of the "scriptPubKey" in a
request, as well as an optional range for ranged descriptors to
specify the start and end of the range to import. Descriptors with key
origin information imported through importmulti will have their key
origin information stored in the wallet for use with creating PSBTs.
More information about descriptors can be found
here.
listunspent has been modified so that it also returns
witnessScript, the witness script in the case of a P2WSH or
P2SH-P2WSH output.
createwallet now has an optional blank argument that can be used
to create a blank wallet. Blank wallets do not have any keys or HD
seed. They cannot be opened in software older than 0.18. Once a blank
wallet has a HD seed set (by using sethdseed) or private keys,
scripts, addresses, and other watch only things have been imported,
the wallet is no longer blank and can be opened in 0.17.x. Encrypting
a blank wallet will also set a HD seed for it.
signrawtransaction is removed after being deprecated and hidden
behind a special configuration option in version 0.17.0.
The 'account' API is removed after being deprecated in v0.17. The 'label' API was introduced in v0.17 as a replacement for accounts. See the release notes from v0.17 for a full description of the changes from the 'account' API to the 'label' API.
addwitnessaddress is removed after being deprecated in version
0.16.0.
generate is deprecated and will be fully removed in a subsequent
major version. This RPC is only used for testing, but its
implementation reached across multiple subsystems (wallet and mining),
so it is being deprecated to simplify the wallet-node interface.
Projects that are using generate for testing purposes should
transition to using the generatetoaddress RPC, which does not
require or use the wallet component. Calling generatetoaddress with
an address returned by the getnewaddress RPC gives the same
functionality as the old generate RPC. To continue using generate
in this version, restart bitcoind with the -deprecatedrpc=generate
configuration option.
Be reminded that parts of the validateaddress command have been
deprecated and moved to getaddressinfo. The following deprecated
fields have moved to getaddressinfo: ismine, iswatchonly,
script, hex, pubkeys, sigsrequired, pubkey, embedded,
iscompressed, label, timestamp, hdkeypath, hdmasterkeyid.
The addresses field has been removed from the validateaddress
and getaddressinfo RPC methods. This field was confusing since
it referred to public keys using their P2PKH address. Clients
should use the embedded.address field for P2SH or P2WSH wrapped
addresses, and pubkeys for inspecting multisig participants.
/rest/blockhashbyheight/ endpoint is added for fetching the
hash of the block in the current best blockchain based on its height
(how many blocks it is after the Genesis Block).A new Window menu is added alongside the existing File, Settings, and Help menus. Several items from the other menus that opened new windows have been moved to this new Window menu.
In the Send tab, the checkbox for "pay only the required fee" has been removed. Instead, the user can simply decrease the value in the Custom Feerate field all the way down to the node's configured minimum relay fee.
In the Overview tab, the watch-only balance will be the only balance
shown if the wallet was created using the createwallet RPC and the
disable_private_keys parameter was set to true.
The launch-on-startup option is no longer available on macOS if compiled with macosx min version greater than 10.11 (use CXXFLAGS="-mmacosx-version-min=10.11" CFLAGS="-mmacosx-version-min=10.11" for setting the deployment sdk version)
bitcoin-wallet tool is now distributed alongside Bitcoin
Core's other executables. Without needing to use any RPCs, this tool
can currently create a new wallet file or display some basic
information about an existing wallet, such as whether the wallet is
encrypted, whether it uses an HD seed, how many transactions it
contains, and how many address book entries it has.This section describes planned changes to Bitcoin Core that may affect other Bitcoin software and services.
addresstype=bech32 configuration option in any Bitcoin Core
release from 0.16.0 up.)-enablebip61=0 option. BIP 61 messages
will be disabled by default in a future version, before being removed
entirely.This section describes RPC changes mainly useful for testing, mostly not relevant in production. The changes are mentioned for completeness.
The submitblock RPC previously returned the reason a rejected block
was invalid the first time it processed that block, but returned a
generic "duplicate" rejection message on subsequent occasions it
processed the same block. It now always returns the fundamental
reason for rejecting an invalid block and only returns "duplicate" for
valid blocks it has already accepted.
A new submitheader RPC allows submitting block headers independently
from their block. This is likely only useful for testing.
The signrawtransactionwithkey and signrawtransactionwithwallet
RPCs have been modified so that they also optionally accept a
witnessScript, the witness script in the case of a P2WSH or
P2SH-P2WSH output. This is compatible with the change to
listunspent.
For the walletprocesspsbt and walletcreatefundedpsbt RPCs, if the
bip32derivs parameter is set to true but the key metadata for a
public key has not been updated yet, then that key will have a
derivation path as if it were just an independent key (i.e. no
derivation path and its master fingerprint is itself).
-usehd configuration option was removed in version 0.16. From
that version onwards, all new wallets created are hierarchical
deterministic wallets. This release makes specifying -usehd an
invalid configuration option.setban RPC, all connections from that peer will still be
rejected.The key metadata will need to be upgraded the first time that the HD seed is available. For unencrypted wallets this will occur on wallet loading. For encrypted wallets this will occur the first time the wallet is unlocked.
Newly encrypted wallets will no longer require restarting the software. Instead such wallets will be completely unloaded and reloaded to achieve the same effect.
A sub-project of Bitcoin Core now provides Hardware Wallet Interaction (HWI) scripts that allow command-line users to use several popular hardware key management devices with Bitcoin Core. See their project page for details.
cs_main locking semantics (MarcoFalke)-whitelistforcerelay to off (sdaftuar)assumevalid, minimumchainwork, and getchaintxstats to height 563378 (gmaxwell)INADDR_ANY by default, and warn when doing so explicitly (luke-jr)dummy_tx variable from FillPSBT (dongcarl)minversion wallet entry as unknown (instagibbs)cs_main in some wallet RPC (promag)bitcoin_server (jnewbery)encrypted_batch to nullptr after delete. Avoid double free in the case of NDEBUG (practicalswift)ENABLE_WALLET from libbitcoin_server.a (jnewbery)-usehd option (jnewbery)-walletdir arg (PierreRochard)generate RPC method (jnewbery)cs_wallet/cs_KeyStore locks to wallet (practicalswift)addwitnessaddress (jnewbery)fs::relative call and fix listwalletdir tests (promag)ischange field for getaddressinfo RPC (mrwhythat)BerkeleyEnvironment::Flush (promag)success / failure / user_abort (Empact)stop_block in CWallet::ScanForWalletTransactions (Empact)importmulti logic (sipa)memory_cleanse raii-style (Empact)boost::optional-related false positive -Wmaybe-uninitialized warnings on GCC compiler (hebasto)cs_db lock (promag)BerkeleyEnvironment::Close (promag)UpgradeKeyMetadata (jonasschnelli)TransactionError constants (MarcoFalke)CKey::SignCompact (promag)savemempool (promag)minfeefilter value in getpeerinfo RPC (ajtowns)submitheader (MarcoFalke)bip125-replaceable flag, when retrieving mempool entries (dexX7)importmulti RPC accept labels for standard scriptPubKeys (ryanofsky)-txindex is required (promag)RPCHelpMan to generate RPC doc strings (MarcoFalke)RPCHelpMan for all RPCs (MarcoFalke)RPCHelpMan (MarcoFalke)RPCHelpMan (promag)getrawtransaction's time help text (benthecarman)cs_main lock from blockToJSON and blockheaderToJSON (promag)bytessent_per_msg and bytesrecv_per_msg (MarcoFalke)reconsiderblock help text, add test (MarcoFalke)cs_main lock in getblockheader (promag)getrpcinfo command (promag)importmulti changes (jnewbery)getaddressinfo (fanquake)deriveaddresses RPC util method (Sjors)-maxtxfee when wallet is disabled (JBaczuk)boost::signals2 only once (MarcoFalke)Blocksdir to Debug window (hebasto)adjustedTime parameter (hebasto)bitcoin-qt -version output formatting (hebasto)boost::signals2::no_slots_error in early calls to InitWarning (promag)WalletModel* instead of the wallet name as map key (promag)-min option (hebasto)m_assumed_blockchain_size variable value (marcoagner)interfaces/* to libbitcoin_server (laanwj)ENABLE_WALLET (jnewbery)make clean (jamesob)--retry 5 to curl opts in install_db4.sh (qubenix)CLIENT_VERSION_BUILD to CFBundleGetInfoString (fanquake)libbitcoin_server (Mr-Leshiy)value_ret for SelectCoinsBnB (Empact).travis/ subject to shellcheck (scravy)combine_logs.py handle multi-line logs (jnewbery)g_cs_orphans) (practicalswift)wallet_importmulti (MarcoFalke)knapsack_solver_test by not recreating wallet 100 times (lucash-dev)rpc_psbt.json (araspitzu)generate --> generatetoaddress change to allow tests run without wallet (sanket1729)unique_ptrs (practicalswift)feature_notifications.py (ken2812221)--exclude list (ken2812221)skip_if_no_cli() (practicalswift)rpc_zmq.py (jnewbery)assert_start_raises_init_error (ken2812221)send_blocks_and_test (jamesob)getdata with notfound (MarcoFalke)setup_nodes (jnewbery)bench_bitcoin as part make check to allow for quick identification of assertion/sanitizer failures in benchmarking code (practicalswift)example_test.py: fixup coinbase height argument, derive number clearly (instagibbs)test_runner help text (merland)p2p_invalid_messages (jamesob)test_node: get_mem_rss fixups (MarcoFalke).travis (scravy)feature_block (MarcoFalke)BOOST_REQUIRE to getters returning optional (MarcoFalke)p2p_invalid_messages on macOS (jamesob)wallet_encryption error tests (MarcoFalke)descriptor_tests not checking ToString output of public descriptors (ryanofsky)test/functional/mempool_accept: Ensure oversize transaction is actually oversize (luke-jr)combine_logs.py behavior (jamesob)rpc_bind to conform to #14532 behaviour (dongcarl)test_runner command line to receive parameters for each test (marcoagner)wallet_keypool_topup.py: Test for all keypool address types (instagibbs)g_insecure_rand_ctx thread_local (MarcoFalke)cuckoocache_tests TSAN failure introduced in 14935 (practicalswift)mempool_accept (MarcoFalke)thread_local from test_bitcoin (MarcoFalke)p2p_timeouts (MarcoFalke)wallet_listtransactions.py individually through test_runner.py (kristapsk)rpc_timewait to rpc_timeout (MarcoFalke)rpc_net.py pong race condition (Empact)rpc_bind.py --nonloopback test without IPv6 (kristapsk)transactions_tests (Empact)std::vector API for construction of test data (domob1812)invalid_txs.InputMissing test in feature_block (MarcoFalke)wallet_importmulti.py (amitiuttarwar)subprocess.check_output functions to be Python 3.4 compatible (gkrizek)functional_tests_config (MarcoFalke)p2p_invalid_messages (MarcoFalke)updatecoins_simulation_test deterministic (practicalswift)p2p_sendheaders fix of height in coinbase (instagibbs)test/fuzz/test_runner.py and run it in travis (MarcoFalke)cs_main locks required when accessing pcoinsdbview, pcoinsTip or pblocktree (practicalswift)wallet_tx_clone func test (instagibbs)-txindex to start nodes (amitiuttarwar)byte.hex() to keep compatibility (AkioNak)rpc_misc.py, mv test getmemoryinfo, add test mallocinfo (adamjonas)cs_main lock annotations for mapBlockIndex (MarcoFalke)_wfopen and _wfreopen on windows (ken2812221)fs::filesystem_error messages from local multibyte to UTF-8 on windows (ken2812221)--disable-bip70 (ken2812221)_WIN32_WINNT to 0x0601 (Windows 7) (ken2812221)fsbridge::ifstream to fix Windows path issue (ken2812221)boost::scoped_array and use wchar_t API explicitly on Windows (ken2812221)using config file path_to_bitcoin.conf message on startup if conf file exists (leishman)#!/usr/bin/env bash instead of #!/bin/bash (vim88)sched_param (fanquake)devtools/copyright_header.py to always honor exclusions (Empact)streams_vector_reader test. Remove unused seek(size_t)LOCK, LOCK2, TRY_LOCK work with CWaitableCriticalSection (ryanofsky)std::unordered_set instead of set in blockfilter interface (jimpo)-help-debug implies -help (laanwj)-checklevel levels (laanwj)torpassword (fanquake)-rpcauth option password hashing alg (dongcarl)m_failed_blocks in AcceptBlockHeader (Sjors)doc/README_osx.md (merland)getrawtransaction description (amitiuttarwar)bitcoin-wallet tool manpages (MarcoFalke)translation_strings_policy.md (merland)-dbcache (Sjors)analyzepsbt rpc doc (fanquake)fDisconnect behavior (dongcarl)Thanks to everyone who directly contributed to this release:
As well as everyone that helped translating on Transifex.