
Trust minimized transaction simulation using state proofs
An ethresear.ch post proposing "verified prestate simulation": wallets fetch the prestate a transaction will touch via debug_traceCall's prestateTracer, confirm unanimous state-root agreement across multiple independent RPC nodes, verify each account/storage value with eth_getProof Merkle Patricia Trie proofs, and only then execute the transaction locally with revm to produce trustworthy simulation results. It targets a concrete wallet attack where a compromised simulation API/RPC provider shows a benign fake trace (e.g. "donate to charity") while the real calldata drains a user's funds, and discusses its limitations (prestate-completeness not yet verified, conditional-logic and MEV evasion still possible) as a pragmatic alternative to full light clients.
What it is
A concrete wallet-simulation architecture ("verified prestate simulation") proposed on ethresear.ch, built on three specific RPC calls — debug_traceCall with prestateTracer, eth_getBlockByNumber, and eth_getProof — combined with local execution in revm (Rust EVM).
How it works
flowchart TD
A[debug_traceCall + prestateTracer] -->|discovers required accounts/storage| B[Query N independent RPC nodes]
B --> C{All stateRoots match?}
C -->|No| R[Reject simulation]
C -->|Yes| D[eth_getProof for each account/storage slot]
D --> E{All MPT proofs verify locally?}
E -->|No| R
E -->|Yes| F[Execute locally in revm with verified prestate]
F --> G[Self-generated traces shown to user]Account proofs verify against the global state root; storage proofs verify against each account's storageHash. Non-existent accounts are verified as not-yet-deployed and their state is left to revm execution. Any single proof failure or state-root disagreement causes the whole simulation to be rejected (optionally retried against different nodes).
Preconditions / Affected
Requires the target chain to support eth_getProof (described as "widely supported") and debug_traceCall with prestateTracer (described as "less common" — a practical deployment blocker on chains/providers that don't expose it). Works on Ethereum mainnet and most L2s; chains with non-standard state representations would need adapted proof-verification logic. Requires access to multiple independent RPC providers simultaneously, since the consensus step needs unanimous state-root agreement — one unreachable or disagreeing node fails the whole simulation (explicit availability-for-security trade-off).
Caveats
The authors state these as open, unresolved gaps, not solved problems:
- Prestate completeness is not verified, only correctness of what's provided. A malicious node could give accurate proofs for an incomplete prestate, hiding storage slots. The stated planned fix — checking post-execution that revm didn't access anything outside the verified prestate — is explicitly "future work," not implemented.
- Conditional/branching contract logic (e.g., behavior keyed on
block.timestampormsg.sender) can still make simulation show benign behavior while on-chain execution differs — acknowledged as unsolved and not specific to this approach. - MEV reordering can change actual execution block position versus simulated order, also unaddressed.
- The unanimous-consensus design is explicitly posed by the authors as an open question (security-over-availability trade-off; no per-user configurability yet).
Technologies named here
- Ethereum Mainnet
- revm
- debug_traceCall with prestateTracer
- EVM-compatible L2s
- eth_getProof
- Infura
- eth_getBlockByNumber
- Alchemy
- QuickNode
- debug_traceTransaction
- Third-party transaction simulation APIs/services
- trace_call
- Hardware wallets
- Ethereum
- Rust
Techniques named here
- Blind signing
- Transaction simulation spoofing / fake execution traces
- RPC provider compromise
- Prestate incompleteness attack
- Conditional/contextual contract behavior manipulation
- MEV-induced simulation divergence
- Merkle Patricia Trie proof verification
- Multi-node state root consensus
Related in Blockchain

THORChain Exploit Report #2 — GG20 root-cause disclosure

Black Thursday revisited: MakerDAO keeper exploited for $500K
.jpg)