Releases: bitcoinknots/bitcoin
Bitcoin Knots v29.2.knots20251110
Bitcoin Knots version 29.2.knots20251110 is now available from:
https://bitcoinknots.org/files/29.x/29.2.knots20251110/
This release includes default configuration changes and various bug fixes.
Please report bugs using the issue tracker at GitHub:
https://github.com/bitcoinknots/bitcoin/issues
To receive security and update notifications, please subscribe to:
https://bitcoinknots.org/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 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 Knots are generally supported.
Compatibility
Bitcoin Knots is supported on operating systems using the Linux kernel, macOS 13+, and Windows 10+. It is not recommended to use Bitcoin Knots on unsupported systems.
Known Bugs
In various locations, including the GUI's transaction details dialog and the "vsize" result in many RPC results, transaction virtual sizes may not account for an unusually high number of sigops (ie, as determined by the -bytespersigop policy) or datacarrier penalties (ie, -datacarriercost). This could result in reporting a lower virtual size than is actually used for mempool or mining purposes.
Due to disruption of the shared Bitcoin Transifex repository, this release still does not include updated translations, and Bitcoin Knots may be unable to do so until/unless that is resolved.
Notable changes
-
The low severity service degradation vulnerability CVE-2025-46598 has been fixed.
-
The default policy for datacarriersize has been increased to allow 83 bytes. While not ideal, some legacy protocols still rely on 83-byte datacarrier outputs, and it is undesirable to risk breaking those as Knots adoption grows. This is expected to be a temporary adjustment until these older applications can be updated to not require extra data, and will be reverted back to 42 in a future version. Users with a preference are encouraged to explicitly set it themselves.
-
Memory pressure detection is no longer enabled by default. It has been found to misbehave in some configurations. If you wish to re-enable it, you can do so with the
-lowmem=<n>configuration option.
Consensus
- bitcoin#32473 Introduce per-txin sighash midstate cache for legacy/p2sh/segwitv0 scripts
Policy
- Default policy: Increase datacarriersize to 83 bytes
P2P and network changes
- bitcoin#33050 net, validation: don't punish peers for consensus-invalid txs
- bitcoin#33105 validation: detect witness stripping without re-running Script checks
- bitcoin#33738 log,blocks: avoid
GetHash()work when logging is disabled - bitcoin#33813 Changing the rpcbind argument being ignored to a pop up warning, instead of a debug log
GUI
- bitcoin#8501 GUI: MempoolStats: Use min relay fee when mempool has none
- gui#901 qt: add createwallet and createwalletdescriptor to history filter
Wallet
- bitcoin#31514 bugfix: disallow label for ranged descriptors & allow external non-ranged descriptors to have label
Block and transaction handling
- bitcoin#19873 mempressure: Disable by default for now
Test
- bitcoin#33698 test: Use same rpc timeout for authproxy and cli
CI
- bitcoin#33639 ci: Only write docker build images to Cirrus cache
Credits
Thanks to everyone who directly contributed to this release:
- Ataraxia
- /dev/fd0
- Anthony Towns
- Antoine Poinsot
- Lőrinc
- Luke Dashjr
- MarcoFalke
- Pieter Wuille
- scgbckbone
- WakeTrainDev
Bitcoin Knots v29.2.knots20251010
Bitcoin Knots version 29.2.knots20251010 is now available from:
https://bitcoinknots.org/files/29.x/29.2.knots20251010/
This release includes various bug fixes and a new Dockerfile.
Please report bugs using the issue tracker at GitHub:
https://github.com/bitcoinknots/bitcoin/issues
To receive security and update notifications, please subscribe to:
https://bitcoinknots.org/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 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 Knots are generally supported.
Compatibility
Bitcoin Knots is supported on operating systems using the Linux kernel, macOS 13+, and Windows 10+. It is not recommended to use Bitcoin Knots on unsupported systems.
Known Bugs
In various locations, including the GUI's transaction details dialog and the "vsize" result in many RPC results, transaction virtual sizes may not account for an unusually high number of sigops (ie, as determined by the -bytespersigop policy) or datacarrier penalties (ie, -datacarriercost). This could result in reporting a lower virtual size than is actually used for mempool or mining purposes.
Due to disruption of the shared Bitcoin Transifex repository, this release still does not include updated translations, and Bitcoin Knots may be unable to do so until/unless that is resolved.
Notable changes
A new Dockerfile has been added to the source code release, under the contrib/docker directory. Please read the documentation for details.
Consensus
- bitcoin#33334 node: optimize CBlockIndexWorkComparator
P2P and network changes
- bitcoin#7219 Discontinue advertising NODE_REPLACE_BY_FEE service bit
- bitcoin#15421 Bugfix: torcontrol: Use ephemeral config file rather than stdin
- bitcoin#32646 p2p: Add witness mutation check inside FillBlock
- bitcoin#33296 net: check for empty header before calling FillBlock
- bitcoin#33311 net: Quiet down logging when router doesn't support natpmp/pcp
- bitcoin#33338 net: Add interrupt to pcp retry loop
- bitcoin#33395 net: do not apply whitelist permissions to onion inbounds
- bitcoin#33464 p2p: Use network-dependent timers for inbound inv scheduling
- knots#187 add Léo Haf DNS seed
- Bugfix: torcontrol: Map bind-any to loopback address
- Bugfix: net: Treat connections to the first normal bind as Tor when appropriate
GUI
- gui#886 Avoid pathological QT text/markdown behavior...
- knots#203 add migratewallet rpc in historyFilter
- icon: Render macOS icns as a macOS-style icon
Wallet
- knots#205 Bugfix: Wallet: Migration: Adapt sanity checks for walletimplicitsegwit=0
RPC
- bitcoin#31785 Have createNewBlock() wait for tip, make rpc handle shutdown during long poll and wait methods
- bitcoin#33446 rpc: fix getblock(header) returns target for tip
- bitcoin#33475 bugfix: miner: fix addPackageTxs unsigned integer overflow
- bitcoin#33484 doc: rpc: fix case typo in finalizepsbt help (final_scriptwitness)
- knots#190 Add zsh completion script generation support
- Interpret ignore_rejects=truc to ignore all TRUC policies
Block and transaction handling
- bitcoin#31144 [IBD] multi-byte block obfuscation
- bitcoin#31845 Bugfix: Correctly handle pruneduringinit=0 by treating it as manual-prune until sync completes
Index
- bitcoin#33410 coinstats: avoid unnecessary Coin copy in ApplyHash
Test
- bitcoin#33433 Bugfix: QA: rpc_bind: Skip nonloopback test if no such address is found
Mempool
- bitcoin#33504 mempool: Do not enforce TRUC checks on reorg
RPC
- bitcoin#33446 rpc: fix getblock(header) returns target for tip
CI
- bitcoin#32989 ci: Migrate CI to GitHub Actions
- bitcoin#32999 ci: Use APT_LLVM_V in msan task
- bitcoin#33099 ci: allow for any libc++ intrumentation & use it for TSAN
- bitcoin#33258 ci: use LLVM 21
- bitcoin#33303 ci: Checkout latest merged pulls
- bitcoin#33319 ci: reduce runner sizes on various jobs
- bitcoin#33364 ci: always use tag for LLVM checkout
- bitcoin#33425 ci: remove Clang build from msan fuzz job
Doc
- bitcoin#33484 doc: rpc: fix case typo in
finalizepsbthelp
Misc
- bitcoin#33310 trace: Workaround GCC bug compiling with old systemtap
- bitcoin#33332 common: Make arith_uint256 trivially copyable
- bitcoin#33340 Fix benchmark CSV output
- bitcoin#33422 build: Remove lingering Windows registry & shortcuts
- bitcoin#33482 contrib: fix macOS deployment with no translations
- bitcoin#33494 depends: Update URL for qrencode package source tarball
- bitcoin#33504 Mempool: Do not enforce TRUC checks on reorg
- bitcoin#33511 init: Fix Ctrl-C shutdown hangs during wait calls
- bitcoin#33580 depends: Use $(package)_file_name when downloading from the fallback
- knots#171 Add Dockerfile
- knots#192 depends: fetch miniupnpc sources from github releases
- guix: Rename win64*-unsigned to win64*-pgpverifiable
Credits
Thanks to everyone who directly contributed to this release:
- /dev/fd0
- Amisha Chhajed
- Ava Chow
- Claudio Raimondi
- David Gumberg
- Eugene Siegel
- Fabian Jahr
- fanquake
- glozow
- Greg Sanders
- Hennadii Stepanov
- Hodlinator
- ismaelsadeeq
- laanwj
- Léo Haf
- Lőrinc
- Luke Dashjr
- Marcel Stampfer
- MarcoFalke
- Martin Zumsande
- Max Edwards
- Ryan Ofsky
- sashass1315
- Sebastian Falbesoner
- Sjors Provoost
- TheCharlatan
- Trevor Arjeski
- Vasil Dimov
- Will Clark
Bitcoin Knots v29.1.knots20250903
Bitcoin Knots version 29.1.knots20250903 is now available from:
https://bitcoinknots.org/files/29.x/29.1.knots20250903/
This release includes new features, various bug fixes and performance improvements.
Please report bugs using the issue tracker at GitHub:
https://github.com/bitcoinknots/bitcoin/issues
To receive security and update notifications, please subscribe to:
https://bitcoinknots.org/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 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 Knots are generally supported.
Compatibility
Bitcoin Knots is supported on operating systems using the Linux kernel, macOS 13+, and Windows 10+. It is not recommended to use Bitcoin Knots on unsupported systems.
Known Bugs
In various locations, including the GUI's transaction details dialog and the "vsize" result in many RPC results, transaction virtual sizes may not account for an unusually high number of sigops (ie, as determined by the -bytespersigop policy) or datacarrier penalties (ie, -datacarriercost). This could result in reporting a lower virtual size than is actually used for mempool or mining purposes.
Due to disruption of the shared Bitcoin Transifex repository, this release still does not include updated translations, and Bitcoin Knots may be unable to do so until/unless that is resolved.
Notable changes
P2P and Network Changes
-
libnatpmp has been replaced with a built-in implementation of PCP and NAT-PMP (still enabled or disabled using the
-natpmpoption). This supports automatic IPv4 port forwarding as well as IPv6 pinholing. (bitcoin#30043) -
NAT-PMP is now enabled by default. This means nodes with
-listenenabled (the default) but running behind a firewall, such as a local network router, will be reachable if the firewall/router supports either of thePCPorNAT-PMPprotocols. It can be turned off with the-natpmp=0option. (bitcoin#33004) -
Upon receiving an orphan transaction (an unconfirmed transaction that spends unknown inputs), the node will attempt to download missing parents from all peers who announced the orphan. This change may increase bandwidth usage but make orphan-handling more reliable. (bitcoin#31397)
-
In addition to the count-based
-blockreconstructionextratxnlimit on cached transactions not accepted for relaying, a new-blockreconstructionextratxnsizeoption has been added to set an upper limit on the total memory usage consumed by this cache (10 MB by default). -
The default
-blockreconstructionextratxnlimit is increased to 32768 transactions. -
-peerbloomfiltersis now restricted to localhost by default. If you use BIP37 wallet software remotely, you should use the-whitelist bloomfilter@<IP>configuration. You can also set-peerbloomfilters=0to disable it for localhost, or-peerbloomfilters=1if you wish to provide the service to the entire network. If you wish to offer it publicly, do note that this service can be resource-intensive.
Mempool Policy and Mining Changes
-
The
-maxscriptsizepolicy now applies to the entire witness stack of each input, to address attempts to evade overly-specific targetting. -
Ephemeral anchors is a new concept that allows a single dummy recipient in a transaction, provided the transaction is zero fee and the "anchor" is immediately sent in another transaction broadcast together with it. This allows for smart contracts such as Lightning where neither party can unilaterally increase the transaction fee, yet using an anchor can create a followup adding the necessary fee. (bitcoin#30239) By default, these anchors are accepted by Bitcoin Knots if and only if they are minimal size and zero value. If you want a more flexible policy (allowing for dummy sends and/or dust amounts), or wish to reject these new anchors entirely, you can use the new
-permitephemeraloption. There is also a-permitbareanchoroption which permits (or forbids) transaction that do not have real recipients (only an anchor). (knots#136) -
A new
-permitbaredatacarrieroption (default 0 / not permitted) has been added to control acceptance of transactions with only a datacarrier output and no real recipients. This is sometimes used to burn bitcoins. (knots#136) -
The maximum number of potentially executed legacy signature operations in a single standard transaction is now limited (by default) to 2500. Signature operations in all previous output scripts, in all input scripts, as well as all P2SH redeem scripts (if there are any) are counted toward the limit. (bitcoin#32521) It can be configured with the
-maxtxlegacysigopsoption. -
A new option
-acceptunknownwitnesshas been provided to filter transactions sending to/using unknown/future witness script versions. While this should generally be safe, it will also affect batch transactions, which may be created be unsuspecting third parties who do not pay attention to the witness version of addresses they send to (this is considered a best practice). For that reason, the new filter is not enabled by default, and if you wish to use it, you must set-acceptunknownwitness=0in your configuration. -
Two new options,
-minrelaycoinblocksand-minrelaymaturity, have been added to restrict transactions relayed/mined to only ones spending bitcoins with some degree of settlement. The former measures the value of bitcoins being spent at a rate of 1 BTC per block since their confirmation, while the second is a strict block-based maturity metric. In both cases, the minimum must be met by transactions before the node will relay or mine them. These are both disabled by default. (knots#148) -
Several policy filters exist to make future protocol changes safer, collectively classified as "non-mandatory-script-verify-flag" rejections. Unlike other policies, previous versions of Bitcoin Knots did not allow disabling these filters. However, this makes recovery difficult when people accidentally lock their bitcoins behind filtered "upgradable opcodes", and to accomidate recovery, this version of Knots allows specifying these rejection reasons to the
ignore_rejectsparameter ofsendrawtransaction, thereby overriding the rejection on a per-transaction basis (as with other filters). Please be responsible with this feature, and note that using it during a network upgrade may result in creating invalid blocks and lost mining rewards! -
The
-rejecttokensand datacarrier-related policies have been updated to detect "OLGA" spam. (knots#151)
GUI changes
-
The configured "font for amounts" is now consistently used for all monetary amounts in the GUI.
-
The embedded "Roboto Mono Bold" font has been replaced with a new "OCR-Bitcoin" font created specifically for Bitcoin Knots.
-
Qt 6.2+ is now supported as an alternative to Qt 5.15 (which remains the default for precompiled releases). As the Qt project no longer supports version 5.15, it will likely be removed in a future release. To build the source code using Qt 6, specify -D WITH_QT_VERSION=6 to your cmake command line.
-
Support for ᵇTBC and ˢTBC units has been removed, since Bitcoin's value has made them largely unnecessary. The basic TBC unit is now available to all users without jumping through hoops to install a new Tonal-enabled font. See the Bitcoin Wiki page on Tonal Bitcoin to learn more about the (eccentric) tonal bitcoin unit(s).
Logging
Unconditional logging to disk is now rate limited by giving each source location a quota of 1MiB per hour. Unconditional logging is any logging with a log level higher than debug, that is info, warning, and error. All logs will be prefixed with [*] if there is at least one source location that is currently being suppressed. (bitcoin#32604)
When -logsourcelocations is enabled, the log output now contains the entire function signature instead of just the function name. (bitcoin#32604)
Updated RPCs
-
The RPC
testmempoolacceptresponse now includes areject-detailsfield in some cases, similar to the complete error messages returned bysendrawtransaction(bitcoin#28121) -
Duplicate blocks submitted with
submitblockwill now persist their block data even if it was previously pruned. If pruning is activated, the data will be pruned again eventually once the block file it is persisted in is selected for pruning. This is consistent with the behaviour ofgetblockfrompeerwhere the block is persisted as well even when pruning. (bitcoin#31175) -
getmininginfonow returnsnBitsand the current target in thetargetfield. It also returns anextobject which specifies theheight,nBits,difficulty, andtargetfor the next block. (bitcoin#31583) -
getblockandgetblockheadernow return the current target in thetargetfield (bitcoin#31583) -
getblockchaininfoandgetchainstatesnow returnnBitsand the current target in thetargetfield (bitcoin#31583) -
The newly-unhidden
waitfornewblock(which simply does not return until a new block has been received) now takes an optionalcurrent_tipargument to avoid a potential race between the new block and the RPC call. If provided, the RPC will return immediately if the best block already does not match. (bitcoin#30635) -
waitforblock(which waits for a specific block hash before returning) andwaitforblockheight(which waits for a given height to be reached) are no longer hidden. (bitcoin#30635) -
The
getblocktemplateRPCmintime(BIP23) field now accounts for the ...
Bitcoin Knots v28.1.knots20250305
Bitcoin Knots version 28.1.knots20250305 is now available from:
https://bitcoinknots.org/files/28.x/28.1.knots20250305/
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/bitcoinknots/bitcoin/issues
To receive security and update notifications, please subscribe to:
https://bitcoinknots.org/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 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 Knots are generally supported.
Compatibility
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 and the
"vsize" result in many RPC results, transaction virtual sizes may not account
for an unusually high number of sigops (ie, as determined by the
-bytespersigop policy) or datacarrier penalties (ie, -datacarriercost).
This could result in reporting a lower virtual size than is actually used for
mempool or mining purposes.
Due to disruption of the shared Bitcoin Transifex repository, this release
still does not include updated translations, and Bitcoin Knots may be unable
to do so until/unless that is resolved.
Notable changes
P2P and Network Changes
-
Previously if Bitcoin Knots was listening for P2P connections, either using
default settings or viabind=addr:portit would always also bind to
127.0.0.1:8334to listen for Tor connections. It was not possible to switch
this off, even if the node didn't use Tor. This has been changed and now
bind=addr:portresults in binding onaddr:portonly. The default behavior
of binding to0.0.0.0:8333and127.0.0.1:8334has not been changed.If you are using a
bind=...configuration withoutbind=...=onionand rely
on the previous implied behavior to accept incoming Tor connections at
127.0.0.1:8334, you need to now make this explicit by using
bind=... bind=127.0.0.1:8334=onion. (bitcoin#22729) -
When the
-portconfiguration option is used, the default onion listening
port will now be derived to be that port + 1 instead of being set to a fixed
value (8334 on mainnet). This enables setups with multiple local nodes using
different-portand not using-bind.Note that a
HiddenServicePortmanually configured intorrcmay need
adjustment if used in connection with the-portoption. For example, if you
are using-port=5555with a non-standard value and not using
-bind=...=onion, previously Bitcoin Knots would listen for incoming Tor
connections on127.0.0.1:8334. Now it would listen on127.0.0.1:5556
(-portplus one). If you configured the hidden service manually in torrc
now you have to change it fromHiddenServicePort 8333 127.0.0.1:8334to
HiddenServicePort 8333 127.0.0.1:5556, or configure bitcoind with
-bind=127.0.0.1:8334=onionto get the previous behavior. (bitcoin#31223) -
Bitcoin Knots will now fail to start up if any of its P2P binds fail, rather
than the previous behaviour where it would only abort startup if all P2P
binds had failed. (bitcoin#22729) -
Support for Testnet4 as specified in BIP94
has been added. The network can be selected with the-testnet4option and
the section header is also named[testnet4].
While the intention is to phase out support for Testnet3 in an upcoming
version, support for it is still available via the known options in this
release. (bitcoin#29775) -
UNIX domain sockets can now be used for proxy connections. Set
-onionor
-proxyto the local socket path with the prefixunix:(e.g.
-onion=unix:/home/me/torsocket). (bitcoin#27375) -
Transactions having a feerate that is too low will be opportunistically
paired with their child transactions and submitted as a package, thus
enabling the node to download 1-parent-1-child packages using the existing
transaction relay protocol. Combined with other mempool policies, this change
allows limited "package relay" when a parent transaction is below the mempool
minimum feerate. Warning: this P2P feature is limited (unlike the
submitpackageinterface, a child with multiple unconfirmed parents is not
supported) and not reliable. (bitcoin#28970)
Mempool Policy Changes
-
Topologically Restricted Until Confirmation (TRUC) parents are now allowed
to be below the minimum relay feerate (i.e., pay 0 fees). -
Pay To Anchor (P2A) is a new standard witness output type for spending,
a newly recognised output template. This allows for key-less anchor
outputs, with compact spending conditions for additional efficiencies on
top of an equivalentsh(OP_TRUE)output, in addition to the txid stability
of the spending transaction.
N.B. propagation of this output spending on the network will be limited
until a sufficient number of nodes on the network adopt this upgrade.
(bitcoin#30352) -
Limited package RBF is now enabled, where the proposed conflicting package
would result in a connected component, aka cluster, of size 2 in the mempool.
All clusters being conflicted against must be of size 2 or lower. (bitcoin#28984)
GUI Changes
-
Transactions no longer show as confirmed after a mere 6 blocks. Instead, the
confirmation period has been extended to 16 blocks, which is a safer duration
given the current problematic state of mining centralisation. Note that if
you wish to be secure against China/Bitmain, you should consider transactions
unconfirmed for a full week. -
The "Migrate Wallet" menu allows users to migrate any legacy wallet in their
wallet directory, regardless of the wallets loaded. (gui#824) -
A very basic block visualizer has been added to the Window menu. You can use
it to see a graphic for any block at a glance, or block templates your node
is generating for your miner.
Signed Messages
Bitcoin has the ability for the recipient of bitcoins to a given address to
sign messages, typically intended for use agreeing to terms. Due to confusion,
this feature has often been mis-used in an attempt to prove current ownership
of bitcoins or having sent a Bitcoin transaction. However, these message
signatures do not in fact reflect either ownership or who sent a transaction.
For this reason, message signing was not implemented for Segwit in hopes of a
better standard that never manifested. Nevertheless, being able to sign as the
recipient remains useful in some scenarios, so this version of Bitcoin Knots
extends it to support newer standards:
-
Verifying BIP 137, BIP 322, and Electrum signed messages is now supported.
-
When signing messages for a Segwit or Taproot address, a BIP 322 signature
will be produced. (bitcoin#24058)
JSON-RPC 2.0 Support
The JSON-RPC server now recognizes JSON-RPC 2.0 requests and responds with
strict adherence to the specification.
See JSON-RPC-interface.md for details. (bitcoin#27101)
JSON-RPC clients may need to be updated to be compatible with the JSON-RPC
server. Please open an issue on GitHub if any compatibility issues are found.
Updated RPCs
-
The
dumptxoutsetRPC now returns the UTXO set dump in a new and improved
format. Correspondingly, theloadtxoutsetRPC now expects this new format
in the dumps it tries to load. Dumps with the old format are no longer
supported and need to be recreated using the new format to be usable.
(bitcoin#29612) -
The
"warnings"field ingetblockchaininfo,getmininginfoand
getnetworkinfonow returns all the active node warnings as an array
of strings, instead of a single warning. The current behaviour
can be temporarily restored by running Bitcoin Knots with the configuration
option-deprecatedrpc=warnings. (bitcoin#29845) -
Previously when using the
sendrawtransactionRPC and specifying outputs
that are already in the UTXO set, an RPC error code of-27with the
message "Transaction already in block chain" was returned in response.
The error message has been changed to "Transaction outputs already in utxo
set" to more accurately describe the source of the issue. (bitcoin#30212) -
The default mode for the
estimatesmartfeeRPC has been updated from
conservativetoeconomical, which is expected to reduce over-estimation
for many users, particularly if Replace-by-Fee is an option. For users that
require high confidence in their fee estimates at the cost of potentially
over-estimating, theconservativemode remains available. (bitcoin#30275) -
RPC
submitpackagenow allows 2 new arguments to be passed:maxfeerateand
maxburnamount. See the submitpackage help for details. (bitcoin#28950) -
The
statusaction of thescanblocksRPC now returns an additional array
"relevant_blocks"containing the matching block hashes found so far during
a scan. (bitcoin#30713) -
The
utxoupdatepsbtmethod now accepts an optional third parameter,
prevtxs, containing an array of previous transactions (in hex) spent in
...
Bitcoin Knots v27.1.knots20240801
27.1 Release Notes
Bitcoin Knots version 27.1.knots20240801 is now available from:
https://bitcoinknots.org/files/27.x/27.1.knots20240801/
This release includes new features, various bug fixes, and performance improvements.
Please report bugs using the issue tracker at GitHub:
https://github.com/bitcoinknots/bitcoin/issues
To receive security and update notifications, please subscribe to:
https://bitcoinknots.org/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 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 Knots are generally supported.
Compatibility
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 and the "vsize" result in many RPC results, transaction virtual sizes may not account for an unusually high number of sigops (ie, as determined by the -bytespersigop policy) or datacarrier penalties (ie, -datacarriercost). This could result in reporting a lower virtual size than is actually used for mempool or mining purposes.
Due to disruption of the shared Bitcoin Transifex repository, this release still does not include updated translations, and Bitcoin Knots may be unable to do so until/unless that is resolved.
Notable changes
P2P and network changes
- The prior release re-enabled UPnP and NAT-PMP by default based on the understanding that it had been many years since the libraries for these had a vulnerability. It turns out, this is not the case, and out of an abundance of caution, it has been reverted back to disabled-by-default. If you can manually forward the p2p port to your node, that is recommended.
Updated RPCs
-
The
sendallRPC now attempts to include more of the wallet's balance in cases where other transactions were recently sent and have not yet confirmed. (bitcoin#28979) -
UTXOs returned by
scantxoutsetnow include theblockhash(the transaction creating the UTXO was confirmed in), as well as the number ofconfirmations. (bitcoin#30515)
Updated REST APIs
- Parameter validation for
/rest/getutxoshas been improved by rejecting truncated or overly large txids and malformed outpoint indices by raising an HTTP_BAD_REQUEST "Parse error". Previously, these malformed requests would be
silently handled. (bitcoin#30482, bitcoin#30444)
Bitcoin Knots v27.1.knots20240621
27.1 Release Notes
Bitcoin Knots version 27.1.knots20240621 is now available from:
https://bitcoinknots.org/files/27.x/27.1.knots20240621/
This release includes new features, various bug fixes, and performance
improvements.
Please report bugs using the issue tracker at GitHub:
https://github.com/bitcoinknots/bitcoin/issues
To receive security and update notifications, please subscribe to:
https://bitcoinknots.org/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 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 Knots are generally supported.
Compatibility
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 and the
"vsize" result in many RPC results, transaction virtual sizes may not account
for an unusually high number of sigops (ie, as determined by the
-bytespersigop policy) or datacarrier penalties (ie, -datacarriercost).
This could result in reporting a lower virtual size than is actually used for
mempool or mining purposes.
Due to disruption of the shared Bitcoin Transifex repository, this release
still does not include updated translations, and Bitcoin Knots may be unable
to do so until/unless that is resolved.
Notable changes
P2P and network changes
-
As it has been several years since the last vulnerability in the port
mapping frameworks used by Bitcoin Knots, both UPnP and NAT-PMP have been
re-enabled by default when your node is configured to listen for incoming
connections (which is also on by default). This helps automatically
configure routers and VPNs to not block those incoming connections, making
the network more resilient. If you wish to disable these, you can set
-natpmp=0and-upnp=0- or you may prefer to disable incoming
connections altogether with-listen=0. -
Network-adjusted time has been removed from consensus code. It is replaced
with (unadjusted) system time. The warning for a large median time offset
(70 minutes or more) is kept. This reduces the implicit security assumption of
requiring an honest majority of outbound peers, and increases the importance
of the node operator ensuring their system time is (and stays) correct to not
fall out of consensus with the network. (bitcoin#28956)
Node policy changes
- Experimental support for Opt-in Topologically Restricted Until Confirmation
(TRUC) Transactions policy (aka v3 transaction policy) is available. By
setting the transaction version number to 3, TRUC transactions request some
stricter relay filtering of themselves and related transactions. By default,
Bitcoin Knots v27.1 will accept, relay, and mine v3 transactions without
these additional restrictions. If you have configured-mempoolreplacement
to require transactions to signal replacability, v3 transactions are
considered replacable (as this is an explicit part of the TRUC request).
The-mempooltrucoption can be set to eitherenforceto impose the other
requested restrictions, or torejectto restore the previous policy of
rejecting v3 transactions entirely. (bitcoin#28948)
Wallet
- The CoinGrinder coin selection algorithm has been introduced to mitigate unnecessary
large input sets and lower transaction costs at high feerates. CoinGrinder
searches for the input set with minimal weight. Solutions found by
CoinGrinder will produce a change output. CoinGrinder is only active at
elevated feerates (default: 30+ sat/vB, based on-consolidatefeerate×3). (bitcoin#27877)
Mining
-
The
getblocktemplateRPC method's template request mode now accepts new
parameters "blockmaxsize", "blockmaxweight", and "minfeerate" to override
the configured parameters on a call-by-call basis. Setting these differently
from their defaults will disable the internal template caching for now, so
may be less efficient if you have multiple applications using
getblocktemplate directly. -
getblocktemplate(template request mode) also will now accept
"skip_validity_test" in the list of client "capabilities". If this is
specified, the internal template validity safety check is skipped, and the
new template (if one isn't already cached) will not be cached for future
calls. It is recommended that this feature is not used unless you plan to
follow up with a template proposal getblocktemplate call (defined in BIP 23).
Updated RPCs
-
disconnectnodenow supports disconnecting by IP (without specifying a port
number or subnet). -
getrawaddrmanwill no longer include a dummy "mapped_as" nor
"source_mapped_as" when an AS map has not been enabled.
Updated settings
- The
rpccookiepermssetting has been simplified to values "owner", "group",
or "all". The old octal permissions may still be used, but are deprecated
and may be removed in a future version.
mempool.dat compatibility
-
The
mempool.datfile created by -persistmempool or the savemempool RPC will
be written in a new format. This new format includes the obfuscation of
transaction contents to mitigate issues where external programs (such as
anti-virus) attempt to interpret and potentially quarantine the file.This new format can not be read by previous software releases. To allow for a
downgrade, a temporary setting-persistmempoolv1has been added to fall back
to the legacy format. (bitcoin#28207)
Build System
- A C++20 capable compiler is now required to build Bitcoin Knots. (bitcoin#28349)
Bitcoin Knots v26.1.knots20240513
26.1 Release Notes
Bitcoin Knots version 26.1.knots20240513 is now available from:
https://bitcoinknots.org/files/26.x/26.1.knots20240513/
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/bitcoinknots/bitcoin/issues
To receive security and update notifications, please subscribe to:
https://bitcoinknots.org/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 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 Knots are generally supported.
Compatibility
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 and the
"vsize" result in many RPC results, 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.
Due to disruption of the shared Bitcoin Transifex repository, this release
still does not include updated translations, and Bitcoin Knots may be unable
to do so until/unless that is resolved.
Notable changes
Node policy changes
-
A new non-standard token/asset protocol launched a few weeks ago ("Runes").
Due to its lack of competent review, design flaws (as well as the relative
worthlessness of the tokens at least when first minted) resulted in it being
particularly spammy in practice. Some users have chosen to block all
datacarrier transactions in an effort to mitigate this.To better address users' concerns, this release adds a new
-rejecttokens
policy filter (also available in the GUI) that will only block Runes
transactions, thereby enabling users who choose to tolerate datacarrier
otherwise to re-enable that policy. Note that it is not enabled by
default at this time. -
Similarly, a new policy filter has been added to block parasitic
transactions. Many parasite transactions cannot be detected, but this new
filter aims to do what it can when possible, currently just so-called
"CAT-21" transactions built using the Ordinal attack. It is enabled by
default, and can be disabled using-rejectparasites=0(or in the GUI) if
you wish to tolerate these. (knots#78) -
The dust limit has historically required outputs to be at least three times
the value they provide when later spent. The experimental dynamic adjustment
function, however, was adjusting it based on exactly (1x) the value the
output provides. To address this, you can now specify a multiplier by
prefixing your policy by a number (with up to three decimal places) followed
by an asterisk. So-dustdynamic=3.142*target:Nwill require outputs to be
3.142 times the value they provide; or-dustdynamic=1*target:Nwill behave
the same as previous versions fortarget:N. The default multiplier, if
none is specified, is now three times as historically has been used. If you
use this feature, please leave a comment about your experience on GitHub:
#74
Updated RPCs
-
submitpackagenow returns results with per-transaction errors rather than
throwing an exception potentially obscuring other transactions being
accepted. (bitcoin#28848) -
getprioritisedtransactionsnow also includes "modified_fee" in results,
with the sum of the real transaction fee and the fee delta. (bitcoin#28885) -
getrawaddrmanhas been extended to include in the results for each entry
"mapped_as" and "source_mapped_as". (bitcoin#30062)
Bitcoin Knots v26.1.knots20240325
26.1 Release Notes
Bitcoin Knots version 26.1.knots20240325 is now available from:
https://bitcoinknots.org/files/26.x/26.1.knots20240325/
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/bitcoinknots/bitcoin/issues
To receive security and update notifications, please subscribe to:
https://bitcoinknots.org/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 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 Knots are generally supported.
Compatibility
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 and the "vsize" result in many RPC results, 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 comment on GitHub #73 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
Node policy changes
-
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. (bitcoin#29309) -
Non-standard datacarrier formats are now filtered out by default. If you wish to re-enable relaying and mining them, you can set
-acceptnonstddatacarrier=1 -
There is now experimental (and disabled by default) support for dynamically adjusting the "dust" spam filter threshold. It can be enabled in the GUI, or by configuring
-dustdynamic=target:Nto adjust based on a fee estimate for confirmation within N blocks, or-dustdynamic=mempool:Nto adjust based on the worst fee in the best N kvB of your mempool. In either mode, the fee will be adjusted every 15 minutes (the first time not for 15 minutes after startup, in an effort to ensure estimators have sufficient data to work with). Implementation details (including how often adjustment occurs) may be changed in future releases. If you use this feature, please leave a comment about your experience on GitHub: #74
P2P and network changes
-
For several years now, miners have been regularly violating the Bitcoin protocol as it pertains to the block version bits, triggering warnings in Bitcoin Knots about softforks that aren't happening. While it would be inappropriate to simply concede a protocol change without community support, it's also confusing for users to see warnings that are inaccurate. To mitigate this, therefore, Bitcoin Knots is now more specific about when it warns about potential protocol changes, and only logs simple versionbit protocol violations in the debug log once for the specific block violating it.
-
Support for the v2 transport protocol defined in BIP324 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=0if desired. The existing v1 transport protocol remains fully supported. (bitcoin#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. (bitcoin#27213)
-
Support for I2P sessions encrypted using the newer and faster ECIES-X25519 algorithm has been added. (bitcoin#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 beneathMIN_DISK_SPACE_FOR_BLOCK_FILESin which case that value will be used. (bitcoin#27596)
Updated RPCs
-
The
maxfeerateoption forsendrawtransactionandtestmempoolacceptis now limited to below 100000 sats/vB to avoid overflow bugs. (bitcoin#29434) -
Setting
-rpcserialversion=0is deprecated and will be removed in a future release. It can currently still be used by also adding the-deprecatedrpc=serialversionoption. (bitcoin#28448) -
The
hash_serialized_2value has been removed fromgettxoutsetinfosince the value it calculated contained a bug and did not take all data into account. It is superseded byhash_serialized_3which provides the same functionality but serves the correctly calculated hash. (bitcoin#28685) -
For RPC methods which accept
optionsparameters (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. (bitcoin#26485)
This means it is possible make calls like:
src/bitcoin-cli -named bumpfee txid fee_rate=100instead of
src/bitcoin-cli -named bumpfee txid options='{"fee_rate": 100}'-
New fields
transport_protocol_typeandsession_idwere added to thegetpeerinfoRPC to indicate whether the v2 transport protocol is in use, and if so, what the session id is. (bitcoin#28331) -
A new argument
v2transportwas added to theaddnodeRPC to indicate whether a v2 transaction connection is to be attempted with the peer. This breaks compatibility with the oldprivilegedparameter 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. (bitcoin#28331) -
Miniscript expressions can now be used in Taproot descriptors for all RPCs working with descriptors. (bitcoin#27255)
-
finalizepsbtis now able to finalize a PSBT with inputs spending Miniscript-compatible Taproot leaves. (bitcoin#27255) -
The result from
getpeerinfonow 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. (bitcoin#29530)
Changes to wallet related RPCs can be found in the Wallet section below.
New RPCs
-
loadtxoutsethas been added, which allows loading a UTXO snapshot of the format generated bydumptxoutset. 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. (bitcoin#27596)You can find more information on this process in the
assumeutxodesign document (https://github.com/bitcoin/bitcoin/blob/master/doc/design/assumeutxo.md).getchainstateshas 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). (bitcoin#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
importmempoolRPC has been added. It loads a validmempool.datfile and attempts to add its contents to the mempool. This can be useful to import mempool data from another node wit...
Bitcoin Knots v25.1.knots20231115
25.1 Release Notes
Bitcoin Knots version 25.1.knots20231115 is now available from:
https://bitcoinknots.org/files/25.x/25.1.knots20231115/
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/bitcoinknots/bitcoin/issues
To receive security and update notifications, please subscribe to:
https://bitcoinknots.org/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 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 Knots are generally supported.
Compatibility
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
Security vulnerabilities fixed
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.
P2P and network changes
-
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).Whenever headers are received from a peer that have a total chainwork that is either
less than the node's-minimumchainworkvalue 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). (bitcoin#25717) -
Enable parallel compact block downloads to mitigate temporary stalls from a slow peer. (bitcoin#27626)
-
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. (bitcoin#28592) -
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. (bitcoin#26265) -
With I2P connections, a new, transient address is used for each outbound
connection if-i2pacceptincoming=0. (bitcoin#25355) -
A new net permission
forceinbound(set with-whitelist=forceinbound@...
or-whitebind=forceinbound@...) is introduced that extendsnobanpermissions.
Inbound connections from hosts protected byforceinboundwill now be more
likely to connect even ifmaxconnectionsis 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. RPCgetpeerinfowill also now indicate
forced_inbound. (bitcoin#27600) -
The
-datacarriersizepolicy limit has been updated to match newer style datacarrier
transactions. (bitcoin#28408) -
An additional
-datacarriercostoption 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). -
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-maxscriptsizeoption. If you know of any legitimate scripts that are
larger than the default, please report a bug.
New RPCs
-
A new
getprioritisedtransactionsRPC 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. -
getaddrmaninfohas 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. (bitcoin#27511, bitcoin#28565)
Updated RPCs
-
The
verifychainRPC will now returnfalseif 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. (bitcoin#25574) -
sendrawtransactionhas a new, optional argument,maxburnamountwith a default value of0.
Any transaction containing an unspendable output with a value greater thanmaxburnamountwill
not be submitted. At present, the outputs deemed unspendable are those with scripts that begin
with anOP_RETURNcode (known as 'datacarriers'), scripts that exceed the maximum script size,
and scripts that contain invalid opcodes. -
The
testmempoolacceptRPC 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 (bitcoin#26646). -
decodescriptmay now infer a Miniscript descriptor under P2WSH context if it is not lacking
information. (bitcoin#27037) -
finalizepsbtis now able to finalize a transaction with inputs spending Miniscript-compatible
P2WSH scripts. (bitcoin#24149) -
The
-deprecatedrpc=softforksconfiguration option has been removed. The
RPCgetblockchaininfono longer returns thesoftforksfield, which was
previously deprecated in 23.0. (bitcoin#23508) Information on soft fork status is
now only available via thegetdeploymentinfoRPC. -
The
deprecatedrpc=exclude_coinbaseconfiguration option has been removed.
ThereceivedbyRPCs (listreceivedbyaddress,listreceivedbylabel,
getreceivedbyaddressandgetreceivedbylabel) 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.
(bitcoin#25171) -
The
deprecatedrpc=feesconfiguration option has been removed. The top-level
fee fieldsfee,modifiedfee,ancestorfeesanddescendantfeesare no
longer returned by RPCsgetmempoolentry,getrawmempool(verbose=true),
getmempoolancestors(verbose=true)andgetmempooldescendants(verbose=true).
The same fee fields can be accessed through thefeesobject in the result.
The top-level fee fields were previously deprecated in 23.0. (bitcoin#25204) -
The
getpeerinfoRPC has been updated with a newpresynced_headersfield,
indicating the progress on the presync phase mentioned in the
"P2P and network changes" section above. -
RPC
disconnectnodenow accepts a subnet intoaddressargument. (bitcoin#26576) -
The output from
getmempoolinfois extended to include arbf_policykey
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-defaultand--enable-natpmp-defaultoptions
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. (bitcoin#26896)
Updated settings
-
If the
-checkblocksor-checkleveloptions 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. (bitcoin#25574) -
Setting
-blocksonlywill now reduce the maximum mempool memory
t...
Bitcoin Knots v23.0.knots20220529
23.0 Release Notes
Bitcoin Knots version 23.0.knots20220529 is now available from:
https://bitcoinknots.org/files/23.x/23.0.knots20220529/
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/bitcoinknots/bitcoin/issues
To receive security and update notifications, please subscribe to:
https://bitcoinknots.org/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 Mac)
or bitcoind/bitcoin-qt (on Linux).
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 Knots are generally supported.
If you need to ensure your prior transaction mempool is preserved across the
upgrade (usually you don't), be sure you upgrade to and open Knots 0.21.1
prior to upgrading to 22.0 or later.
Compatibility
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.
Notable changes
P2P and network changes
-
A bitcoind node will no longer rumour addresses to inbound peers by default.
They will become eligible for address gossip after sending an ADDR, ADDRV2,
or GETADDR message. (bitcoin#21528) -
Before this release, Bitcoin Knots had a strong preference to try to connect
only to peers that listen on port 8333. As a result of that, Bitcoin nodes
listening on non-standard ports would likely not get any Bitcoin Knots peers
connecting to them. This preference has been removed. (bitcoin#23542) -
Full support has been added for the CJDNS network. See the new option
-cjdnsreachableand doc/cjdns.md (bitcoin#23077)
Fee estimation changes
- Fee estimation now takes the feerate of replacement (RBF) transactions into
account. (bitcoin#22539)
Rescan startup parameter removed
The -rescan startup parameter has been removed. Wallets which require
rescanning due to corruption will still be rescanned on startup.
Otherwise, please use the rescanblockchain RPC to trigger a rescan. (bitcoin#23123)
Tracepoints and Userspace, Statically Defined Tracing support
Bitcoin Knots release binaries for Linux now include experimental tracepoints which
act as an interface for process-internal events. These can be used for review,
debugging, monitoring, and more. The tracepoint API is semi-stable. While the API
is tested, process internals might change between releases requiring changes to the
tracepoints. Information about the existing tracepoints can be found under
doc/tracing.md and
usage examples are provided in contrib/tracing/.
Updated RPCs
-
The
-deprecatedrpc=addressesconfiguration option has been removed. RPCs
gettxout,getrawtransaction,decoderawtransaction,decodescript,
gettransaction verbose=trueand REST endpoints/rest/tx,/rest/getutxos,
/rest/blockno longer return theaddressesandreqSigsfields, which
were previously deprecated in 22.0. (bitcoin#22650) -
The top-level fee fields
fee,modifiedfee,ancestorfeesanddescendantfees
returned by RPCsgetmempoolentry,getrawmempool(verbose=true),
getmempoolancestors(verbose=true)andgetmempooldescendants(verbose=true)
are deprecated and will be removed in the next major version (use
-deprecated=feesif needed in this version). The same fee fields can be accessed
through thefeesobject in the result. WARNING: deprecated
fieldsancestorfeesanddescendantfeesare denominated in sats, whereas all
fields in thefeesobject are denominated in BTC. (bitcoin#22689) -
The return value of the
pruneblockchainmethod had an off-by-one bug,
returning the height of the block after the most recent pruned. This has
been corrected, and it now returns the height of the last pruned block as
documented. -
A new
require_checksumoption has been added to thederiveaddressmethod
to allow for specifying descriptors without first calculating a checksum for
them. (bitcoin#24162)
Changes to wallet related RPCs can be found in the Wallet section below.
New RPCs
-
Information on soft fork status has been moved from
getblockchaininfo
to the newgetdeploymentinfoRPC which allows querying soft fork status at any
block, rather than just at the chain tip. Inclusion of soft fork
status ingetblockchaininfocan currently be restored using the
configuration-deprecatedrpc=softforks, but this will be removed in
a future release. Note that in either case, thestatusfield
now reflects the status of the current block rather than the next
block. (bitcoin#23508) -
The
sendallRPC spends specific UTXOs to one or more recipients
without creating change. By default, thesendallRPC will spend
every UTXO in the wallet.sendallis 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 thesubtractfeefromamountoption via the
send,sendtoaddress, orsendmanyRPCs. (bitcoin#24118) -
A new
gettxspendingprevoutRPC has been added, which scans the mempool to
find transactions spending any of the given outpoints. (bitcoin#24408)
Files
- On startup, the list of banned hosts and networks (via
setbanRPC) in
banlist.datis ignored and onlybanlist.jsonis considered. Bitcoin Knots
version 22.x is the only version that can readbanlist.datand also write
it tobanlist.json. Ifbanlist.jsonalready exists, version 22.x will not
try to translate thebanlist.datinto json. After an upgrade,listbanned
can be used to double check the parsed entries. (bitcoin#22570)
Updated settings
-maxuploadtargetnow allows human readable byte units [k|K|m|M|g|G|t|T].
E.g.-maxuploadtarget=500g. No whitespace, +- or fractions allowed.
Default isMif no suffix provided. (bitcoin#23249)
Tools and Utilities
-
Update
-getinfoto return data in a user-friendly format that also reduces vertical space. (bitcoin#21832) -
CLI
-addrinfonow returns a single field for the number ofonionaddresses
known to the node instead of separatetorv2andtorv3fields, as support
for Tor V2 addresses was removed from Bitcoin Knots in 22.0. (bitcoin#22544)
Wallet
-
Descriptor wallets are now the default wallet type. Newly created wallets
will use descriptors unlessdescriptors=falseis set duringcreatewallet, or
theDescriptor walletcheckbox is unchecked in the GUI.Note that wallet RPC commands like
importmultianddumpprivkeycannot be
used with descriptor wallets, so if your client code relies on these commands
without specifyingdescriptors=falseduring wallet creation, you will need
to update your code. -
Newly created descriptor wallets will contain an automatically generated
tr()
descriptor which allows for creating single key Taproot receiving addresses. -
upgradewalletwill now automatically flush the keypool if upgrading
from a non-HD wallet to an HD wallet, to immediately start using the
newly-generated HD keys. (bitcoin#23093) -
a new RPC
newkeypoolhas been added, which will flush (entirely
clear and refill) the keypool. (bitcoin#23093) -
lockunspentnow optionally takes a third parameter,persistent, which
causes the lock to be written persistently to the wallet database. This
allows UTXOs to remain locked even after node restarts or crashes. (bitcoin#23065) -
receivedbyRPCs now include coinbase transactions. Previously, the
following wallet RPCs excluded coinbase transactions:getreceivedbyaddress,
getreceivedbylabel,listreceivedbyaddress,listreceivedbylabel. This
release changes this behaviour and returns results accounting for received
coins from coinbase outputs. The previous behaviour can be restored using the
configuration-deprecatedrpc=exclude_coinbase, but may be removed in a
future release. (bitcoin#14707) -
A new option in the same
receivedbyRPCs,include_immature_coinbase
(default=false), determines whether to account for immature coinbase
transactions. Immature coinbase transactions are coinbase transactions that
have 100 or fewer confirmations, and are not spendable. (bitcoin#14707) -
The following RPCs:
listtransactions,gettransactionandlistsinceblock
now include thewtxidof the transaction. (bitcoin#24198) -
The
listtransactions,gettransaction, andlistsinceblock
RPC methods now include a wtxid field (hash of serialized transaction,
including witness data) for each transaction. -
A new
gettxspendingprevoutRPC has been added, which scans the mempool to find
transactions spending any of the given outpoints. (bitcoin#24408) -
The
fundrawtransaction,send, andwalletcreatefundedpsbtRPC methods
now acceptminconfandmaxconfoptions to limit selection of inputs to
UTXOs with a range of blocks confirmed. The previousmin_confoption which
served the same purpose is deprecated and may be removed in a future
version. (#22...