release-notes-23.0.md
1 23.0 Release Notes 2 ================== 3 4 Bitcoin Core version 23.0 is now available from: 5 6 <https://bitcoincore.org/bin/bitcoin-core-23.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 Mac) 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 extensively tested on operating systems 35 using the Linux kernel, macOS 10.15+, and Windows 7 and newer. 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 P2P and network changes 44 ----------------------- 45 46 - A bitcoind node will no longer rumour addresses to inbound peers by default. 47 They will become eligible for address gossip after sending an ADDR, ADDRV2, 48 or GETADDR message. (#21528) 49 50 - Before this release, Bitcoin Core had a strong preference to try to connect only to peers that listen on port 8333. As a result of that, Bitcoin nodes listening on non-standard ports would likely not get any Bitcoin Core peers connecting to them. This preference has been removed. (#23542) 51 52 - Full support has been added for the CJDNS network. See the new option `-cjdnsreachable` and [doc/cjdns.md](https://github.com/bitcoin/bitcoin/tree/23.x/doc/cjdns.md) (#23077) 53 54 Fee estimation changes 55 ---------------------- 56 57 - Fee estimation now takes the feerate of replacement (RBF) transactions into 58 account. (#22539) 59 60 Rescan startup parameter removed 61 -------------------------------- 62 63 The `-rescan` startup parameter has been removed. Wallets which require 64 rescanning due to corruption will still be rescanned on startup. 65 Otherwise, please use the `rescanblockchain` RPC to trigger a rescan. (#23123) 66 67 Tracepoints and Userspace, Statically Defined Tracing support 68 ------------------------------------------------------------- 69 70 Bitcoin Core release binaries for Linux now include experimental tracepoints which 71 act as an interface for process-internal events. These can be used for review, 72 debugging, monitoring, and more. The tracepoint API is semi-stable. While the API 73 is tested, process internals might change between releases requiring changes to the 74 tracepoints. Information about the existing tracepoints can be found under 75 [doc/tracing.md](https://github.com/bitcoin/bitcoin/blob/23.x/doc/tracing.md) and 76 usage examples are provided in [contrib/tracing/](https://github.com/bitcoin/bitcoin/tree/23.x/contrib/tracing). 77 78 Updated RPCs 79 ------------ 80 81 - The `validateaddress` RPC now returns an `error_locations` array for invalid 82 addresses, with the indices of invalid character locations in the address (if 83 known). For example, this will attempt to locate up to two Bech32 errors, and 84 return their locations if successful. Success and correctness are only guaranteed 85 if fewer than two substitution errors have been made. 86 The error message returned in the `error` field now also returns more specific 87 errors when decoding fails. (#16807) 88 89 - The `-deprecatedrpc=addresses` configuration option has been removed. RPCs 90 `gettxout`, `getrawtransaction`, `decoderawtransaction`, `decodescript`, 91 `gettransaction verbose=true` and REST endpoints `/rest/tx`, `/rest/getutxos`, 92 `/rest/block` no longer return the `addresses` and `reqSigs` fields, which 93 were previously deprecated in 22.0. (#22650) 94 - The `getblock` RPC command now supports verbosity level 3 containing transaction inputs' 95 `prevout` information. The existing `/rest/block/` REST endpoint is modified to contain 96 this information too. Every `vin` field will contain an additional `prevout` subfield 97 describing the spent output. `prevout` contains the following keys: 98 - `generated` - true if the spent coins was a coinbase. 99 - `height` 100 - `value` 101 - `scriptPubKey` 102 103 - The top-level fee fields `fee`, `modifiedfee`, `ancestorfees` and `descendantfees` 104 returned by RPCs `getmempoolentry`,`getrawmempool(verbose=true)`, 105 `getmempoolancestors(verbose=true)` and `getmempooldescendants(verbose=true)` 106 are deprecated and will be removed in the next major version (use 107 `-deprecated=fees` if needed in this version). The same fee fields can be accessed 108 through the `fees` object in the result. WARNING: deprecated 109 fields `ancestorfees` and `descendantfees` are denominated in sats, whereas all 110 fields in the `fees` object are denominated in BTC. (#22689) 111 112 - Both `createmultisig` and `addmultisigaddress` now include a `warnings` 113 field, which will show a warning if a non-legacy address type is requested 114 when using uncompressed public keys. (#23113) 115 116 Changes to wallet related RPCs can be found in the Wallet section below. 117 118 New RPCs 119 -------- 120 121 - Information on soft fork status has been moved from `getblockchaininfo` 122 to the new `getdeploymentinfo` RPC which allows querying soft fork status at any 123 block, rather than just at the chain tip. Inclusion of soft fork 124 status in `getblockchaininfo` can currently be restored using the 125 configuration `-deprecatedrpc=softforks`, but this will be removed in 126 a future release. Note that in either case, the `status` field 127 now reflects the status of the current block rather than the next 128 block. (#23508) 129 130 Files 131 ----- 132 133 * On startup, the list of banned hosts and networks (via `setban` RPC) in 134 `banlist.dat` is ignored and only `banlist.json` is considered. Bitcoin Core 135 version 22.x is the only version that can read `banlist.dat` and also write 136 it to `banlist.json`. If `banlist.json` already exists, version 22.x will not 137 try to translate the `banlist.dat` into json. After an upgrade, `listbanned` 138 can be used to double check the parsed entries. (#22570) 139 140 Updated settings 141 ---------------- 142 143 - In previous releases, the meaning of the command line option 144 `-persistmempool` (without a value provided) incorrectly disabled mempool 145 persistence. `-persistmempool` is now treated like other boolean options to 146 mean `-persistmempool=1`. Passing `-persistmempool=0`, `-persistmempool=1` 147 and `-nopersistmempool` is unaffected. (#23061) 148 149 - `-maxuploadtarget` now allows human readable byte units [k|K|m|M|g|G|t|T]. 150 E.g. `-maxuploadtarget=500g`. No whitespace, +- or fractions allowed. 151 Default is `M` if no suffix provided. (#23249) 152 153 - If `-proxy=` is given together with `-noonion` then the provided proxy will 154 not be set as a proxy for reaching the Tor network. So it will not be 155 possible to open manual connections to the Tor network for example with the 156 `addnode` RPC. To mimic the old behavior use `-proxy=` together with 157 `-onlynet=` listing all relevant networks except `onion`. (#22834) 158 159 Tools and Utilities 160 ------------------- 161 162 - Update `-getinfo` to return data in a user-friendly format that also reduces vertical space. (#21832) 163 164 - CLI `-addrinfo` now returns a single field for the number of `onion` addresses 165 known to the node instead of separate `torv2` and `torv3` fields, as support 166 for Tor V2 addresses was removed from Bitcoin Core in 22.0. (#22544) 167 168 Wallet 169 ------ 170 171 - Descriptor wallets are now the default wallet type. Newly created wallets 172 will use descriptors unless `descriptors=false` is set during `createwallet`, or 173 the `Descriptor wallet` checkbox is unchecked in the GUI. 174 175 Note that wallet RPC commands like `importmulti` and `dumpprivkey` cannot be 176 used with descriptor wallets, so if your client code relies on these commands 177 without specifying `descriptors=false` during wallet creation, you will need 178 to update your code. 179 180 - Newly created descriptor wallets will contain an automatically generated `tr()` 181 descriptor which allows for creating single key Taproot receiving addresses. 182 183 - `upgradewallet` will now automatically flush the keypool if upgrading 184 from a non-HD wallet to an HD wallet, to immediately start using the 185 newly-generated HD keys. (#23093) 186 187 - a new RPC `newkeypool` has been added, which will flush (entirely 188 clear and refill) the keypool. (#23093) 189 190 - `listunspent` now includes `ancestorcount`, `ancestorsize`, and 191 `ancestorfees` for each transaction output that is still in the mempool. 192 (#12677) 193 194 - `lockunspent` now optionally takes a third parameter, `persistent`, which 195 causes the lock to be written persistently to the wallet database. This 196 allows UTXOs to remain locked even after node restarts or crashes. (#23065) 197 198 - `receivedby` RPCs now include coinbase transactions. Previously, the 199 following wallet RPCs excluded coinbase transactions: `getreceivedbyaddress`, 200 `getreceivedbylabel`, `listreceivedbyaddress`, `listreceivedbylabel`. This 201 release changes this behaviour and returns results accounting for received 202 coins from coinbase outputs. The previous behaviour can be restored using the 203 configuration `-deprecatedrpc=exclude_coinbase`, but may be removed in a 204 future release. (#14707) 205 206 - A new option in the same `receivedby` RPCs, `include_immature_coinbase` 207 (default=`false`), determines whether to account for immature coinbase 208 transactions. Immature coinbase transactions are coinbase transactions that 209 have 100 or fewer confirmations, and are not spendable. (#14707) 210 211 GUI changes 212 ----------- 213 214 - UTXOs which are locked via the GUI are now stored persistently in the 215 wallet database, so are not lost on node shutdown or crash. (#23065) 216 217 - The Bech32 checkbox has been replaced with a dropdown for all address types, including the new Bech32m (BIP-350) standard for Taproot enabled wallets. 218 219 Low-level changes 220 ================= 221 222 RPC 223 --- 224 225 - `getblockchaininfo` now returns a new `time` field, that provides the chain tip time. (#22407) 226 227 Tests 228 ----- 229 230 - For the `regtest` network the activation heights of several softforks were 231 set to block height 1. They can be changed by the runtime setting 232 `-testactivationheight=name@height`. (#22818) 233 234 Credits 235 ======= 236 237 Thanks to everyone who directly contributed to this release: 238 239 - 0xb10c 240 - 0xree 241 - Aaron Clauson 242 - Adrian-Stefan Mares 243 - agroce 244 - aitorjs 245 - Alex Groce 246 - amadeuszpawlik 247 - Amiti Uttarwar 248 - Andrew Chow 249 - Andrew Poelstra 250 - Andrew Toth 251 - anouar kappitou 252 - Anthony Towns 253 - Antoine Poinsot 254 - Arnab Sen 255 - Ben Woosley 256 - benthecarman 257 - Bitcoin Hodler 258 - BitcoinTsunami 259 - brianddk 260 - Bruno Garcia 261 - CallMeMisterOwl 262 - Calvin Kim 263 - Carl Dong 264 - Cory Fields 265 - Cuong V. Nguyen 266 - Darius Parvin 267 - Dhruv Mehta 268 - Dimitri Deijs 269 - Dimitris Apostolou 270 - Dmitry Goncharov 271 - Douglas Chimento 272 - eugene 273 - Fabian Jahr 274 - fanquake 275 - Florian Baumgartl 276 - fyquah 277 - Gleb Naumenko 278 - glozow 279 - Gregory Sanders 280 - Heebs 281 - Hennadii Stepanov 282 - hg333 283 - HiLivin 284 - Igor Cota 285 - Jadi 286 - James O'Beirne 287 - Jameson Lopp 288 - Jarol Rodriguez 289 - Jeremy Rand 290 - Jeremy Rubin 291 - Joan Karadimov 292 - John Newbery 293 - Jon Atack 294 - João Barbosa 295 - josibake 296 - junderw 297 - Karl-Johan Alm 298 - katesalazar 299 - Kennan Mell 300 - Kiminuo 301 - Kittywhiskers Van Gogh 302 - Klement Tan 303 - Kristaps Kaupe 304 - Kuro 305 - Larry Ruane 306 - lsilva01 307 - lucash-dev 308 - Luke Dashjr 309 - MarcoFalke 310 - Martin Leitner-Ankerl 311 - Martin Zumsande 312 - Matt Corallo 313 - Matt Whitlock 314 - MeshCollider 315 - Michael Dietz 316 - Murch 317 - naiza 318 - Nathan Garabedian 319 - Nelson Galdeman 320 - NikhilBartwal 321 - Niklas Gögge 322 - node01 323 - nthumann 324 - Pasta 325 - Patrick Kamin 326 - Pavel Safronov 327 - Pavol Rusnak 328 - Perlover 329 - Pieter Wuille 330 - practicalswift 331 - pradumnasaraf 332 - pranabp-bit 333 - Prateek Sancheti 334 - Prayank 335 - Rafael Sadowski 336 - rajarshimaitra 337 - randymcmillan 338 - ritickgoenka 339 - Rob Fielding 340 - Rojar Smith 341 - Russell Yanofsky 342 - S3RK 343 - Saibato 344 - Samuel Dobson 345 - sanket1729 346 - seaona 347 - Sebastian Falbesoner 348 - sh15h4nk 349 - Shashwat 350 - Shorya 351 - ShubhamPalriwala 352 - Shubhankar Gambhir 353 - Sjors Provoost 354 - sogoagain 355 - sstone 356 - stratospher 357 - Suriyaa Rocky Sundararuban 358 - Taeik Lim 359 - TheCharlatan 360 - Tim Ruffing 361 - Tobin Harding 362 - Troy Giorshev 363 - Tyler Chambers 364 - Vasil Dimov 365 - W. J. van der Laan 366 - w0xlt 367 - willcl-ark 368 - William Casarin 369 - zealsham 370 - Zero-1729 371 372 As well as to everyone that helped with translations on 373 [Transifex](https://www.transifex.com/bitcoin/bitcoin/).