diff --git a/src/validation.cpp b/src/validation.cpp --- a/src/validation.cpp +++ b/src/validation.cpp @@ -2315,8 +2315,18 @@ REJECT_AGAINST_FINALIZED, "bad-fork-prior-finalized"); } - // Our candidate is valid, finalize it. - pindexFinalized = pindex; + // If there is no finalized block yet, finalize our candidate. + // If the block to finalize is on the same chain that the current + // finalized block pointer, ensure that its height make the + // finalization moves forward. + // Otherwise, the block is already finalized, there is nothing to do. + if (!pindexFinalized || + (pindexFinalized && AreOnTheSameFork(pindex, pindexFinalized) && + (pindex->nHeight > pindexFinalized->nHeight))) { + // Our candidate is valid, finalize it. + pindexFinalized = pindex; + } + return true; }