Bitcoin Core 0.19.0 official version released, what new changes?

Yesterday, Bitcoin Core 0.19.0 was officially released. This is the 19th version of the Bitcoin software client released by Nakamoto in 11 years ago. It is still the mainstream application on the Bitcoin network. Under the supervision of Bitcoin Core chief maintainer Wladimir van der Laan, this latest important version was developed by more than 100 contributors in about six months.

(A problem occurred at the end of the Bitcoin Core 0.19.0 release process. This official version is strictly

Combined with the results of 550 pull requests, Bitcoin Core 0.19.0 includes a series of performance improvements and bug fixes, as well as other changes.


The following is an overview of some of these changes.

GUI default Bech32 address

The "bech32" address format (BIP 173) was introduced in Bitcoin Core 0.16.0 released in early 2018, but is now set for the first time as the default option for the Bitcoin Core Wallet GUI (User Interface).

The Bech32 address is an address starting with "bc1" (not an address starting with 1 or 3). These types of addresses are longer, but use fewer characters than the current address because there is no longer a difference between lowercase and uppercase letters. (This reduces the possibility of human error, for example, when reading an address.) The Bech32 address can also be used to reduce problems caused by typing errors.

In addition, the application of bech32 provides an advantage in the SegWit (segregated witness) environment. So far, some wallets that offer SegWit functionality (including the default Bitcoin Core wallet) are implemented by "packaging" them into P2SH output (addresses starting with 3). To spend Bitcoin from such an address, the user must post a piece of code in the Redemption Script to indicate that Bitcoin is indeed locked in the SegWit output. With the new bech32 address, you can skip this step, which means that the cost of output from SegWit will only require less data to be transmitted over the bitcoin network and included in the blockchain. This makes the bech32 output transaction even cheaper than the P2SH output SegWit transaction.

Not all Bitcoin wallets support sending to the bech32 address, so Bitcoin Core 0.19.0 users can still choose to generate a PS2H receiving address to switch in the GUI.

Reduce bandwidth requirements and prevent partition attacks

Bitcoin nodes are interconnected to form a peer-to-peer network. On this network, nodes share blocks, transactions, and some additional transaction data.

However, such peer-to-peer networks may be attacked, such as partition attacks. If the attacker controls enough Bitcoin nodes, it may cut off certain parts of the Bitcoin network (or even specific nodes) by intercepting the form of traffic. The segmented part of the network may be deceived, accepting a few chains instead of the longest chain, which may in turn open the door to a double-flower attack.

If the nodes in the network partition section have only one connection to the city node on the primary network, you can counterattack the partition attack. It then receives and forwards all transactions and blocks and rejects the minority chain to support the majority chain.

One way to achieve this is to make more connections between nodes, making partition attacks more difficult to implement. However, more connections require more memory and bandwidth; this is a trade-off.

Bitcoin Core 0.19.0 adds two outgoing connections by default, but the clever thing is that these two extra connections are only used to pass blocks, they don't pass transactions or extra transaction data. This will reduce the extra bandwidth requirements while still making partitioning attacks difficult to complete successfully.

Deprecation of Bloom Filters

Bitcoin Core is full-node software, which means downloading and verifying all Bitcoin blocks. Although this is the safest, it is not well suited for under-utilized computing devices such as cell phones. Therefore, mobile wallets (and some desktop wallets) typically use "light clients": only download transactions and (partial) blocks associated with them.

One way is to use Bloom Filters, and now some wallets are using Bloom Filters. In short, Bloom Filters is an encryption technology used by light clients to request relevant data from random, full nodes on the network. However, unfortunately, over time, Bloom Filters became very unfriendly to privacy: they actually exposed all addresses to the entire node. Most importantly, the cost of supporting Bloom Filters requests is to take up the CPU and disk space of the entire node, with no direct benefit to the entire node itself.

Especially for the latter reason, by default, Bitcoin Core 0.19.0 no longer supports Bloom Filter requests. If the user is willing, they can still choose to support the Bloom Filter.

It's also worth noting that the Bitcoin network will continue to support the Bloom Filter in the next few years, as the old Bitcoin Core node may still be in use many years after the new release.

Support for new filters

An alternative to Bloom Filter is a new solution called "Compact Client-side Block Filtering" (BIP 158: compact client-side block filtering). It completely overturns the mode of the Bloom Filter. Instead of being created by the light wallet to send to the full node, a full node creates a filter for each block. The light client can then use these filters to determine if the transactions associated with them occur in a block. If so, the light wallet will take the entire block and pick any relevant transaction data from it.

Bitcoin Core nodes can already create filters locally. Bitcoin Core 0.19.0 users can also access applications (such as wallets) running on this node via Remote Procedure Call (RPC).

However, these filters are not yet available on peer-to-peer networks. This means that a Bitcoin Core 0.19.0 node does not automatically send filters to other Bitcoin users' wallets. This feature may be added to future versions of Bitcoin Core – or users can choose to provide this functionality through custom applications running on their Bitcoin Core nodes.

GUI disable payment protocol (BIP 70) support

The Payment Agreement (BIP 70) was designed several years ago to improve the payment experience of Bitcoin. In addition to regular payments to the Bitcoin network, users and merchants communicate other details about the payment, such as a readable destination address (the name of the merchant) and a refund address to prevent it from appearing during the purchase process. problem.

Although Bitcoin Core integrates payment protocols into its GUI, the standard has never been widely adopted. Instead, most wallets still use a more basic URI pattern (BIP 21) to receive payments: for example, a clickable link or a scannable two-dimensional code format for delivering the payment address and amount. (The only notable exception at the moment is the payment processor BitPay, which does not support URI mode, but uses an improved version of BIP 70.)

Perhaps more important than the lower usage rate, the BIP 70 payment protocol has suffered from numerous security and privacy vulnerabilities for many years. Therefore, some wallets have voluntarily refused to implement the agreement. Bitcoin Core also planned not to support BIP 70, because people think it is not worth maintaining it, but the adoption of BitPay has brought the process to a standstill.

In Bitcoin Core 0.19.0, BIP 70 has been removed from the GUI by default. Users of Bitcoin Core 0.19.0 will have to compile their nodes with special configuration to ensure that this feature is still available.


In addition to the above changes, Bitcoin Core 0.19.0 brings some minor improvements and changes.

For example, it is now possible to start a "pruned" node immediately from the setup process, which allows users with limited disk space to easily launch a new bitcoin node. Bitcoin Core 0.19.0 also includes new features in the Partially Signed Bitcoin Transaction (PSBT) protocol, which is useful for multi-signature and CoinJoin transactions. Also, there are some improvements in the field of wallet descriptors, which are especially useful for programmers working with Bitcoin applications. Bitcoin Core 0.19.0 nodes will also accept and relay transactions, using future SegWit versions to ensure that upcoming upgrades will proceed smoothly.