Release Notes for Bitcoin Cash Node version 0.21.2

Bitcoin Cash Node version 0.21.2 is now available from:


This release of Bitcoin Cash Node contains many corrections and improvements that we feel are useful, but it is strictly an optional installation for those already running previous v0.21.x versions.

Bitcoin Cash Node started as a drop-in replacement for Bitcoin ABC for the May 2020 network upgrade, to provide an alternative with minimal changes necessary to disable the Infrastructure Funding Proposal (IFP) soft forks.

With the network upgrade behind us, Bitcoin Cash Node starts to pursue its own roadmap of improvement and innovation.

This release delivers performance improvements and a new mining RPC, the getblocktemplatelight and submitblocklight calls.

GBT Light mining RPC added

Two new light-weight RPC calls were added: getblocktemplatelight and submitblocklight. These RPCs reduce the round-trip time for mining software when retrieving new block templates. Transaction data is never sent between mining software and bitcoind. Instead, job_id's are returned and bitcoind later reconstructs the full block based on this job_id and the solved header + coinbase submitted by the miner, leading to more efficient mining.

A full description and specification for this facility accompanies this release.

Three new CLI / configuration options were added to manage GBT Light:

  • -gbtcachesize=<n> - Specify how many recent getblocktemplatelight jobs to keep cached in memory (default: 10). Jobs not in the memory cache will be loaded from disk.
  • -gbtstoredir=<dir> - Specify a directory for storing getblocktemplatelight data (default: <datadir>/gbt/).
  • -gbtstoretime=<secs> - Specify time in seconds to keep getblocktemplatelight data in the -gbtstoredir before it is automatically deleted (0 to disable autodeletion, default: 3600).

As usual, all of the above CLI arguments may also be specified in the .conf file for the node (but without the preceding - character).

Account API removed

The 'account' API was deprecated in ABC v0.20.6 and has been fully removed in BCHN v0.21.2.

The 'label' API was introduced in ABC v0.20.6 as a replacement for accounts.

See the release notes from v0.20.6 for a full description of the changes from the 'account' API to the 'label' API.

CashAddr in bitcoin-tx

The bitcoin-tx tool now has full CashAddr support. CashAddr in JSON output can be controlled with the new -usecashaddr option, which is turned off by default, but relying on this default is deprecated. The default will change to enabled in v0.22. Specify -usecashaddr=0 to retain the old behavior.

Generation and publishing of Markdown documentation

New scripts have been introduced which convert UNIX manpage documents, program help outputs (including RPC call help) to Markdown format. This generated documentation is committed under the doc/cli and doc/json-rpc folders.

Additionally, the Markdown files in the doc folder are now converted to HTML via the mkdocs tool (see mkdocs.yml description file in base folder of the source tree). The generated HTML is deployed to .

-datacarrier deprecated

The bitcoind/bitcoin-qt option -datacarrier is deprecated and will be removed in v0.22. Instead, use the existing option -datacarriersize to control relay and mining of OP_RETURN transactions, e.g. specify -datacarriersize=0 to reject them all.

Usage recommendations

The update to Bitcoin Cash Node 0.21.2 is optional.

We recommend Bitcoin Cash Node 0.21.2 as a replacement for Bitcoin ABC 0.21.x

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.

Note regarding BIP9 and getblockchaininfo

BIP9 is inactive due to no available proposals to vote on and it may be removed in a future release.

New RPC methods

  • listwalletdir returns a list of wallets in the wallet directory which is configured with -walletdir parameter.
  • getblocktemplatelight and submitblocklight are described in the dedicated section "GBT Light mining RPC added"

Low-level RPC changes

The -usehd option has been finally removed. It was disabled in version ABC 0.16. From that version onwards, all new wallets created are hierarchical deterministic wallets. Version 0.18 made specifying -usehd invalid config.


Bitcoin Cash Node 0.21.2 does not introduce any known regressions compared to 0.21.1.

