Subject: CVS commit: pkgsrc/finance/bitcoin
From: Adam Ciarcinski
Date: 2021-01-19 11:17:00
Message id: 20210119101701.10773FA9D@cvs.NetBSD.org

Log Message:
bitcoin: updated to 0.21.0

0.21.0:

Notable changes

P2P and network changes

The mempool now tracks whether transactions submitted via the wallet or RPCs \ 
have been successfully broadcast. Every 10-15 minutes, the node will try to \ 
announce unbroadcast transactions until a peer requests it via a getdata message \ 
or the transaction is removed from the mempool for other reasons. The node will \ 
not track the broadcast status of transactions submitted to the node using P2P \ 
relay. This version reduces the initial broadcast guarantees for wallet \ 
transactions submitted via P2P to a node running the wallet.

The size of the set of transactions that peers have announced and we consider \ 
for requests has been reduced from 100000 to 5000 (per peer), and further \ 
announcements will be ignored when that limit is reached. If you need to dump \ 
(very) large batches of transactions, exceptions can be made for trusted peers \ 
using the "relay" network permission. For localhost for example it can \ 
be enabled using the command line option -whitelist=relay@127.0.0.1.

This release adds support for Tor version 3 hidden services, and rumoring them \ 
over the network to other peers using BIP155. Version 2 hidden services are \ 
still fully supported by Bitcoin Core, but the Tor network will start \ 
deprecating them in the coming months.

The Tor onion service that is automatically created by setting the -listenonion \ 
configuration parameter will now be created as a Tor v3 service instead of Tor \ 
v2. The private key that was used for Tor v2 (if any) will be left untouched in \ 
the onion_private_key file in the data directory (see -datadir) and can be \ 
removed if not needed. Bitcoin Core will no longer attempt to read it. The \ 
private key for the Tor v3 service will be saved in a file named \ 
onion_v3_private_key. To use the deprecated Tor v2 service (not recommended), \ 
the onion_private_key can be copied over onion_v3_private_key, e.g. cp -f \ 
onion_private_key onion_v3_private_key.

The client writes a file (anchors.dat) at shutdown with the network addresses of \ 
the node’s two outbound block-relay-only peers (so called \ 
"anchors"). The next time the node starts, it reads this file and \ 
attempts to reconnect to those same two peers. This prevents an attacker from \ 
using node restarts to trigger a complete change in peers, which would be \ 
something they could use as part of an eclipse attack.

This release adds support for serving BIP157 compact filters to peers on the \ 
network when enabled using -blockfilterindex=1 -peerblockfilters=1.

This release adds support for signets (BIP325) in addition to the existing \ 
mainnet, testnet, and regtest networks. Signets are centrally-controlled test \ 
networks, allowing them to be more predictable test environments than the older \ 
testnet. One public signet is maintained, and selectable using -signet. It is \ 
also possible to create personal signets.

This release implements BIP339 wtxid relay. When negotiated, transactions are \ 
announced using their wtxid instead of their txid.

This release implements the proposed Taproot consensus rules (BIP341 and \ 
BIP342), without activation on mainnet. Experimentation with Taproot can be done \ 
on signet, where its rules are already active.

Updated RPCs

The getpeerinfo RPC has a new network field that provides the type of network \ 
("ipv4", "ipv6", or "onion") that the peer \ 
connected through.

The getpeerinfo RPC now has additional last_block and last_transaction fields \ 
that return the UNIX epoch time of the last block and the last valid transaction \ 
received from each peer.

getnetworkinfo now returns two new fields, connections_in and connections_out, \ 
that provide the number of inbound and outbound peer connections. These new \ 
fields are in addition to the existing connections field, which returns the \ 
total number of peer connections.

Exposed transaction version numbers are now treated as unsigned 32-bit integers \ 
instead of signed 32-bit integers. This matches their treatment in consensus \ 
logic. Versions greater than 2 continue to be non-standard (matching previous \ 
behavior of smaller than 1 or greater than 2 being non-standard). Note that this \ 
includes the joinpsbt command, which combines partially-signed transactions by \ 
selecting the highest version number.

