Skip to content

Inconsistent response of engine_newPayloadV4 #8640

Open
@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 engine_newPayloadV4 with invalid request, Besu returns an validationError error inside result, while the other four clients respond with error code -32602 as defined in the spec.

"errors": [
	{
		"code": -32602,
		"message": "Invalid params"
	},
	{
		"code": -38005,
		"message": "Unsupported fork"
	}
],

Thanks for your time!

Steps to Reproduce

Call the engine_newPayloadV4 with:

curl POST -v http://127.0.0.1:8551 \
   -H "Content-Type: application/json" \
   -H "Authorization: Bearer your_encoded_jwt_token" \
   -d '{
   "id": 1,
   "jsonrpc": "2.0",
   "method": "engine_newPayloadV4",
   "params": [
    {
      "parentHash": "0x3b8fb240d288781d4aac94d3fd16809ee413bc99294a085798a589dae51ddd4a",
      "feeRecipient": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b",
      "stateRoot": "0xf59a05703abea35401387392e6c17290fb0384efa9edd72529513d30e58f5666",
      "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
      "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
      "prevRandao": "0xc130d5e63c61c935f6089e61140ca9136172677cf6aa5800dcc1cf0a02152a14",
      "blockNumber": "0x112720f",
      "gasLimit": "0x1c9c380",
      "gasUsed": "0xbad2e8",
      "timestamp": "0x681c9d13",
      "extraData": "0x",
      "baseFeePerGas": "0x7",
      "blockHash": "0x3559e851470f6e7bbed1db474980683e8c315bfce99b2a6ef47c057c04de7858",
      "transactions": [
        "0x03f88f0780843b9aca008506fc23ac00830186a09400000000000000000000000000000000000001008080c001e1a0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c44401401a0840650aa8f74d2b07f40067dc33b715078d73422f01da17abdbd11e02bbdfda9a04b2260f6022bf53eadb337b3e59514936f7317d872defb891a708ee279bdca90",
        "0x03f88f0701843b9aca008506fc23ac00830186a09400000000000000000000000000000000000001008080c001e1a001521d528ad0c760354a4f0496776cf14a92fe1fb5d50e959dcea1a489c7c83101a0a86c1fd8c2e74820686937f5c1bfe836e2fb622ac9fcbebdc4ab4357f2dbbc61a05c3b2b44ff8252f78d70aeb33f8ba09beaeadad1b376a57d34fa720bbc4a18ee",
        "0x03f88f0702843b9aca008506fc23ac00830186a09400000000000000000000000000000000000001008080c001e1a001453362c360fdd8832e3539d463e6d64b2ee320ac6a08885df6083644a063e701a037a728aec08aefffa702a2ca620db89caf3e46ab7f25f7646fc951510991badca065d846f046357af39bb739b161233fce73ddfe0bb87f2d28ef60dfe6dbb0128d"
      ],
      "withdrawals": [
        {
          "index": "0xf0",
          "validatorIndex": "0xf0",
          "address": "0x00000000000000000000000000000000000010f0",
          "amount": "0x1"
        },
        {
          "index": "0xf1",
          "validatorIndex": "0xf1",
          "address": "0x00000000000000000000000000000000000010f1",
          "amount": "0x1"
        }
      ],
      "blobGasUsed": "0x0",
      "excessBlobGas": "0x0"
    },
    [
      "0x010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014"
    ],
    "0x169630f535b4a41330164c6e5c92b1224c0c407f582d407d0ac3d206cd32fd52",
    [
      "0x96a96086cff07df17668f35f7418ef8798079167e3f4f9b72ecde17b28226137cf454ab1dd20ef5d924786ab3483c2f9003f5102dabe0a27b1746098d1dc17a5d3fbd478759fea9287e4e419b3c3cef20100000000000000b1acdb2c4d3df3f1b8d3bfd33421660df358d84d78d16c4603551935f4b67643373e7eb63dcb16ec359be0ec41fee33b03a16e80745f2374ff1d3c352508ac5d857c6476d3c3bcf7e6ca37427c9209f17be3af5264c0e2132b3dd1156c28b4e9f000000000000000a5c85a60ba2905c215f6a12872e62b1ee037051364244043a5f639aa81b04a204c55e7cc851f29c7c183be253ea1510b001db70c485b6264692f26b8aeaab5b0c384180df8e2184a21a808a3ec8e86ca01000000000000009561731785b48cf1886412234531e4940064584463e96ac63a1a154320227e333fb51addc4a89b7e0d3f862d7c1fd4ea03bd8eb3d8806f1e7daf591cbbbb92b0beb74d13c01617f22c5026b4f9f9f294a8a7c32db895de3b01bee0132c9209e1f100000000000000",
      "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b85103a5617937691dfeeb89b86a80d5dc9e3c9d3a1a0e7ce311e26e0bb732eabaa47ffa288f0d54de28209a62a7d29d0000000000000000000000000000000000000000000000000000010f698daeed734da114470da559bd4b4c7259e1f7952555241dcbc90cf194a2ef676fc6005f3672fada2a3645edb297a75530100000000000000",
      "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b85103a5617937691dfeeb89b86a80d5dc9e3c9d3a1a0e7ce311e26e0bb732eabaa47ffa288f0d54de28209a62a7d29d098daeed734da114470da559bd4b4c7259e1f7952555241dcbc90cf194a2ef676fc6005f3672fada2a3645edb297a7553"
    ]
  ]
 }'

