Repository navigation
fix(precompiles): keep warm addresses when moving precompiles - #433
Open
MysticRyuujin wants to merge 1 commit into
Open
MysticRyuujin wants to merge 1 commit into
MysticRyuujin wants to merge 1 commit into
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
PrecompilesMap::move_precompilesremoved the source address from the warm addresses and added the destination address. Foreth_simulateV1(movePrecompileToAddress), the warm set must stay the precompile addresses of the fork. The spec says so in ethereum/execution-apis#881 (movePrecompileToAddressinsrc/schemas/execute.yaml): the move does not change the EIP-2929 warm set, and the destination is not warm because of the move. Geth installs the moved map for execution, but it warmsvm.ActivePrecompiles(rules).With the old behavior, reth charged the warm cost for a call to the destination and the cold cost for a call to the source. Geth charges the opposite. The hive fixture
ethSimulate-override-ecrecoverfails because of this difference.This change moves only the precompile map entries. The warm addresses do not change, so
warm_addresses()still returns the fork set.addresses()now lists the installed precompiles from the precompile map, so after a move it contains the destination and not the source. Before this change, both methods read the same set. Callers that list precompiles, for example retheth_config, therefore still see the moved precompile. The doc comments state the new behavior. A new test checks both methods after a move.Related: ethereum/execution-apis#887.