5.4.9.11-testnet
Pre-release[5.4.9.11], 2026-03-04, testnet pre-release
This is a testnet-only pre-release (5.4.9.0 → 5.4.9.11) targeting block v14 mandatory activation on testnet at height 3126500. It is not intended for mainnet deployment; its purpose is to validate all v14 consensus changes before a coordinated mainnet hard fork. Mainnet nodes should not upgrade to this version.
The headline consensus change in this release is block v14, which activates three interdependent features: BIP65 (OP_CHECKLOCKTIMEVERIFY), BIP112/BIP68 (OP_CHECKSEQUENCEVERIFY and sequence-locked inputs), and Hash Time-Locked Contract (HTLC) support via the new createhtlc, claimhtlc, and refundhtlc RPCs. Block v14 also activates v3 beacons, which require a cryptographic BOINC account ownership proof (RSA-SHA512 signature issued by the BOINC project server) before a beacon is accepted, closing the historical gap where anyone who knew a CPID could advertise a beacon for it. (This historical gap was closed by the verification code process required for beacon v2, which has been used since Fern, but the verification code process is very inconvenient, especially new crunchers.) New beaconauth and advertisebeaconv3 RPCs support the v3 beacon flow, and a dedicated GUI wizard page guides researchers through the process.
Block v13 was made mandatory on testnet at height 2870000 during this release cycle. It activates a broad set of consensus features, much of whose infrastructure was built in the 5.4.6.0 release but gated behind the v13 block version:
- Mandatory sidestaking: Protocol-enforced sidestake allocations (e.g. to the Gridcoin foundation) via administrative contract, validated in the block reward claim checker, with up to 4 mandatory sidestake outputs on the coinstake transaction. The sidestake registry, GUI management interface, and
listmandatorysidestakesRPC were introduced in 5.4.6.0 (#2704). - Superblock v3 contracts carrying per-project all-CPID total credit data, required to support automated greylisting.
- AutoGreylist: Automated greylisting of unresponsive BOINC projects based on Zero Credit Days (ZCD) and Whitelist Activity Score (WAS), with scraper convergence integration, GUI greylist state display, and an auto-greylist-override contract type. The system has received significant refinement since initial activation: flutter fixes for scraper quiescent periods, a benefit-of-doubt fix, removal of redundant fields from history output, and several crash and correctness fixes.
- Changeable magnitude unit and magnitude weight factor: Configurable via protocol entries (administrative contracts with keys
magnitudeunitandmagnitudeweightfactor), enabling the network to adjust the research emission rate and the ratio of magnitude-to-balance weight in voting without a hard fork (#2781). - Enhanced constant block reward (CBR): Refactored
GetConstantBlockRewardwith a ceiling raised to 500 GRC (from 20 GRC), controllable via protocol entry (blockreward1). Also corrected Active Vote Weight (AVW) computation for balance-only polls (#2781). - Contract payload version upgrades: Project contracts advance from v2 to v3, protocol and scraper contracts from v1 to v2, and voting, claim/MRC, and beacon contracts from v2 to v3. These version bumps enable the new payload formats required by several of the above features and by v3 beacons (which are further gated behind v14).
The build system has been thoroughly modernized. Autotools (configure.ac, Makefile.am) have been removed entirely; CMake is now the sole supported build system. Qt6 is now supported (alongside Qt5), Linux Flatpak packaging with CI/CD artifact publication is available, official Docker container images (headless and GUI) are published, macOS DMG packaging is fixed and an Intel DMG CI build is added, Windows NSIS installer generation via CPack is supported, and Alpine/Musl Linux CI coverage is added. Boost 1.89+ and GCC 15 compatibility are addressed. A new ENABLE_DEBUG_LOCKORDER CMake option and improved lock-order diagnostic output aid concurrency debugging.
GUI improvements include a v3 beacon ownership proof wizard page, thin-space thousands separators in coin amounts, transaction type tooltips and Help menu documentation links, a fix for stale researcher status display after beacon activation or revocation, fractional-scaling support with Qt6, Unicode data directory path handling on Windows, BOINC data directory resolution when native and Flatpak BOINC coexist, and macOS quit-hang and DMG packaging fixes. The terminology "investor" is replaced throughout with "non-cruncher".
Added
- consensus, script, rpc: add BIP68, BIP112/CSV, block v14 activation, and HTLC support (createhtlc, claimhtlc, refundhtlc) #2846 (@jamescowens)
- consensus: set testnet v14 activation height at 3126500 #2874 (@jamescowens)
- beacon: add BOINC account ownership proof verification for v3 beacons; add beaconauth and advertisebeaconv3 RPCs #2851 (@jamescowens)
- qt: add v3 beacon ownership proof GUI wizard page #2856 (@jamescowens)
- consensus: set testnet v13 mandatory height at 2870000; increment PROTOCOL_VERSION to 180328. Block v13 activates mandatory sidestaking, superblock v3 contracts, the AutoGreylist system, changeable magnitude weight factor and magnitude unit, and enhanced CBR #2800 (@jamescowens)
- polls, voting, staking: changeable magnitude unit and magnitude weight factor via protocol entries; refactored GetConstantBlockReward with CBR ceiling raised to 500 GRC; corrected AVW computation for balance-only polls #2781 (@jamescowens)
- testnet: set AutoGreylistAuditHeight mandatory at 3111000 #2842 (@jamescowens)
- poll: implement poll notifications in core and testpollnotification RPC #2804 (@jamescowens)
- qt: add thin space thousands separators to coin amounts (closes #1040) #2849 (@jamescowens)
- qt, doc: add transaction type tooltips, Help menu links, and transaction-types.md (closes #2808) #2850 (@jamescowens)
- build: add Flatpak support with CI/CD artifact #2861 (@jamescowens)
- build, ci, cd: add official Docker container images (headless and GUI) #2855 (@jamescowens)
- build: add ENABLE_DEBUG_LOCKORDER CMake option #2860 (@jamescowens)
- build: define DEBUG macro for CMake Debug builds #2871 (@jamescowens)
- build: implement Alpine/Musl Linux CI #2832 (@jamescowens)
- build: add Qt6 depends support and CMake compatibility #2826 (@jamescowens)
- qt, build, ci: add optional Qt6 support #2798 (@CyberTailor)
- build: use CPack to generate NSIS installer for Windows #48 (@CyberTailor)
- ci: fix macOS DMG packaging and add macOS Intel DMG CI build #2864 (@jamescowens)
- doc: replace coding.txt with Bitcoin developer-notes.md #2186 (@jamescowens)
- doc: add quality control checklist (clinerules) #2854 (@PrestackI)
Changed
- autogreylist: remove ZCD, WAS, and meets-greylist-criteria fields from getautogreylist history output #2817 (@jamescowens)
- beacon: change beacon renewal job interval #2806 (@jamescowens)
- build: remove Autotools build system entirely #2843 (@jamescowens)
- build: fix version string duplication and stale autotools artifact pollution in CMake builds #2830 (@jamescowens)
- build: add multiple depends source fallback capability #2824 (@jamescowens)
- build: only link Boost::System if Boost < 1.89 #2823 (@2001herne)
- build: bump libsecp256k1 to v0.6.0 #2801 (@div72)
- bdb53: update embedded bdb53 code for GCC 15 compatibility #2816 (@jamescowens)
- build: cmake build fixes for missing symbol checks and pipe2 detection #2821 (@fedux)
- sync: improve DEBUG_LOCKORDER diagnostic output #2868 (@jamescowens)
- refactor: replace "investor" terminology with "non-cruncher" throughout #2805 (@jamescowens)
Removed
- build: remove Autotools build system (configure.ac, Makefile.am, m4 macros) #2843 (@jamescowens)
- build: remove stale generated test data headers from source tree #2845 (@jamescowens)
Fixed
- consensus, autogreylist: fix autogreylisting flutter during scraper quiescent periods #2840 (@jamescowens)
- autogreylist: fix stack-use-after-return in AutoGreylist #2802 (@jamescowens)
- staking: fix mandatory sidestake miscounting when staker address matches sidestake address #2848 (@jamescowens)
- voting: fix unprotected chain state reads during vote tallying #2853 (@jamescowens)
- voting, doc: fix false-positive lockorder warning in poll registry and document LOCK2 semantics #2867 (@jamescowens)
- researcher: fix stale GUI researcher status after beacon activation via superblock #2852 (@jamescowens)
- beacon: fix stale GUI researcher status after beacon revocation #2857 (@jamescowens)
- rpc: fix params index bug in addkey for project auto_greylist_override contract type #2858 (@jamescowens)
- rpc: make revokebeacon CPID parameter optional (defaults to current CPID) #2859 (@jamescowens)
- scraper: fix lock ordering inconsistency in RecvManifest #2872 (@jamescowens)
- scraper: fix scraper_net unserialize check to include ALL_BUT_DELETED projects #2813 (@jamescowens)
- qt, init: fix Unicode data directory path handling on Windows #2863 (@jamescowens)
- util: fix BOINC data directory resolution when native and Flatpak coexist #2862 (@jamescowens)
- qt: fix macOS quit hang with QCoreApplication::exit #2873 (@jamescowens)
- gui: fix fractional scaling with Qt6 #2829 (@jamescowens)
- gui: fix external adapter project display logic #2811 (@jamescowens)
- gui: fix researcher status display after beacon state changes on main screen #2810 (@jamescowens)
- gui, init: fix "Blocks Verified" progress message total count #2814 (@ZiggySchulz)
- compatibility: fix Qt6 and other compiler warnings #2827 (@jamescowens)
- gui: fix build failures with -Werror=odr,lto-type-mismatch in notificator #2836 (@Kangie)
- lint: fix include circular dependency linter false positives #2844 (@jamescowens)
- build: fix configure.ac for Boost >= 1.89 compatibility #2824 (@jamescowens)
- doc: fix minor comment issues #2815 (@friendlyping)
What's Changed
- linter: Fix include circular dependency linter false positives by @jamescowens in #2844
- build: remove stale generated test data headers from source tree by @jamescowens in #2845
- staking: fix mandatory sidestake miscounting when staker address matches by @jamescowens in #2848
- qt: Add thin space thousands separators to coin amounts by @jamescowens in #2849
- consensus, script, rpc: add BIP68, BIP112/CSV, block v14 activation, and HTLC support by @jamescowens in #2846
- researcher: fix stale GUI status after beacon activation via superblock by @jamescowens in #2852
- qt, doc: Add transaction type tooltips, Help menu links, and docs (closes #2808) by @jamescowens in #2850
- voting: fix unprotected chain state reads during vote tallying by @jamescowens in #2853
- doc: Add quality control checklist and remove trailing whitespace by @PrestackI in #2854
- beacon: fix stale GUI researcher status after beacon revocation by @jamescowens in #2857
- rpc: fix params index bug in addkey project auto_greylist_override by @jamescowens in #2858
- beacon: add BOINC account ownership proof verification (v3 beacons) by @jamescowens in #2851
- build, ci, cd: add official Docker container images by @jamescowens in #2855
- build: remove Autotools build system by @jamescowens in #2843
- build: add ENABLE_DEBUG_LOCKORDER CMake option by @jamescowens in #2860
- doc: Replace coding.txt with Bitcoin developer-notes.md by @jamescowens in #2186
- build: add Flatpak support with CI/CD artifact by @jamescowens in #2861
- util: fix BOINC data directory resolution when native and Flatpak coexist by @jamescowens in #2862
- rpc: make revokebeacon CPID parameter optional by @jamescowens in #2859
- qt: add v3 beacon ownership proof GUI wizard page by @jamescowens in #2856
- qt, init: fix Unicode data directory path handling on Windows by @jamescowens in #2863
- sync: improve DEBUG_LOCKORDER diagnostic output by @jamescowens in #2868
- voting, doc: fix false-positive lockorder warning and document LOCK2 semantics by @jamescowens in #2867
- build: define DEBUG macro for CMake Debug builds by @jamescowens in #2871
- scraper: fix lock ordering inconsistency in RecvManifest by @jamescowens in #2872
- qt: fix macOS quit hang with QCoreApplication::exit by @jamescowens in #2873
- build, ci, cd: fix macOS DMG packaging and release artifact naming by @jamescowens in #2864
- consensus: set testnet v14 activation height and remove temporary arg overrides by @jamescowens in #2874
Full Changelog: 5.4.9.9-testnet...5.4.9.11-testnet