Known Issues

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

  • doc/ needs revision (to be fixed in Issue #68).

  • doc/ needs revision (to be fixed in 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).

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

  • We discovered a functional failure in Windows environment under a specific condition 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.

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

  • BCHN project is currently considering improvements to specification and RPC outputs related to the SigOps -> SigChecks change that took effect on 15 May 2020. (ref. Issues #71, #72)

Changes since Bitcoin Cash Node 0.21.1

New documents:

  • doc/cli/ : command line program documentation (manual pages converted to Markdown)
    • bitcoin-seeder.1
  • docs/json-rpc/ : RPC API documents (one help file for each call)

Removed documents:


Notable commits grouped by functionality:

Security or consensus relevant fixes

  • No changes

Interfaces / RPC

  • fdf771a7 New RPCs: getblocktemplatelight and submitblocklight
  • 01cec0dc Accept CashAddr prefixes in bitcoin-tx input
  • 918b068e Enable CashAddr by default in all binaries, add -usecashaddr option to bitcoin-tx
  • 0669b995 Deprecate -datacarrier CLI option

Peformance optimizations

  • c7bd2aaa RPC performance enhancement for getmininginfo
  • c0ae6e60 Minor performance fix for uint256 (base_blob) type
  • dd08df59 Update default assume valid and minimum chain work (chain params) after Phonon activation


  • No changes

Code quality

  • 2b9d92e8 Do not translate any CLI options
  • 5f365586 Make -regtest CLI option visible
  • ae6d3985 Nit help text for CLI option -help-debug
  • bb46f306 Add CLI option -?? as shorthand for -help-debug and make it imply -?/-help/-h
  • 26a79e81 Nits for -acceptnonstdtxn and -debuglogfile help texts
  • 6965dcf3 Rename listtransactions first argument to keep consistency
  • eab6dd16 Removed globals.cpp and globals.h
  • c43727d1 Add CLI help text for -phononactivationtime and -replayprotectionactivationtime
  • 5027e0ae Remove -help-debug since !242 removed the last debugging option
  • 8414f9d4 Use SetupHelpOptions (!254)
  • 75aa2ad8 Do not translate CLI help texts (!166)
  • 669a4315 Use strprintf to substitute defaults
  • 63285573 Add boolean defaults to help text
  • a7f17c69 Use constexpr for CLI argument defaults when possible
  • c27c75cd Update ancient help text for -usecashaddr
  • fb38782c Add -h, -help, -help-debug to list of hidden arguments in test/lint/ (#88)
  • 676307bb Remove the obsoleted code pointed out by Dagur
  • 0ab61b00 Show CLI argument aliases in help text, add -hh (#84)
  • 50df1ddb Include possible range for -maxsigcachesize/-maxscriptcachesize in CLI help
  • 441e39e3 GUI CLI options nits
  • 805bb697 Change some CLI options to advanced debugging, and some nits

Documentation updates

  • 564389bd Add CLI documentation to mkdocs
  • 74521fc0 [doc] Remove Fedora gitian building docs
  • 5b8d8c23 Added instructions for obtaining MacOSX10.14.sdk.tar.xz
  • 5a04df0f Updated macdeploy/
  • 612d898a Update Windows build notes
  • b4eb448f [doc] Initial getblocktemplatelight specification
  • 33ed9f9c [doc] Add reference to BU getminingcandidate / submitminingsolution
  • c56141a7 [doc] Set a project rule that maintainers must leave merge request up at least 24 hrs for review
  • b49fdf33 Markdown CLI documentation generator
  • 3e64ad1f [doc] Remove ABC reference from doc/
  • 458722fc Add bitcoin-seeder to Markdown CLI documentation generator
  • 47ad7ead [doc] Document how documentation is published
  • ddf5b302 Autogenerated JSON-RPC Markdown help
  • 73ed2d56 Add subheadings to CLI docs for easy mkdocs navigation
  • 234adae1 mkdocs: Fix code blocks rendering
  • 62380dba mkdocs navigation: group versions by brand

Build / general

  • 65ef877f Univalue lib: Require C++14 in autoconf
  • fab4276b Gitian build broke for linux, this fixes it.
  • 42dd536b [build] Fix gitian-builder folder initialization; add warning if script differs
  • 3ac4d024 Disable bitcoin-qt L10n in manpage generator

Build / Linux

  • No changes

Build / MacOSX

  • c15849cf Follow-up: Make sure MacOS Info.plist also declares 10.12 minimum

Tests / test framework

  • fbaa4bc1 Improve the listtransactions test for labels
  • 2057a686 [tests] Add explicit tests for getblocktemplate error modes and caching behaviour
  • 685a7e16 [test] Add test for RPC_CLIENT_NOT_CONNECTED error


  • No changes

Seeds / seeder software

  • 6f5f6cf1 Update the ABC node versions which MAY remain compatible with BCHN after May (if IFP does not activate)
  • 31dee014 Seeder nits

Maintainer tools

  • No changes


  • No changes


  • No changes

Continuous Integration (GitLab CI)

  • 80be5f22 [ci] Add build step for unix makefiles
  • d2d25b32 [ci] Run functional tests for no-wallet build
  • e47dff1e [CI] Add 'needs' to depends builds
  • 3298d179 [ci] Generate & deploy documentation


  • ec92ca6c ABC: D5590 Turn off ASM by default on target with no ASM support
  • 602a7cd7 ABC: D5521 Fix typo in error message
  • 4b5dab26 ABC: D5542 Disable ASM for native executables
  • f985d44e ABC: D5480 CMake: Build the ARM ASM field implementation
  • 41f98f24 ABC: D5729 Speed up OP_REVERSEBYTES test significantly
  • 1490237f ABC: D5504 Core: PR#12402, PR#12466 expat 2.2.5, miniupnpc 2.0.20180203
  • 4d1ebac5 ABC: D5494 Core: PR#15788 Rename test_bitcoin to test/setup_common
  • 7829f186 ABC: D5454 Improve FindZeroMQ
  • 8f2cf545 ABC: D5453 Improve FindSHLWAPI
  • ad98e4aa ABC: D5451 Improve FindQREncode
  • 5c6e3d7e ABC: D5450 Improve FindMiniUPnPc
  • 52335eea ABC: D5449 Improve FindGMP
  • c077fc43 ABC: D5778 Core: PR#14272 init: Remove deprecated args from hidden args
  • 696e5a7c ABC: D5452 Make the FindRapicheck module consistent with the other modules
  • 07762066 ABC: D5527 Core: PR#14291 wallet: Add ListWalletDir utility function
  • d1bf0aaf Core PR#15358 util: Add SetupHelpOptions()
  • ddfb4f23 ABC: D5373 Core: PR#15948 scripted-diff: replace chainActive -> ::ChainActive()
  • 8e404431 ABC: D5056 Core: PR#15948 refactoring: introduce unused ChainActive()
  • ed060277 ABC: D5445 Core: PR#16046 util: Add type safe GetTime
  • 26601c53 ABC: D5507 Core: PR#14411 [wallet] Restore ability to list incoming transactions by label
  • 72a52751 ABC: D5517 Core: PR#14373 Consistency fixes for RPC descriptions
  • 05ac2e0d ABC: D5338 [CMAKE] Fix the build with Xcode as a generator
  • a6c6a799 ABC: D5326 Core: PR#16654 build: update RapidCheck Makefile
  • 7fa1429b ABC: D5325 Core: PR#16271 build: dont compile rapidcheck with -Wall
  • 971ca32b ABC: D5324 Core: PR#14853 depends: latest rapidcheck, use INSTALL_ALL_EXTRAS
  • 9613af3b ABC: D5323 Core: PR#12775, PR#16622, PR#16645 Integration of property based testing into Bitcoin Cash Node
  • 4e61af73 ABC: D5531 Core: PR#16392 build: macOS toolchain update
  • e8997688 ABC: D5422 Core: PR#13825 Remove CAccount and Update zapwallettxes comment
  • 0b0b6396 ABC: D5421 Core: PR#13825 Remove strFromAccount and strSentAccount
  • a2c0a70a ABC: D5420 Core: PR#13825 Remove fromAccount argument from CommitTransaction()
  • 1074ec04 ABC: D5419 Core: PR#13825 Delete unused account functions
  • 98659d9b ABC: D5418 Core: PR#13825 Remove CAccountingEntry class
  • e6f000ce ABC: D5416 Core: PR#13825 Remove ListAccountCreditDebit()
  • d5b5322b ABC: D5414 Core: PR#13825 Don't rewrite accounting entries when reordering wallet transactions and remove WriteAccountingEntry()
  • 588b4da8 ABC: D5413 Core: PR#13825 Remove AddAccountingEntry()
  • 842d0d6f ABC: D5684 Use CPubKey::PUBLIC_KEY_SIZE & al when apropriate.
  • aceee4be ABC: D5308 [libsecp256k1: PR595] Allow to use external default callbacks
  • 4cfeb976 ABC: D5446 Fix FindBerkeleyDB suffix paths
  • c6d8b31f ABC: D5339 Improve FindBerkeleyDB
  • fcdc673e ABC: D5443 check-symbols => symbol-check
  • e941638c ABC: D5387 [libsecp256k1: PR704] README: add a section for test coverage
  • 350accca ABC: D5389 [libsecp256k1: PR714] doc: document the length requirements of output parameter.
  • ae92f0b0 ABC: D5345 Various nits in the cmake build
  • d07fae9b ABC: D5377 [libsecp256k1: PR679] Add
  • 740f17b0 ABC: D5415 Core: PR#13825 Don't read acentry key-values from wallet on load.
  • 44edc0c6 ABC: D5412 Core: PR#13825 Remove CWallet::ListAccountCreditDebit() and GetAccountCreditDebit()
  • defd3981 ABC: D5411 Core: PR#13825 Remove AccountMove()
  • a3d06f7e ABC: D5410 Core: PR#13825 Remove 'account' argument from GetLegacyBalance()
  • e636e8cf ABC: D5464 Core: PR#14838 Use const in COutPoint class
  • 967f01e0 ABC: D5514 Core: PR#17550 build: set minimum supported macOS to 10.12
  • 66960ba7 ABC: D5617 Add version number to the seeder
  • 5b294a8d ABC: D5529 Update autotools for new seeder tests
  • 84d32dd0 ABC: D5469 Add some unit tests for write_name() for seeder
  • 75e78bef ABC: D5471 Add enum for parse_name() return value
  • 573b60b4 ABC: D5459 Add constants to dns.h
  • 31e5986e ABC: D5466 Simplify max query name length check in parse_name()
  • acacc57a ABC: D5401 Rename seeder_tests to p2p_messaging_tests
  • 2fd101de ABC: D5091 Make parse_name() fail when passed buffer size = 0
  • 041694ef ABC: D5329 Enforce maximum name length for parse_name() and add unit tests
  • 8bfa0835 ABC: D5328 Label length unit tests for parse_name()
  • 1989fb52 ABC: D5402 Move code in seeder_test.cpp close to where it is used
  • 000c8f9f ABC: D5344 Remove GotVersion()
  • fde46196 ABC: D5489 Core: PR#14244 amount: Move CAmount CENT to unit test header
  • 0052ac33 ABC: D5538 Core: PR#14192 utils: Convert fs error messages from multibyte to utf-8
  • e0187fd6 ABC: D5536 Add verification routine to the test framework schnorr signature facility
  • 04f2cfe9 ABC: D5533 Nits in rwcollection.h
  • fba296ce ABC: D5518 Core: PR#14208 [build] Actually remove ENABLE_WALLET
  • 6380b4c5 ABC: D5520 Core: PR#12490 Some left overs from PR12490
  • 9b14543a ABC: D5526 Remove unused misc.h
  • 20843011 ABC: D5523 Core: PR#14718 Remove unreferenced boost headers
  • 4d8b6f15 ABC: D4627 Core: PR#15295 qa: Add test/fuzz/
  • 82462095 ABC: D5503 Core: PR#12607 depends: Remove ccache
  • 4e76373a ABC: D5502 Core: PR#10628 expat 2.2.1
  • 39edaef8 ABC: D5501 Improve the toolchain files
  • 4e677069 ABC: D5488 Core: PR#14282 [wallet] Remove -usehd
  • 9d2f6846 ABC: D5487 Core: PR#14215 [qa] Use correct python index slices in example test
  • f62ac93a ABC: D5485 Core: PR#14013 [doc] Add new regtest ports in man following #10825 ports reattributions
  • 4adf56d4 ABC: D5470 Add << operator overload for PeerMessagingState
  • 93570b9a ABC: D5481 Core: PR#15504 test: Remove useless test_bitcoin_main.cpp
  • b9562823 ABC: D5458 Adds PeerMessagingState enum to seeder/bitcoin.*
  • a9f08fa0 ABC: D5468 Various nits in arith_uint256.h
  • 5ff926e3 ABC: D5463 Update dependencies in debian/control
  • 95d3c792 ABC: D5467 Bump debian package compat level to 9
  • 83f65b78 ABC: D5457 Nits to streams.h
  • e723b384 ABC: D5447 Core PR#17266 Rename DecodeDumpTime to ParseISO8601DateTime and move to time.cpp
  • 8e1180c3 ABC: D5448 Misuse of the Visual Studio version preprocessor macro
  • 49bf5993 ABC: D5399 Move PackageOptions out of cmake/modules
  • f0f6bd80 ABC: D5442 Don't enable the secp256k1 multiset module when building bitcoin abc
  • 5ecfa80e ABC: D5441 check-security => security-check
  • 41a71b72 ABC: D5435 Core PR#13265 wallet: Exit SyncMetaData if there are no transactions to sync
  • e2d0c384 ABC: D5316 Core PR#14023 Remove accounts rpcs
  • 1843ea1f Core #13282 trivial: Mark overrides as such.
  • 2b0502c1 ABC: D5408 Fix Travis failures due to APT addon
  • 1c2ba189 ABC: D5407 Fix travis failure on ECMULT_GEN_PRECISION
  • 6cc1acb5 Core: PR#13592 Docs: Modify policy to not translate command-line help
  • 28ae2ffd ABC: D5397 Various updates to cmake/ninja
  • ea6d34d7 ABC: D4418 Add simple unit tests for parse_name()
  • 9123db32 ABC: D5374 [libsecp256k1: PR678] Preventing compiler optimizations in benchmarks without a memory fence
  • 10ce3285 ABC: D5378 [libsecp256k1: PR689] Convert bench.h to fixed-point math
  • 093aeafe ABC: D5390 [libsecp256k1: PR718] Clarify that a secp256k1_ecdh_hash_function must return 0 or 1
  • 5859c030 ABC: D5362 [libsecp256k1: PR337] variable signing precompute table
  • 13c28a90 ABC: D5388 [libsecp256k1: PR713] Docstrings
  • 358200ce ABC: D5055 [Core (partial): PR#15948] rename: CChainState.chainActive -> m_chain
  • f5c4241c ABC: D5371 Make CPack email available for all generators
  • 15f32b97 ABC: D5376 Fix make dist by finishing RPM cleanup
  • 9578be2a ABC: D5375 Add comment on libsecp256k1 benchamrks
  • 73021d20 ABC: D5365 [libsecp256k1: PR647] Increase robustness against UB in secp256k1_scalar_cadd_bit
  • a86134e0 ABC: D5364 Remove mention of ec_privkey_export because it doesn't exist
  • a9615da1 ABC: D5366 Remove note about heap allocation in secp256k1_ecmult_odd_multiples_table_storage_var
  • aeeb46a9 ABC: D5319 Move to cmake/utils
  • b7b0b65b ABC: D5333 Fix build with make as a generator
  • 312d8941 ABC: D5363 Fix the benchmark build when wallet is disabled
  • 56bb0b7a ABC: D5353 [libsecp256k1: PR583] JNI: fix use sig array
  • 13bcd575 ABC: D5340 Make the test python scripts depend on targets and not on files
  • f91260b6 ABC: D5347 [libsecp256k1: PR629] Avoid calling secp256k1_is_zero when secp256k1_set_b32 fails.
  • 2f5fe9f6 ABC: D5349 [libsecp256k1: PR634] Add a descriptive comment for secp256k1_ecmult_const.
  • 2b7c674f ABC: D5356 [libsecp256k1: PR650] secp256k1/src/tests.c: Properly handle sscanf return value
  • 201d3259 ABC: D5351 [libsecp256k1: PR651] Fix typo in secp256k1_preallocated.h
  • 4822db08 ABC: D5357 [libsecp256k1: PR657] Fix a nit in the recovery tests
  • f5b2b1f7 ABC: D5350 [libsecp256k1: PR640] scalar_impl.h: fix includes
  • a3d6deb5 ABC: D5352 [libsecp256k1: PR644] Moved a dereference so the null check will be before the dereferencing
  • 569848a3 ABC: D5295 Core: PR#14307 Consolidate redundant implementations of ParseHashStr
  • 020cbabc ABC: D5312 Make the list of tests a property of the test suite
  • 96fae32c ABC: D5303 Core: PR#17647 lcov: filter depends from coverage report
  • 25acd3ce ABC: D5302 Core: PR#16207 Failing functional tests stop lcov
  • ca25e2d1 ABC: D6090 Fix incorrect mocktime set in [no] miner fund test
  • e32b9add ABC: D6094 Add checkpoints for phonon activation