0.20.0 Release NotesBitcoin Core version 0.20.0 is now available from:
https://bitcoincore.org/bin/bitcoin-core-0.20.0/Or through BitTorrent:
Magnet LinkThis release includes 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/issuesTo receive security and update notifications, please subscribe to:
https://bitcoincore.org/en/list/announcements/join/How to UpgradeIf you are running an older version, shut it down. Wait until it has completely shut down (which might take a few minutes in some cases), then run the installer (on Windows) or just copy over
/Applications/Bitcoin-Qt (on Mac) or
bitcoind/
bitcoin-qt (on Linux).
Upgrading directly from a version of Bitcoin Core that has reached its EOL is possible, but it might take some time if the data directory needs to be migrated. Old wallet versions of Bitcoin Core are generally supported.
CompatibilityBitcoin Core is supported and extensively tested on operating systems using the Linux kernel, macOS 10.12+, and Windows 7 and newer. Bitcoin Core should also work on most other Unix-like systems but is not as frequently tested on them. It is not recommended to use Bitcoin Core on unsupported systems.
- From Bitcoin Core 0.20.0 onwards, macOS versions earlier than 10.12 are no longer supported. Additionally, Bitcoin Core does not yet change appearance when macOS "dark mode" is activated.
Known BugsThe process for generating the source code release ("tarball") has changed in an effort to make it more complete, however, there are a few regressions in this release:
- The generated configure script is currently missing, and you will need to install autotools and run ./autogen.sh before you can run./configure. This is the same as when checking out from git.
- Instead of running make simply, you should instead run BITCOIN_GENBUILD_NO_GIT=1 make.
Notable changesP2P and network changesRemoval of BIP61 reject network messages from Bitcoin CoreThe
-enablebip61 command line option to enable BIP61 has been removed.(
#17004)
This feature has been disabled by default since Bitcoin Core version 0.18.0. Nodes on the network can not generally be trusted to send valid messages (including reject messages), so this should only ever be used when connected to a trusted node.
Please use the alternatives recommended below if you rely on this removed feature:
- Testing or debugging of implementations of the Bitcoin P2P network protocol should be done by inspecting the log messages that are produced by a recent version of Bitcoin Core. Bitcoin Core logs debug messages (-debug=) to a stream (-printtoconsole) or to a file (-debuglogfile=).
- Testing the validity of a block can be achieved by specific RPCs:
- submitblock
- getblocktemplate with 'mode' set to 'proposal' for blocks with potentially invalid POW
- Testing the validity of a transaction can be achieved by specific RPCs:
- sendrawtransaction
- testmempoolaccept
- Wallets should not assume a transaction has propagated to the network just because there are no reject messages. Instead, listen for the transaction to be announced by other peers on the network.
Wallets should not assume a lack of reject messages means a transaction pays an appropriate fee. Instead, set fees using fee estimation and use replace-by-fee to increase a transaction's fee if it hasn't confirmed within the desired amount of time.
The removal of BIP61 reject message support also has the following minor RPC and logging implications:
- testmempoolaccept and sendrawtransaction no longer return the P2P reject code when a transaction is not accepted to the mempool. They still return the verbal reject reason.
- Log messages that previously reported the reject code when a transaction was not accepted to the mempool now no longer report the reject code. The reason for rejection is still reported.
Updated RPCs- The RPCs which accept descriptors now accept the new sortedmulti(...) descriptor type which supports multisig scripts where the public keys are sorted lexicographically in the resulting script. (#17056)
- The walletprocesspsbt and walletcreatefundedpsbt RPCs now include BIP32 derivation paths by default for public keys if we know them. This can be disabled by setting the bip32derivs parameter tofalse. (#17264)
- The bumpfee RPC's parameter totalFee, which was deprecated in 0.19, has been removed.(#18312)
- The bumpfee RPC will return a PSBT when used with wallets that have private keys disabled.(#16373)
- The getpeerinfo RPC now includes a mapped_as field to indicate the mapped Autonomous System used for diversifying peer selection. See the -asmap configuration option described below in New Settings.(#1702)
- The createmultisig and addmultisigaddress RPCs now return an output script descriptor for the newly created address.(#18032)
Build System- OpenSSL is no longer used by Bitcoin Core. (#17265)
- BIP70 support has been fully removed from Bitcoin Core. The enable-bip70 option remains, but it will throw an error during configure. (#17165)
- glibc 2.17 or greater is now required to run the release binaries. This retains compatibility with RHEL 7, CentOS 7, Debian 8 and Ubuntu 14.04 LTS. (#17538)
- The source code archives that are provided with gitian builds no longer contain any autotools artifacts. Therefore, to build from such source, a user should run the ./autogen.sh script from the root of the unpacked archive. This implies that autotools and other required packages are installed on the user's system. (#18331)
New settings- New rpcwhitelist and rpcwhitelistdefault configuration parameters allow giving certain RPC users permissions to only some RPC calls.(#12763)
- A new -asmap configuration option has been added to diversify the node's network connections by mapping IP addresses Autonomous System Numbers (ASNs) and then limiting the number of connections made to any single ASN. See issue #16599,PR #16702, and thebitcoind help for more information. This option is experimental and subject to removal or breaking changes in future releases, so the legacy /16 prefix mapping of IP addresses remains the default. #16702
Updated settings- All custom settings configured when Bitcoin Core starts are now written to the debug.log file to assist troubleshooting.(#16115)
- Importing blocks upon startup via the bootstrap.dat file no longer occurs by default. The file must now be specified with -loadblock=.(#17044)
- The -debug=db logging category has been renamed to-debug=walletdb to distinguish it from coindb. The -debug=dboption has been deprecated and will be removed in the next major release.(#17410)
- The -walletnotify configuration parameter will now replace any %win its argument with the name of the wallet generating the notification. This is not supported on Windows.(#13339)
Removed settings- The -whitelistforcerelay configuration parameter has been removed after it was discovered that it was rendered ineffective in version 0.13 and hasn't actually been supported for almost four years.(#17985)
GUI changes- The "Start Bitcoin Core on system login" option has been removed on macOS.(#17567)
- In the Peers window, the details for a peer now displays a Mapped AS field to indicate the mapped Autonomous System used for diversifying peer selection. See the -asmap configuration option in New Settings, above.(#18402)
- A "known bug" announced in the release notes of version 0.18 has been fixed. The issue affected anyone who simultaneously used multiple Bitcoin Core wallets and the GUI coin control feature.(#18894)
- For watch-only wallets, creating a new transaction in the Send screen or fee bumping an existing transaction in the Transactions screen will automatically copy a Partially-Signed Bitcoin Transaction (PSBT) to the system clipboard. This can then be pasted into an external program such as HWI for signing. Future versions of Bitcoin Core should support a GUI option for finalizing and broadcasting PSBTs, but for now the debug console may be used with the finalizepsbt and sendrawtransaction RPCs. (#16944, #17492)
Wallet- The wallet now by default uses bech32 addresses when using RPC, and creates native segwit change outputs.(#16884)
- The way that output trust was computed has been fixed, which affects confirmed/unconfirmed balance status and coin selection.(#16766)
- The gettransaction, listtransactions and listsinceblock RPC responses now also include the height of the block that contains the wallet transaction, if any.(#17437)
- The getaddressinfo RPC has had its label field deprecated (re-enable for this release using the configuration parameter -deprecatedrpc=label). The labels field is altered from returning JSON objects to returning a JSON array of label names (re-enable previous behavior for this release using the configuration parameter -deprecatedrpc=labelspurpose). Backwards compatibility using the deprecated configuration parameters is expected to be dropped in the 0.21 release.(#17585, #17578)
Documentation changesLow-level changesUtilities- The bitcoin-cli utility used with the -getinfo parameter now returns a headers field with the number of downloaded block headers on the best headers chain (similar to the blocks field that is also returned) and a verificationprogress field that estimates how much of the best block chain has been synced by the local node. The information returned no longer includes the protocolversion, walletversion, and keypoololdest fields.(#17302, #17650)
- The bitcoin-cli utility now accepts a -stdinwalletpassphrase parameter that can be used when calling the walletpassphrase and walletpassphrasechange RPCs to read the passphrase from standard input without echoing it to the terminal, improving security against anyone who can look at your screen. The existing -stdinrpcpass parameter is also updated to not echo the passphrase.(#13716
Command line- Command line options prefixed with main/test/regtest network names like -main.port=8333 -test.server=1 previously were allowed but ignored. Now they trigger "Invalid parameter" errors on startup.(#17482)
New RPCs- The dumptxoutset RPC outputs a serialized snapshot of the current UTXO set. A script is provided in the contrib/devtools directory for generating a snapshot of the UTXO set at a particular block height.(#16899)
- The generatetodescriptor RPC allows testers using regtest mode to generate blocks that pay an arbitrary output script descriptor. (#16943)
Updated RPCs- The verifychain RPC default values are now static instead of depending on the command line options or configuration file (-checklevel, and -checkblocks). Users can pass in the RPC arguments explicitly when they don't want to rely on the default values. (#18541)
- The getblockchaininfo RPC's verificationprogress field will no longer report values higher than 1. Previously it would occasionally report the chain was more than 100% verified.(#17328)
Tests- It is now an error to use an unqualified walletdir=path setting in the config file if running on testnet or regtest networks. The setting now needs to be qualified as chain.walletdir=path or placed in the appropriate [chain] section. (#17447)
- fallbackfee was 0 (disabled) by default for the main chain, but 0.0002 by default for the test chains. Now it is 0 by default for all chains. Testnet and regtest users will have to add fallbackfee=0.0002 to their configuration if they weren't setting it and they want it to keep working like before. (#16524
Build system- Support is provided for building with the Android Native Development Kit (NDK). (#16110)
0.20.0 change log Mining- #18742 miner: Avoid stack-use-after-return in validationinterface (MarcoFalke)
Block and transaction handling- #15283 log: Fix UB with bench on genesis block (instagibbs)
- #16507 feefilter: Compute the absolute fee rather than stored rate (instagibbs)
- #16688 log: Add validation interface logging (jkczyz)
- #16805 log: Add timing information to FlushStateToDisk() (jamesob)
- #16902 O(1) `OP_IF/NOTIF/ELSE/ENDIF` script implementation (sipa)
- #16945 introduce CChainState::GetCoinsCacheSizeState (jamesob)
- #16974 Walk pindexBestHeader back to ChainActive().Tip() if it is invalid (TheBlueMatt)
- #17004 Remove REJECT code from CValidationState (jnewbery)
- #17080 Explain why `fCheckDuplicateInputs` can not be skipped and remove it (MarcoFalke)
- #17328 GuessVerificationProgress: cap the ratio to 1 (darosior)
- #17399 Templatize ValidationState instead of subclassing (jkczyz)
- #17407 node: Add reference to mempool in NodeContext (MarcoFalke)
- #17708 prevector: Avoid misaligned member accesses (ajtowns)
- #17850,#17896,#17975,#18021,#18112 Serialization improvements (sipa)
- #17925 Improve UpdateTransactionsFromBlock with Epochs (JeremyRubin)
- #18002 Abstract out script execution out of `VerifyWitnessProgram()` (sipa)
- #18388 Make VerifyWitnessProgram use a Span stack (sipa)
- #18433 serialization: prevent int overflow for big Coin::nHeight (pierreN)
- #18500 chainparams: Bump assumed valid hash (MarcoFalke)
- #18551 Do not clear validationinterface entries being executed (sipa)
P2P protocol and network code- #15437 Remove BIP61 reject messages (MarcoFalke)
- #16702 Supply and use asmap to improve IP bucketing in addrman (naumenkogs)
- #16851 Continue relaying transactions after they expire from mapRelay (ajtowns)
- #17164 Avoid allocating memory for addrKnown where we don't need it (naumenkogs)
- #17243 tools: add PoissonNextSend method that returns mockable time (amitiuttarwar)
- #17251 SocketHandler logs peer id for close and disconnect (Sjors)
- #17573 Seed RNG with precision timestamps on receipt of net messages (TheBlueMatt)
- #17624 Fix an uninitialized read in ProcessMessage(…, "tx", …) when receiving a transaction we already have (practicalswift)
- #17754 Don't allow resolving of std::string with embedded NUL characters. Add tests (practicalswift)
- #17758 Fix CNetAddr::IsRFC2544 comment + tests (tynes)
- #17812 config, net, test: Asmap feature refinements and functional tests (jonatack)
- #17951 Use rolling bloom filter of recent block txs for AlreadyHave() check (sdaftuar)
- #17985 Remove forcerelay of rejected txs (MarcoFalke)
- #18023 Fix some asmap issues (sipa)
- #18054 Reference instead of copy in BlockConnected range loop (jonatack)
- #18376 Fix use-after-free in tests (vasild)
- #18454 Make addr relay mockable, add test (MarcoFalke)
- #18458 Add missing `cs_vNodes` lock (MarcoFalke)
- #18506 Hardcoded seeds update for 0.20 (laanwj)
- #18808 Drop unknown types in getdata (jnewbery)
- #18962 Only send a getheaders for one block in an INV (jnewbery)
Wallet- #13339 Replace %w by wallet name in -walletnotify script (promag)
- #15931 Remove GetDepthInMainChain dependency on locked chain interface (ariard)
- #16373 bumpfee: Return PSBT when wallet has privkeys disabled (instagibbs)
- #16524 Disable -fallbackfee by default (jtimon)
- #16766 Make IsTrusted scan parents recursively (JeremyRubin)
- #16884 Change default address type to bech32 (instagibbs)
- #16911 Only check the hash of transactions loaded from disk (achow101)
- #16923 Handle duplicate fileid exception (promag)
- #17056 descriptors: Introduce sortedmulti descriptor (achow101)
- #17070 Avoid showing GUI popups on RPC errors (MarcoFalke)
- #17138 Remove wallet access to some node arguments (jnewbery)
- #17237 LearnRelatedScripts only if KeepDestination (promag)
- #17260 Split some CWallet functions into new LegacyScriptPubKeyMan (achow101)
- #17261 Make ScriptPubKeyMan an actual interface and the wallet to have multiple (achow101)
- #17290 Enable BnB coin selection for preset inputs and subtract fee from outputs (achow101)
- #17373 Various fixes and cleanup to keypool handling in LegacyScriptPubKeyMan and CWallet (achow101)
- #17410 Rename `db` log category to `walletdb` (like `coindb`) (laanwj)
- #17444 Avoid showing GUI popups on RPC errors (take 2) (MarcoFalke)
- #17447 Make -walletdir network only (promag)
- #17537 Cleanup and move opportunistic and superfluous TopUp()s (achow101)
- #17553 Remove out of date comments for CalculateMaximumSignedTxSize (instagibbs)
- #17568 Fix when sufficient preset inputs and subtractFeeFromOutputs (achow101)
- #17677 Activate watchonly wallet behavior for LegacySPKM only (instagibbs)
- #17719 Document better -keypool as a look-ahead safety mechanism (ariard)
- #17843 Reset reused transactions cache (fjahr)
- #17889 Improve CWallet:MarkDestinationsDirty (promag)
- #18034 Get the OutputType for a descriptor (achow101)
- #18067 Improve LegacyScriptPubKeyMan::CanProvide script recognition (ryanofsky)
- #18115 Pass in transactions and messages for signing instead of exporting the private keys (achow101)
- #18192,#18546 Bugfix: Wallet: Safely deal with change in the address book (luke-jr)
- #18204 descriptors: Improve descriptor cache and cache xpubs (achow101)
- #18274 rpc/wallet: Initialize nFeeRequired to avoid using garbage value on failure (kallewoof)
- #18312 Remove deprecated fee bumping by totalFee (jonatack)
- #18338 Fix wallet unload race condition (promag)