Expected behavior: [What you expect to happen]

Return -32602 for invalid params as defined in the spec.

This is the response of geth for reference.

{"error": {"code": -32602, "data": {"err": "invalid request order: [169 79 83 116 252 229 237 188 142 42 134 151 193 83 49 103 126 110 191 11 133 16 58 86 23 147 118 145 223 238 184 155 134 168 13 93 201 227 201 211 161 160 231 206 49 30 38 224 187 115 46 171 170 71 255 162 136 240 213 77 226 130 9 166 42 125 41 208 152 218 238 215 52 218 17 68 112 218 85 155 212 180 199 37 158 31 121 82 85 82 65 220 188 144 207 25 74 46 246 118 252 96 5 243 103 47 173 162 163 100 94 219 41 122 117 83]"}, "message": "Invalid parameters"}, "id": 1, "jsonrpc": "2.0"}

Actual behavior: [What actually happens]

{"id": 1, "jsonrpc": "2.0", "result": {"latestValidHash": null, "status": "INVALID", "validationError": "Invalid execution requests"}}

Frequency: [What percentage of the time does it occur?]

Always.

Logs

Results from 5 EL clients.

{"id": 1, "jsonrpc": "2.0", "result": {"latestValidHash": null, "status": "INVALID", "validationError": "Invalid execution requests"}} # besu
{"error": {"code": -32602, "data": {"err": "invalid request order: [169 79 83 116 252 229 237 188 142 42 134 151 193 83 49 103 126 110 191 11 133 16 58 86 23 147 118 145 223 238 184 155 134 168 13 93 201 227 201 211 161 160 231 206 49 30 38 224 187 115 46 171 170 71 255 162 136 240 213 77 226 130 9 166 42 125 41 208 152 218 238 215 52 218 17 68 112 218 85 155 212 180 199 37 158 31 121 82 85 82 65 220 188 144 207 25 74 46 246 118 252 96 5 243 103 47 173 162 163 100 94 219 41 122 117 83]"}, "message": "Invalid parameters"}, "id": 1, "jsonrpc": "2.0"} # geth
{"error": {"code": -32602, "message": "Execution requests must not contain duplicates and be ordered by request_type in ascending order"}, "id": 1, "jsonrpc": "2.0"} # nethermind
{"error": {"code": -32602, "data": {"err": "Invalid params: DuplicatedExecutionRequestType"}, "message": "Invalid params"}, "id": 1, "jsonrpc": "2.0"} # reth
{"error": {"code": -32602, "message": "Invalid Request at index 2"}, "id": 1, "jsonrpc": "2.0"} # erigon

Versions

  • OS Name & Version: Ubuntu-20.04

Client versions

  • Besu/v25.4.1/linux-x86_64/openjdk-java-21
  • Geth/v1.15.12-unstable-3e356d69-20250507/linux-amd64/go1.24.3
  • Nethermind/v1.32.0-unstable+ff9befb5/linux-x64/dotnet9.0.4
  • Reth/v1.3.12-6f8e725/x86_64-unknown-linux-gnu
  • Erigon/3.1.0/linux-amd64/go1.24.1

with

  • Prysm/v6.0.0 (linux amd64)

Metadata

Metadata

Assignees

Labels

P2High (ex: Degrading performance issues, unexpected behavior of core features (DevP2P, syncing, etc))RPCbugSomething isn't working

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions