Add rollback limit to block index rewinding
This will prevent users from starting their nodes if they switch between software versions that implement different network upgrades. It will also prevent users from using the testnet if they have more than MAX_REORG_LIMIT post-upgrade blocks, and the upgrade point is shifted in a newer software version.
This commit is contained in:
parent
57e6ecda5a
commit
cb580c7241
20
src/main.cpp
20
src/main.cpp
|
@ -3826,6 +3826,26 @@ bool RewindBlockIndex(const CChainParams& params)
|
||||||
}
|
}
|
||||||
|
|
||||||
// nHeight is now the height of the first insufficiently-validated block, or tipheight + 1
|
// nHeight is now the height of the first insufficiently-validated block, or tipheight + 1
|
||||||
|
auto rewindLength = chainActive.Height() - nHeight;
|
||||||
|
if (rewindLength > 0 && rewindLength > MAX_REORG_LENGTH) {
|
||||||
|
auto pindexOldTip = chainActive.Tip();
|
||||||
|
auto pindexRewind = chainActive[nHeight - 1];
|
||||||
|
auto msg = strprintf(_(
|
||||||
|
"A block chain rewind has been detected that would roll back %d blocks! "
|
||||||
|
"This is larger than the maximum of %d blocks, and so the node is shutting down for your safety."
|
||||||
|
), rewindLength, MAX_REORG_LENGTH) + "\n\n" +
|
||||||
|
_("Rewind details") + ":\n" +
|
||||||
|
"- " + strprintf(_("Current tip: %s, height %d"),
|
||||||
|
pindexOldTip->phashBlock->GetHex(), pindexOldTip->nHeight) + "\n" +
|
||||||
|
"- " + strprintf(_("Rewinding to: %s, height %d"),
|
||||||
|
pindexRewind->phashBlock->GetHex(), pindexRewind->nHeight) + "\n\n" +
|
||||||
|
_("Please help, human!");
|
||||||
|
LogPrintf("*** %s\n", msg);
|
||||||
|
uiInterface.ThreadSafeMessageBox(msg, "", CClientUIInterface::MSG_ERROR);
|
||||||
|
StartShutdown();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
CValidationState state;
|
CValidationState state;
|
||||||
CBlockIndex* pindex = chainActive.Tip();
|
CBlockIndex* pindex = chainActive.Tip();
|
||||||
while (chainActive.Height() >= nHeight) {
|
while (chainActive.Height() >= nHeight) {
|
||||||
|
|
Loading…
Reference in New Issue