Bitcoin Core v29.0: Ephemeral Dust, Enhanced Orphan Handling, CMake & More
Bitcoin Core version 29.0 is now available, featuring updates and improvements in networking, mempool policy, mining, RPCs, and overall system behavior.

- This release eliminates UPnP support in favor of NAT-PMP/PCP, enhances transaction orphan handling for improved reliability, and introduces ephemeral dust to defer fee commitment.
- Various RPCs now feature enhanced error reporting and new data fields, the block size handling bug related to reserved weight has been fixed, and the removal of the
mempoolfullrbf
option standardizes full replace-by-fee behavior. - With this new major release, versions 26.x and older have reached "Maintenance End" and will no longer receive updates. Two weeks after this release, medium and high severity vulnerabilities affecting 26.x will be disclosed, as well as low severity vulnerabilities affecting 28.x, in line with the security policy.
What's new
- P2P and Network Changes:
- Support for UPnP has been dropped in favor of a more modern NAT-PMP/PCP implementation.
- Added support for PCP & IPv6 pinholing.
libnatpmp
was replaced with built-in NAT-PMP/PCP implementation, enabled via-natpmp
, which supports IPv4 port forwarding and IPv6 pinholing. - A change in assigning onion listening ports. Now, when using the
-port
configuration option, the default onion listening port will be set to the specified port +1, rather than a fixed value like 8334 on mainnet.
"This re-allows setups with multiple local nodes using different-port
and not using-bind
, which would lead to a startup failure in v28.0 due to a port collision," was explained in the release notes.
- More reliable orphan handling. When a node receives an orphan transaction (an unconfirmed transaction that spends unknown inputs), it will attempt to download missing parents from peers who announced the orphan, potentially increasing bandwidth but enhancing handling of orphan transactions.
- Mempool Policy and Mining Changes:
- Relay transaction packages containing ephemeral dust. An ephemeral dust output is a tiny transaction output, below the dust limit, produced in a v3 zero-fee transaction and consumed in a following v3 transaction. These transactions occur within the same package, making the output temporary since it is both generated and spent at once. It is useful for Lightning network, Ark, ln-symmetry, Spacechains, Timeout Trees, and other constructs.
- New startup option -blockreservedweight. In versions before 29.0, a bug limited actual block sizes to 3,992,000 WU by setting a default reserved weight of 8,000 WU for block headers and transactions. The fix adds a new option, -blockreservedweight, with the same default for compatibility.
- New RPCs:
getdescriptoractivity
to track activity of a given set of descriptors. It helps identify all spending and receiving activities for specific descriptors within chosen blocks, and can be used withscanblocks
to reduce reliance on additional indexing programs.
- Updated RPCs:
- Enhanced RPC Response: testmempoolaccept now includes Reject Details. Bitcoin Core 29.0 adds a verbose
reject-details
field to thetestmempoolaccept
RPC, detailing rejections likeinsufficient-fee
. - Persistent block data for duplicate submitblock submissions. Duplicate blocks submitted via
submitblock
will now retain their data even if previously pruned. If pruning is enabled, the data will eventually be pruned again when its block file is selected for pruning.
- Enhanced RPC Response: testmempoolaccept now includes Reject Details. Bitcoin Core 29.0 adds a verbose
- Updated
getmininginfo
. Thegetmininginfo
now includesnBits
and the current target in thetarget
field. It also serves anext
object, detailing theheight
,nBits
,difficulty
, andtarget
for the upcoming block. getblock
andgetblockheader
now return the current target in thetarget
field.getblockchaininfo
andgetchainstates
now returnnBits
and the current target in thetarget
field.getblocktemplate
RPC now considers BIP94 Timewarp Fix. Thegetblocktemplate
RPC now considers the timewarp fix from BIP94 for thecurtime
(BIP22) andmintime
(BIP23) fields across all networks. This change helps prevent un-upgraded miners from unintentionally breaching the timewarp rule if a timewarp fix softfork activates on the mainnet.- Updated REST APIs:
- Get block and Get headers return target in the target field. The
GET /rest/block/<BLOCK-HASH>.json
andGET /rest/headers/<BLOCK-HASH>.json
now return the current target in thetarget
field.
- Get block and Get headers return target in the target field. The
- Updated Settings:
- Replace-by-fee the standard. From version v28.0, the
-mempoolfullrbf
option was set to default to 1. Due to widespread policy adoption, this option has been removed, making full replace-by-fee the standard behavior. - The maximum limit for the
-dbcache
configuration option has been removed due to recent UTXO set growth. Previously, large-dbcache
values were automatically capped at 16 GiB (or 1 GiB on 32-bit systems). - The handling of negated options like
-noseednode
,-nobind
,-nowhitebind
, and others has been improved. Now, negating these options simply resets them to their defaults, removing previous confusing and undocumented effects. - Using the
-upnp
option will now log a warning and be treated as-natpmp
. It's recommended to use-natpmp
directly instead.
- Replace-by-fee the standard. From version v28.0, the
- Bitcoin Core will not start if the
-blockreservedweight
parameter is set below 2,000 WU. It will also fail to start if either-blockmaxweight
or-blockreservedweight
exceeds the consensus limit of 4,000,000 WU. - Using
-debug=0
or-debug=none
now works like-nodebug
. It clears previously set debug categories while allowing later-debug
options to be applied. - The default value for
-rpcthreads
has increased from 4 to 16, and-rpcworkqueue
has been updated from 16 to 64. - Build System:
- The build system has been migrated from Autotools to CMake. The minimum required CMake version is 3.22.
"For more detailed guidance on configuring and using CMake, please refer to the official CMake documentation and CMake’s User Interaction Guide. Additionally, consult platform-specific doc/build-*.md
build guides for instructions tailored to your operating system."
- Tools and Utilities:
- The new tool
utxo_to_sqlite.py
converts a compact-serialized UTXO snapshot, created using thedumptxoutset
RPC, into a SQLite3 database. Check the script's--help
output for more information.
- The new tool
- Testing:
- The BIP94 timewarp attack mitigation (designed for testnet4) is no longer active on the regtest network.
- Dependencies:
- MiniUPnPc and libnatpmp have been removed as dependencies.
For more information on the new features, improvements, and bug fixes in this release, refer to the full release notes. Additionally, the detailed v29 testing guide provides steps for testing the latest features.
"Thanks to everyone who directly contributed to this release, including 0xb10c, Adlai Chandrasekhar, Afanti, Alfonso Roman Zubeldia, am-sq, Andre, Andre Alves, Anthony Towns, Antoine Poinsot, Ash Manning, Ava Chow, Boris Nagaev, Brandon Odiwuor, brunoerg, Chris Stewart, Cory Fields, costcould, Daniel Pfeifer, Daniela Brozzoni, David Gumberg, dergoegge, epysqyli, espi3, Eval EXEC, Fabian Jahr, fanquake, furszy, Gabriele Bocchi, glozow, Greg Sanders, Gutflo, Hennadii Stepanov, Hodlinator, i-am-yuvi, ion-, ismaelsadeeq, Jadi, James O’Beirne, Jeremy Rand, Jon Atack, jurraca, Kay, kevkevinpal, l0rinc, laanwj, Larry Ruane, Lőrinc, Maciej S. Szmigiero, Mackain, MarcoFalke, marcofleon, Marnix, Martin Leitner-Ankerl, Martin Saposnic, Martin Zumsande, Matthew Zipkin, Max Edwards, Michael Dietz, naiyoma, Nicola Leonardo Susca, omahs, pablomartin4btc, Pieter Wuille, Randall Naar, RiceChuan, rkrux, Roman Zeyde, Ryan Ofsky, Sebastian Falbesoner, secp512k2, Sergi Delgado Segura, Simon, Sjors Provoost, stickies-v, Suhas Daftuar, tdb3, TheCharlatan, tianzedavid, Torkel Rogstad, Vasil Dimov, wgyt, willcl-ark, yancy, and everyone who assisted with translations on Transifex."
