release-notes-30.0.md
1 v30.0 Release Notes 2 =================== 3 4 Bitcoin Core version v30.0 is now available from: 5 6 <https://bitcoincore.org/bin/bitcoin-core-30.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 How to Upgrade 20 ============== 21 22 If you are running an older version, shut it down. Wait until it has completely 23 shut down (which might take a few minutes in some cases), then run the 24 installer (on Windows) or just copy over `/Applications/Bitcoin-Qt` (on macOS) 25 or `bitcoind`/`bitcoin-qt` (on Linux). 26 27 Upgrading directly from a version of Bitcoin Core that has reached its EOL is 28 possible, but it might take some time if the data directory needs to be migrated. Old 29 wallet versions of Bitcoin Core are generally supported. 30 31 Compatibility 32 ============== 33 34 Bitcoin Core is supported and tested on operating systems using the 35 Linux Kernel 3.17+, macOS 13+, and Windows 10+. Bitcoin 36 Core should also work on most other Unix-like systems but is not as 37 frequently tested on them. It is not recommended to use Bitcoin Core on 38 unsupported systems. 39 40 Notable changes 41 =============== 42 43 Policy 44 ------ 45 46 - The maximum number of potentially executed legacy signature operations in a 47 single standard transaction is now limited to 2500. Signature operations in all 48 previous output scripts, in all input scripts, as well as all P2SH redeem 49 scripts (if there are any) are counted toward the limit. The new limit is 50 assumed to not affect any known typically formed standard transactions. The 51 change was done to prepare for a possible BIP54 deployment in the future. (#32521) 52 53 - `-datacarriersize` is increased to 100,000 by default, which effectively uncaps 54 the limit (as the maximum transaction size limit will be hit first). It can be 55 overridden with `-datacarriersize=83` to revert to the limit enforced in previous 56 versions. (#32406) 57 58 - Multiple data carrier (OP_RETURN) outputs in a transaction are now permitted for 59 relay and mining. The `-datacarriersize` limit applies to the aggregate size of 60 the scriptPubKeys across all such outputs in a transaction, not including the 61 scriptPubKey size itself. (#32406) 62 63 - The minimum block feerate (`-blockmintxfee`) has been changed to 0.001 satoshi per 64 vB. It can still be changed using the configuration option. This option can be used 65 by miners to set a minimum feerate on packages added to block templates. (#33106) 66 67 - The default minimum relay feerate (`-minrelaytxfee`) and incremental relay feerate 68 (`-incrementalrelayfee`) have been changed to 0.1 satoshis per vB. They can still 69 be changed using their respective configuration options, but it is recommended to 70 change both together if you decide to do so. (#33106) 71 72 Other minimum feerates (e.g. the dust feerate, the minimum returned by the fee 73 estimator, and all feerates used by the wallet) remain unchanged. The mempool minimum 74 feerate still changes in response to high volume. 75 76 Note that unless these lower defaults are widely adopted across the network, transactions 77 created with lower fee rates are not guaranteed to propagate or confirm. The wallet 78 feerates remain unchanged; `-mintxfee` must be changed before attempting to create 79 transactions with lower feerates using the wallet. (#33106) 80 81 P2P and network changes 82 ----------------------- 83 84 - Opportunistic 1-parent-1-child package relay has been improved to handle 85 situations when the child already has unconfirmed parent(s) in the mempool. 86 This means that 1p1c packages can be accepted and propagate, even if they are 87 connected to broader topologies: multi-parent-1-child (where only 1 parent 88 requires fee-bumping), grandparent-parent-child (where only parent requires 89 fee-bumping) etc. (#31385) 90 91 - The transaction orphanage, which holds transactions with missing inputs temporarily 92 while the node attempts to fetch its parents, now has improved Denial of Service protections. 93 Previously, it enforced a maximum number of unique transactions (default 100, 94 configurable using `-maxorphantx`). Now, its limits are as follows: the number of 95 entries (unique by wtxid and peer), plus each unique transaction's input count divided 96 by 10, must not exceed 3,000. The total weight of unique transactions must not exceed 97 `404,000` Wu multiplied by the number of peers. (#31829) 98 99 - The `-maxorphantx` option no longer has any effect, since the orphanage no longer 100 limits the number of unique transactions. Users should remove this configuration 101 option if they were using it, as the setting will cause an error in future versions 102 when it is no longer recognized. (#31829) 103 104 New `bitcoin` command 105 --------------------- 106 107 - A new `bitcoin` command line tool has been added to make features more discoverable 108 and convenient to use. The `bitcoin` tool just calls other executables and does not 109 implement any functionality on its own. Specifically `bitcoin node` is a synonym for 110 `bitcoind`, `bitcoin gui` is a synonym for `bitcoin-qt`, and `bitcoin rpc` is a synonym 111 for `bitcoin-cli -named`. Other commands and options can be listed with `bitcoin help`. 112 The new `bitcoin` command is an alternative to calling other commands directly, but it 113 doesn't replace them, and there are no plans to deprecate existing commands. (#31375) 114 115 External Signing 116 ---------------- 117 118 - Support for external signing on Windows has been re-enabled. (#29868) 119 120 IPC Mining Interface 121 -------------------- 122 123 - The new `bitcoin` command does support one new feature: an (experimental) IPC Mining 124 Interface that allows the node to work with Stratum v2 or other mining client software, 125 see (#31098). When the node is started with `bitcoin -m node -ipcbind=unix` it will 126 listen on a unix socket for IPC client connections, allowing clients to request block 127 templates and submit mined blocks. The `-m` option launches a new internal binary 128 (`bitcoin-node` instead of `bitcoind`) and is currently required but will become optional 129 in the future (with [#33229](https://github.com/bitcoin/bitcoin/pull/33229)). 130 131 - IPC connectivity introduces new dependencies (see [multiprocess.md](https://github.com/bitcoin/bitcoin/blob/master/doc/multiprocess.md)), 132 which can be turned off with the `-DENABLE_IPC=OFF` build option if you do not intend 133 to use IPC. (#31802) 134 135 Install changes 136 --------------- 137 138 - The `test_bitcoin` executable is now installed in `libexec/` instead of `bin/`. 139 It can still be executed directly, or accessed through the new `bitcoin` command 140 as `bitcoin test`. The `libexec/` directory also contains new `bitcoin-node` and 141 `bitcoin-gui` binaries which support IPC features and are called through the 142 `bitcoin` tool. In source builds only, `test_bitcoin-qt`, `bench_bitcoin`, and 143 `bitcoin-chainstate` are also now installed to `libexec/` instead of `bin/` and 144 can be accessed through the new `bitcoin` command. See `bitcoin help` output for 145 details. (#31679) 146 147 - On Windows, the installer no longer adds a “(64-bit)” suffix to entries in the 148 Start Menu (#32132), and it now automatically removes obsolete artifacts during 149 upgrades (#33422). 150 151 Indexes 152 ------- 153 154 - The implementation of coinstatsindex was changed to prevent an overflow bug that 155 could already be observed on the default Signet. The new version of the index will 156 need to be synced from scratch when starting the upgraded node for the first time. 157 158 The new version is stored in `/indexes/coinstatsindex/` in contrast to the old version 159 which was stored at `/indexes/coinstats/`. The old version of the index is not deleted 160 by the upgraded node in case the user chooses to downgrade their node in the future. 161 If the user does not plan to downgrade it is safe for them to remove `/indexes/coinstats/` 162 from their datadir. A future release of Bitcoin Core may remove the old version of the 163 index automatically. (#30469) 164 165 Logging 166 ------- 167 - Unconditional logging to disk is now rate limited by giving each source location 168 a quota of 1MiB per hour. Unconditional logging is any logging with a log level 169 higher than debug, that is `info`, `warning`, and `error`. All logs will be 170 prefixed with `[*]` if there is at least one source location that is currently 171 being suppressed. (#32604) 172 173 - When `-logsourcelocations` is enabled, the log output now contains the entire 174 function signature instead of just the function name. (#32604) 175 176 Updated RPCs 177 ------------ 178 179 - The `-paytxfee` startup option and the `settxfee` RPC are now deprecated and 180 will be removed in Bitcoin Core 31.0. They allowed the user to set a static fee 181 rate for wallet transactions, which could potentially lead to overpaying or underpaying. 182 Users should instead rely on fee estimation or specify a fee rate per transaction 183 using the `fee_rate` argument in RPCs such as `fundrawtransaction`, `sendtoaddress`, 184 `send`, `sendall`, and `sendmany`. (#31278) 185 186 - Any RPC in which one of the parameters is a descriptor will throw an error 187 if the provided descriptor contains a whitespace at the beginning or the end 188 of the public key within a fragment - e.g. `pk( KEY)` or `pk(KEY )`. (#31603) 189 190 - The `submitpackage` RPC, which allows submissions of child-with-parents 191 packages, no longer requires that all unconfirmed parents be present. The 192 package may contain other in-mempool ancestors as well. (#31385) 193 194 - The `waitfornewblock` RPC now takes an optional `current_tip` argument. It 195 is also no longer hidden. (#30635) 196 197 - The `waitforblock` and `waitforblockheight` RPCs are no longer hidden. (#30635) 198 199 - The `psbtbumpfee` and `bumpfee` RPCs allow a replacement under fullrbf and no 200 longer require BIP-125 signalling. (#31953) 201 202 - Transaction Script validation errors used to return the reason for the error 203 prefixed by either `mandatory-script-verify-flag-failed` if it was a consensus 204 error, or `non-mandatory-script-verify-flag` (without "-failed") if it was a 205 standardness error. This has been changed to `block-script-verify-flag-failed` 206 and `mempool-script-verify-flag-failed` for all block and mempool errors 207 respectively. (#33183) 208 209 - The `getmininginfo` RPC now returns "blockmintxfee" result specifying the value of 210 `-blockmintxfee` configuration. (#33189) 211 212 - The `getmempoolinfo` RPC now returns an additional "permitbaremultisig" and 213 "maxdatacarriersize" field, reflecting the `-permitbaremultisig` and `-datacarriersize` 214 config values. (#29954) 215 216 Changes to wallet-related RPCs can be found in the Wallet section below. 217 218 New RPCs 219 -------- 220 221 - A new REST API endpoint (`/rest/spenttxouts/BLOCKHASH`) has been introduced for 222 efficiently fetching spent transaction outputs using the block's undo data (#32540). 223 224 Build System 225 ------------ 226 227 Updated settings 228 ---------------- 229 230 - The `-maxmempool` and `-dbcache` startup parameters are now capped on 32-bit systems 231 to 500MB and 1GiB respectively. (#32530) 232 233 - The `-natpmp` option is now set to `1` by default. This means nodes with `-listen` 234 enabled (the default) but running behind a firewall, such as a local network router, 235 will be reachable if the firewall/router supports any of the `PCP` or `NAT-PMP` 236 protocols. (#33004) 237 238 - The `-upnp` setting has now been fully removed. Use `-natpmp` instead. (#32500) 239 240 - Previously, `-proxy` specified the proxy for all networks (except I2P which 241 uses `-i2psam`) and only the Tor proxy could have been specified separately 242 via `-onion`. Now, the syntax of `-proxy` has been extended and it is possible 243 to specify separately the proxy for IPv4, IPv6, Tor and CJDNS by appending `=` 244 followed by the network name, for example `-proxy=127.0.0.1:5555=ipv6` 245 configures a proxy only for IPv6. The `-proxy` option can be used multiple 246 times to define different proxies for different networks, such as 247 `-proxy=127.0.0.1:4444=ipv4 -proxy=10.0.0.1:6666=ipv6`. Later settings 248 override earlier ones for the same network; this can be used to remove an 249 earlier all-networks proxy and use direct connections only for a given 250 network, for example `-proxy=127.0.0.1:5555 -proxy=0=cjdns`. (#32425) 251 252 - The `-blockmaxweight` startup option has been updated to be debug-only. 253 It is still available to users, but now hidden from the default `-help` text 254 and shown only in `-help-debug` (#32654). 255 256 Changes to GUI or wallet related settings can be found in the GUI or Wallet section below. 257 258 Wallet 259 ------ 260 261 - BDB legacy wallets can no longer be created or loaded. They can be migrated 262 to the new descriptor wallet format. Refer to the `migratewallet` RPC for more 263 details. 264 265 - The legacy wallet removal drops redundant options in the bitcoin-wallet tool, 266 such as `-withinternalbdb`, `-legacy`, and `-descriptors`. Moreover, the 267 legacy-only RPCs `addmultisigaddress`, `dumpprivkey`, `dumpwallet`, 268 `importaddress`, `importmulti`, `importprivkey`, `importpubkey`, 269 `importwallet`, `newkeypool`, `sethdseed`, and `upgradewallet`, are removed. 270 (#32944, #28710, #32438, #31250) 271 272 - Support has been added for spending TRUC transactions received by the 273 wallet, as well as creating TRUC transactions. The wallet ensures that 274 TRUC policy rules are being met. The wallet will throw an error if the 275 user is trying to spend TRUC utxos with utxos of other versions. 276 Additionally, the wallet will treat unconfirmed TRUC sibling 277 transactions as mempool conflicts. The wallet will also ensure that 278 transactions spending TRUC utxos meet the required size restrictions. (#32896) 279 280 - Since descriptor wallets do not allow mixing watchonly and non-watchonly descriptors, 281 the `include_watchonly` option (and its variants in naming) are removed from all RPCs 282 that had it. (#32618) 283 284 - The `iswatchonly` field is removed from any RPCs that returned it. (#32618) 285 286 - `unloadwallet` - Return RPC_INVALID_PARAMETER when both the RPC wallet endpoint 287 and wallet_name parameters are unspecified. Previously the RPC failed with a JSON 288 parsing error. (#32845) 289 290 - `getdescriptoractivity` - Mark blockhashes and scanobjects arguments as required, 291 so the user receives a clear help message when either is missing. As in `unloadwallet`, 292 previously the RPC failed with a JSON parsing error. (#32845) 293 294 - `getwalletinfo` - Removes the fields `balance`, `immature_balance` and 295 `unconfirmed_balance`. (#32721) 296 297 - `getunconfirmedbalance` - Removes this RPC command. You can query the `getbalances` 298 RPC and inspect the `["mine"]["untrusted_pending"]` entry within the JSON 299 response. (#32721) 300 301 - The following RPCs now contain a `version` parameter that allows 302 the user to create transactions of any standard version number (1-3): 303 - `createrawtransaction` 304 - `createpsbt` 305 - `send` 306 - `sendall` 307 - `walletcreatefundedpsbt` 308 (#32896) 309 310 GUI changes 311 ----------- 312 313 - The GUI has been migrated from Qt 5 to Qt 6. On Windows, dark mode is now supported. 314 On macOS, the Metal backend is now used. (#30997) 315 316 - A transaction's fee bump is allowed under fullrbf and no longer requires 317 BIP-125 signalling. (#31953) 318 319 - Custom column widths in the Transactions tab are reset as a side-effect of legacy 320 wallet removal. (#32459) 321 322 Low-level changes 323 ================= 324 325 - Logs now include which peer sent us a header. Additionally there are fewer 326 redundant header log messages. A side-effect of this change is that for 327 some untypical cases new headers aren't logged anymore, e.g. a direct 328 `BLOCK` message with a previously unknown header and `submitheader` RPC. (#27826) 329 330 Credits 331 ======= 332 333 Thanks to everyone who directly contributed to this release: 334 335 - 0xb10c 336 - amisha 337 - Andrew Toth 338 - Anthony Towns 339 - Antoine Poinsot 340 - Ava Chow 341 - benthecarman 342 - Brandon Odiwuor 343 - brunoerg 344 - Bue-von-hon 345 - Bufo 346 - Chandra Pratap 347 - Chris Stewart 348 - Cory Fields 349 - Daniel Pfeifer 350 - Daniela Brozzoni 351 - David Gumberg 352 - deadmanoz 353 - dennsikl 354 - dergoegge 355 - enoch 356 - Ethan Heilman 357 - Eugene Siegel 358 - Eunovo 359 - Eval EXEC 360 - Fabian Jahr 361 - fanquake 362 - Florian Schmaus 363 - fuder.eth 364 - furszy 365 - glozow 366 - Greg Sanders 367 - Hao Xu 368 - Haoran Peng 369 - Haowen Liu 370 - Hennadii Stepanov 371 - Hodlinator 372 - hoffman 373 - ishaanam 374 - ismaelsadeeq 375 - Jameson Lopp 376 - janb84 377 - Jiri Jakes 378 - John Bampton 379 - Jon Atack 380 - josibake 381 - jurraca 382 - kevkevin 383 - kevkevinpal 384 - kilavvy 385 - Kristaps Kaupe 386 - l0rinc 387 - laanwj 388 - leopardracer 389 - Lőrinc 390 - Luis Schwab 391 - Luke Dashjr 392 - MarcoFalke 393 - marcofleon 394 - Martin Zumsande 395 - Matt Corallo 396 - Matthew Zipkin 397 - Max Edwards 398 - monlovesmango 399 - Murch 400 - naiyoma 401 - nervana21 402 - Nicola Leonardo Susca 403 - Novo 404 - pablomartin4btc 405 - Peter Todd 406 - Pieter Wuille 407 - Pol Espinasa 408 - Prabhat Verma 409 - rkrux 410 - Roman Zeyde 411 - Ryan Ofsky 412 - Saikiran 413 - Salvatore Ingala 414 - Sebastian Falbesoner 415 - Sergi Delgado Segura 416 - Shunsuke Shimizu 417 - Sjors Provoost 418 - stickies-v 419 - stratospher 420 - stringintech 421 - strmfos 422 - stutxo 423 - tdb3 424 - TheCharlatan 425 - Tomás Andróil 426 - UdjinM6 427 - Vasil Dimov 428 - VolodymyrBg 429 - w0xlt 430 - will 431 - willcl-ark 432 - William Casarin 433 - woltx 434 - yancy 435 - zaidmstrr 436 437 As well as to everyone that helped with translations on 438 [Transifex](https://explore.transifex.com/bitcoin/bitcoin/).