fix(cast): skip HyperEVM system transactions on replay - #16451
Merged
Conversation
HyperCore -> HyperEVM native transfers are submitted by 0x2222222222222222222222222222222222222222 as legacy envelopes with a gas price of 0 and a receipt gasUsed of 0. Because that sender was not recognized as a system sender, block replay executed them as regular transactions and aborted with "gas price is less than basefee", which broke `cast run` for every transaction in such a block. Replaying the five transactions of HyperEVM block 44427759 now matches the receipts exactly, where previously all of them failed.
mattsse
requested review from
0xrusowsky,
DaniPopes,
figtracer,
grandizzy,
mablr and
stevencartavia
as code owners
August 28, 2026 23:50
Contributor
✅ Changelog foundThe deterministic check will validate the changed entry. |
This was referenced Aug 29, 2026
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.
HyperCore credits native HYPE to HyperEVM accounts through transactions sent by
0x2222222222222222222222222222222222222222. They are legacy envelopes withgasPrice = 0, anr/sof1, and a receiptgasUsedof0. That sender was not inis_known_system_sender, so block replay executed them like regular transactions and aborted withtransaction validation error: gas price is less than basefee— which takes downcast runfor every transaction in the block, not just the credit itself. Sparse sampling of recent HyperEVM blocks put these in roughly 1% of them.Adding the address to the known system senders makes both
cast runand the fork backend skip them, the same way Arbitrum, Optimism, Monad and MegaETH system transactions are already skipped. Skipping is also the right state: the credit lands in the block being replayed, and the fork DB resolves balances at the parent, so the pre-credit balance is what the following transactions should see.Before, every transaction in HyperEVM block 44427759 failed the base fee check. After, all four user transactions replay to the exact receipt gas (134377, 134365, 39302, 119578), and targeting the credit itself reports
is a system transactioninstead of an EVM error. Transactions in blocks without a credit are unaffected.Found while looking into how well the suite reproduces HyperEVM execution. With this and an archive RPC,
cast runmatched the receipts on 22 of 24 sampled transactions; the two that still differ call the node-native HyperCore read precompiles at0x0800-0x0810, which is a separate problem and relates to #7262.Related: #10863, #10827, #10820.
This PR was written by Claude Code: the investigation that found the bug, the change, and this description. Verified against live HyperEVM blocks as described above.