From bbef38e1a82b556a7bbbbaaaa2f4086ecce1ac45 Mon Sep 17 00:00:00 2001 From: Sami Ahmed Date: Fri, 31 Jul 2026 21:08:36 -0700 Subject: [PATCH] build(release): bump 6.1.8 -> 6.1.9 for staking-selfheal fix Headline change: f69f087 fix(staking): carve out caught-up nodes from IBD gate so chain can self-heal. Closes the v6.1.8 deadlock where IsStakingSafe() refused to stake whenever IBD was true and IBD flipped true after 24h of no blocks. Also includes the secondary commits since v6.1.7: - 41e3898 + 64556dc: CLI flag handling - 7a71904 (already in v6.1.8): revision bump - 8598cfa (PR #26): trusted snapshot publisher rotation - 935d1d5 + 6116cff + c68a8cb: consensus/IBD hardening - 540c889: test-linux-unit as blocking CI gate (PR #30) - db46792: keystore + V5 soft-cap test coverage (PR #29) - 9a50ab3: script_fuzz + EvalScript stress tests (PR #27) - 898292f: Bootstrap:: linkage restoration - e6ae48d + 14edbc2 + ...: release/deployment pipeline hardening (PR #32) - 3a4f271 + 2de9a9d: transaction_deserialize_fuzz wiring + docs The CHANGELOG notes v6.1.8's known deadlock and the staking=1/forcestaking=1 escape hatch for any operator still on v6.1.8. Codex verdict: see the underlying B-grade commits f69f087 and 3a4f271. --- CHANGELOG.md | 45 +++++++++++++++++++++++++++++++++++++++++++++ src/clientversion.h | 2 +- 2 files changed, 46 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fda2216..d347feb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,51 @@ All notable changes to Triangles (TRI) are documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [6.1.9] - 2026-07-31 + +### Fixed +- **Staking deadlock on idle networks.** `IsStakingSafe()` refused to + stake whenever `IsInitialBlockDownload()` was true, and `IBD` flipped + true whenever the chain tip was older than 24h. After 24h of no blocks, + every node simultaneously refused to stake and the chain deadlocked. + The `staking: true` flag in `getstakinginfo` was misleading — it only + reflected a single search in the brief window after a restart. Narrowed + the gate to "refuse only when IBD is true AND local height is behind + the peer/checkpoint estimate" (`f69f087`). A node at the peer median + now clears the gate and keeps staking through idle periods, so the + chain self-heals. Genuinely-behind nodes still hold off. Block + validation, reorg rules, and checkpoint rules are unchanged. The + `-forcestaking` bootstrap escape hatch still works on nodes caught + up to the checkpoint. + +### Changed +- CLI: `-conf=` (empty value) now falls back to the default config + path instead of erroring out (`41e3898`). +- CLI: `-conf` / `-datadir` / `-rpcuser` / `-rpcpassword` are honored + in the documented order, with clearer error messages on bad input + (`64556dc`). +- Build: reproducible build + signed release pipeline (PR #26 chain). + +## [6.1.8] - 2026-07-17 + +### Changed +- Bootstrap: RPC-driven trusted snapshot publisher rotation (PR #26). + Operators can rotate the snapshot publisher via RPC instead of + hard-coding it in the binary. +- Consensus: removed local-finality, fixed `getheaders` fork recovery + (`935d1d5`). +- Consensus: fail-closed reorg guard when the startup checkpoint + pointer is null (`6116cff`). +- IBD: allow `getblocks`/`getheaders` on OneShot peers during IBD + (`c68a8cb`). +- Build: bump revision 7 → 8. + +### ⚠️ Known issue +- v6.1.8 introduced a staking deadlock on idle networks via the + `IsStakingSafe()` gate. Operators on v6.1.8 should set + `staking=1` and `forcestaking=1` in `triangles.conf` and restart + to unstick the chain. v6.1.9 fixes the root cause. + ## [6.1.7] - 2026-07-08 ### Changed diff --git a/src/clientversion.h b/src/clientversion.h index f408ec0..b61ceb4 100644 --- a/src/clientversion.h +++ b/src/clientversion.h @@ -8,7 +8,7 @@ // These need to be macros, as version.cpp's and triangles-qt.rc's voodoo requires it #define CLIENT_VERSION_MAJOR 6 #define CLIENT_VERSION_MINOR 1 -#define CLIENT_VERSION_REVISION 8 +#define CLIENT_VERSION_REVISION 9 #define CLIENT_VERSION_BUILD 0 // Converts the parameter X to a string after macro replacement on X has been performed.