From 8754b43c59421b8cf2eeebfc3d718e1ea071082d Mon Sep 17 00:00:00 2001 From: elonfliter Date: Mon, 31 Aug 2026 15:43:53 +0800 Subject: [PATCH] fix(execution): clear omitted payload envelope optionals Signed-off-by: elonfliter --- execution/evm/engine_payload.go | 5 ++--- execution/evm/engine_rpc_client_test.go | 23 +++++++++++++++++++++++ 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/execution/evm/engine_payload.go b/execution/evm/engine_payload.go index ef68f88ceb..b929c2163d 100644 --- a/execution/evm/engine_payload.go +++ b/execution/evm/engine_payload.go @@ -85,15 +85,14 @@ func (e *EnginePayloadEnvelope) UnmarshalJSON(input []byte) error { e.BlockValue = (*big.Int)(dec.BlockValue) e.BlobsBundle = dec.BlobsBundle + e.Requests = nil if dec.Requests != nil { e.Requests = make([][]byte, len(dec.Requests)) for i, request := range dec.Requests { e.Requests[i] = request } } - if dec.Override != nil { - e.Override = *dec.Override - } + e.Override = dec.Override != nil && *dec.Override e.Witness = dec.Witness return nil } diff --git a/execution/evm/engine_rpc_client_test.go b/execution/evm/engine_rpc_client_test.go index 6b39961fd9..eb312bf031 100644 --- a/execution/evm/engine_rpc_client_test.go +++ b/execution/evm/engine_rpc_client_test.go @@ -573,6 +573,29 @@ func TestEnginePayloadEnvelope_MarshalJSON_UsesWireFieldNames(t *testing.T) { require.JSONEq(t, string(envelope.RawExecutionPayload), string(decoded.RawExecutionPayload)) } +func TestEnginePayloadEnvelope_UnmarshalClearsOmittedFields(t *testing.T) { + withOptionals := strings.ReplaceAll(minimalPayloadEnvelopeJSON, + `"executionRequests": []`, `"executionRequests": ["0x01"]`) + withOptionals = strings.ReplaceAll(withOptionals, + `"shouldOverrideBuilder": false`, `"shouldOverrideBuilder": true`) + + var envelope EnginePayloadEnvelope + require.NoError(t, json.Unmarshal([]byte(withOptionals), &envelope)) + require.NotEmpty(t, envelope.Requests) + require.True(t, envelope.Override) + + var withoutOptionals map[string]json.RawMessage + require.NoError(t, json.Unmarshal([]byte(minimalPayloadEnvelopeJSON), &withoutOptionals)) + delete(withoutOptionals, "executionRequests") + delete(withoutOptionals, "shouldOverrideBuilder") + encoded, err := json.Marshal(withoutOptionals) + require.NoError(t, err) + + require.NoError(t, json.Unmarshal(encoded, &envelope)) + require.Nil(t, envelope.Requests) + require.False(t, envelope.Override) +} + func TestIsUnsupportedForkErr(t *testing.T) { tests := []struct { name string