fix(anvil): guard against the blockchain advancing while checking latest block #10714
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.
Motivation
Our tests sometimes flake with a
BlockRangeOutOfRangeError
when callingeth_call
with thelatest
block tag. IIUC, this should not be possible.I had a look at the code in order to see if a newer version of Anvil would fix the flake. I think there is a race condition in this code if the call is made right as a block was being produced:
See issue #10709 for context
Solution
Instead of calling
self.best_number()
twice, which could return different values if a block is built at the same time, the code now uses the pinned block at the beginning of the function.I'm not sure how best to test this fix since this is code is heavily dependent on async operations. I'd appreciate some help here :)
PR Checklist
Fix #10709