Skip to content

engine_newPayload strict-fields rule (null = not provided) unenforced for transactions and remaining payload fields #13720

Description

@flcl42

Cancun engine_newPayloadV3 §1, inherited by V4/V5/V6: "MUST check that provided set of parameters and their fields strictly matches the expected one and return -32602 … Any field having null value MUST be considered as not provided." #13714 covers withdrawals/blobGasUsed/excessBlobGas. The rule is still unenforced for the rest of the payload surface:

  • transactions is not null-checked anywhere on the V3+ path (ExecutionPayloadParams.ValidateEngineApiVersionParams checks withdrawals, blockAccessList, slotNumber and blobVersionedHashes presence only). A null/missing transactions falls through to TryGetTransactions/TryGetBlock and surfaces as INVALID or an internal error instead of -32602.
  • Base ExecutionPayload scalar fields (parentHash, feeRecipient, stateRoot, receiptsRoot, logsBloom, prevRandao, blockNumber, gasLimit, gasUsed, timestamp, extraData, baseFeePerGas, blockHash) carry no [JsonRequired] and non-nullable defaults (= Keccak.Zero, = [], …), so a missing key deserializes to the default and fails later as INVALID (hash mismatch) instead of -32602.
  • [JsonRequired] present-but-null semantics (V3 blobGasUsed/excessBlobGas, V4 blockAccessList/slotNumber): verify System.Text.Json rejects explicit JSON null the same as a missing key for each — the STJ required-check is the only gate for those fields and its null treatment must match "counts as not provided".

Suggest one pass over every field of ExecutionPayload V1–V4 shapes (plus the sidecar params) against the rule, with per-field error-code tests. Related: #13714 (the three named fields), #13712 (fork windows).

Spec: cancun.md – engine_newPayloadV3 §1.

Found in the Glamsterdam EIP-7732 ePBS EL-surface audit (sec4 scan).

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions