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/).