github bitcoin-cash-node/bitcoin-cash-node v26.0.0
26.0.0

latest releases: v27.0.0, v26.1.0
16 months ago

Release Notes for Bitcoin Cash Node version 26.0.0

Bitcoin Cash Node version 26.0.0 is now available from:

https://bitcoincashnode.org

Overview

This release of Bitcoin Cash Node (BCHN) is marked as a major release but not due to consensus changes - only because it changes an interface (the rpcbind / rpcallowip options) in a way that is not completely backward compatible, and therefore needs to be tagged as a major version in accordance with Semantic Versioning.

However, for practical purposes, this version is more like a minor release, containing corrections and improvements such as:

  • RPC related bug fixes and output improvements
  • Performance optimization for getblock
  • A new benchmark performance bisection script
  • Some support code for future UTXO commitments
  • Minor documentation updates

Users who are running any of our previous releases (24.x.y or 25.0.0) are encouraged to upgrade to v26.0.0.

Usage recommendations

If you have been using the rpcallowip or rpcbind options, please see the 'Modified functionality' subsection of this document to take
changes into account in your configuration.

Network changes

A few RPC calls have been modified to support additional output fields.

Added functionality

A new verbosity level (3) has been added to getblock RPC command. It is like level 2 but each transaction will include inputs' prevout
information. The existing /rest/block/ REST endpoint is modified to contain this information too. Every vin field will contain an additional prevout subfield describing the spent output. prevout contains the following keys:

  • generated - true if the spent coin was a coinbase
  • height
  • value
  • scriptPubKey
  • tokenData (after May 2023 upgrade, appears if the transaction input had token data)

Deprecated functionality

None.

Modified functionality

  • The rpcallowip option can no longer be used to automatically listen on all network interfaces. Instead, the rpcbind parameter must be used to specify the IP addresses to listen on. Listening for RPC commands over a public network connection is insecure and should be disabled, so a warning is now printed if a user selects such a configuration. If you need to expose RPC in order to use a tool like Docker, ensure you only bind RPC to your localhost, e.g. docker run [...] -p 127.0.0.1:8332:8332 (this is an extra :8332 over the normal Docker port specification).

  • The getblock RPC command has been modified: verbosity level 2 now returns fee information per transaction in the block.

  • The getblock RPC command with verbosity level 0 now takes a faster path when returning raw block data to clients. It now skips some sanity checks, and assumes the block data read from disk is valid. Clients that read this serialized block data via this RPC call should be aware that it is not as stictly checked as it was previous to this release, and that it's now possible (in theory at least) to retrieve a corrupted block via the RPC interface.
    In practice, it's almost always the case that blocks are not corrupt on-disk and this changed guarantee yields significant performance improvements for RPC clients retrieving raw block data. Node admins can disable this new fast-path behavior by using the -checkblockreads=1 configuration option, which will enable extra consistency checks for raw block reads via RPC.

Removed functionality

None.

New RPC methods

None.

User interface changes

The semantics of the rpcallowip option have changed - see 'Modified functionality' subsection above.

Regressions

Bitcoin Cash Node 26.0.0 does not introduce any known regressions as compared to 25.0.0.

Limitations

Nothing new to report.

