Skip to content

27.0.0

Latest
Compare
Choose a tag to compare
@ftrader ftrader released this 13 Dec 09:11

Release Notes for Bitcoin Cash Node version 27.0.0

Bitcoin Cash Node version 27.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, 2024 Network Upgrade.

This release implements the following consensus CHIPs:

This version contains various additional minor corrections and improvements.

Users who are running any of our previous releases (25.0.0 or v26.x.0) are urged to upgrade to v27.0.0 ahead of 15 May 2024.

Usage recommendations

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

Network changes

This major release implements the Adaptive Blocksize Limit Algorithm for Bitcoin Cash, which is a change to consensus rules that allows the maximum block size to gradually increase and decrease based on how full blocks are.

Added functionality

  • Added configuration option -percentblockmaxsize which is an alternative to -blockmaxsize. -percentmaxblocksize can be used to configure the node's maximum mined block size as a percentage of the maximum block size for the network. So for instance the default on mainnet is -percentblockmaxsize=50.0 (16 MB). Can be any value from 0.0 to 100.0.

Deprecated functionality

  • While 32-bit builds are still supported in this release, they are deprecated and planned to be removed from BCHN after the May 2024 upgrade.

Modified functionality

  • The -excessiveblocksize configuration value has modified semantics pre-upgrade vs post-upgrade. After ABLA activates, it acts as a floor value as the base "minimum" max block size.
  • Added an additional returned data item to the getmininginfo RPC:
    "miningblocksizelimit", which is the block size limit used for mining as configured for the node by e.g.: -blockmaxsize.
  • The Qt GUI RPC console now is fixed to match the HTTP RPC with respect to stateful "config related" commands. Commands such as getmininginfo and getexcessiveblock now match the actual node config (and the HTTP RPC).
  • The default size cap for mining blocks has been set to 50% of the capacity on networks where it has previously been set to 25%. This effectively increases the soft (mining) blocksize default from 8MB to 16MB. Mining pools that wish to generate bigger or smaller blocks can still adjust the configuration option as usual.

Removed functionality

None.

New RPC methods

A 'fillmempool' RPC method has been added for regtest.

User interface changes

  • The new configuration option -percentblockmaxsize has been added. It is described in more detail in the "Added functionality" section above.

Regressions

Bitcoin Cash Node 27.0.0 does not introduce any known regressions as compared to 26.1.0.

Limitations

