# Release Notes for Bitcoin Cash Node version 24.0.0

Bitcoin Cash Node version 24.0.0 is now available from:

  <https://bitcoincashnode.org>

## Overview

This is a major release of Bitcoin Cash Node (BCHN) that implements the
[May 15, 2022 Network Upgrade](https://upgradespecs.bitcoincashnode.org/2022-05-15-upgrade/).
This release implements the following two consensus CHIPs:

- [CHIP-2021-03: Bigger Script Integers](https://gitlab.com/GeneralProtocols/research/chips/-/blob/master/CHIP-2021-02-Bigger-Script-Integers.md)
  increased precision for arithmetic operations.
- [CHIP-2021-02: Native Introspection Opcodes](https://gitlab.com/GeneralProtocols/research/chips/-/blob/master/CHIP-2021-02-Add-Native-Introspection-Opcodes.md) enabling smart contracts to inspect the current transaction.

This version contains further corrections and improvements, such as:

- [BIP69](https://github.com/bitcoin/bips/blob/master/bip-0069.mediawiki) (privacy) lexicographical sorting of transaction inputs/outputs
- A new wallet RPC call attribute ('include_unsafe') which enables
  creation of transactions which spend unconfirmed outputs
  (the default is still to spend only confirmed transactions)
- New settings, confirmation and error messages for the GUI to detect and
  warn the user about error-prone legacy address types.
- Update of the seeds and addition of a new seeder (bitjson.com)

Users who are running any of our previous releases (23.x.y) are urged
to upgrade to v24.0.0 ahead of May 2022.


## Usage recommendations

The update to Bitcoin Cash Node 24.0.0 is required for the May 15, 2022
Bitcoin Cash network upgrade.


## Network changes

This release brings two consensus CHIPs (increased precision for arithmetic
operations and native introspection opcodes) and one optional network change
- BIP69 - the sorting of inputs and output in transactions generated by the
wallet.

The first two (consensus changes) take effect with the upgrade in 15 May 2022.

BIP69 is effective immediately and enabled by default in this release.
The pre-BIP69 behavior can be obtained by passing `-usebip69=0` on startup.


## Added functionality

- After activation of the May 2022 upgrade, smart contract designers will
  be able to use OP_MUL, native introspection opcodes and higher-precision
  integers in Script code.

- `coinsel` option has been added to `sendmany` RPC call. This was done to
  keep uniformity with 'sendtoaddress'.

- A new option `-usebip69` has been added to toggle BIP69 usage (it is
  enabled by default). This sorts the inputs and outputs of a transaction
  in lexicographical order to increase transactional privacy.

- The `fundrawtransaction`, `sendmany`, `sendtoaddress` and
  `walletcreatefundedpsbt` RPCs now support an `include_unsafe` option that,
  when `true`, allows using "unsafe inputs" to fund the transaction.
  The term "unsafe inputs" is a synonym for unconfirmed inputs not originating
  from the wallet.  Note that the resulting transaction may become invalid
  if one of the "unsafe" inputs disappears due to a double-spend.
  This is a very unlikely scenario, however, on account of the strong
  zero-conf properties of the BCH network.  However, if that happens,
  the transaction must be funded with different inputs and republished.

- Two new options have been added to make legacy address handling safer in
  the GUI wallet: "Allow legacy P2PKH addresses" under Options > Wallet
  and the `-allowlegacyp2sh` configuration option.

- A new CLI argument `-bytespersigcheck` has been introducted
  (conf file: `bytespersigcheck`). It is identical to the existing argument
  `-bytespersigop` (which has been deprecated), and the two arguments are now
  aliases for one other.

- A new option `-upgrade9activationtime` has been added to control the
  timestamp of the tentative upgrade in May 2023. This value is also used
  to set the software expiry time.

## Deprecated functionality

- The CLI argument `-bytespersigop` (conf file: `bytespersigop`) has been
  deprecated. Use `-bytespersigcheck` instead.

## Modified functionality

- The software expiry deadline has now been shifted from 15 May 2022 to
  15 May 2023.

## Removed functionality

### autotools build system

The autotools build system is no longer supported by BCHN and has been removed.
Please use the CMake / ninja build system.

### Mempool acceptance 'height' field in RPC calls

The `getmempoolentry` RPC call, the verbose modes of the
`getrawmempool`/`getmempoolancestors`/`getmempooldescendants` RPC calls, and
the JSON mode of the mempool REST call no longer include the `height` field.
This used to indicate the block height upon mempool acceptance.
However, it was not guaranteed to be accurate after a node restart or reorg,
thus limiting its usefulness. Since it has been marked as deprecated for some
time, it has been removed in the interests of efficiency.

### No more PPA support for Ubuntu 16.04

Ubuntu 16.04 is no longer supported via a PPA.

Users are encouraged to migrate to a more recent version of Ubuntu if they
wish to use the Ubuntu PPAs.

Users who wish to compile from source are advised that the autotools build
system is no longer supported from this release onwards.

## New RPC methods

None.

## User interface changes

Legacy address handling has been made safer in the GUI wallet.
The aim is to save users from losing coins while using the error-prone
legacy P2PKH and P2SH address types.

Such receiving address types are detected and the user is given
relevant confirmation dialogs and error messages.
For this legacy address handling, two new settings are introduced,
one for P2PKH and one for P2SH addresses, to configure whether or not use
of these legacy address types is allowed. These settings are:

- "Allow legacy P2PKH addresses" under Options > Wallet
- `-allowlegacyp2sh` configuration option

## Regressions

Bitcoin Cash Node 24.0.0 does not introduce any known regressions as compared to 23.1.0.

## Known Issues

Some issues could not be closed in time for release, but we are tracking all of them on our GitLab repository.

- MacOS versions earlier than 10.12 are no longer supported. Additionally,
  Bitcoin Cash Node does not yet change appearance when macOS "dark mode"
  is activated.

- Windows users are recommended not to run multiple instances of bitcoin-qt
  or bitcoind on the same machine if the wallet feature is enabled.
  There is risk of data corruption if instances are configured to use the same
  wallet folder.

- Some users have encountered unit tests failures when running in WSL
  environments (e.g. WSL/Ubuntu).  At this time, WSL is not considered a
  supported environment for the software. This may change in future.

  The functional failure on WSL is tracked in Issue #33.
  It arises when competing node program instances are not prevented from
  opening the same wallet folder. Running multiple program instances with
  the same configured walletdir could potentially lead to data corruption.
  The failure has not been observed on other operating systems so far.

- `doc/dependencies.md` needs revision (Issue #65).

- `test_bitcoin` can collide with temporary files if used by more than
  one user on the same system simultaneously. (Issue #43)

- For users running from sources built with BerkeleyDB releases newer than
  the 5.3 which is used in this release, please take into consideration
  the database format compatibility issues described in Issue #34.
  When building from source it is recommended to use BerkeleyDB 5.3 as this
  avoids wallet database incompatibility issues with the official release.

- The `test_bitcoin-qt` test executable fails on Linux Mint 20
  (see Issue #144). This does not otherwise appear to impact the functioning
  of the BCHN software on that platform.

- With a certain combination of build flags that included disabling
  the QR code library, a build failure was observed where an erroneous
  linking against the QR code library (not present) was attempted (Issue #138).

- Some functional tests are known to fail spuriously with varying probability.
  (see e.g. issue #148, and a fuller listing in #162).

- Possible out-of-memory error when starting bitcoind with high excessiveblocksize
  value (Issue #156)

- A problem was observed on scalenet where nodes would sometimes hang for
  around 10 minutes, accepting RPC connections but not responding to them
  (see #210).

- Startup and shutdown time of nodes on scalenet can be long (see Issue #313).

- On some platforms, the splash screen can be maximized, but it cannot be
  unmaximized again (see #255). This has only been observed on Mac OSX,
  not on Linux or Windows builds.

- There is an issue with `git-lfs` that may interfere with the refreshing
  of source code checkouts which have not been updated for a longer time
  (see Issues #326, #333). A known workaround is to do a fresh clone of the
  repository.

---

## Changes since Bitcoin Cash Node 23.1.0

### New documents

The following are new documents in the BCHN software repository:

- [doc/gitian-building/gitian-building-docker.md](../gitian-building/gitian-building-docker.md): Adds a new streamlined Gitian setup guide tailored for Ubuntu/Debian users with Docker
- [doc/release-notes/release-notes-23.1.0.md](release-notes-23.1.0.md): The previous Release Notes

### Removed documents

None.

### Notable commits grouped by functionality

#### Security or consensus relevant fixes

None.

#### Interfaces / RPC

- af8ee2666dbd7653240117620ac96084b05fdae0 Bigger script integers (64-bit) implementation
- 05681fd0a614688430554b23b76fc01b8addb38a Implement bip69 and use in CWallet::CreateTransaction by default
- 4044ae2232059f6e96d2bc84179d56e5b6446506 Implementation of the Native Introspection proposal
- eff23d7d95e3cb47ef3f4aacbdcc1fac1347cfd4 Remove mempool acceptance block height field

#### Performance optimizations

- 3b44c66d9b10f30a954dac879e71ce0357b92b5a Remove `CTxMemPool::vTxHashes`

#### GUI

- 70460780ed480c22a917ca09a9614f1264f974b1 [qt][wallet] Safer legacy address handling for the GUI wallet
- 4e48ab0caac1b676a041fddcaba14c66e01f41ae Add guards and replace removed QWidget dependency

#### Data directory changes

None.

#### Code quality

- 60ae4cb4abf1d2b6d5eb71c2af69da9d39fd5b79 [qa] Fix compile warning about shadowed local in wallet_tests.cpp
- 5aba2e5381001c01b54c890e8bd9693f813b4946 [tests] Trivial: End object lifetime properly in a uint256 test
- ddfe6f4d4db8f08c165794da6119a63a2b32d682 Fix UB use of reinterpret_cast when working with sockets
- cfeb4093db9771889aa54b62985a8afc08b4e3c4 Fix compile warnings on newer clang
- bc30e7ad646554bf084e851a35d336b692f63c6f Remove old check for 3-byte shifted IP addresses from pre-0.2.9 node messages
- 234798dd814c55b6d44dabf37983a95d5c4b43b6 [qa] Update blockchain data sizes for mainnet, scalenet for v24.0.0
- fdb053f4d5666b152dc9751d1d30036798647d3c [qa] Update chain params (assumed valid and chainwork) for v24.0.0

#### Documentation updates

- b9edb72b06a1223f1761989be6ad649467f6ac5c [build][doc] Add Gitian on Docker guide & tidy related build process and docs
- a26e540d6ab30f3c5bfe4f5cf465831cfea50a00 [doc] Update BIPs and BCH upgrades (CHIPs etc) manifests for v24.0.0
- db9c8a7da77eee1da71fda1647f4bbe54de8253b [doc] Update the release process document

#### Build / general

- b9edb72b06a1223f1761989be6ad649467f6ac5c [build][doc] Add Gitian on Docker guide & tidy related build process and docs
- 4c8d660aa07da63c0d3992f5f10a9077f729beb8 Fix autotools build
- 8ef1ad67503d526e97c7e04a2eb0ecf52a7630f3 [build] Remove the autotools build system
- 761dfc4c1a0e9afc3c8e5431a9bef07985178655 Fix fuzzer to compile ok on some newer systems

#### Build / Linux

- 703c1aeb50f7a1ad5ef0fdff422ab11794c3b533 Fix compile issue on latest Debian unstable

#### Build / Windows

None.

#### Build / MacOSX

- 1789e3f1c23a51d580e9ee119c1f9754d0fde8b4 [build] Allow gitian-build.py to run on macOS

#### Tests / test framework

- 3f1df11d82b4fed445e3a8073d73c03dcd67c865 Fix rpc_tests unit test to not have rare spurious failures
- f3d73f5cbc6351294715feb1fc757893a8b291d6 [tests] Add ability to check for failed assert() to unit test framework
- a226c7fe5f73f3d7674ce31652f41483992abb2c Fix testlib_tests failing when compiling with ASAN and/or TSAN

#### Benchmarks

- e4912e6fe5a3aee9e49f299f40dfc3ae6b57f3fd bench: Added real-world benchmarking of VerifyScript
    
#### Seeds / seeder software

- f12548a94588b526851da9fcf927f0444f8bb524 [seeder] Fix stats display issues (garbled text)
- 024667e731ea423e6b2d68cb8e64f053e88d0106 [seeder] Only print ANSI control characters when stdout is a terminal

#### Maintainer tools

None.

#### Infrastructure

- 396f9afcfd772e80c5876828ee7f3fcf6d93a1aa Add bitjson DNS seeds
- 02e7048d9c6457a7d453373cf783f61161995a79 [qa] Update static seeds for v24.0.0

#### Cleanup

- 901a8626e1450689c561adb82180f8e2c6dfd50b Removed incorrect mentions and usages of "sigops"
- 31ec64d1a390a763338e9dc592d40a89e7bc7d01 Bump node expiry time to May 15 2023, add -upgrade9activationtime

#### Continuous Integration (GitLab CI)

None.

#### Backports

- 70752f8e6408661220a3eea4d7a1f99f4683a600 Core PR#12324 [backport] speed up Unserialize_impl for prevector
- 1c4d5a5a80940fe6895df4b7b3bcd642014ffd31 Core PR#21359 [backport] [wallet] Allow spending of unconfirmed coins in wallet RPC
- 9b129ffa47609f77e07253bf877f5f9b64a8db92 Core PR#15629 (partial) [backport] init: Throw error when network specific config is ignored
- e553c9c36db92f227322e74ea9c422d2138707b3 Core PR#15629 (partial) [backport] qa: Add test for missing testnet section in conf file
- f6aeed9f2d454836758a81414f515cd48e6e8f65 Core PR#16097 (partial) [backport] Refactor InterpretNegatedOption() function
- 7ef10ed78d345eaebd483513ac6d386a160ef5b6 Core PR#16097 (partial) [backport] Add Flags enum to ArgsManager
- e984047ab31d72714287ebc17a6e98021f99b6b8 Core PR#16097 (partial) [backport] Remove unused m_debug_only member from Arg struct
- 471e445c0ead6a68841fc067587cb0721d3e1cf9 Core PR#16097 (partial) [backport] Use ArgsManager::NETWORK_ONLY flag
- d15caff12dc444eda6c95c2efc020389446f08cf Core PR#16097 (partial) [backport] Replace IsArgKnown() with FlagsOfKnownArg()
- f21614c9f0b278cb7ee1a925fc24d21b383ca5bd Core PR#16097 (partial) [backport] Revamp option negating policy
- 137233442f9b9a2c30e1eed791c8af696457efc4 Core PR#16097 (partial) [backport] test: Make tests arg type specific
