Skip to content

Commit

Permalink
doc/release-notes: Update for Bitcoin Knots 26.1.knots20240304
Browse files Browse the repository at this point in the history
  • Loading branch information
luke-jr committed Mar 4, 2024
1 parent 7164e21 commit 8a09d43
Showing 1 changed file with 292 additions and 31 deletions.
323 changes: 292 additions & 31 deletions doc/release-notes.md
Original file line number Diff line number Diff line change
@@ -1,20 +1,20 @@
26.1rc1 Release Notes
==================

Bitcoin Core version 26.1rc1 is now available from:
Bitcoin Knots version 26.1.knots20240304 is now available from:

<https://bitcoincore.org/bin/bitcoin-core-26.1/test.rc1/>
<https://bitcoinknots.org/files/26.x/26.1.knots20240304/>

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
==============
Expand All @@ -24,71 +24,332 @@ 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 11.0+, 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 11.0+, 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
===============

### Wallet
P2P and network changes
-----------------------

- Support for the v2 transport protocol defined in
[BIP324](https://github.com/bitcoin/bips/blob/master/bip-0324.mediawiki) was added.
It is on by default and will be negotiated on a per-connection basis with other peers
that support it, but can be disabled using `-v2transport=0` if desired. The existing
v1 transport protocol remains fully supported. (#28331)

- Nodes with multiple reachable networks will actively try to have at least one
outbound connection to each network. This improves individual resistance to
eclipse attacks and network level resistance to partition attacks. Users no
longer need to perform active measures to ensure being connected to multiple
enabled networks. (#27213)

- Support for I2P sessions encrypted using the newer and faster ECIES-X25519
algorithm has been added. (#29200)


Pruning
-------

- When using assumeutxo with `-prune`, the prune budget may be exceeded if it is set
lower than 1100MB (i.e. `MIN_DISK_SPACE_FOR_BLOCK_FILES * 2`). Prune budget is normally
split evenly across each chainstate, unless the resulting prune budget per chainstate
is beneath `MIN_DISK_SPACE_FOR_BLOCK_FILES` in which case that value will be used. (#27596)

Updated RPCs
------------

- The `maxfeerate` option for `sendrawtransaction` and `testmempoolaccept` is
now limited to below 100000 sats/vB to avoid overflow bugs. (#29434)

- Setting `-rpcserialversion=0` is deprecated and will be removed in
a future release. It can currently still be used by also adding
the `-deprecatedrpc=serialversion` option. (#28448)

- The `hash_serialized_2` value has been removed from `gettxoutsetinfo` since the value it
calculated contained a bug and did not take all data into account. It is superseded by
`hash_serialized_3` which provides the same functionality but serves the correctly calculated hash. (#28685)

- For RPC methods which accept `options` parameters (`importmulti`, `listunspent`,
`fundrawtransaction`, `bumpfee`, `scanblocks`, `send`, `sendall`, `walletcreatefundedpsbt`,
`simulaterawtransaction`), it is now possible to pass the options as named
parameters without the need for a nested object. (#26485)

This means it is possible make calls like:

```sh
src/bitcoin-cli -named bumpfee txid fee_rate=100
```

instead of

```sh
src/bitcoin-cli -named bumpfee txid options='{"fee_rate": 100}'
```

- New fields `transport_protocol_type` and `session_id` were added to the `getpeerinfo` RPC to indicate
whether the v2 transport protocol is in use, and if so, what the session id is. (#28331)

- A new argument `v2transport` was added to the `addnode` RPC to indicate whether a v2 transaction connection
is to be attempted with the peer. This breaks compatibility with the old
`privileged` parameter used with Bitcoin Knots v0.16.0.knots20180322 through
v0.20.1.knots20200815. If you were relying on this deprecated parameter, you
can maintain the previous behaviour by specifying "outbound-full-relay" to
the "connection_type" parameter. (#28331)

- [Miniscript](https://bitcoin.sipa.be/miniscript/) expressions can now be used in Taproot descriptors for all RPCs working with descriptors. (#27255)

- `finalizepsbt` is now able to finalize a PSBT with inputs spending [Miniscript](https://bitcoin.sipa.be/miniscript/)-compatible Taproot leaves. (#27255)

- The result from `getpeerinfo` now includes "misbehavior_score". This number
is increased (by varying amounts) when a peer doesn't follow the protocol
correctly, and when it reaches 100, the peer is disconnected. It is mostly
only useful for testing purposes. (#29530)

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

New RPCs
--------

- `loadtxoutset` has been added, which allows loading a UTXO snapshot of the format
generated by `dumptxoutset`. Once this snapshot is loaded, its contents will be
deserialized into a second chainstate data structure, which is then used to sync to
the network's tip.

Meanwhile, the original chainstate will complete the initial block download process in
the background, eventually validating up to the block that the snapshot is based upon.

The result is a usable bitcoind instance that is current with the network tip in a
matter of minutes rather than hours. However, until the full background sync completes,
the node and any wallets using it remain insecure and should not be trusted or relied
on for confirmation of payment. (#27596)

You can find more information on this process in the `assumeutxo` design
document (<https://github.com/bitcoin/bitcoin/blob/master/doc/design/assumeutxo.md>).

`getchainstates` has been added to aid in monitoring the assumeutxo sync process.

- A new RPC, `submitpackage`, has been added. It can be used to submit a list of raw hex
transactions to the mempool to be evaluated as a package using consensus and mempool policy rules.
These policies include package CPFP, allowing a child with high fees to bump a parent below the
mempool minimum feerate (but not minimum relay feerate). (#27609)

- Warning: successful submission does not mean the transactions will propagate throughout the
network, as package relay is not supported.

- Not all features are available. The package is limited to a child with all of its
unconfirmed parents, and no parent may spend the output of another parent. Also, package
RBF is not supported. Refer to doc/policy/packages.md for more details on package policies
and limitations.

- This RPC is experimental. Its interface may change.

- A new `importmempool` RPC has been added. It loads a valid `mempool.dat` file and attempts to
add its contents to the mempool. This can be useful to import mempool data from another node
without having to modify the datadir contents and without having to restart the node. (#27460)
- Warning: Importing untrusted files is dangerous, especially if metadata from the file is taken over.
- Since coin-age priority deltas are stored in a separate `mempool-knots.dat` file, it is not supported by this new `importmempool` method.
- If you want to apply priority deltas, it is recommended to use the `getprioritisedtransactions` and
`prioritisetransaction` RPCs instead. This supports both coin-age priority and fee deltas.

- `listmempooltransactions` has been added to efficiently monitor transactions
as they are added to the node's mempool, using sequence numbers. (#29016)

Updated settings
----------------

- Passing an invalid `-debug`, `-debugexclude`, or `-loglevel` logging configuration
option now raises an error, rather than logging an easily missed warning. (#27632)

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

New settings
------------

- Spam is sometimes disguised to appear as if it is a deprecated pay-to-IP
(bare pubkey) transaction, where the "key" is actually arbitrary data (not a
real key) instead. Due to the nature of this spam, it pollutes not only the
blockchain, but also permanently bloats the "UTXO set" all nodes must retain
(it cannot be pruned). Real pay-to-IP was only ever supported by Satoshi's
early Bitcoin wallet, which has been abandoned since 2011. This version of
Bitcoin Knots filters out this kind of spam by default. A new setting,
`-permitbarepubkey` (also available in the GUI), is available for users who
desire to relay these. (#29309)

Tools and Utilities
-------------------

- A new `bitcoinconsensus_verify_script_with_spent_outputs` function is available in libconsensus which optionally accepts the spent outputs of the transaction being verified. (#28539)
- A new `bitcoinconsensus_SCRIPT_FLAGS_VERIFY_TAPROOT` flag is available in libconsensus that will verify scripts with the Taproot spending rules. (#28539)
- `bitcoin-tx`'s `replacable` option is now optional. If omitted, inputs will be created opting into Replace-By-Fee. (#29022)

Wallet
------

- Wallet loading has changed in this release. Wallets with some corrupted records that could be
previously loaded (with warnings) may no longer load. For example, wallets with corrupted
address book entries may no longer load. If this happens, it is recommended
load the wallet in a previous version of Bitcoin Core and import the data into a new wallet.
Please also report an issue to help improve the software and make wallet loading more robust
in these cases. (#24914)

- #28994 wallet: skip BnB when SFFO is enabled
- #28920 wallet: birth time update during tx scanning
- #29176 wallet: Fix use-after-free in WalletBatch::EraseRecords
- The `gettransaction`, `listtransactions`, `listsinceblock` RPCs now return
the `abandoned` field for all transactions. Previously, the "abandoned" field
was only returned for sent transactions. (#25158)

### RPC
- The `listdescriptors`, `decodepsbt` and similar RPC methods now show `h` rather than apostrophe (`'`) to indicate
hardened derivation. This does not apply when using the `private` parameter, which
matches the marker used when descriptor was generated or imported. Newly created
wallets use `h`. This change makes it easier to handle descriptor strings manually.
E.g. the `importdescriptors` RPC call is easiest to use `h` as the marker: `'["desc": ".../0h/..."]'`.
With this change `listdescriptors` will use `h`, so you can copy-paste the result,
without having to add escape characters or switch `'` to 'h' manually.
Note that this changes the descriptor checksum.
For legacy wallets the `hdkeypath` field in `getaddressinfo` is unchanged,
nor is the serialization format of wallet dumps. (#26076)

- #29003 rpc: fix getrawtransaction segfault
- Coin selection and transaction building now accounts for unconfirmed low-feerate ancestor transactions. When it is necessary to spend unconfirmed outputs, the wallet will add fees to ensure that the new transaction with its ancestors will achieve a mining score equal to the feerate requested by the user. (#26152)

### Logs
- The `deprecatedrpc=walletwarningfield` configuration option has been removed.
The `createwallet`, `loadwallet`, `restorewallet` and `unloadwallet` RPCs no
longer return the "warning" string field. The same information is provided
through the "warnings" field added in v25.0, which returns a JSON array of
strings. The "warning" string field was deprecated also in v25.0. (#27757)

- #29227 log mempool loading progress
- The `signrawtransactionwithkey`, `signrawtransactionwithwallet`,
`walletprocesspsbt` and `descriptorprocesspsbt` calls now return the more
specific RPC_INVALID_PARAMETER error instead of RPC_MISC_ERROR if their
sighashtype argument is malformed. (#28113)

### P2P and network changes
- It's now possible to use [Miniscript](https://bitcoin.sipa.be/miniscript/) inside Taproot leaves for descriptor wallets. (#27255)

- #29200 net: create I2P sessions using both ECIES-X25519 and ElGamal encryption
- If `send` or `sendall` methods are used with the `locktime` parameter is
omitted, the wallet will automatically populate it with an appropriate value
to deter fee sniping. (#28944)

### Build
GUI changes
-----------

- #29127 Use hardened runtime on macOS release builds.
- #29195 build: Fix -Xclang -internal-isystem option
- A new menu option allows migrating a legacy wallet based on keys and implied output script types stored in BerkeleyDB (BDB) to a modern wallet that uses descriptors stored in SQLite. (gui#738)

### CI
- The PSBT operations dialog marks outputs paying your own wallet with "own address". (gui#740)

- #28992 ci: Use Ubuntu 24.04 Noble for asan,tsan,tidy,fuzz
- #29080 ci: Set HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK to avoid unrelated failures
Low-level changes
=================

### Miscellaneous
Tests
-----

- #28391 refactor: Simplify CTxMempool/BlockAssembler fields, remove some external mapTx access
- #29179 test: wallet rescan with reorged parent + IsFromMe child in mempool
- #28791 snapshots: don't core dump when running -checkblockindex after loadtxoutset
- Non-standard transactions are now disabled by default on testnet
for relay and mempool acceptance. The previous behaviour can be
re-enabled by setting `-acceptnonstdtxn=1`. (#28354)

Credits
=======

Thanks to everyone who directly contributed to this release:

- 0xb10c
- Amiti Uttarwar
- Andrew Toth
- Anthony Towns
- Antoine Poinsot
- Antoine Riard
- Ari
- Aurèle Oulès
- Ava Chow
- Ayush Singh
- Ben Woosley
- Brandon Odiwuor
- Brotcrunsher
- brunoerg
- Bufo
- Carl Dong
- Casey Carter
- Cory Fields
- David Álvarez Rosa
- dergoegge
- dhruv
- dimitaracev
- Erik Arvstedt
- Erik McKelvey
- Fabian Jahr
- fanquake
- furszy
- glozow
- Greg Sanders
- Harris
- Hennadii Stepanov
- Hernan Marino
- ishaanam
- ismaelsadeeq
- Jake Rawsthorne
- James O'Beirne
- John Moffett
- Jon Atack
- josibake
- Kashif Smith
- kevkevin
- Kiminuo
- Larry Ruane
- Luke Dashjr
- marco
- MarcoFalke
- Mark Friedenbach
- Marnix
- Martin Leitner-Ankerl
- Martin Zumsande
- Matthew Zipkin
- Michael Ford
- Michael Tidwell
- mruddy
- Murch
- niftynei
- ns-xvrn
- pablomartin4btc
- Peter Todd
- Pieter Wuille
- Reese Russell
- Rhythm Garg
- Ryan Ofsky
- Sebastian Falbesoner
- Sjors Provoost
- stickies-v
- stratospher
- Suhas Daftuar
- TheCharlatan
- Tim Neubauer
- Tim Ruffing
- Torkel Rogstad
- Vasil Dimov
- virtu
- Vojtěch Strnad
- vuittont60
- willcl-ark
- Yusuf Sahin HAMZA
- zzzi2p

As well as to everyone that helped with translations on
[Transifex](https://www.transifex.com/bitcoin/bitcoin/).

0 comments on commit 8a09d43

Please sign in to comment.