fix(execution): support empty account before and after SPURIOUS_DRAGON fork#91
Merged
AshinGau merged 1 commit intoGalxe:mainfrom Nov 4, 2025
Merged
fix(execution): support empty account before and after SPURIOUS_DRAGON fork#91AshinGau merged 1 commit intoGalxe:mainfrom
AshinGau merged 1 commit intoGalxe:mainfrom
Conversation
5a7296e to
50d061b
Compare
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.
Fix Empty Account Handling and Precompile Configuration
Summary
This PR fixes two critical issues:
Background
Empty Accounts Before SPURIOUS_DRAGON
Before the SPURIOUS_DRAGON upgrade, empty accounts were persisted in the database. This vulnerability was exploited to create numerous "dust accounts" (empty accounts), which bloated Ethereum's state tree and increased the burden on node synchronization and operation.
In the pre-SPURIOUS_DRAGON era, calling an address would create an empty account at that address. Subsequent accesses to this account would charge reduced gas fees. A typical example is block 1124576 (view on Etherscan), where both tx1 and tx3 called the empty account
0x0ae06d5934fd75d214951eb96633fbd7f9262a7c. In this case, tx3's call should charge reduced gas fees.The Bug in grevm
In grevm's implementation, empty accounts and non-existent accounts were treated as equal, which caused:
Empty Accounts After SPURIOUS_DRAGON
After the SPURIOUS_DRAGON upgrade, calling an empty account triggers account cleanup, as specified in EIP-161. A typical example is block 2675119 (view on Etherscan), where tx2 calls a contract that loops through addresses from
0x0to0x2bb, triggering cleanup of empty accounts in this range.Precompile Configuration Issue
The previously created EVM instance did not pass the correct precompile contracts configuration, leading to incorrect account states.
Changes
scheduler.rs:469)