eth/downloader: make fast sync resilient to critical section fails #2647
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.
This PR makes fast sync more resilient to failures in the critical section (i.e. when downloading the pivot states) by allowing up to 10 failures to be registered before bailing out as a potential attack. It is important to note that to retain the security guarantees of fast sync, the pivot block must not change between retries.
As such, this PR drops the
downloader.noFast
flag that we used to force-disable fast syncing with in favor ofdownloader.fsPivotFails
counter to accumulate failures until a threshold is reached. At the same time, we also introducedownloader.fsPivotLock
that will be initialized to the block header of the pivot on the first failure in the critical section.Subsequent fast sync attempts will:
The PR also contains two tiny downloader fixes: