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
mempoolfullrbfoption 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.
libnatpmpwas 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
-portconfiguration 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-portand 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:
getdescriptoractivityto 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 withscanblocksto reduce reliance on additional indexing programs.
- Updated RPCs:
- Enhanced RPC Response: testmempoolaccept now includes Reject Details. Bitcoin Core 29.0 adds a verbose
reject-detailsfield to thetestmempoolacceptRPC, detailing rejections likeinsufficient-fee. - Persistent block data for duplicate submitblock submissions. Duplicate blocks submitted via
submitblockwill 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. Thegetmininginfonow includesnBitsand the current target in thetargetfield. It also serves anextobject, detailing theheight,nBits,difficulty, andtargetfor the upcoming block. getblockandgetblockheadernow return the current target in thetargetfield.getblockchaininfoandgetchainstatesnow returnnBitsand the current target in thetargetfield.getblocktemplateRPC now considers BIP94 Timewarp Fix. ThegetblocktemplateRPC 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>.jsonandGET /rest/headers/<BLOCK-HASH>.jsonnow return the current target in thetargetfield.
- Get block and Get headers return target in the target field. The
- Updated Settings:
- Replace-by-fee the standard. From version v28.0, the
-mempoolfullrbfoption 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
-dbcacheconfiguration option has been removed due to recent UTXO set growth. Previously, large-dbcachevalues 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
-upnpoption will now log a warning and be treated as-natpmp. It's recommended to use-natpmpdirectly instead.
- Replace-by-fee the standard. From version v28.0, the
- Bitcoin Core will not start if the
-blockreservedweightparameter is set below 2,000 WU. It will also fail to start if either-blockmaxweightor-blockreservedweightexceeds the consensus limit of 4,000,000 WU. - Using
-debug=0or-debug=nonenow works like-nodebug. It clears previously set debug categories while allowing later-debugoptions to be applied. - The default value for
-rpcthreadshas increased from 4 to 16, and-rpcworkqueuehas 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.pyconverts a compact-serialized UTXO snapshot, created using thedumptxoutsetRPC, into a SQLite3 database. Check the script's--helpoutput 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."
