Split out static phase of CALL gas cost calculation to avoid premature world state access #9581
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 change splits
*CALLgas cost calculation into two phases: a static phase that must not touch world state, and a phase that may read the world state and update the BAL. This prevents unnecessary state access and BAL modification in OOG scenarios wheretransferValue > 0andremainingGas < staticCost.All tests in [email protected] as well as the main release pass with these changes.
The "static gas cost" naming convention is debatable, but it was chosen for consistency with execution-specs. It is accurate in the sense that computing the static gas cost doesn't result in modifying the BAL (keeping it static).