Today, November 24, 2019, marks the official launch of Bitcoin Core 0.19.0, the 19th main launch of Bitcoin’s authentic software program shopper launched by Satoshi Nakamoto nearly 11 years in the past and nonetheless the dominant Bitcoin implementation on the community as we speak. (Though as a result of a problem that got here to gentle in a late stage of the Bitcoin Core zero.19.zero launch course of, the model launched for obtain is definitely zero.19.zero.1.) Overseen by Bitcoin Core lead maintainer Wladimir van der Laan, this newest main launch was developed by over 100 contributors over a span of about six months.
The results of 550 merged pull requests, Bitcoin Core zero.19.zero features a vary of efficiency enhancements, modernizations and bug fixes, in addition to different modifications.
Here’s an summary of a few of these modifications.
Bech32 Addresses by Default within the GUI
The “bech32” tackle format (BIP 173) had already been launched in Bitcoin Core 0.16.0, launched in early 2018, however is now for the primary time set because the default possibility within the Bitcoin Core pockets Graphical User Interface (GUI).
Bech32 addresses are the addresses beginning with “bc1” (versus addresses beginning with a 1 or a three.) These addresses are additionally a bit longer, however use fewer totally different characters than the present tackle format, as there isn’t a longer a distinction between lowercase and capital letters. (This reduces the potential for human errors, for instance, when an tackle is learn out loud.) Bech32 addresses are additionally designed to restrict errors attributable to typos.
Additionally, bech32 gives advantages within the context of SegWit. Some wallets that supply SegWit — together with the Bitcoin Core pockets by default up till now — achieve this by “wrapping” it into P2SH outputs (with addresses beginning with a “3”). To spend bitcoin from such an tackle, customers should reveal a chunk of code — the “redeem script” — to point out that the bitcoin had been actually locked up in a SegWit output. With the brand new bech32 addresses, this step may be skipped, which signifies that spending from a SegWit output would require rather less information to be transmitted over the Bitcoin community and included within the blockchain. This makes transactions from a bech32 output even cheaper than SegWit transactions from a P2SH output.
Since not all bitcoin wallets help sending to bech32 addresses but, Bitcoin Core zero.19.zero customers will nonetheless be capable of optionally generate a PS2H receiving tackle as a substitute, by a toggle within the GUI.
Two Block-Only Outbound Connections Extra by Default
Bitcoin nodes hook up with a number of different Bitcoin nodes, collectively forming the peer-to-peer community. Over this community, the nodes share blocks, transactions and a few further transaction information.
But the peer-to-peer community may be topic to assaults, akin to “partitioning attacks.” If an attacker controls a big sufficient variety of Bitcoin nodes, it will probably probably “cut off” sure components of the Bitcoin community (and even particular nodes) by intercepting all site visitors to it. The partitioned a part of the community might then, for instance, be fooled into accepting a minority chain — not the longest chain — as legitimate, which might, in flip, open the door to double-spend assaults.
A partitioning assault is countered if a node within the partitioned a part of the community has even only one connection to an trustworthy node on the primary community. It would then obtain and relay all transactions and blocks and would reject the minority chain in favor of the bulk chain.
One method to notice this, and to make partitioning assaults tougher to tug off, is to have nodes set up extra connections to at least one one other. More connections do include extra reminiscence and bandwidth necessities, nonetheless; there’s a trade-off.
Bitcoin Core zero.19.zero will increase the default for outgoing connections by two, however — cleverly — these two additional connections are solely used to relay blocks — they don’t relay transactions or further transaction information. This will increase the added bandwidth necessities minimally, whereas nonetheless making partitioning assaults tougher to tug off efficiently.
Bloom Filters Deprecated
Bitcoin Core is a full node implementation, which signifies that it downloads and verifies all Bitcoin blocks. While that is optimally safe, it doesn’t make it very properly fitted to low-resource computing gadgets, like cell phones. Mobile wallets (in addition to some desktop wallets) are, subsequently, often “light clients”: these solely obtain transactions and (components of) blocks that concern them particularly.
One manner to do that is with Bloom Filters, utilized by a few wallets as we speak. In quick, Bloom Filters are a cryptographic trick utilized by gentle purchasers to request related information from roughly random full nodes on the community. Unfortunately, nonetheless, it has change into clear through the years that Bloom Filters are relatively privacy-unfriendly: They basically reveal all of their addresses to the total node. On high of that, supporting Bloom Filter requests does come at a price in CPU and disk house for full nodes — with no direct profit for the total node itself.
For the latter cause particularly, Bitcoin Core zero.19.zero not helps Bloom Filter requests by default. Users can nonetheless swap the default to help Bloom Filters in the event that they so select.
It’s additionally value noting that the Bitcoin community as a complete will nearly definitely proceed to help Bloom Filters for years to come back, even when nobody switches their defaults, just because older Bitcoin Core nodes sometimes proceed to be in use for years after new variations have been launched.
More Support for Compact Client-Side Block Filtering
An various to Bloom Filters is a more recent resolution referred to as “compact client-side block filtering” (BIP 158). Compact client-side block filtering basically turns the Bloom Filter trick on its head. Instead of sunshine wallets creating filters to ship to full nodes, full nodes create filters for every block. Light purchasers can then use these filters to determine if transactions related to them could have occurred in a block. If so, the sunshine pockets will fetch the entire block and decide any related transaction information out of it.
Bitcoin Core zero.19.zero continues to maneuver towards supporting compact client-side block filtering. Bitcoin Core nodes might already create the filters domestically, however Bitcoin Core zero.19.zero customers can now additionally make them obtainable by a distant process name (RPC), for purposes working on high of the node (like a pockets).
The filters aren’t but obtainable over the peer-to-peer community, nonetheless. This signifies that a Bitcoin Core zero.19.zero node is not going to robotically ship filters to different Bitcoin customers’ wallets. This characteristic might be added to a future Bitcoin Core launch — or Bitcoin Core zero.19.zero customers might decide to supply the characteristic by a customized utility working on high of their Bitcoin Core node.
Payment Protocol Support Disabled From GUI
The Payment Protocol (BIP 70) was designed a number of years in the past to enhance Bitcoin’s fee expertise. On high of the common fee as broadcasted to the Bitcoin community, a consumer and a service provider would talk further particulars a few fee, akin to a human-readable vacation spot tackle (the title of the service provider) and a refund tackle in case one thing went incorrect with the acquisition.
While Bitcoin Core built-in the Payment Protocol in its GUI, the usual was by no means extensively adopted. Instead, most wallets nonetheless use the extra primary URI scheme (BIP 21) to obtain funds: The clickable hyperlink or scannable QR-code format that, for instance, communicates the fee tackle and quantity. (The solely notable exception as we speak is fee processor BitPay, which doesn’t help the URI scheme however makes use of a modified model of BIP 70.)
Perhaps extra importantly than the shortage of adoption, the BIP 70 funds protocol has been struggling a number of security and privacy vulnerabilities through the years. Some wallets have, subsequently, actively rejected to implement the protocol. Bitcoin Core, too, had been planning to deprecate BIP 70 for a while, as upkeep of it wasn’t thought of definitely worth the effort — however BitPay’s adoption of it stalled this course of.
In Bitcoin Core zero.19.zero, BIP 70 has been faraway from the GUI by default in spite of everything. Bitcoin Core zero.19.zero customers must compile their node with a particular configuration to nonetheless make use of the characteristic.
Besides the modifications talked about above, Bitcoin Core zero.19.zero comes with an extended record of smaller enhancements and modernizations.
It’s now doable to begin a pruned node instantly from setup, for instance, which lets customers with little disk house simply begin up a brand new Bitcoin node. Bitcoin Core zero.19.zero additionally contains new options for the Partially Signed Bitcoin Transactions (PSBT) protocol, which is helpful for multisignature and CoinJoin transactions. Likewise, there are a number of enhancements within the area of pockets descriptors, which is especially helpful for programmers engaged on Bitcoin purposes. Bitcoin Core zero.19.zero nodes can even settle for and relay transactions that use a future SegWit model to make sure that upcoming upgrades will proceed easily.
For a extra intensive record of upgrades, additionally see the Bitcoin Core 0.19.0.1 release notes.
Thanks to Sjors Provoost for suggestions on this text.