ethereum / ethereum/execution-apis
eth_simulateV1: behavior of blockOverrides.difficulty and unknown override keys is unspecified
- Dominant language
- Io
- Stars
- 1.1k
- Forks
- 530
- Avg merge
- 5d 8h
- Merged PRs (30d)
- 9
Description
`eth_simulateV1` accepts `blockOverrides`, but the spec does not say what happens for a key that the schema does not define. `difficulty` is the concrete case. It is not in `BlockOverrides`, yet four clients accept it from their `eth_call` override types, and each does something different.
Probe: one funded transfer on the hive test chain (Osaka), `blockOverrides: {"difficulty": "0x1"}`, and a second request with a made-up key. Mainline images, 2026-09-07.
| client | `difficulty: 0x1` | unknown key |
|---|---|---|
| geth | `-32603 method handler crashed` (see ethereum/go-ethereum#35671) | ignored |
| nethermind | ignored, header difficulty `0x0` | ignored |
| besu | `-32602 Invalid params` | `-32602 Invalid params` |
| erigon | applied to the header, call succeeds, pre-execution system calls skipped | ignored |
| reth | applied to the header, call succeeds | ignored |
| ethrex | method not implemented | n/a |
Two questions for the spec:
1. What is the response to a `blockOverrides` key that the schema does not define? Options: reject with `-32602`, or ignore. Today four clients ignore and one rejects, so a typo in a key is silent on most clients and an error on besu.
2. May a simulated block after the merge carry a non-zero `difficulty`? Real headers cannot. The notes doc gives the default as "the same as the base block", which is `0` after the merge, and `BlockOverrides` does not list `difficulty`. If clients keep accepting it, the spec should say it is ignored after the merge or that it is invalid.
No fix is proposed here.
Refs: ethereum/execution-apis#868, #881.
Contributor guide
Research direction
Start by reading the eth_simulateV1 and BlockOverrides material referenced in the issue, along with ethereum/execution-apis#868 and #881. Compare the reported client behavior and determine the specification decision for unknown keys and post-Merge difficulty. Done means the spec explicitly defines both behaviors, including the response for invalid or ignored overrides.
Written by the indexing model from the issue text.
Assessment
- Domain
- api, documentation
- Issue type
- Documentation
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100