Known Issues

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

  • The minimum macOS version is 10.14 (Mojave). Earlier macOS versions are no longer supported.

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

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

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

  • At the time of writing, scalenet has not been mined for a while (since 10 August 2022), thus synchronization will stop at that block time. This isn't considered a BCHN issue per se, it depends on miners to resume mining this testnet.

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

  • Race condition in one of the p2p_invalid_messages.py tests (see Issue #409).

  • Occasional failure in bchn-txbroadcastinterval.py (see Issue #403).

  • wallet_keypool.py test failure when run as part of suite on certain many-core platforms (see Issue #380).

  • Spurious 'insufficient funds' failure during p2p_stresstest.py benchmark (see Issue #377).

  • If compiling from source, secp256k1 now no longer works with latest openssl3.x series. There are workarounds (see Issue #364).

  • Spurious AssertionError: Mempool sync timed out in several tests (see Issue #357).

  • For some platforms, there may be a need to install additional libraries in order to build from source (see Issue #431 and discussion in MR 1523).

  • More TorV3 static seeds may be needed to get -onlynet=onion working (see Issue #429).

  • Memory usage can be very high if repeatedly doing RPC getblock with verbose=2 on a hash of known big blocks (see Issue #466).


Changes since Bitcoin Cash Node 25.0.0

New documents

None.

Removed documents

None.

Notable commits grouped by functionality

Security or consensus relevant fixes

The semantic changes to rpcallowip have been made in consideration of increased node security, as listening for RPC commands on public network interfaces is insecure and should be disabled. See the 'Modified functionality' section above for details.

Interfaces / RPC

  • 1592a89 Don't log on success by default in ReadRawBlockFromDisk with -checkblockreads=1
  • 751bb58 Fix getblockstats feerate unit in the RPC command help
  • 931fe72 Nit: Some formatting nits in rpc/rawtransaction.cpp, getrawtransaction
  • b8c237a rpc: Add level 3 verbosity to getblock RPC call; Add fee to level 2
  • cf7e12c Improvements to getrawtransaction with verbosity=2
  • eb0b086 Nit: More nits for getrawtransaction in rpc/rawtransaction.cpp

Features in internal development: support for UTXO commitments

  • 718e29e Added new functions to secp256k1 for serializing the pubkey from a multiset
  • ebc2a16 Modify the generic code in hash.h to support alternate hashers
  • eeab3ac Added C++ wrapper for EC multiset, plus tests

Data directory changes

None.

Performance optimizations

  • 4c30a7f RPC: Read block data directly from disk in getblock verbosity=0
  • 7ae7d42 Remove spurious lock
  • 8ba475f Update chainparamsconstants.h for version v26.0.0
  • e1d39e5 Update checkpoints for v26.0.0 (main, test, test4, and chip)

GUI

None.

Code quality

  • 3be863d Some NITs (follow-up to MR 1600)
  • 5379d1c Minor nit: Fixed a typo and a formatting error in span.h
  • 8572878 Nit: Use CURRENCY_UNIT in getblockstats help rather than BCH
  • 8757d2a Fix bug: RPC & REST API sometimes reads from ::ChainActive() without locks
  • 8dc6789 httpserver: Address review comments from !1429
  • 9b5d13c Add additional sanity checks and a unit test for ReadRawBlockFromDisk()
  • a37951a Fix bug where getrawtransaction with verbose=2 on a coinbase txn fails

Documentation updates

  • 4f1ed0d [doc] Update the release version for signature verification instructions
  • d0308ce Add rpcthreads to example file.

Build / general

  • 00202a2 build: Check for dependency 'help2man'

Build / Linux

  • 9b6d19c Fix breaking ninja check-lint on my system after latest flake8

Build / Windows

None.

Build / MacOSX

None.

Tests / test framework

  • 2447938 Fix for rpc_blockchain.py intermittent failure.
  • 4355d67 Fix potential UB in wallet test fixture
  • 48d8116 Prevent theoretical UB for CConnMan and PeerLogicValidation mis-use in tests
  • 5256867 [fuzz] Avoid double and triple copying of data when running fuzzers
  • d7273ec Tests for C++20 work-alike Span
  • f3e488a Temporarily disable payment server tests which fail due to expired certificate

Benchmarks

  • 61413d0 Benchmark bisect script improvements

Seeds / seeder software

  • 88f1ac6 Update regex in makeseeds.py to accept BCHN v26.x.x
  • e8a8d5f Updated seeds for mainnet for v26.0.0

Maintainer tools

None.

Infrastructure

None.

Cleanup

None.

Continuous Integration (GitLab CI)

  • 25bdba4 [ci] Add sanitizer job for undefined behavior

Backports

  • 44830d4 [backport] net: Always default rpcbind to localhost, never "all interfaces"
  • 50b7cb4 [backport] tests: Modify rpc_bind to conform to #14532 behaviour.
  • af4a29d [backport] CNetAddr: Add IsBindAny method to check for INADDR_ANY
  • e07f97d [backport] rpcbind: Warn about exposing RPC to untrusted networks
  • 14cab13 [backport] net: fix use-after-free in tests

Don't miss a new bitcoin-cash-node release

NewReleases is sending notifications on new releases.