fix(sync): enforce ForkLengthThreshold for synced chain #5182
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.
In
syncFork
, we currently only applyForkLengthThreshold
to the tipsets being fetched for the forked chain (by means ofGetBlocks
, if we walk back the fork chain without finding a common ancestorsyncFork
will fail). We do not apply the threshold for our synced chain, that is, the tipsets that would be "walked back" if the fork is selected as our new head.This fix introduces a variable (
forkLengthInHead
) to track the tipsets walked back from our synced head to find the common ancestor with the fork. Before we allowed to freely walk back our chain (nts.Parents()
) to match the next tipset height in the fork chain being traversed (to perform the common ancestor check).We left the previous check in place for the fork chain (in the
GetBlocks
call) to minimize changes at this time, so we will now enforce the threshold on both sides of the fork. It should be later revisited what do we mean exactly by fork length (a term presently missing in the spec).In theory this is a protocol breaking change but in practice forks in the chain are orders of magnitude smaller than the current limit of 900 enforced here.