Calculate max epoch and churn for slashings once #14990
Open
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.
What type of PR is this?
Optimization
What does this PR do? Why is it needed?
When processing a slashing, we need to know the max exit epoch and the validator churn. The function that returns these values is
MaxExitEpochAndChurn
, which internally callsReadFromEveryValidator
on the state, which is an expensive operation. Currently we callMaxExitEpochAndChurn
for every proposer slashing and every validator index of an attester slashing. It can get very expensive especially in the case of an attester slashing with many validators being slashed. SinceMaxExitEpochAndChurn
only requires the state, it can be called just once before any slashing processing.Here is an image showing that processing slashings was very CPU intensive on Holesky
Acknowledgements