Skip to content


Choose a tag to compare
@ftrader ftrader released this 16 Oct 10:48
· 1515 commits to master since this release

Release Notes for Bitcoin Cash Node version 22.1.0

Bitcoin Cash Node version 22.1.0 is now available from:


This is a minor release of Bitcoin Cash Node that implements some interface enhancements and includes a number of other corrections and improvements.

Users who are running any of our previous releases are recommended to upgrade to v22.1.0 ahead of November 2020.

We remind that the 0.21.x family of BCHN releases does not implement the new rules for the coming November 2020 upgrade. Users must upgrade to a release in the 22.x family before November 15th, 2020.

Usage recommendations

Installing this version is optional, but we recommend that users of 22.0.0 upgrade to this minor release for the corrections contained in it.

This update is compatible with the November 15, 2020 Bitcoin Cash network upgrade.

Network changes

New test network options.

This release delivers the ability to access two new test networks:

  • testnet4 (more lightweight test network to be kept spam-free)
  • scalenet (for high-throughput tests, including at block sizes beyond
    current main network maximum)

Please refer to doc/ or for further information.

New seeder configuration

Added configuration to access new DNS seeders from and a new mainnet seeder.

  • (mainnet)
  • (mainnet)
  • (testnet3)
  • (testnet4)
  • (scalenet)

Removed the defunct seeder entry

Added functionality


This release implements the 'extversion' extended versioning handshake protocol (ref. BCHN merge requests !558 and !753), previously implemented by Bitcoin Unlimited. We thank Greg Griffith and the Bitcoin Unlimited developers for their efforts to achieve this implementation in BCHN.

The extversion handshaking is disabled by default and can be enabled using the -useextversion CLI argument or the useextversion=1 configuration file setting.

Nodes indicate extversion support by setting service bit 11 (EXTVERSION).

Right now the BCHN implementation of ExtVersion supports only 1 key -- the "Version" key.

The specification can be found in doc/ or at .


A new indexdir configuration option allows the user to specify a path under which the leveldb 'index' folder is stored.

The use case for this new option is to store the index on a separate volume of faster access media while the blocks can be stored on slower media.

If the argument is not specified, the index is stored in the usual place (in the blocks/index/ folder).


A new finalizeheaders configuration option (enabled by default) rejects block headers which are below the finalized block height (if a block has indeed been finalized already).

Finalized blocks are not supposed to be re-organized under any circumstances (just like checkpointed blocks). There is therefore no need to accept headers for alternate chains below the last finalized block.

Nodes which submit such blocks are penalized according to a penalty score determined by the finalizeheaderspenalty option (default is 100, meaning such nodes will be disconnected).

In practice this works to quickly disconnect nodes from old chains like the "Clashic" network which sometimes submit headers of forked off chains with vastly lower block heights.

New debugging tracepoints

Two new debugging tracepoints have been added:

  • debug=finalization
  • debug=parking

These can be used to log events related to automatic finalization and parking/unparking.

Deprecated functionality

No functionality is deprecated in this release.

Removed functionality

No functionality is removed in this release.

New RPC methods

No new RPC methods are added in this release, however some argument aliases are added to existing calls (for backward compatibility) and a new optional parameter is added to the sendtoaddress method (for improved coin selection performance).

Low-level RPC changes

An optional coin selection ('coinsel') argument has been added to the sendtoaddress RPC method.

An alias blockhash has been added for the hash_or_height parameter of the getblockheader call, for backward compatibility.

An alias dummy has been added for the parameters argument of the submitblock call, for backward compatibility.


Bitcoin Cash Node 22.1.0 does not introduce any known regressions compared to 22.0.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/ needs revision (Issue #65).

  • arc lint will advise that some src/ files are in need of reformatting
    or contain errors. - this is because code style checking is currently a work in
    progress while we adjust it to our own project requirements (see Issue #75).
    One file in doc also violates the lint tool (Issue #153), and a new
    script in test/benchmark/ likewise contains code that is flagged by
    the current linting configuration.

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

  • There is a documentation build bug that causes some ordered lists on to be rendered incorrectly (Issue #141).

  • There is a report that 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.

  • An 'autotools' build (the old build method) fails on OSX when using Clang.
    (Issue #129)

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

  • The 'autotools' build is known to require some workarounds in order to
    use the 'fuzzing' build feature (Issue #127).

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

Changes since Bitcoin Cash Node 22.0.0

New documents

  • doc/ : an overview of the test networks supported by BCHN

Removed documents


Notable commits grouped by functionality

Network fixes

No changes.

Interfaces / RPC

  • 3379ccd Fix getblocktemplate sigop/blocksize limits to reflect -excessiveblocksize setting
  • 558a4a3 Add -expirerpc to list of intentionally undocumented CLI arguments
  • c21c8ee Implement Extversion
  • ac8192a Fix to EXTVERSION handshake causing peers to punish each other for misbehavior (simplified)
  • ad701aa [rpc] Override error messages in sendtoaddress
  • 1e90a52 Add 'finalization' & 'parking' debugging tracepoints
  • 5c62505 Add indexdir parameter to bitcoind
  • 44669a2 rpc: Add coin selection argument with fast option to sendtoaddress
  • 897b181 RPC: Add alias blockhash to getblockheader for backward compatibility
  • 1df9b1c RPC: Alias dummy for second arg to submitblock for compatibility

Peformance optimizations

  • 692fdfb [Net] Don't keep 3 copies of the NetMsgType strings in memory
  • f60a16c fix CTxMemPool::TrimToSize including too many things in pvNoSpendsRemaining
  • 84b36dd rpc: Change error checking of sendtoaddress to improve success path performance
  • 59a23ae [validation] Make CheckRegularTransaction about 2x-10x faster for typical tx by avoiding malloc
  • bf43658 Add option to reject and penalize headers deeper than finalized block


Code quality

  • 1de5329 SigHashType: document the footgun
  • 534469c [net] Follow-up to !622, reduce/remove some double-copies and other nits
  • a69b88a Restrict CBlockIndex to not allow copy, move, or assignment
  • e6748bc Remove unreferenced AVAPOLL and AVARESPONSE symbols from protocol.cpp
  • 42b1739 Make src/rpc/mining.cpp use config.GetMaxBlockSize() instead of DEFAULT_MAX_BLOCK_SIZE
  • fcb23ba Strong typing for UniValue, part 1: rename ObjectEntries, ArrayValues, write() (#51)
  • efeacd0 [Net] Make protocol string commands const-correct
  • 268537d Remove UniValue::__pushKV()
  • 63c3240 Improve UniValue array/object constructors/setters
  • 5abc0b8 Rename UniValue::find() to locate()
  • f0d956c Strong typing for UniValue, part 2: minor preparatory refactors (#51)
  • 027ecf8 [txmempool] Remove dangling/obsolete code in removeForBlock(...)
  • 56878c8 Introduce UniValue::at()
  • 198429f Made the CTransaction class no longer default constructible
  • 8dd5b07 Remove copy & assignment for CTranscaction for type safety
  • bbad18d [qa] Fix misleading comment in script_flags.h
  • 077d1d4 [trivial] Fixed a typo in a comment in the CTransaction class
  • 156de35 Introduce UniValue::size_type
  • be048a1 Strong typing for UniValue, part 3: Object and Array classes
  • 1cd875b Improve UniValue::at() exception messages
  • 71f2d6b Upgrade UniValue::get_obj/get_array()
  • a657de3 Remove UniValue::takeArrayValues()
  • ea36c77 Remove UniValue::getArrayValues()
  • 3a524cf Remove UniValue::getObjectEntries()
  • 66ca616 Strong typing for UniValue, part 4: remove redundant object/array getter methods
  • bdbc076 Fixed UniValue bug: don't take pointers to temporaries
  • 6785f66 Strong typing for UniValue, part 5: make copy-upcast constructors explicit
  • 2d30582 Remove declared but undefined function: fsbridge::freopen
  • e60b06a Prohibit implicit UniValue::VType to UniValue conversion
  • 53f5d4b Prohibit implicit UniValue copying
  • 3b5f03c Prohibit implicit UniValue::Object copying
  • 0587870 Prohibit implicit UniValue::Array copying
  • ff0ea6b Replaced many instances of std::string pass-by-value with pass-by-ref
  • caf6845 Removed use of designated initializers from code: Not supported in C++-14
  • a9e3e4d Make more UniValue copy constructors explicit
  • 2313ef2 Make chainparamsseeds.h use numeric strings for human-readability
  • bfb3794 [wallet] Change return type of CreateTransaction
  • 2e5d7de [rpc] Replace error heuristics with rc check
  • 6eea1e1 Remove 'Optional'-related false positive uninitialized warnings on GCC
  • e3107d7 Fix GCC compile warning in seedspec6_tests.cpp related to missing braces
  • bf46211 [qa] Various cleanups in (linting and #173)

Documentation updates

  • 06557a8 mr -> mreq and mark commands and packages as such
  • c2d59dd [doc] Add 'bounty' label
  • 42706ea Update UniValue readme
  • 0fd21e4 [doc] Add test-networks document (to accompany introduction of testnet4/scalenet)
  • 24c868e [doc] Regenerate (update) the manpages and markdown docs for v22.1.0

Build / general

No changes.

Build / Linux

No changes.

Build / Windows

  • 7f87de8 Add NSIS related shortcut code changes

Build / MacOSX

No changes.

Tests / test framework

  • 229c11d [backport] tests: Make updatecoins_simulation_test deterministic
  • b970299 Functional test that getblocktemplate's size/sigop limits change with -excessiveblocksize
  • e56eaa0 Fix bchn-rpc-outdated-warnings functional test on slow PC
  • 610275b [qa] Improve sendtoaddress test coverage
  • db686fa Faster sendtoaddress RPC and spam generation/stress testing script
  • c8bd3ed Fix EXPECTED_VIOLATION_COUNT warning for check-functional


  • db686fa Faster sendtoaddress RPC and spam generation/stress testing script

Seeds / seeder software

  • c8c66af Fix seeder on chains without checkpoints

Maintainer tools

  • 4c2a598 This updates the static seed tools.
  • 1151bb2 Update static seed tooling and chainparams naming of static seed lists
  • 255e013 Detect -testnet4 and -scalenet from GetNetBoolArg call


  • fd8f0ff Make the default blocksize limit a consensus/chainparam value
  • d04560f Update contrib/gitian-signing/keys.txt, contrib/gitian-signing/pubkeys.txt files
  • 29e5d7d [qa] Add imaginary_username gitian signing pubkey
  • 8ec7f4c [qa] Add freetrader launchpad signing pubkey
  • 174b0fd Add testnet4
  • fcd80dd Scalenet
  • cae9862 Remove seeders, they haven't been working for 8 months
  • e0904b5 Add new seeders
  • 16da9bf Add new mainnet seeder
  • 08e332d Scalenet and Testnet4 must use May 2020 HF height of 0


  • e2edfe5 [cleanup] Remove radix-tree

Continuous Integration (GitLab CI)

No changes.


  • 229c11d ABC: D6620: [backport] tests: Make updatecoins_simulation_test deterministic
  • 631697e ABC: D5689,D5619: [backport] Replace the test runner with a test wrapper ; Set environment variables when running tests with sanitizers