release-notes-24.0.1.md raw

24.0.1 Release Notes ====================

Due to last-minute issues (#26616), 24.0, although tagged, was never fully announced or released.

Bitcoin Core version 24.0.1 is now available from:

<https://bitcoincore.org/bin/bitcoin-core-24.0.1/>

This 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/issues>

To receive security and update notifications, please subscribe to:

<https://bitcoincore.org/en/list/announcements/join/>

How to Upgrade ==============

If 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 macOS) 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.

Compatibility ==============

Bitcoin Core is supported and extensively tested on operating systems using the Linux kernel, macOS 10.15+, 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.

Notice of new option for transaction replacement policies =========================================================

This version of Bitcoin Core adds a new mempoolfullrbf configuration option which allows users to change the policy their individual node will use for relaying and mining unconfirmed transactions. The option defaults to the same policy that was used in previous releases and no changes to node policy will occur if everyone uses the default.

Some Bitcoin services today expect that the first version of an unconfirmed transaction that they see will be the version of the transaction that ultimately gets confirmed---a transaction acceptance policy sometimes called "first-seen".

The Bitcoin Protocol does not, and cannot, provide any assurance that the first version of an unconfirmed transaction seen by a particular node will be the version that gets confirmed. If there are multiple versions of the same unconfirmed transaction available, only the miner who includes one of those transactions in a block gets to decide which version of the transaction gets confirmed.

Despite this lack of assurance, multiple merchants and services today still make this assumption.

There are several benefits to users from removing this first-seen simplification. One key benefit, the ability for the sender of a transaction to replace it with an alternative version paying higher fees, was realized in [Bitcoin Core 0.12.0][] (February 2016) with the introduction of [BIP125][] opt-in Replace By Fee (RBF).

Since then, there has been discussion about completely removing the first-seen simplification and allowing users to replace any of their older unconfirmed transactions with newer transactions, a feature called full-RBF. This release includes a mempoolfullrbf configuration option that allows enabling full-RBF, although it defaults to off (allowing only opt-in RBF).

Several alternative node implementations have already enabled full-RBF by default for years, and several contributors to Bitcoin Core are advocating for enabling full-RBF by default in a future version of Bitcoin Core.

As more nodes that participate in relay and mining begin enabling full-RBF, replacement of unconfirmed transactions by ones offering higher fees may rapidly become more reliable.

Contributors to this project strongly recommend that merchants and services not accept unconfirmed transactions as final, and if they insist on doing so, to take the appropriate steps to ensure they have some recourse or plan for when their assumptions do not hold.

[Bitcoin Core 0.12.0]: https://bitcoincore.org/en/releases/0.12.0/#opt-in-replace-by-fee-transactions [bip125]: https://github.com/bitcoin/bips/blob/master/bip-0125.mediawiki

Notable changes ===============

P2P and network changes


has been reworked. This is particularly relevant for nodes starting up for the first time (or for nodes which are starting up after being offline for a long time).

Whenever headers are received from a peer that have a total chainwork that is either less than the node's -minimumchainwork value or is sufficiently below the work at the node's tip, a "presync" phase will begin, in which the node will download the peer's headers and verify the cumulative work on the peer's chain, prior to storing those headers permanently. Once that cumulative work is verified to be sufficiently high, the headers will be redownloaded from that peer and fully validated and stored.

