doc/release-notes: Update for Bitcoin Knots 25.1.knots20231115

This commit is contained in:
Luke Dashjr 2023-11-16 01:22:43 +00:00
parent 85dde74255
commit 5961e01c91

View File

@ -1,20 +1,20 @@
25.1 Release Notes
==================
Bitcoin Core version 25.1 is now available from:
Bitcoin Knots version 25.1.knots20231115 is now available from:
<https://bitcoincore.org/bin/bitcoin-core-25.1/>
<https://bitcoinknots.org/files/25.x/25.1.knots20231115/>
This release includes various bug fixes and performance
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>
<https://github.com/bitcoinknots/bitcoin/issues>
To receive security and update notifications, please subscribe to:
<https://bitcoincore.org/en/list/announcements/join/>
<https://bitcoinknots.org/list/announcements/join/>
How to Upgrade
==============
@ -24,85 +24,540 @@ 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
Upgrading directly from very old versions of Bitcoin Core or Knots 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.
wallet versions of Bitcoin Knots 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.
Bitcoin Knots is supported on operating systems using the Linux kernel,
macOS 10.15+, and Windows 7 and newer. It is not recommended to use
Bitcoin Knots on unsupported systems.
Known Bugs
==========
In various locations, including the GUI's transaction details dialog, transaction
virtual sizes may not account for an unusually high number of sigops (ie, as
determined by the `-bytespersigop` policy). This could result in reporting a
lower virtual size than is actually used for mempool or mining purposes.
In the interest of time, this release does not include updated translations.
Please open an issue on GitHub if this is of particular importance to you or
anyone you know. If nobody expresses interest in localization, it may continue
to be skipped going forward.
Notable changes
===============
### P2P
Security vulnerabilities fixed
------------------------------
- #27626 Parallel compact block downloads, take 3
- #27743 p2p: Unconditionally return when compact block status == READ_STATUS_FAILED
Several security issues (CVEs CVE-2023-40257, CVE-2023-40258, and CVE-2023-40259)
were identified in the extended `rpcauth` wallet-restriction syntax, which is
intended to enable semi-trusted local applications using the Bitcoin Knots API to
access only specific wallets (or none at all) and not others. The full details of
these issues will be disclosed at a future time, but they have all been fixed in
this release.
### Fees
P2P and network changes
-----------------------
- #27622 Fee estimation: avoid serving stale fee estimate
- To address a potential denial-of-service, the logic to download headers from peers
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).
### RPC
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.
- #27727 rpc: Fix invalid bech32 address handling
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)
### Rest
- Enable parallel compact block downloads to mitigate temporary stalls from a slow peer. (#27626)
- #27853 rest: fix crash error when calling /deploymentinfo
- #28551 http: bugfix: allow server shutdown in case of remote client disconnection
- The rate limit on transaction relay has been doubled to 14 transactions per
second (35 tx/s for outbound connections) to better adapt to present network
conditions. (#28592)
### Wallet
- Transactions of non-witness size 65 and above are now allowed by mempool
and relay policy. This is to better reflect the actual afforded protections
against CVE-2017-12842 and open up additional use-cases of smaller transaction sizes. (#26265)
- #28038 wallet: address book migration bug fixes
- #28067 descriptors: do not return top-level only funcs as sub descriptors
- #28125 wallet: bugfix, disallow migration of invalid scripts
- #28542 wallet: Check for uninitialized last processed and conflicting heights in MarkConflicted
- With I2P connections, a new, transient address is used for each outbound
connection if `-i2pacceptincoming=0`. (#25355)
### Build
- A new net permission `forceinbound` (set with `-whitelist=forceinbound@...`
or `-whitebind=forceinbound@...`) is introduced that extends `noban` permissions.
Inbound connections from hosts protected by `forceinbound` will now be more
likely to connect even if `maxconnections` is reached and the node's inbound
slots are full. This is achieved by attempting to force the eviction of a random,
inbound, otherwise unprotected peer. RPC `getpeerinfo` will also now indicate
`forced_inbound`. (#27600)
- #27724 build: disable boost multi index safe mode in debug mode
- #28097 depends: xcb-proto 1.15.2
- #28543 build, macos: Fix qt package build with new Xcode 15 linker
- #28571 depends: fix unusable memory_resource in macos qt build
- The `-datacarriersize` policy limit has been updated to match newer style datacarrier
transactions. (#28408)
### Gui
- An additional `-datacarriercost` option has also been added to avoid giving the "segwit
discount" to aribitrary data (and can be increased to require datacarrier transactions
to pay higher fees).
- gui#751 macOS, do not process actions during shutdown
- The spam filters limiting smart contract code sizes for pre-Segwit and Segwit
"v0" scripts have been expanded to also cover Taproot. Since the sizes were
inconsistent, the lower size of 1650 which actually had a rationale has been
used as the default for this release. The size limit can be adjusted with the
new `-maxscriptsize` option. If you know of any legitimate scripts that are
larger than the default, please report a bug.
### Miscellaneous
New RPCs
--------
- #28452 Do not use std::vector = {} to release memory
- A new `getprioritisedtransactions` RPC has been added. It returns a map of all fee deltas created by the
user with prioritisetransaction, indexed by txid. The map also indicates whether each transaction is
present in the mempool.
### CI
- `getaddrmaninfo` has been added to view the distribution of addresses in the
new and tried table of the node's address manager across different networks
(ipv4, ipv6, onion, i2p, cjdns). The RPC returns count of addresses in new
and tried table as well as their sum for all networks. (#27511, #28565)
- #27777 ci: Prune dangling images on RESTART_CI_DOCKER_BEFORE_RUN
- #27834 ci: Nuke Android APK task, Use credits for tsan
- #27844 ci: Use podman stop over podman kill
- #27886 ci: Switch to amd64 container in "ARM" task
Updated RPCs
------------
- The `verifychain` RPC will now return `false` if the checks didn't fail,
but couldn't be completed at the desired depth and level. This could be due
to missing data while pruning, due to an insufficient dbcache or due to
the node being shutdown before the call could finish. (#25574)
- `sendrawtransaction` has a new, optional argument, `maxburnamount` with a default value of `0`.
Any transaction containing an unspendable output with a value greater than `maxburnamount` will
not be submitted. At present, the outputs deemed unspendable are those with scripts that begin
with an `OP_RETURN` code (known as 'datacarriers'), scripts that exceed the maximum script size,
and scripts that contain invalid opcodes.
- The `testmempoolaccept` RPC now returns 2 additional results within the "fees" result:
"effective-feerate" is the feerate including fees and sizes of transactions validated together if
package validation was used, and also includes any modified fees from prioritisetransaction. The
"effective-includes" result lists the wtxids of transactions whose modified fees and sizes were used
in the effective-feerate (#26646).
- `decodescript` may now infer a Miniscript descriptor under P2WSH context if it is not lacking
information. (#27037)
- `finalizepsbt` is now able to finalize a transaction with inputs spending Miniscript-compatible
P2WSH scripts. (#24149)
- The `-deprecatedrpc=softforks` configuration option has been removed. The
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 `deprecatedrpc=exclude_coinbase` configuration option has been removed.
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)
- The `deprecatedrpc=fees` configuration option has been removed. The top-level
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)
- The `getpeerinfo` RPC has been updated with a new `presynced_headers` field,
indicating the progress on the presync phase mentioned in the
"P2P and network changes" section above.
- RPC `disconnectnode` now accepts a subnet into `address` argument. (#26576)
- The output from `getmempoolinfo` is extended to include a `rbf_policy` key
briefly describing the current replace-by-fee policy ("never", "optin", or
"always").
Changes to wallet related RPCs can be found in the Wallet section below.
Build System
------------
- The `--enable-upnp-default` and `--enable-natpmp-default` options
have been removed. If you want to use port mapping, you can
configure it using a .conf file, or by passing the relevant
options at runtime. (#26896)
Updated settings
----------------
- If the `-checkblocks` or `-checklevel` options are explicitly provided by the
user, but the verification checks cannot be completed due to an insufficient
dbcache, Bitcoin Knots will now return an error at startup. (#25574)
- Setting `-blocksonly` will now reduce the maximum mempool memory
to 5MB (users may still use `-maxmempool` to override). Previously,
the default 300MB would be used, leading to unexpected memory usage
for users running with `-blocksonly` expecting it to eliminate
mempool memory usage.
As unused mempool memory is shared with dbcache, this also reduces
the dbcache size for users running with `-blocksonly`, potentially
impacting performance.
- Setting `-maxconnections=0` will now disable `-dnsseed`
and `-listen` (users may still set them to override).
Changes to GUI or wallet related settings can be found in the GUI or Wallet section below.
New settings
------------
- The `shutdownnotify` option is used to specify a command to execute synchronously
before Bitcoin Knots has begun its shutdown sequence. (#23395)
- To assist in controlling access to the RPC "cookie" file on multiuser systems, a new
`rpccookieperms` setting has been added to set the file permissions mode before
writing the access token.
Wallet
------
- Added a new `next_index` field in the response in `listdescriptors` to
have the same format as `importdescriptors` (#26194)
- RPC `listunspent` now has a new argument `include_immature_coinbase`
to include coinbase UTXOs that don't meet the minimum spendability
depth requirement (which before were silently skipped). (#25730)
- Rescans for descriptor wallets are now significantly faster if compact
block filters (BIP158) are available. Since those are not constructed
by default, the configuration option "-blockfilterindex=1" has to be
provided to take advantage of the optimization. This improves the
performance of the RPC calls `rescanblockchain`, `importdescriptors`
and `restorewallet`. (#25957)
- RPC `unloadwallet` now fails if a rescan is in progress. (#26618)
- Wallet passphrases may now contain null characters.
Prior to this change, only characters up to the first
null character were recognized and accepted. (#27068)
- Address Purposes strings are now restricted to the currently known values of "send",
"receive", and "refund". Wallets that have unrecognized purpose strings will have
loading warnings, and the `listlabels` RPC will raise an error if an unrecognized purpose
is requested. (#27217)
- In the `createwallet`, `loadwallet`, `unloadwallet`, and `restorewallet` RPCs, the
"warning" string field is deprecated in favor of a "warnings" field that
returns a JSON array of strings to better handle multiple warning messages and
for consistency with other wallet RPCs. The "warning" field will be fully
removed from these RPCs in v26. It can be temporarily re-enabled during the
deprecation period by launching bitcoind with the configuration option
`-deprecatedrpc=walletwarningfield`. (#27279)
- Descriptor wallets can now spend coins sent to P2WSH Miniscript descriptors. (#24149)
- The `-walletrbf` startup option will now default to `true`. The
wallet will now default to opt-in RBF on transactions that it creates. (#25610)
- The `replaceable` option for the `createrawtransaction` and
`createpsbt` RPCs will now default to `true`. Transactions created
with these RPCs will default to having opt-in RBF enabled. (#25610)
- The `wsh()` output descriptor was extended with Miniscript support. You can import Miniscript
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](https://bitcoin.sipa.be/miniscript/). (#24148)
- The `tr()` output descriptor now supports multisig scripts through the `multi_a()` and
`sortedmulti_a()` functions. (#24043)
- The `importdescriptors` RPC can now be used to import BIP 93 (codex32) seeds. (#27351)
- To help prevent fingerprinting transactions created by the Bitcoin Core wallet, change output
amounts are now randomized. (#24494)
- The `listsinceblock`, `listtransactions` and `gettransaction` output now contain a new
`parent_descs` field for every "receive" entry. (#25504)
- A new optional `include_change` parameter was added to the `listsinceblock` command. (#25504)
- RPC `importaddress` now supports watch-only descriptor wallets.
- RPC `walletprocesspsbt` return object now includes field `hex` (if the transaction
is complete) containing the serialized transaction suitable for RPC `sendrawtransaction`. (#28414)
- The result of RPC `getaddressinfo` adds an `isactive` key which can be used to determine if
the address is derived from the currently active wallet seed. (#27216)
- RPC `getreceivedbylabel` now returns an error, "Label not found
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](https://github.com/bitcoin/bitcoin/blob/master/doc/managing-wallets.md#migrating-legacy-wallets-to-descriptor-wallets).
GUI changes
-----------
- The "Mask values" is a persistent option now. (gui#701)
- The "Mask values" option affects the "Transaction" view now, in addition to the
"Overview" one. (gui#708)
- A new menu item to restore a wallet from a backup file has been added (gui#471).
- Configuration changes made in the bitcoin GUI (such as the pruning setting,
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)
- Also, the interaction between GUI settings and `bitcoin.conf` settings is
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)
REST
----
- A new `/rest/deploymentinfo` endpoint has been added for fetching various
state info regarding deployments of consensus changes. (#25412)
- The `/headers/` and `/blockfilterheaders/` endpoints have been updated to use
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)
Binary verification
----
- The binary verification script has been updated. In previous releases it
would verify that the binaries had been signed with a single "release key".
In this release and moving forward it will verify that the binaries are
signed by a _threshold of trusted keys_. For more details and
examples, see:
https://github.com/bitcoin/bitcoin/blob/master/contrib/verify-binaries/README.md
(#27358)
Low-level changes
=================
RPC
---
- The JSON-RPC server now rejects requests where a parameter is specified multiple
times with the same name, instead of silently overwriting earlier parameter values
with later ones. (#26628)
- RPC `listsinceblock` now accepts an optional `label` argument
to fetch incoming transactions having the specified label. (#25934)
- Previously `setban`, `addpeeraddress`, `walletcreatefundedpsbt`, methods
allowed non-boolean and non-null values to be passed as boolean parameters.
Any string, number, array, or object value that was passed would be treated
as false. After this change, passing any value except `true`, `false`, or
`null` now triggers a JSON value is not of expected type error. (#26213)
- The `deriveaddresses`, `getdescriptorinfo`, `importdescriptors` and `scantxoutset` commands now
accept Miniscript expression within a `wsh()` descriptor. (#24148)
- The `getaddressinfo`, `decodescript`, `listdescriptors` and `listunspent` commands may now output
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:
- /dev/fd0
- 0xb10c
- 721217.xyz
- Abubakar Sadiq Ismail
- Adam Jonas
- akankshakashyap
- Ali Sherief
- amadeuszpawlik
- Amiti Uttarwar
- Andreas Kouloumos
- Andrew Chow
- Andrew Toth
- Anthony Towns
- Antoine Poinsot
- Antoine Riard
- Aurèle Oulès
- avirgovi
- Ayush Sharma
- Baas
- Ben Woosley
- Bitcoin Hodler
- BrokenProgrammer
- brunoerg
- Bruno Garcia
- brydinh
- Bushstar
- Calvin Kim
- CAnon
- Carl Dong
- chinggg
- Chris Geihsler
- Cory Fields
- Daniel Kraft
- Daniela Brozzoni
- darosior
- Dave Scotese
- David Bakin
- David Gumberg
- dergoegge
- Dhruv Mehta
- Dimitri
- Dimitris Tsapakidis
- dontbyte
- dougEfish
- Douglas Chimento
- Duncan Dean
- ekzyis
- Elichai Turkel
- Ethan Heilman
- eugene
- Eunoia
- Fabian Jahr
- FractalEncrypt
- furszy
- Gleb Naumenko
- glozow
- Greg Weber
- Gregory Sanders
- gruve-p
- Hennadii Stepanov
- hernanmarino
- hiago
- Igor Bubelov
- ishaanam
- ismaelsadeeq
- Jacob P.
- Jadi
- James O'Beirne
- Janna
- Jarol Rodriguez
- Jeff Ruane
- Jeffrey Czyz
- Jeremy Rand
- Jeremy Rubin
- Jesse Barton
- jessebarton
- João Barbosa
- JoaoAJMatos
- John Moffett
- John Newbery
- Jon Atack
- Jonas Schnelli
- jonatack
- Joshua Kelly
- Josiah Baker
- josibake
- Juan Pablo Civile
- Karl-Johan Alm
- kdmukai
- KevinMusgrave
- kevkevin
- Kiminuo
- klementtan
- Kolby Moroz Liebl
- kouloumos
- Kristaps Kaupe
- Larry Ruane
- Leonardo Araujo
- Leonardo Lazzaro
- Luke Dashjr
- MacroFake
- Marnix
- Martin Leitner-Ankerl
- Martin Zumsande
- Matias Furszyfer
- Matt Whitlock
- Matthew Zipkin
- Michael Dietz
- Michael Folkson
- Michael Ford
- Miles Liu
- mruddy
- Murch
- Murray Nesbitt
- mutatrum
- muxator
- omahs
- Oskar Mendel
- Pablo Greco
- pablomartin4btc
- pasta
- Patrick Strateman
- Pavol Rusnak
- Peter Bushnell
- phyBrackets
- Pieter Wuille
- practicalswift
- Pttn
- Randall Naar
- Randy McMillan
- Riahiamirreza
- Robert Spigler
- Roman Zeyde
- Russell O'Connor
- Ryan Ofsky
- S3RK
- Samer Afach
- Sebastian Falbesoner
- Seibart Nedor
- Shashwat
- sinetek
- Sjors Provoost
- Skuli Dulfari
- Smlep
- sogoagain
- SomberNight
- Stacie Waleyko
- stickies-v
- stratospher
- Stéphan Vuylsteke
- Suhail Saqan
- Suhas Daftuar
- Suriyaa Sundararuban
- t-bast
- TakeshiMusgrave
- TheCharlatan
- Vasil Dimov
- Vasil Stoyanov
- virtu
- W. J. van der Laan
- w0xlt
- whiteh0rse
- Will Clark
- William Casarin
- Yancy Ribbens
- Yusuf Sahin HAMZA
As well as to everyone that helped with translations on
[Transifex](https://www.transifex.com/bitcoin/bitcoin/).