v5.3.7: Fix sync stall, transaction display, balance updates, and bootstrap snapshots

Sync fixes:
- Extend stall detection beyond IBD to catch post-IBD sync gaps
- Walk-forward inv continuation to avoid CBlockLocator exponential gap loop
- Track walk-forward progress for stall recovery without restarting from scratch

GUI fixes:
- Load transactions synchronously in constructor (deferred QTimer never fired)
- Use beginResetModel/endResetModel instead of deprecated reset()
- Schedule full refresh on TRY_LOCK failure to avoid dropped CT_NEW notifications
- Only update cachedNumBlocks after successful balance check (prevents permanent loss)
- Add GetAllBalances() single-pass balance retrieval with TRY_LOCK

Bootstrap:
- Add trusted snapshot manifest verification for bootstrap archives
- Add IsKnownCheckpoint() to validate manifest against compiled-in checkpoints
- Skip txleveldb rebuild when verified manifest is present

Bump version to 5.3.7 across all packaging manifests.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-24 23:36:43 -07:00
parent 7adf92df7a
commit cd1b497f0d
32 changed files with 360 additions and 73 deletions
+16
View File
@@ -880,6 +880,22 @@ bool AppInit2()
}
printf(" block index %15" PRId64 "ms\n", GetTimeMillis() - nStart);
// Diagnostic: check for blocks in mapBlockIndex above pindexBest
{
int nMaxIndexHeight = 0;
int nAboveBest = 0;
for (std::map<uint256, CBlockIndex*>::iterator it = mapBlockIndex.begin();
it != mapBlockIndex.end(); ++it)
{
if (it->second->nHeight > nMaxIndexHeight)
nMaxIndexHeight = it->second->nHeight;
if (it->second->nHeight > nBestHeight)
nAboveBest++;
}
printf("SYNC-DIAG: mapBlockIndex=%d entries, maxHeight=%d, bestHeight=%d, aboveBest=%d\n",
(int)mapBlockIndex.size(), nMaxIndexHeight, nBestHeight, nAboveBest);
}
if (GetBoolArg("-printblockindex") || GetBoolArg("-printblocktree"))
{
PrintBlockTree();