getmempoolinfo now returns an additional unbroadcastcount field. The mempool \ 
tracks locally submitted transactions until their initial broadcast is \ 
acknowledged by a peer. This field returns the count of transactions waiting for \ 
acknowledgement.

Mempool RPCs such as getmempoolentry and getrawmempool with verbose=true now \ 
return an additional unbroadcast field. This indicates whether initial broadcast \ 
of the transaction has been acknowledged by a peer. getmempoolancestors and \ 
getmempooldescendants are also updated.

The getpeerinfo RPC no longer returns the banscore field unless the \ 
configuration option -deprecatedrpc=banscore is used. The banscore field will be \ 
fully removed in the next major release.

The testmempoolaccept RPC returns vsize and a fees object with the base fee if \ 
the transaction would pass validation.

The getpeerinfo RPC now returns a connection_type field. This indicates the type \ 
of connection established with the peer. It will return one of six options. For \ 
more information, see the getpeerinfo help documentation.

The getpeerinfo RPC no longer returns the addnode field by default. This field \ 
will be fully removed in the next major release. It can be accessed with the \ 
configuration option -deprecatedrpc=getpeerinfo_addnode. However, it is \ 
recommended to instead use the connection_type field (it will return manual when \ 
addnode is true).

The getpeerinfo RPC no longer returns the whitelisted field by default. This \ 
field will be fully removed in the next major release. It can be accessed with \ 
the configuration option -deprecatedrpc=getpeerinfo_whitelisted. However, it is \ 
recommended to instead use the permissions field to understand if specific \ 
privileges have been granted to the peer.

The walletcreatefundedpsbt RPC call will now fail with Insufficient funds when \ 
inputs are manually selected but are not enough to cover the outputs and fee. \ 
Additional inputs can automatically be added through the new add_inputs option.

The fundrawtransaction RPC now supports add_inputs option that when false \ 
prevents adding more inputs if necessary and consequently the RPC fails.

Changes to Wallet or GUI related RPCs can be found in the GUI or Wallet section \ 
below.

New RPCs

The getindexinfo RPC returns the actively running indices of the node, including \ 
their current sync status and height. It also accepts an index_name to specify \ 
returning the status of that index only.
Build System

Updated settings

The same ZeroMQ notification (e.g. -zmqpubhashtx=address) can now be specified \ 
multiple times to publish the same notification to different ZeroMQ sockets.

The -banscore configuration option, which modified the default threshold for \ 
disconnecting and discouraging misbehaving peers, has been removed as part of \ 
changes in 0.20.1 and in this release to the handling of misbehaving peers. \ 
Refer to "Changes regarding misbehaving peers" in the 0.20.1 release \ 
notes for details.

The -debug=db logging category, which was deprecated in 0.20 and replaced by \ 
-debug=walletdb to distinguish it from coindb, has been removed.

A download permission has been extracted from the noban permission. For \ 
compatibility, noban implies the download permission, but this may change in \ 
future releases. Refer to the help of the affected settings -whitebind and \ 
-whitelist for more details.

Netmasks that contain 1-bits after 0-bits (the 1-bits are not contiguous on the \ 
left side, e.g. 255.0.255.255) are no longer accepted. They are invalid \ 
according to RFC 4632. Netmasks are used in the -rpcallowip and -whitelist \ 
configuration options and in the setban RPC.

The -blocksonly setting now completely disables fee estimation.

Changes to Wallet or GUI related settings can be found in the GUI or Wallet \ 
section below.

Tools and Utilities

A new bitcoin-cli -netinfo command provides a network peer connections dashboard \ 
that displays data from the getpeerinfo and getnetworkinfo RPCs in a \ 
human-readable format. An optional integer argument from 0 to 4 may be passed to \ 
see increasing levels of detail.