This may result in initial headers sync taking longer for new nodes starting up for the first time, both because the headers will be downloaded twice, and because the effect of a peer disconnecting during the presync phase (or while the node's best headers chain has less than -minimumchainwork), will result in the node needing to use the headers presync mechanism with the next peer as well (downloading the headers twice, again). (#25717)

connection if -i2pacceptincoming=0. (#25355)

Updated RPCs


RPC getblockchaininfo no longer returns the softforks field, which was previously deprecated in 23.0. (#23508) Information on soft fork status is now only available via the getdeploymentinfo RPC.

The receivedby RPCs (listreceivedbyaddress, listreceivedbylabel, getreceivedbyaddress and getreceivedbylabel) now always return results accounting for received coins from coinbase outputs, without an option to change that behaviour. Excluding coinbases was previously deprecated in 23.0. (#25171)

fee fields fee, modifiedfee, ancestorfees and descendantfees are no longer returned by RPCs getmempoolentry, getrawmempool(verbose=true), getmempoolancestors(verbose=true) and getmempooldescendants(verbose=true). The same fee fields can be accessed through the fees object in the result. The top-level fee fields were previously deprecated in 23.0. (#25204)

indicating the progress on the presync phase mentioned in the "P2P and network changes" section above.

Changes to wallet related RPCs can be found in the Wallet section below.

New RPCs


without creating change. By default, the sendall RPC will spend every UTXO in the wallet. sendall is useful to empty wallets or to create a changeless payment from select UTXOs. When creating a payment from a specific amount for which the recipient incurs the transaction fee, continue to use the subtractfeefromamount option via the send, sendtoaddress, or sendmany RPCs. (#24118)

transactions spending any of the given outpoints. (#24408)

transactions, and tallies up the balance change for the given wallet. This can be useful e.g. when verifying that a coin join like transaction doesn't contain unexpected inputs that the wallet will then sign for unintentionally. (#22751)

Updated REST APIs


a query parameter instead of path parameter to specify the result count. The count parameter is now optional, and defaults to 5 for both endpoints. The old endpoints are still functional, and have no documented behaviour change.

For /headers, use GET /rest/headers/<BLOCK-HASH>.<bin|hex|json>?count=<COUNT=5> instead of GET /rest/headers/<COUNT>/<BLOCK-HASH>.<bin|hex|json> (deprecated)

For /blockfilterheaders/, use GET /rest/blockfilterheaders/<FILTERTYPE>/<BLOCK-HASH>.<bin|hex|json>?count=<COUNT=5> instead of GET /rest/blockfilterheaders/<FILTERTYPE>/<COUNT>/<BLOCK-HASH>.<bin|hex|json> (deprecated)

(#24098)

Build System


New settings


accept transaction replacement without enforcing BIP125 replaceability signaling. (#25353)

Wallet


wallet will now default to opt-in RBF on transactions that it creates. (#25610)

createpsbt RPCs will now default to true. Transactions created with these RPCs will default to having opt-in RBF enabled. (#25610)

descriptors for P2WSH in a watchonly wallet to track coins, but you can't spend from them using the Bitcoin Core wallet yet. You can find more about Miniscript on the reference website. (#24148)

sortedmulti_a() functions. (#24043)

amounts are now randomized. (#24494)

RPC methods now include a wtxid field (hash of serialized transaction, including witness data) for each transaction. (#24198)

parent_descs field for every "receive" entry. (#25504)

in wallet" (-4), if the label is not in the address book. (#25122)

Migrating Legacy Wallets to Descriptor Wallets


An experimental RPC migratewallet has been added to migrate Legacy (non-descriptor) wallets to Descriptor wallets. More information about the migration process is available in the documentation.

GUI changes


proxy settings, UPNP preferences) are now saved to <datadir>/settings.json file rather than to the Qt settings backend (windows registry or unix desktop config files), so these settings will now apply to bitcoind, instead of being ignored. (#15936, gui#602)

simplified. Settings from bitcoin.conf are now displayed normally in the GUI settings dialog, instead of in a separate warning message ("Options set in this dialog are overridden by the configuration file: -setting=value"). And these settings can now be edited because settings.json values take precedence over bitcoin.conf values. (#15936)

Low-level changes =================

RPC


accept Miniscript expression within a wsh() descriptor. (#24148)

a Miniscript descriptor inside a wsh() where a wsh(raw()) descriptor was previously returned. (#24148)

Credits =======

Thanks to everyone who directly contributed to this release:

As well as to everyone that helped with translations on Transifex.