ethereum / ethereum/execution-apis

eth_simulateV1: behavior of blockOverrides.difficulty and unknown override keys is unspecified

Open
#883 0 comments 0 reactions 0 assignees View on GitHub
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

Open the contributing 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.