Skip to content


Choose a tag to compare
@ftrader ftrader released this 14 Apr 22:51
· 1160 commits to master since this release

Release Notes for Bitcoin Cash Node version 23.0.0

Bitcoin Cash Node version 23.0.0 is now available from:


This is a major release of Bitcoin Cash Node (BCHN) that implements the May 15, 2021 Network Upgrade. This upgrade will remove the unconfirmed chain limit and enable transactions with multiple OP_RETURN outputs.

This version contains many corrections and improvements, such as:

  • Introducing the Double Spend Proof (beta) feature compatible with other clients
  • Removing the limits on number of unconfirmed ancestors and descendants, and the limits on the byte size of these chains
  • Raising the default soft limit for block generation to 8MB
  • Adding support for multiple OP_RETURN standardness (within existing data carrier size)
  • Removal of CPFP functionality
  • Changes in mempool eviction order
  • New ZMQ functionality (related to dsproof)
  • Minor RPC additions and changes (incl. dsproof related)
  • Minor changes in error codes
  • Improving the graphical user interface
  • Extension of software expiry timeframe (to 15 May 2022)
  • Switch from C++14 to C++17

Users who are running any of our previous releases (0.22.x) are urged to upgrade to v23.0.0 ahead of May 2021.

Usage recommendations

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

About the CPFP & unconfirmed chain limit removal

The CPFP (child-pays-for-parent) and the unconfirmed transaction chain limit will both be deactivated on May 15, 2021 when MTP of the chain tip reaches 12:00 UTC. After that time, it will be possible to "chain" unconfirmed transactions beyond the current limit of 50, in a limitless way, without any negative performance consequence for the node.

This has been accomplished by removing the algorithmically complex and slow code we inherited from Bitcoin Core which tries to maintain what is known as "Child Pays for Parent" (CPFP) -- a way in which a child transaction can bump up the priority of its parent transaction via paying a larger fee. Maintaining this feature, which is not even being used on BCH, was the reason for the algorithmic complexity in the mempool code and why we had a limit of 50 for unconfirmed tx chains.

Additionally, we removed a lot of the slow "quadratic" (complex) per-tx stats that were being maintained (also inherited from Core, and also used in fee calculations). Removing those stats, which only were added so that Core could limit the blocksize and also get a hyper-fee-market, allowed us to unleash the true scalability of BCH. The mempool code was slow -- and it was only slow because of Bitcoin Core's philosophy about what Bitcoin should be.

One might wonder if allowing limitless unconfirmed transaction chains opens up avenues of attack or flood/DoS. It does not do this. Since now our mempool and mining algorithm is linear and not quadratic, there is no real difference between a transaction that has an unconfirmed parent and one that does not. They both now cost the same amount of CPU time to process (and in some cases the unconfirmed parent tx is actually faster to process due to not needing to hit the UTXO db).

Should some user perform a (costly) attack and flood the network with unconfirmed tx chains, the only consequence will be that he will drain his own resources in fees. Under mempool pressure, normal fee bump logic occurs. Transactions get evicted in a "lowest fee first" order and then the mempool's minimum fee for acceptance is bumped up by some small increment. This logic has always been in place and is the way we prevent floods.

In summary, removing the unconfirmed tx chain limit does not impact performance and/or availability whether under normal usage or under congestion.

Network changes

The dsproof-beta network message can be emitted and relayed when Double Spend Proofs are enabled (which they are by default).

For miners/pools running without a blockmaxsize configuration, the default soft limit of generated blocks will increase from 2MB to 8MB in this update. The default hard limit of 32MB remains unchanged in this release.

Added functionality

Double Spend Proofs (DSProof)

This release adds Double Spend Proofs that are compatible with the published dsproof-beta message specification and existing implementations in Bitcoin Unlimited and Flowee The Hub.

Double spend proofs are enabled by default, but can be turned off with the doublespendproof=0 configuration setting.

This functionality is still in beta. In future BCHN releases we plan to gradually add more application interfaces to query double spend proof information about transactions and to provide wallet user with double spend notifications.

Please refer to <doc/> for more information details on the DSProof implementation in BCHN, and the sections on New RPC methods and New ZeroMQ notifications below for a listing of the new API calls.

maxgbttime and maxinitialgbttime configuration options

These two new command-line options may be of interest to miners (pools). They enable setting maximum time limits for getblocktemplate calls, instead of relying on blockmaxsize limits to limit the time taken to construct a template.

The -maxinitialgbttime setting determines the maximum number of milliseconds that can be spent adding transactions to block templates for the first template after an UpdateTip, whereas the -maxgbttime setting does the same thing but for all block templates
(not just the first).

This should allow pools to create larger block sizes on average without taking on significantly greater costs and risks.

The default settings for -max*gbttime are both 0 in this release, so it has no effect on node behavior when the default options are used.

-rejectsubversion configuration option

This can be used to reject peers which have certain fixed strings in their user agents. Useful for blocking non-compatible SV and ABC
peers. The option can be specified multiple times to filter several matches.


bitcoind -rejectsubversion="Bitcoin SV" -rejectsubversion="Bitcoin ABC"

Care should be taken to filter out only peers which are definitely not useful to your Bitcoin Cash node.

Deprecated functionality

In the getmempoolentry RPC call, the verbose modes of the getrawmempool/getmempoolancestors/getmempooldescendants RPC calls, and the JSON mode of the mempool REST call, the height field is deprecated and will be removed in a subsequent release. This field indicates the block height upon mempool acceptance.

The bip125-replaceable field in the result of gettransaction is deprecated and will be removed in a subsequent release.

The arc lint linting is considered deprecated and developers should use the ninja check-lint target instead.

Modified functionality

Mempool expiry works slightly differently now. Previously, the expiry of an old mempool tx would be checked thoroughly every time a new tx was accepted to the mempool, but this consumed a bit of extra memory to accomplish precisely and efficiently. Instead, we save on memory by doing a fast (imprecise) check each time a new tx is added to the mempool. This check may miss some txs that should be expired. In order to catch those txs, we now also run a perfect (slower) expiry check of the mempool periodically. A new CLI arg, -mempoolexpirytaskperiod= was added to control the frequency of this thorough check (in hours). The new argument's default value is "24" (once per day).

Removed functionality

Manpages are no longer available in the autotools build system. You must switch to the CMake build system to continue using manpages. Note the autotools build system has been deprecated since v22.0.0.

New RPC methods


The 'validateblocktemplate' RPC call has been added. This call checks if a block template would be accepted if the hash solution
were solved. The semantics of this call are the same as on BCHUnlimited from where a substantial portion of this new functionality has been ported. It is intended to be used by services that test compatibility of block generation with BCHN's consensus rules.

getdsproof and getdsprooflist

getdsproof retries more information about a specific double spend proof.

getdsprooflist lists the double spend proofs that are known about transactions in the node's mempool.

Please refer to the documentation pages for getdsproof and getdsprooflist for details about additional arguments and the returned data.

New ZeroMQ (ZMQ) notifications

BCHN can now publish notification of both hashes and full raw double spend proofs generated or accepted by the node.

The notifications can be enabled via the -zmqpubhashds=address and -zmqpubrawds=address configuration options where address must be a valid ZeroMQ endpoint. Please refer to the ZMQ API documentation for further details.

Low-level RPC changes

The getblockstats RPC is faster for fee calculation by using BlockUndo data. Also, -txindex is no longer required and getblockstats works for all non-pruned blocks.

In the getmempoolentry RPC call, the verbose modes of the getrawmempool/getmempoolancestors/getmempooldescendants RPC calls, and the JSON mode of the mempool REST call, the fields fee and modifiedfee are removed. These fields were deprecated since v0.20.4. Please use the fees subobject instead.

The (non-default) option in the getnetworkhashps RPC call to calculate average hashrate using "blocks since last difficulty change" has been removed. The option relied on an incorrect assumption of when the last difficulty change happened. On Bitcoin Cash, difficulty changes every block, rendering the option meaningless. The removal of this option was announced in the release notes of

User interface changes

The transaction viewer (configurable via the Settings -> Display dialog) configuration now accept only valid HTTP or HTTPS URLs.
Existing URLs that do not conform to these schemes are not displayed in the context menu.

Qt GUI settings are no longer automatically copied from Bitcoin ABC on first use of Bitcoin Cash Node.


Bitcoin Cash Node 23.0.0 does not introduce any known regressions compared to 22.2.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).

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

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

  • There are obstacles building the current version on Ubuntu 16.04 (see #187). These are worked around by our packaging system, but users trying to build the software from scratch are advised to either upgrade to more recent Ubuntu, or retrofit the necessary toolchains and perform the same build steps for Xenial as registered in our packaging repository, or build in a VM using the gitian build instructions, or run our reproducible binary release builds. There is ongoing work on the build system to address underlying issues, but the related code changes were not ready in time for the v23.0.0 release.

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

  • In the getmempoolentry RPC call, the verbose modes of the getrawmempool/getmempoolancestors/getmempooldescendants RPC calls, and the JSON mode of the mempool REST call, the height field shows an incorrect block height after a node restart. Note the field is deprecated and will be removed in a subsequent release.

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

Changes since Bitcoin Cash Node 22.2.0

New documents

The following are new documents in the BCHN software repository:

Removed documents

All Markdown (.md) documents previously in the doc/json-rpc/ folder have been removed.

These are now generated on the fly during the build and deployed to the documentation website at It is planned in future to provide a downloadable standalone documentation set (in HTML and Markdown).

Notable commits grouped by functionality

Security or consensus relevant fixes

  • 352a94e update checkpoints for main, test3, and test4 nets

Interfaces / RPC

  • 0f7c703 Double Spend Proof (dsproof-beta) core code
  • eacb361 [Mining] Add -maxgbttime and -maxinitialgbttime command-line options
  • 9355e96 [rpc] Port validateblocktemplate RPC call
  • 1033b0f Fix argument parsing bug in transaction construction RPC
  • 94bff23 Fix for UB in getblocktemplate
  • 362c6db rpc: Add missing convert param
  • c8f7ca5 DSProof: Add ZMQ notifications
  • bb6a680 DSProof: Add RPC methods
  • 906aadc Wallet: Remove random component of locktime
  • b14e26b Update bitcoin_en.ts
  • e3ae9f8 Fast command-line help for bitcoin-qt without loading Qt
  • f7b30b5 Tachyon: Add a tachyonLatched atomic bool to CTxMemPool
  • 31bf662 Add debug CLI/conf option -rejectsubversion=
  • a199ff4 mempool & dsproof: Make orphans stickier, make tx removal "orphanize" dsproofs first before removal later
  • 58ee973 Tachyon: Allow multiple OP_RETURN outputs in a transaction
  • f58576a Add tentative activation time for the 8th BCH Upgrade (May2022)
  • 2d4963e Push back the "software outdated" warning to May 15, 2022
  • f32f72d Deprecate options related to unconfirmed transaction chain limits
  • d7b8b0e Deprecate height field in getmempoolentry RPC and friends
  • b6035f5 Remove fee and modifiedfee fields from getmempoolentry RPC and friends
  • 3b44a7f Remove "blocks since last difficulty change" option from getnetworkhashps RPC
  • d04df08 Increase default mined blocksize to 8MB
  • dec29b4 update ChainTxData for main, test3, and test4 networks
  • 1da684e Deprecate the bip125-replaceable field in gettransaction

Performance optimizations

  • 7f67871 Limit libevent HTTP workaround to 2.1.5 < version < 2.1.9
  • 77576fd UniValue: Eliminate bound checks in JSON parser by making use of terminating null
  • 8d5e1f3 mempool: Add new index for sorting txs by fee
  • d958277 Optimize CheckRegularTransaction for larger vin sizes
  • d8ea142 mempool: Evict transactions by modified feerate
  • 92e5c50 miner: Remove use of CPFP in CreateNewBlock
  • 2eb479f mempool: Removed the ancestor_score index
  • 086009e mempool: Add topological index, enforce consistency, updated reorg logic
  • b6522eb mempool & mining: Use the topological ordering to break ties
  • 268e039 mempool: Remove ancestor/descendant related stats from RPC
  • 0ce476c mempool: Remove all quadratic stats; add activation logic for tachyon
  • 24e2ac4 mempool: entry_time index removal
  • d408e3b Update default assume valid and minimum chain work params prior to Tachyon activation
  • 93ad75a mempool: Slight performance nit when erasing from setEntries


  • d87b20b GUI nit: Display last block hash in Node Window in monospace
  • ca0a4bb GUI nit: Do not translate SI time units
  • 51c9413 GUI: Display mempool total tx size alongside memory usage in Node window
  • 8d31914 GUI: Fix icon for About menu entry
  • d8e8342 GUI: Fix network traffic unit
  • 85584b6 GUI: Further Window menu improvements
  • 26c8a2d GUI: Improve UX of various subdivision units
  • 9471627 GUI: Localise decimal separator in other places
  • 2d287b0 GUI: Localise the decimal separator in amounts
  • 2f034a6 GUI: Move debug log file button to General
  • 7047ed6 GUI: Remove C-style pre-processor defines and other nits
  • 8c8d029 GUI: Use consistentent labels in Node Window Information tab
  • 5435bb4 New Crowdin updates
  • b8babce New translations: Chinese Simplified
  • bfd7a3f New translations: Chinese Traditional
  • 548544c New translations: Dutch
  • da61d5d New translations: English, United Kingdom
  • e3c3f64 New translations: German
  • 15fef4f New translations: Italian
  • a2b3984 New translations: Polish
  • fca389a New translations: Swahili
  • 057b057 Normalise address input on blur
  • 785e534 Remove separate "Node window" option from systray menu if wallet is disabled
  • 026dace Remove version info from Node window
  • e0b4595 Update language registrations in bitcoin-qt
  • cd22065 [qa] Update the copyright year in the GUI to 2021
  • aa0d5e3 qt: Fix deprecated warning on newer Qt5 & always localize date format
  • d836e89 qt: Preventing a crash using "window" menu during application start-up
  • da167fe qt: Use proper "Title Caps" for the Node Window & other windows
  • f1cf72a ui: Make "Send" and "Receive" actions in systray have proper ellipsis

Code quality

  • 4e99f6f Upgrade UniValue code in zmq/zmqrpc.cpp (#51)
  • 0fea832 Upgrade UniValue code in core_write.cpp (#51, #89)
  • 2ea8a6d Upgrade UniValue code in rest.cpp (#51)
  • b7fb465 UniValue: Replace VBOOL with VFALSE and VTRUE (#51 item 2)
  • 3934d49 UniValue: Use operator= for setters
  • 8571176 UniValue: use C++17 std::string_view and [[nodiscard]] (#51)
  • ef76250 UniValue: Refactor getJsonToken, fix bad setNumStr impl, and more
  • aa144ae UniValue: Add a static_assert to the setInt64 private function
  • 97cb84d Remove deprecated UniValue methods
  • febc8c0 "The Bitcoin developers" with lowercase "d"
  • 9809a2f Add missing word to error message
  • 02ac581 Block index: Add an additional sanity check when loading the block index
  • 7df431d C++17: Replace NODISCARD with [[nodiscard]]
  • 8dc1c7d C++17: Replace boost::optional with std::optional
  • 5d74078 Change text "Bitcoin address" into "Bitcoin Cash address"
  • 6d40c0f Code improvements (in mempool code)
  • 0f8e8da Code quality: Fix encapsulation of CTxMemPoolEntry::dspId
  • de79912 Code quality: Miscellaneous nits and fixups
  • 3190772 DSProof: Minor fixup to questionable use of incrementOrphans()
  • a994e73 DSProof: refactor and fixups; preparation for adding ZMQ
  • 18453fc Distinguish between singular and plural when verifying wallets
  • bb21981 Explicit QString conversion of QLocale groupSeparator
  • f8293ee Fix #246
  • 011374d Fix GCC 8.3.x warning for uint256_tests.cpp
  • e469da6 Fix compiler warning for cuckoocache_tests.cpp
  • 7e13048 Fix for esoteric clang-7.0.1 crash
  • 1c1a76c Fix self-contradiction in mempool eviction order
  • 0599776 Fix variable shadowing compiler warnings introduced by !1079
  • d7a0ddd Minor code improvements
  • 1d4694a Nit: Fix clang-11 warning: "uninitialized variable as const referenece"
  • 6cf6c36 Prefer clamping nBlocksTotal to >1 rather than asserting
  • f0f7391 Preserve negative fee deltas on reorg (!1128 regression)
  • 87388d0 Pruning nodes: Take cs_main for getblock and getblockstats
  • e474616 Readability improvements
  • 2d255e7 Readability: use proper algorithms.
  • 7628469 Refactor DEFAULT_MAX_GENERATED_BLOCK_SIZE into chain-specific defaults
  • 54e3cf1 Refactor the SipHash-based salted hashers to all use common code
  • cb03d34 Refactor: Make SeedSpec6 inherit from CService (and ultimately CNetAddr)
  • d081367 Remove C macro ARRAYLEN in favor of C++17's std::size
  • 1294303 Remove comment about replace-by-fee
  • b6bbbda Rename OP_INVALIDOPCODE to drop the "OP" and remove non-opcodes
  • c12484e Replace magic numbers with constants
  • b2099b6 [The unit tests for the DspIdPtr class were separated into another file]
  • 79fff11 [qa] Add C++ linter detection of C++17 features we want to avoid
  • c9f8c6e [qa] Fix for function hash256 appearing twice in test framework
  • a9cdff9 [qa] Suppress compiler warning about unused return value
  • 30f1f1f bitcoin-qt: Remove ifdef i386 stuff in the version string builder
  • a982772 lint: Add circular dependency
  • 76d33be lint: Add new circular dependencies
  • 7e814a3 lint: Fix lint-python errors
  • ba4461b lint: Fix lint-python-mutable-default-parameters errors
  • 56c4de3 lint: Fix lint-python-utf8-encoding errors
  • 06e61d4 mempool: ModifiedFeeRate getter for mempool entry
  • 707b119 mempool: Save & restore mempool entry acceptance height on reorg
  • e352240 miner: Add fPrintPriority member variable
  • fa8a25b miner: Remove mentions of 'package' in names
  • 443e35e qa: Use .format instead of %
  • 33c57c8 qt: Fix usage of QDateTime::fromSecsSinceEpoch
  • dbed589 refactor: Allow alternative mempool batch updates
  • 4ca1f91 uint256: Modernize code to use noexcept and constexpr where possible

Documentation updates

  • 9451c5b Doc bug: fix outdated MacOS SDK download info
  • 3fbdb52 Doc nit: remove table of contents
  • ccd620b Document May 15th 2021 network upgrade
  • a34314d Document implementation of BIP158
  • 91b120b Document implementation of BIP340
  • 16a3e8c Documentation: Clarify what version 0.14.1 was
  • 63cda98 Link DSProof spec on
  • 0b07160 New translation process based on Crowdin
  • a1edf52 Remove table of contents
  • ab3c74a Show licence in documentation
  • 2af2103 Update copyright year in COPYING to 2021
  • 16102f7 [DOC] Clear up text, and remove link to
  • a508596 [DOC] Delete reference to previously deleted directory
  • f3d0fc9 [DOC] Line length in /doc/*.md
  • 6f969ad [DOC] Markdown lists and headers
  • 47f81c6 [DOC] Markdown lists, lists and more lists.
  • 10ce294 [DOC] Reduce markdown lint warnings
  • 8d3b069 [DOC] Remove bare URL markdown warnings
  • 66b958d [DOC] Remove more line length warnings (MD013)
  • 4e87a10 [DOC] fix markdown list warnings MD007 and MD029
  • 41d2814 [doc] Add a useful link about writing good git commit messages
  • 30aa621 [doc] Add detail to Mac OSX depends build description
  • 4f7e87a [doc] Add some explanation for MR 746 which was missing in relnotes of 22.2.0
  • 58851d0 [doc] Bump minimum required Python version to 3.6
  • 8aff361 [doc] Double Spend Proof (dsproof-beta) implementation notes etc
  • 1704c31 [doc] Fix Bitcoin Core reference in translation strings policy document
  • f7ddd4b [doc] Fix linkage between gitian build docs; update example versions
  • 80d6695 [doc] Reduce markdown lint errors
  • ba02c14 [doc] document scipy as a functional test dependency
  • ec7f11c [qa] Add 'mining' and 'wallet' labels
  • f5c003d [qa] Add two-approvals maintainer rule for critical code
  • 8d81e75 brew install qt installs Qt6 right now
  • ce0205e doc: Document linting
  • 947b03d doc: Expectations of contributors and maintainers
  • b485d3c docs: Fixed typo in
  • 419fc4a fix list warnings
  • 386e5af ninja translate
  • f71cd1b two files
  • c9cb1ab ABC:D8758(partial) Document implementation of BIP158

Build / general

  • 1a0ac9a Add 'lint-yaml' linter. Fix lint errors in existing yaml files.
  • cf71061 Add jemalloc support
  • 5ced972 Add the SuperFences extension to MkDocs
  • 78f9989 Create ninja target for building Markdown documentation
  • 3b16ec4 Enable 'lint-format-strings' linter
  • cf03d78 Enable 'lint-tests' linter
  • e7b14ee Merge manpage generation into the build system
  • abf734e [qa] Fix bench-bitcoin target
  • 932a9de build: Add EXCLUDE_FUNCTIONAL_TESTS build option
  • f76ddca build: Add a translate target
  • 2f826a5 build: Add linter targets to CMake
  • 76d33be lint: Add new circular dependencies
  • f1ac5d3 lint: Check locale on template shell scripts
  • 6802fad lint: Enable linter
  • 3b6943e lint: Enable linter
  • 4a64ad2 lint: Enable python linters
  • 80960d5 linter: Add cpp include linter
  • f4ea392 ABC:D6311 [CMAKE] Add a facility to add flag groups and use it for -Wformat-*
  • 287215f ABC:D6545 [CMAKE] Fail early if a lib header is missing, remove garbage in version
  • db17bca ABC:D6960 [CMAKE] Optionally install bench_bitcoin
  • 3653225 ABC:D7024 [CMAKE] Add the test suite to the log name

Build / Linux

  • 6414b0a [build] Add batchupdater files to autoconf build
  • 2cce42c Update _COPYRIGHT_YEAR in to 2021
  • dabc9bb autoconf build: Fix broken build from latest commits
  • 78d7dd9 Create ninja target for building HTML documentation with mkdocs

Build / Windows

Build / MacOSX


Tests / test framework

  • c9cd304 Added StdHashWrapper, also added some tests
  • bac0b64 Double Spend Proof (dsproof-beta) deserialization fuzzer
  • 54466c7 Double Spend Proof (dsproof-beta) functional test + test framework adaptations
  • 751be1e Double Spend Proof (dsproof-beta) unit tests
  • a0262c9 Mininode: Add testnet4 and scalenet network magic
  • 83dbe4a Mininode: Speed up big message reception significantly
  • 777c04a Retroactively enable Tachyon on all test networks
  • add245a [qa] Add RPC HTTP pipelining test
  • 53bdb78 [qa] Temporarily evict frequently failing getblocktemplate tests from aarch64 functional test job
  • 3d2324a [qa] allow bchn test name prefix and dashes
  • 3f0c99d [qa] fix unreliable getblocktemplate(light) tests
  • 6492f06 [test] Add a functional test that transacts with ANYONECANPAY hash type
  • f3a8710 [tests] Additional tests to verify ancestor/descendant counting and limit behavior
  • 826b8c3 test: Add option to pass extra bitcoind arguments
  • 5334436 test: fix return type in bchn-rpc-pipelining
  • decf354 tests: Fix the failing rpc-getblocktemplate-timing test


  • 72d7d20 Bench: Add mempool eviction benchmark for chained tx's
  • ae7cc17 Bench: add -debug option to bench_bitcoin
  • fd0a7da Double Spend Proof (dsproof-beta) benchmarks
  • f1ac02c bench: Add benchmarks of CheckRegularTransaction
  • 21faeb6 bench: Adjust block generation benchmarks
  • 3f9634f bench: CreateNewBlock with long tx chains
  • 6386f14 bench: Mempool acceptance for chained transactions
  • 9e2e70e bench: Reorg benchmarks without mempool removal
  • 072b3d0 bench: Reorgs of blocks with long tx chains
  • c8e9fde util: Added functions to help with profiling code (more precise time & more)

Seeds / seeder software

  • dd5ff6d Add seeder:
  • 8f6b5f7 Seeder: Add Flowee's testnet4 seeder
  • c3fe092 Seeder: Fix getaddr interval to actually query address lists once a day
  • b332633 Seeder: Fix nodes discovered through seeds having zero service flags
  • 7ced672 Seeder: Fix two potential crash bugs plus some code nits
  • 41c2196 Seeder: Seed the database with fixed seed IPs
  • 6eaf168 Seeder: Verify that nodes are on the correct chain
  • a47f73d Update mainnet seeds
  • 491929e Update testnet seeds
  • 0b41baf [backport] Seeder: Set BIP37 fRelayTxs flag to false

Maintainer tools

  • 9866c59 Remove unused and Core specific script


  • 172b4fc Crowdin configuration file
  • 2e77868 Fix Crowdin configuration file
  • 1e5d723 Add BigBlockIfTrue release signing key
  • 30a3eb5 [qa] Update freetrader public key (expiry extension to 2023-04-08)


  • 5112ec4 [qa] Nuke obsolete test framework self-tests
  • b2cf1b5 [qa] Remove boost/optional.hpp from expected dependencies
  • 568c2e5 Remove unused idea
  • 43adbc8 Remove GUI settings migration from Bitcoin ABC

Continuous Integration (GitLab CI)

  • 10c3507 [ci] Skip cloning of LFS files in static-checks jobs
  • 9af7e96 ci: Add debug builds
  • b1dabdb ci: Add job for running check-lint
  • 8e77c0c ci: Exclude bchn-rpc-getblocktemplate-sigops from aarch64
  • 82ee7d1 ci: Fix build lint artifact path
  • fe5c9e3 ci: Reduce ccache size and DRY on common steps


  • aecbde5 ABC:D5809,Core PR#14987(partial) Pass rpc/abc RPC Results and Examples to RPCHelpMan
  • d1bf6d0 ABC:D5815,Core PR#14987(partial) Pass rpc/server RPC results and examples to RPCHelpMan
  • abf3302 ABC:D5818,Core PR#14987(partial) Pass zmq RPC results and examples to RPCHelpMan
  • c4f396d ABC:D5822,Core PR#14987 Pass rpc/mining RPC results and examples to RPCHelpMan
  • 383becd ABC:D5838,Core PR#14987(partial) Pass rpc/net RPC Results and Examples to RPCHelpMan
  • d30c9ba ABC:D5877 [CMAKE] Use the crosscompiling emulator to run the tests
  • 66e2bc8 ABC:D6056 [DEPENDS] Remove the facilities for building win32
  • a0b24b7 ABC:D6108,Core PR#16839 [backport] scripted-diff: Rename InitInterfaces to NodeContext
  • bb78078 ABC:D6109,Core PR#16839 [backport] MOVEONLY: Move NodeContext struct to node/context.h
  • 44813cf ABC:D6283 [backport] Seeder: Request headers from new connections
  • dd9c338 ABC:D6462,Core PR#17931 Merge #17931: test: Fix p2p_invalid_messages failing in Python 3.8 because of warning
  • 37f426b ABC:D7441 [CMAKE] Fix issues when looking for libraries installed with homebrew
  • 459b3bb ABC:D7892,Core PR#14573,#16514 qt: Add Window menu
  • b515ce6 ABC:D7894,Core PR#14979 [Qt] Restore < Qt5.6 compatibility for addAction
  • e282d7c ABC:D7895,Core PR#18549 qt: Fix Window -> Minimize menu item on linux
  • 1a1ac4e ABC:D7917,Core PR#14879 [backport#14879]Add warning messages to the debug window
  • c54452b ABC:D7930,Core PR16735 GUI: Remove unused menu items for Windows and Linux
  • 0a9ec4f ABC:D7971 [secp256k1] Enable endomorphism by default
  • 3c10dd6 ABC:D8123,Core PR#17809 rpc: Move OuterType enum to header
  • 401d66d ABC:D8146,Core PR#14383,#15023 Clean systray icon menu for -disablewallet mode
  • e802238 ABC:D8148,Core PR#15756 gui: Add shortcuts for tab tools
  • 195296f ABC:D8493,Core PR#18591 Switch to using C++17
  • cf5a10a ABC:D8523,Core PR#17096 Merge #17096: gui: rename debug window
  • 3ab3c55 ABC:D8546,Core PR#14594 [backport#14594] qt: Fix minimized window bug on Linux
  • 5d83d0e ABC:D8623 [backport] Seeder: Use netmagic from chainparams instead of a cached global
  • 64eac60 ABC:D8624 [backport] Seeder: Add a test to check outgoing messages in response to VERACK
  • 37261c6 ABC:D8835,Core PR#16902 Benchmark script verification with 100 nested IFs
  • bea1a7f ABC:D8836,Core PR#16902 [refactor] interpreter: define interface for vfExec
  • 30313fd ABC:D8837,Core PR#16902 Implement O(1) OP_IF/NOTIF/ELSE/ENDIF logic
  • 52c26df ABC:D8857,Core PR#15283 Fix UB with bench on genesis block
  • 43ddf94 ABC:D8951 Fix typo in Sighash tests
  • 3334361 ABC:D8992,Core PR#18754 [backport#18754] bench: add CAddrMan benchmarks
  • 511a1e7 ABC:D8998,Core PR#18769 qt: remove todo bug fix for old versions of Qt
  • be04537 ABC:D9094,Core PR#18931 net: use CMessageHeader::HEADER_SIZE, add missing include
  • 2720603 BCHUnlimited MR2401 [backport] Transaction viewer URL validation
  • d60b320 Core PR#11835 practicalswift - Add Travis check for unused Python imports
  • c36b720 Core PR#11878 practicalswift - Add Travis check for duplicate includes
  • ea04bf7 Core PR#12284 practicalswift - Enable flake8 warning F841 ("local variable 'foo' is assigned to but never used")
  • 0b9207e Core PR#12295 practicalswift - Enable flake8 warning for "list comprehension redefines 'foo' from line N" (F812)
  • a9d0ebc Core PR#12295 practicalswift - Enable flake8 warnings for all currently non-violated rules
  • fad0fc3 Core PR#12933 MarcoFalke - Refine travis check for duplicate includes
  • 643aad1 Core PR#12987 practicalswift - Enable additional flake8 rules
  • 68400d8 Core PR#13054 practicalswift - tests: Use explicit imports
  • 0d31ef4 Core PR#13210 John Bampton - Enable W191 and W291 flake8 checks. Remove trailing whitespace from Python files. Convert tabs to spaces.
  • 506c578 Core PR#13214 practicalswift - Enable Travis checking for two Python linting rules we are currently not violating
  • 6d10f43 Core PR#13230 practicalswift - Enforce the use of bracket syntax includes ("#include <foo.h>")
  • fa3c910 Core PR#13281 MarcoFalke - test: Move linters to test/lint, add readme
  • fa3c910 Core PR#13281 MarcoFalke - test: Move linters to test/lint, add readme
  • 9d6c9db Core PR#13301 Ben Woosley - lint: Add linter to error on #include <*.cpp>
  • 81bbd32 Core PR#13385 practicalswift - build: Guard against accidental introduction of new Boost dependencies
  • c8176b3 Core PR#13448 practicalswift - Add linter: Make sure we explicitly open all text files using UTF-8 or ASCII encoding in Python
  • 6b31118 Core PR#13454 Add linter: Make sure all shell scripts opt out of locale dependence using "export LC_ALL=C"
  • 3352da8 Core PR#13454 practicalswift - Add "export LC_ALL=C" to all shell scripts
  • f447a0a Core PR#13482 Chun Kuan Lee - Remove program options from build system
  • 7b23e6e Core PR#13494 practicalswift - Follow-up to #13454: Fix broken build by exporting LC_ALL=C
  • 0000000 Core PR#13510 DesWurstes - Obsolete #!/bin/bash shebang
  • 962d8ee Core PR#13545 practicalswift - Remove boost dependency (boost/assign/std/vector.hpp)
  • 854c85ae904075503215f94d6329d38d2d8dfb6b Core PR#13649 James O'Beirne - test: allow arguments to be forwarded to flake8 in
  • e3245f2 Core PR#13656 251 - Removes Boost predicate.hpp dependency
  • b193d5a443bfd994936ad21b807b2bb37756ef2c Core PR#13671 251 - Removes the Boost case_conv.hpp dependency.
  • 01f5955 Core PR#13686 [backport] ZMQ: Small cleanups in the ZMQ code
  • 5f019d5 Core PR#13726 251 - Removes the boost/algorithm/string/join dependency
  • 1c5d22585384c8bb05a27a04eab5c57b31d623fb Core PR#13734 Chun Kuan Lee - Drop boost::scoped_array
  • cb53b825c26af6e628ba88d72b2000e75bedbbc6 Core PR#13743 Chun Kuan Lee - scripted-diff: Replace boost::bind with std::bind
  • 1661a472b8245eb4588fedbf19c9ed07a41e7602 Core PR#13862 Chun Kuan Lee - add unicode compatible file_lock for Windows
  • 2d6ec04 Core PR#13863 use export LC_ALL=C.UTF-8
  • 2c3eade704f63b360926de9e975ce80143781679 Core PR#13877 Chun Kuan Lee - Make fs::path::string() always return utf-8 string
  • 55fbd5a Core PR#14088 Add regression test: Don't assert(...) with side effects
  • 604f836 Core PR#14115 macOS fix: Work around empty (sub)expression error when using BSD grep
  • 341f7c7b0e77edcc02cb3429fb9a3d49745332cc Core PR#14115 practicalswift - macOS fix: Check for correct version of flake8 to avoid spurious warnings. The brew installed flake8 version is Python 2 based and does not work.
  • 5d62dcf9cfb5c0b2511c10667ed47ec3b3610d72 Core PR#14128 Chun Kuan Lee - lint: Make sure we read the command line inputs using utf-8 decoding in python
  • ef95a78 Core PR#14796 rpc: Pass argument descriptions to RPCHelpMan
  • c9ba253f4f5d675d7736d24c1167229d0898ef1a Core PR#14903 Daniel Ingram - Add E711 to flake8 check
  • 948d8f4f10c31220ba4b6779cc862e2b6a0af5f6 Core PR#15219 Ben Woosley - lint: Enable python linters via an array
  • 838920704ad90a71cf288b700052503db8abb17e Core PR#15257 Ben Woosley - lint: Disable flake8 W504 warning
  • 3c84d85f7d218fa27e9343c5cd1a55e519218980 Core PR#15382 Sjors Provoost - [build] msvc: add boost::process
  • 3c5254a820c892b448dfb42991f6109a032a3730 Core PR#16124 practicalswift - Limit Python linting to files in the repo
  • 37577d4 Core PR#16291 gui: Stop translating PACKAGE_NAME
  • 490da639cbd48ce0dc438abbfc89ab796391cb2a Core PR#16768 Kristaps Kaupe - Make work from any directory
  • 80c9e66ab84f8cecc2bf2eebf508a5aad8911246 Core PR#17353 Hennadii Stepanov - build: Remove install command samples
  • 3a037d0067c2c12a1c2c800fb85613a0a2911253 Core PR#17398 Wladimir J. van der Laan - test: Add crc32c exception to various linters and generation scripts
  • 3a037d0067c2c12a1c2c800fb85613a0a2911253 Core PR#17398 Wladimir J. van der Laan - test: Add crc32c exception to various linters and generation scripts
  • aaaaad6ac95b402fe18d019d67897ced6b316ee0 Core PR#17829 MarcoFalke - scripted-diff: Bump copyright of files changed in 2019
  • aaaaad6ac95b402fe18d019d67897ced6b316ee0 Core PR#17829 MarcoFalke - scripted-diff: Bump copyright of files changed in 2019
  • bd7e530f010d43816bb05d6f1590d1cd36cdaa2c Core PR#18210 Kiminuo - This PR adds initial support for type hints checking in python scripts.
  • d0ebd93270758ea97ea956b8821e17a2d001ea94 Core PR#18234 Anthony Towns - scheduler: switch from boost to std
  • fa488f131fd4f5bab0d01376c5a5013306f1abcd Core PR#18673 MarcoFalke - scripted-diff: Bump copyright headers
  • fa488f131fd4f5bab0d01376c5a5013306f1abcd Core PR#18673 MarcoFalke - scripted-diff: Bump copyright headers
  • bb6fcc75d1ec94b733d1477c816351c50be5faf9 Core PR#18710 Hennadii Stepanov - refactor: Drop boost::thread stuff in CCheckQueue
  • e0f5f6f Core PR#18752 [backport] test: Fix intermittent error in mempool_reorg
  • 89f9fef1f71dfeff4baa59bc42bc9049a46d911b Core PR#18758 Hennadii Stepanov - refactor: Specify boost/thread/thread.hpp explicitly
  • 13639e0 Core PR#18873 [backport] test: Fix intermittent sync_blocks failures
  • 7dda912e1c28b02723c9f24fa6c4e9003d928978 Core PR#19172 Hennadii Stepanov - test: Do not swallow flake8 exit code
  • f1a0314c537791f202dfb7c1209f0e04ba7988c3 Core PR#19256 Cory Fields - gui: change combiner for signals to optional_last_value
  • 39d526bde48d98af4fa27906e85db0399b6aa8b1 Core PR#19348 Duncan Dean - test: Bump linter versions
  • 9637ff3 Core PR#19504 [tests] Recommend f-strings for formatting, update feature_block to use them
  • 39ab7ec Core PR#19844 lint: add C++ code linter
  • b6121edf70a8d50fd16ddbba0c3168e5e49bfc2e Core PR#20346 Tyler Chambers - swapped "is" for "==" in literal comparison
  • faa8f68943615785a2855676cf96e0e96f3cc6bd Core PR#20480 MarcoFalke - Replace boost::variant with std::variant
  • fa4435e22f78f632a455016ce00a357009aac059 Core PR#20671 MarcoFalke - Replace boost::optional with std::optional
  • dc8be12510c2fd5a809d9a82d2c14b464b5e5a3f Core PR#21016 fanquake - refactor: remove boost::thread_group usage
  • e99db77a6e73996d33d7108f8336938dd57037a7 Core PR#21059 Hennadii Stepanov - Drop boost/preprocessor dependencies
  • 7097add83c8596f81be9edd66971ffd2486357eb Core PR#21064 fanquake - refactor: replace Boost shared_mutex with std shared_mutex in sigcache
  • 0ba89dd Core:(various PRs listed separately): lint: Add lint-python and lint-python-utf8-encoding
  • 5ba7031 Core:PR#16726 lint: Catch use of [] or {} as default parameter values in Python functions
  • 594924b Dash PR#3672,Core PR#3685 [QT] Add last block hash to debug ui: Trivial addition to display last block hash next to last block time