Skip to content

Inconsistent response of JSON-RPC eth_getBlockReceipts #9197

@Alleysira

Description

@Alleysira

Overview

Hello developers.

I'm running a separate Pectra PoS testnet chain for API testing. During testing, I observed discrepancies in the JSON-RPC responses from execution clients—geth, besu, nethermind, reth and erigon. Specifically, when calling eth_getBlockReceipts with invalid request, Besu returns an Block not found error with code -32000, while the other four clients respond with null as defined in the exec-api spec.

# besu
{"error": {"code": -32000, "message": "Block not found"}, "id": 1, "jsonrpc": "2.0"}
# geth
{"id": 1, "jsonrpc": "2.0", "result": null}
# nethermind
{"id": 1, "jsonrpc": "2.0", "result": null}
# reth
{"id": 1, "jsonrpc": "2.0", "result": null}
# erigon
{"id": 1, "jsonrpc": "2.0", "result": null}

Spec definiton of the response:

"oneOf": [
	{
		"title": "Not Found (null)",
		"type": "null"
	},
	{
		"title": "Receipts information",
		"type": "array",
	...

Thanks for your attention!

Steps to Reproduce

Call the eth_getBlockReceipts with invalid block number:

curl POST http://127.0.0.1:10652 \
   -H "Content-Type: application/json" \
   -d '
{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "eth_getBlockReceipts",
  "params": [
    "0x1014083b159295235b6b84814f860e91d2a5105bf11c60f97ae8fb2b00cb7ff9"
  ]
}'

Expected behavior: Return null for not found.

Actual behavior: Return error.

Frequency: 100%

Logs

# besu
{"error": {"code": -32000, "message": "Block not found"}, "id": 1, "jsonrpc": "2.0"}
# geth
{"id": 1, "jsonrpc": "2.0", "result": null}
# nethermind
{"id": 1, "jsonrpc": "2.0", "result": null}
# reth
{"id": 1, "jsonrpc": "2.0", "result": null}
# erigon
{"id": 1, "jsonrpc": "2.0", "result": null}

Versions (Add all that apply)

  • OS Name & Version: Ubuntu-20.04

Client versions

  • besu/v25.8.0/linux-x86_64/openjdk-java-21
  • Geth/v1.16.3-stable-d818a9af/linux-amd64/go1.24.6
  • Nethermind/v1.33.1+cda59e5b/linux-x64/dotnet9.0.8
  • reth/v1.7.0-9d56da5/x86_64-unknown-linux-gnu
  • erigon/3.1.0/linux-amd64/go1.24.7

with

  • Prysm/v6.0.4 (linux amd64)

Metadata

Metadata

Assignees

Labels

P4Low (ex: Node doesn't start up when the configuration file has unexpected "end-of-line" character)RPCbugSomething isn't workinggood first issueGood for newcomers

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions