From 1ef8d424df964fbcd7a73147cfddc489c8b96914 Mon Sep 17 00:00:00 2001 From: Randy Grok Date: Mon, 13 Apr 2026 17:02:54 +0200 Subject: [PATCH] fix: decode payload transactions with EIP-2718 exact format Engine API specifies transactions as opaque EIP-2718 encoded bytes, not devp2p wire format. Using network_decode here could silently drop typed transactions (EIP-1559, EIP-2930, EvNode 0x76/0x78) whose bytes are valid EIP-2718 but lack the wire-format RLP string wrapping. The executor already uses decode_2718_exact when validating the same transactions via ExecutionData. This aligns the payload builder with executor semantics, closing a potential consensus mismatch where build-time acceptance diverges from validation-time rules. --- crates/node/src/payload_service.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/node/src/payload_service.rs b/crates/node/src/payload_service.rs index d62cb0b..96b2b5e 100644 --- a/crates/node/src/payload_service.rs +++ b/crates/node/src/payload_service.rs @@ -223,7 +223,7 @@ where .unwrap_or_default() .into_iter() .filter_map(|tx_bytes| { - match TransactionSigned::network_decode(&mut tx_bytes.as_ref()) { + match TransactionSigned::decode_2718_exact(tx_bytes.as_ref()) { Ok(tx) => Some(tx), Err(err) => { tracing::warn!(