The following are limitations in this release of which users should be aware:

  1. CashToken support is low-level at this stage. The wallet application does not yet keep track of the user's tokens.
    Tokens are only manageable via RPC commands currently. They only persist through the UTXO database and block database at this
    point.
    There are existing RPC commands to list and filter for tokens in the UTXO set.
    RPC raw transaction handling commands have been extended to allow creation (and sending) of token transactions.
    Interested users are advised to consult the functional test in test/functional/bchn-rpc-tokens.py for examples on token transaction
    construction and listing.
    Future releases will aim to extend the RPC API with more convenient ways to create and spend tokens, as well as upgrading the wallet storage and indexing subsystems to persistently store data about tokens of interest to the user. Later we expect to add GUI wallet management of Cash Tokens.

  2. Transactions with SIGHASH_UTXO are not covered by DSProofs at present.

  3. P2SH-32 is not used by default in the wallet (regular P2SH-20 remains the default wherever P2SH is treated).

  4. The markup of Double Spend Proof events in the wallet does not survive a restart of the wallet, as the information is not persisted to the wallet.

  5. The ABLA algorithm for BCH is currently temporarily set to cap the max block size at 2GB. This is due to limitations in the p2p protocol (as well as the block data file format in BCHN).

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. It has been reported that using WSL2 improves the issue.

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

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

  • A GUI crash failure was observed when attempting to encrypt a large imported wallet (see Issue #490).

  • Nodes on 32-bit platforms could fail if blocks reach a size over 1GiB (per ABLA this would take multiple years, and by then 32-bit platforms will no longer be supported in any case). Technically, this is because blocks may take 2x-3x as much memory when unserialized into memory as they do when serialized, and 32-bit machines often cannot address more than 2GiB in a userspace process, and can never address more than 4GiB.

  • The 'wallet_multiwallet' functional test fails on latest Arch Linux due to a change in semantics in a dependency (see Issue #505). This is not expected to impact functionality otherwise, only a particular edge case of the test.

  • The 'p2p_extversion' functional test is sensitive to timing issues when run at high load (see Issue #501).


Changes since Bitcoin Cash Node 26.1.0

New documents

None

Removed documents

None

Notable commits grouped by functionality

Security or consensus relevant fixes

  • 286ca4e Implement CHIP-2023-04 Adaptive Blocksize Limit Algorithm

Interfaces / RPC

  • 37f9f47 Bump node expiry to May 15, 2025, introduce tentative "upgrade11"
  • a7b52f8 Add the RPC fillmempool (regtest only)
  • b110d07 Added new CLI arg -percentblockmaxsize as an alternative to -blockmaxsize
  • e4bc71d Add the ability to see the configured -blockmaxsize from the RPC

Features in internal development: support for UTXO commitments

None

Data directory changes

None

Performance optimizations

  • 40e3d6c Update the codebase to do a height-based check for upgrade 9
  • 6877945 Increase the default mining block sizes
  • a130eb0 Add ReadBlockSizeFromDisk() function to blockstorage.cpp
  • bedee41 [qa] Update chainparams assumevalid and minimumchainwork for 27.0.0
  • e635da2 [qa] Update network checkpoints

GUI

  • 24bd121 Alternative fix for Qt GUI RPC Console using an "ephemeral" config object

Code quality

  • 0eaa947 Code quality nit: Fix a G++ 12 warning in blockstorage.cpp
  • 45ad5a4 Make class CAutoFile move-assignable and move-constructible
  • 4624f04 Compiler warning fix: Remove unused variable in policy.cpp
  • 7b78121 Trivial: Fix two typos in comments in miner_tests.cpp
  • 7f2b83a [qa] Bump version to 27.0.0, rotate release notes
  • 94433b8 Add support for generic serialization of std::optional
  • 959d6ed Add GetNextBlockSizeLimit(), refactor BlockAssembler to use it
  • a395e31 Fix comparing wrong blocksize parameter variable
  • b7110f8 [qa] Update blockchain data sizes for mainnet for v27.0.0
  • bf9c3c7 Rename the "excessive block size" concept in the C++ codebase
  • c8bcd18 Compiler warning fix: Remove unused variable in txmempool.cpp
  • ca48aa4 [qa] Update copyrights across the codebase
  • d0f989c Add Upgrade 10 "Activation" API and unit test
  • fa886d4 Remove const_cast<Config &> from various places in code.

Documentation updates

  • 73e413c [doc] Update Clang formatting tools documentation
  • 79c8650 [qa] Update test network document to reflect testnet3/4 remain fixed
  • b46cec2 [doc] Update header include guard documentation
  • e318139 [doc] Add ABLA CHIP to BCHN's BCH upgrades document

Build / general

  • ebed3da Added HAVE_INT128 test and variable to bitcoin-config.h

Build / Linux

  • 2adefbf build: Support building inside of a git worktree

Build / Windows

  • 9a767b3 [build] Remove unnecessary _Event_WINDOWS_LIBRARIES

Build / MacOSX

None

Tests / test framework

  • 67ca3f4 [tests] fix PEP 484 implicit optional error
  • 88300e6 Add a unit test for the Config class's "percent max blocksize" setter/getter
  • f4a906b test framework: Pass down the rpc_timeout to wait_until on node restart

Benchmarks

None

Seeds / seeder software

  • 0521923 Update regex'es in makeseeds.py ahead of May 2024 upgrade
  • 2c08e4c [qa] Update static seeds for some test networks
  • 43a1620 [qa] Update mainnet static seeds for v27.0.0 release
  • 55f5916 [qa] Update static seeds for chipnet test network

Maintainer tools

None

Infrastructure

None

Cleanup

  • 66442fd [qa] Update freetrader public key (expiry extension to 2025-06-07)

Continuous Integration (GitLab CI)

  • 64fd5f8 [ci] Pin the pymdown-extensions dependency to v10.2.1
  • 9300b88 CI: Save more sanitizer-undefined artifacts on failure

Backports

  • 1ae5ca2 [backport] refactor: Drop owns_lock() call
  • 34301c7 [backport] build: libevent 2.1.12-stable
  • 8e889ee [backport] refactor: Do not discard try_lock() return value
  • b9a103d [backport] [cmake] Use the protobuf supplied cmake file instead of the cmake supplied one
  • c97419d [backport] build: suppress array-bounds errors in libxkbcommon
  • fc9c13e [backport] bump libevent to 2.1.11 in depends