A new bitcoin-cli -generate command, equivalent to RPC generatenewaddress \ 
followed by generatetoaddress, can generate blocks for command line testing \ 
purposes. This is a client-side version of the former generate RPC. See the help \ 
for details.

The bitcoin-cli -getinfo command now displays the wallet name and balance for \ 
each of the loaded wallets when more than one is loaded (e.g. in multiwallet \ 
mode) and a wallet is not specified with -rpcwallet.

The connections field of bitcoin-cli -getinfo is now expanded to return a JSON \ 
object with in, out and total numbers of peer connections. It previously \ 
returned a single integer value for the total number of peer connections.

New settings

The startupnotify option is used to specify a command to execute when Bitcoin \ 
Core has finished with its startup sequence.
Wallet

Backwards compatibility has been dropped for two getaddressinfo RPC \ 
deprecations, as notified in the 0.20 release notes. The deprecated label field \ 
has been removed as well as the deprecated labels behavior of returning a JSON \ 
object containing name and purpose key-value pairs. Since 0.20, the labels field \ 
returns a JSON array of label names.

To improve wallet privacy, the frequency of wallet rebroadcast attempts is \ 
reduced from approximately once every 15 minutes to once every 12-36 hours. To \ 
maintain a similar level of guarantee for initial broadcast of wallet \ 
transactions, the mempool tracks these transactions as a part of the newly \ 
introduced unbroadcast set. See the "P2P and network changes" section \ 
for more information on the unbroadcast set.

The sendtoaddress and sendmany RPCs accept an optional verbose=True argument to \ 
also return the fee reason about the sent tx.

The wallet can create a transaction without change even when the keypool is \ 
empty. Previously it failed.

The -salvagewallet startup option has been removed. A new salvage command has \ 
been added to the bitcoin-wallet tool which performs the salvage operations that \ 
-salvagewallet did.

A new configuration flag -maxapsfee has been added, which sets the max allowed \ 
avoid partial spends (APS) fee. It defaults to 0 (i.e. fee is the same with and \ 
without APS). Setting it to -1 will disable APS, unless -avoidpartialspends is \ 
set.

The wallet will now avoid partial spends (APS) by default, if this does not \ 
result in a difference in fees compared to the non-APS variant. The allowed fee \ 
threshold can be adjusted using the new -maxapsfee configuration option.

The createwallet, loadwallet, and unloadwallet RPCs now accept load_on_startup \ 
options to modify the settings list. Unless these options are explicitly set to \ 
true or false, the list is not modified, so the RPC methods remain backwards \ 
compatible.

A new send RPC with similar syntax to walletcreatefundedpsbt, including support \ 
for coin selection and a custom fee rate, is added. The send RPC is experimental \ 
and may change in subsequent releases.

The estimate_mode parameter is now case-insensitive in the bumpfee, \ 
fundrawtransaction, sendmany, sendtoaddress, send and walletcreatefundedpsbt \ 
RPCs.

The bumpfee RPC now uses conf_target rather than confTarget in the options.

fundrawtransaction and walletcreatefundedpsbt when used with the lockUnspents \ 
argument now lock manually selected coins, in addition to automatically selected \ 
coins. Note that locked coins are never used in automatic coin selection, but \ 
can still be manually selected.

The -zapwallettxes startup option has been removed and its functionality removed \ 
from the wallet. This option was originally intended to allow for rescuing \ 
wallets which were affected by a malleability attack. More recently, it has been \ 
used in the fee bumping of transactions that did not signal RBF. This \ 
functionality has been superseded with the abandon transaction feature.

The error code when no wallet is loaded, but a wallet RPC is called, has been \ 
changed from -32601 (method not found) to -18 (wallet not found).

Files:
RevisionActionfile
1.33modifypkgsrc/finance/bitcoin/Makefile
1.3modifypkgsrc/finance/bitcoin/PLIST
1.10modifypkgsrc/finance/bitcoin/distinfo
1.2modifypkgsrc/finance/bitcoin/patches/patch-src_wallet_walletutil.cpp