blockchain: fix the write known block check #404
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Before commit bf2f0d1 ("blockchain: fix inconsistent reorg behavior"), the write known block only checks the if the external total difficulty (TD) is higher than local one without following the fast finality rule, so it can reorg an justified block. That commit replaces the check with reorgNeeded function to enforce the fast finality rule. However, the reorgNeeded function does not strictly enforce that the external TD is higher than local one, it allows that the external TD may be equal to the local one. This leads to warning with an impossible reorg case.
This commit adds back the TD check combining with the reorgNeeded function to correcly enforce the rule here.
Fixes: #403