/ doc / release-notes / release-notes-31.0.md
release-notes-31.0.md
  1  v31.0 Release Notes
  2  ===================
  3  
  4  Bitcoin Core version 31.0 is now available from:
  5  
  6    <https://bitcoincore.org/bin/bitcoin-core-31.0/>
  7  
  8  This release includes new features, various bug fixes and performance
  9  improvements, as well as updated translations.
 10  
 11  Please report bugs using the issue tracker at GitHub:
 12  
 13    <https://github.com/bitcoin/bitcoin/issues>
 14  
 15  To receive security and update notifications, please subscribe to:
 16  
 17    <https://bitcoincore.org/en/list/announcements/join/>
 18  
 19  
 20  With the release of this new major version, versions `28.x` and
 21  older are at "End of Life" and will no longer receive updates.
 22  
 23  In accordance with the security policy, we will in two weeks disclose:
 24  
 25  * Medium and high severity vulnerabilities fixed in `29.0`. There is one of these.
 26  
 27  * Low severity vulnerabilities fixed in `31.0`. There are none of these.
 28  
 29  How to Upgrade
 30  ==============
 31  
 32  If you are running an older version, shut it down. Wait until it has completely
 33  shut down (which might take a few minutes in some cases), then run the installer
 34  (on Windows) or just copy over `/Applications/Bitcoin-Qt` (on macOS) or
 35  `bitcoind`/`bitcoin-qt` (on Linux).
 36  
 37  Upgrading directly from a version of Bitcoin Core that has reached its EOL is
 38  possible, but it might take some time if the data directory needs to be
 39  migrated. Old wallet versions of Bitcoin Core are generally supported.
 40  
 41  Compatibility
 42  ==============
 43  
 44  Bitcoin Core is supported and tested on the following operating systems or
 45  newer: Linux Kernel 3.17, macOS 14, and Windows 10 (version 1903). Bitcoin Core
 46  should also work on most other Unix-like systems but is not as frequently tested
 47  on them. It is not recommended to use Bitcoin Core on unsupported systems.
 48  
 49  Notable changes
 50  ===============
 51  
 52  The default `-dbcache` value has been increased to 1024 MiB from 450 MiB on
 53  systems where at least 4096 MiB of RAM is detected. This improves performance
 54  but increases memory usage. On some systems (for example when running in
 55  containers), the detected RAM may exceed the memory actually available, which
 56  can lead to out-of-memory conditions. To maintain the previous behavior, set
 57  `-dbcache=450`. See
 58  [reduce-memory.md](https://github.com/bitcoin/bitcoin/blob/master/doc/reduce-memory.md)
 59  for further guidance on low-memory systems. (#34692)
 60  
 61  Mempool
 62  -------
 63  
 64  The mempool has been reimplemented with a new design ("cluster mempool"), to
 65  facilitate better decision-making when constructing block templates, evicting
 66  transactions, relaying transactions, and validating replacement transactions
 67  (RBF). Most changes should be transparent to users, but some behavior changes
 68  are noted:
 69  
 70  - The mempool no longer enforces ancestor or descendant size/count limits.
 71  Instead, two new default policy limits are introduced governing connected
 72  components, or clusters, in the mempool, limiting clusters to 64 transactions
 73  and up to 101 kB in virtual size.  Transactions are considered to be in the same
 74  cluster if they are connected to each other via any combination of parent/child
 75  relationships in the mempool. These limits can be overridden using command-line
 76  arguments; see the extended help (`-help-debug`) for more information.
 77  
 78  - Within the mempool, transactions are ordered based on the feerate at which
 79  they are expected to be mined, which takes into account the full set, or
 80  "chunk", of transactions that would be included together (e.g., a parent and its
 81  child, or more complicated subsets of transactions). This ordering is utilized
 82  by the algorithms that implement transaction selection for constructing block
 83  templates; eviction from the mempool when it is full; and transaction relay
 84  announcements to peers.
 85  
 86  - The replace-by-fee validation logic has been updated so that transaction
 87  replacements are only accepted if the resulting mempool's feerate diagram is
 88  strictly better than before the replacement. This eliminates all known cases of
 89  replacements occurring that make the mempool worse off, which was possible under
 90  previous RBF rules. For singleton transactions (that are in clusters by
 91  themselves) it's sufficient for a replacement to have a higher fee and feerate
 92  than the original. See [delvingbitcoin.org
 93  post](https://delvingbitcoin.org/t/an-overview-of-the-cluster-mempool-proposal/393#rbf-can-now-be-made-incentive-compatible-for-miners-11)
 94  for more information.
 95  
 96  - Two new RPCs have been added: `getmempoolcluster` will provide the set of
 97  transactions in the same cluster as the given transaction, along with the
 98  ordering of those transactions and grouping into chunks; and
 99  `getmempoolfeeratediagram` will return the feerate diagram of the entire
100  mempool.
101  
102  - Chunk size and chunk fees are now also included in the output of
103  `getmempoolentry`.
104  
105  - The "CPFP Carveout" has been removed from the mempool logic. The CPFP carveout
106  allowed one additional child transaction to be added to a package that's already
107  at its descendant limit, but only if that child has exactly one ancestor (the
108  package's root) and is small (no larger than 10kvB). Nothing is allowed to
109  bypass the cluster count limit. It is expected that smart contracting use-cases
110  requiring similar functionality employ TRUC transactions and sibling eviction
111  instead going forward.
112  
113  - Some additional discussion can be found at
114  [doc/policy/mempool-terminology.md](https://github.com/bitcoin/bitcoin/blob/master/doc/policy/mempool-terminology.md)
115  and
116  [doc/policy/mempool-replacements.md](https://github.com/bitcoin/bitcoin/blob/master/doc/policy/mempool-replacements.md).
117  
118  P2P and network changes
119  -----------------------
120  
121  - Normally local transactions are broadcast to all connected peers with which we
122  do transaction relay. Now, for the `sendrawtransaction` RPC this behavior can be
123  changed to only do the broadcast via the Tor or I2P networks. A new boolean
124  option `-privatebroadcast` has been added to enable this behavior. This improves
125  the privacy of the transaction originator in two aspects:
126    1. Their IP address (and thus geolocation) is never known to the recipients.
127    2. If the originator sends two otherwise unrelated transactions, they will not
128    be linkable. This is because a separate connection is used for broadcasting
129    each transaction. (#29415)
130  
131  - New RPCs have been added to introspect and control private broadcast:
132  `getprivatebroadcastinfo` reports transactions currently being privately
133  broadcast, and `abortprivatebroadcast` removes matching transactions from the
134  private broadcast queue. (#34329)
135  
136  - Transactions participating in one-parent-one-child package relay can now have
137  the parent with a feerate lower than the `-minrelaytxfee` feerate, even 0 fee.
138  This expands the change from 28.0 to also cover packages of non-TRUC
139  transactions. Note that in general the package child can have additional
140  unconfirmed parents, but they must already be in-mempool for the new package to
141  be relayed. (#33892)
142  
143  - The release has asmap data embedded for the first time, allowing the asmap
144  feature to be used without any externally sourced file. The embedded map [was
145  created on 2026-03-05](https://github.com/bitcoin/bitcoin/pull/34696). Despite
146  the data being available, the option remains off-by-default. Users still need to
147  set `-asmap` or `-asmap=1` explicitly to make it possible to use a peer's ASN
148  (ISP/hoster identifier) in netgroup bucketing in order to ensure a higher
149  diversity in their peer set.
150  
151  Updated RPCs
152  ------------
153  
154  - `gettxspendingprevout` has 2 new optional arguments: `mempool_only` and
155  `return_spending_tx`. If `mempool_only` is true it will limit scans to the
156  mempool even if `txospenderindex` is available. If `return_spending_tx` is true,
157  the full spending tx will be returned. In addition if `txospenderindex` is
158  available and a confirmed spending transaction is found, its block hash will be
159  returned. (#24539)
160  
161  - The `getpeerinfo` RPC no longer returns the `startingheight` field unless the
162  configuration option `-deprecatedrpc=startingheight` is used. The
163  `startingheight` field will be fully removed in the next major release. (#34197)
164  
165  - The `getblock` RPC now returns a `coinbase_tx` object at verbosity levels 1,
166  2, and 3. It contains `version`, `locktime`, `sequence`, `coinbase` and
167  `witness`. This allows for efficiently querying coinbase transaction properties
168  without fetching the full transaction data at verbosity 2+. (#34512)
169  
170  REST API
171  --------
172  
173  - A new REST API endpoint
174  (`/rest/blockpart/<BLOCK-HASH>.<bin|hex>?offset=<OFFSET>&size=<SIZE>`) has been
175  introduced for efficiently fetching a range of bytes from block `<BLOCK-HASH>`.
176  (#33657)
177  
178  Build System
179  ------------
180  
181  - The minimum supported Clang compiler version has been raised to 17.0 (#33555).
182  - The minimum supported GCC compiler version has been raised to 12.1 (#33842).
183  
184  Updated settings
185  ----------------
186  
187  - The `-paytxfee` startup option and the `settxfee` RPC are now deleted after
188  being deprecated in Bitcoin Core 30.0. They used to allow the user to set a
189  static fee rate for wallet transactions, which could potentially lead to
190  overpaying or underpaying. Users should instead rely on fee estimation or
191  specify a fee rate per transaction using the `fee_rate` argument in RPCs such as
192  `fundrawtransaction`, `sendtoaddress`, `send`, `sendall`, and `sendmany`.
193  (#32138)
194  
195  - Specifying `-asmap` or `-asmap=1` will load the embedded asmap data instead of
196  an external file. In previous releases, if `-asmap` was specified without a
197  filename, this would try to load an `ip_asn.map` data file. Now loading an
198  external asmap file always requires an explicit filename like
199  `-asmap=ip_asn.map`.
200  
201  - The `-maxorphantx` startup option has been removed. It was previously
202  deprecated and has no effect anymore since v30.0. (#33872)
203  
204  - `tor` has been removed as a network specification. It was deprecated in favour
205  of `onion` in v0.17.0. (#34031)
206  
207  - When `-logsourcelocations` is enabled, the log output now contains just the
208  function name instead of the entire function signature. (#34088)
209  
210  - The default `-dbcache` value has been increased to `1024` MiB from `450` MiB
211  on systems where at least `4096` MiB of RAM is detected. This is a performance
212  increase, but will use more memory. To maintain the previous behaviour, set
213  `-dbcache=450`. (#34692)
214  
215  - `-privatebroadcast` is added to enable private broadcast behavior for
216  `sendrawtransaction`.
217  
218  New settings
219  ------------
220  
221  - `-txospenderindex` enables the creation of a transaction output spender index
222  that, if present, will be scanned by `gettxspendingprevout` if a spending
223  transaction was not found in the mempool. (#24539)
224  
225  GUI changes
226  -----------
227  
228  - The GUI has been updated to Qt 6.8. (#34650)
229  
230  - The `createwallet`, `createwalletdescriptor` and `migratewallet` commands are
231  filtered from the console history to improve security and privacy. (gui#901)
232  
233  - The Restore Wallet dialog shows an error message if the restored wallet name
234  is empty. (gui#924)
235  
236  Fee Estimation
237  --------------
238  
239  The Bitcoin Core fee estimator minimum fee rate bucket was updated from **1
240  sat/vB** to **0.1 sat/vB**, which matches the node’s default `minrelaytxfee`. This
241  means that for a given confirmation target, if a sub-1 sat/vB fee rate bucket is
242  the minimum tracked with sufficient data, its average value will be returned as
243  the fee rate estimate.
244  
245  Restarting a node with this change invalidates previously saved
246  estimates in `fee_estimates.dat`, the fee estimator will start tracking fresh
247  stats.
248  
249  IPC Interface
250  -------------
251  
252  - The IPC mining interface now requires mining clients to use the latest
253  `mining.capnp` schema. Clients built against older schemas will fail when
254  calling `Init.makeMining` and receive an RPC error indicating the old mining
255  interface is no longer supported. Mining clients must update to the latest
256  schema and regenerate bindings to continue working. (#34568)
257  - `Mining.createNewBlock` now has a `cooldown` behavior (enabled by default)
258  that waits for IBD to finish and for the tip to catch up. This usually prevents
259  a flood of templates during startup, but is not guaranteed. (#34184)
260  - `Mining.interrupt()` can be used to interrupt `Mining.waitTipChanged` and
261  `Mining.createNewBlock`. (#34184)
262  - `Mining.createNewBlock` and `Mining.checkBlock` now require a `context`
263  parameter.
264  - `Mining.waitTipChanged` now has a default `timeout` (effectively infinite /
265  `maxDouble`) if the client omits it.
266  - `BlockTemplate.getCoinbaseTx()` now returns a structured `CoinbaseTx` instead
267  of raw bytes.
268  - Removed `BlockTemplate.getCoinbaseCommitment()` and
269  `BlockTemplate.getWitnessCommitmentIndex()`.
270  - Cap’n Proto default values were updated to match the corresponding C++
271  defaults for mining-related option structs (e.g. `BlockCreateOptions`,
272  `BlockWaitOptions`, `BlockCheckOptions`).
273  
274  Credits
275  =======
276  
277  Thanks to everyone who directly contributed to this release:
278  
279  - 0xb10c
280  - Alexander Wiederin
281  - Alfonso Roman Zubeldia
282  - amisha
283  - ANAVHEOBA
284  - Andrew Toth
285  - Anthony Towns
286  - Antoine Poinsot
287  - ANtutov
288  - Anurag chavan
289  - Ava Chow
290  - bensig
291  - Ben Westgate
292  - billymcbip
293  - b-l-u-e
294  - Brandon Odiwuor
295  - brunoerg
296  - Bruno Garcia
297  - Calin Culianu
298  - Carl Dong
299  - Chandra Pratap
300  - Chris Stewart
301  - Coder
302  - Cory Fields
303  - da1sychain
304  - Daniela Brozzoni
305  - Daniel Pfeifer
306  - David Gumberg
307  - dergoegge
308  - Dmitry Goncharov
309  - Enoch Azariah
310  - Eugene Siegel
311  - Fabian Jahr
312  - fanquake
313  - Fibonacci747
314  - flack
315  - frankomosh
316  - furszy
317  - glozow
318  - Greg Sanders
319  - Hao Xu
320  - Hennadii Stepanov
321  - Henry Romp
322  - Hodlinator
323  - ismaelsadeeq
324  - janb84
325  - jayvaliya
326  - joaonevess
327  - John Moffett
328  - Josh Doman
329  - kevkevinpal
330  - l0rinc
331  - Luke Dashjr
332  - Mara van der Laan
333  - MarcoFalke
334  - marcofleon
335  - Martin Zumsande
336  - Matthew Zipkin
337  - Max Edwards
338  - Murch
339  - Musa Haruna
340  - naiyoma
341  - nervana21
342  - Novo
343  - optout
344  - pablomartin4btc
345  - Padraic Slattery
346  - Pieter Wuille
347  - Pol Espinasa
348  - pythcoiner
349  - rkrux
350  - Robin David
351  - Roman Zeyde
352  - rustaceanrob
353  - Ryan Ofsky
354  - SatsAndSports
355  - scgbckbone
356  - Sebastian Falbesoner
357  - sedited
358  - seduless
359  - Sergi Delgado Segura
360  - Sjors Provoost
361  - SomberNight
362  - sstone
363  - stickies-v
364  - stratospher
365  - stringintech
366  - Suhas Daftuar
367  - tboy1337
368  - TheCharlatan
369  - Tim Ruffing
370  - Vasil Dimov
371  - w0xlt
372  - WakeTrainDev
373  - Weixie Cui
374  - willcl-ark
375  - Woolfgm
376  - yancy
377  - Yash Bhutwala
378  - yuvicc
379  - zaidmstrr
380  
381  As well as to everyone that helped with translations on
382  [Transifex](https://explore.transifex.com/bitcoin/bitcoin/).