From 2dbc46cd803796c1c398897e387e6bea7006f59a Mon Sep 17 00:00:00 2001 From: Matthias Seitz Date: Thu, 10 Jul 2025 02:51:32 +0200 Subject: [PATCH] fix: simplify OpExecutionPayload numeric field deserialization MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Directly deserialize numeric fields as U64 instead of going through string deserialization with alloy_serde::quantity. This simplifies the code and removes unnecessary string allocations during deserialization. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- crates/rpc-types-engine/src/payload/mod.rs | 33 +++++++++------------- 1 file changed, 13 insertions(+), 20 deletions(-) diff --git a/crates/rpc-types-engine/src/payload/mod.rs b/crates/rpc-types-engine/src/payload/mod.rs index 2e69888f8..78c348e01 100644 --- a/crates/rpc-types-engine/src/payload/mod.rs +++ b/crates/rpc-types-engine/src/payload/mod.rs @@ -52,9 +52,8 @@ impl<'de> serde::Deserialize<'de> for OpExecutionPayload { A: serde::de::MapAccess<'de>, { use alloc::string::String; - use alloy_primitives::map::HashMap; + use alloy_primitives::{U64, map::HashMap}; use alloy_rpc_types_engine::ExecutionPayloadV1; - use serde::de::IntoDeserializer; enum Fields { ParentHash, @@ -157,24 +156,20 @@ impl<'de> serde::Deserialize<'de> for OpExecutionPayload { Fields::LogsBloom => logs_bloom = Some(map.next_value()?), Fields::PrevRandao => prev_randao = Some(map.next_value()?), Fields::BlockNumber => { - let raw = map.next_value::<&str>()?; - block_number = - Some(alloy_serde::quantity::deserialize(raw.into_deserializer())?); + let raw = map.next_value::()?; + block_number = Some(raw.to()); } Fields::GasLimit => { - let raw = map.next_value::<&str>()?; - gas_limit = - Some(alloy_serde::quantity::deserialize(raw.into_deserializer())?); + let raw = map.next_value::()?; + gas_limit = Some(raw.to()); } Fields::GasUsed => { - let raw = map.next_value::()?; - gas_used = - Some(alloy_serde::quantity::deserialize(raw.into_deserializer())?); + let raw = map.next_value::()?; + gas_used = Some(raw.to()); } Fields::Timestamp => { - let raw = map.next_value::()?; - timestamp = - Some(alloy_serde::quantity::deserialize(raw.into_deserializer())?); + let raw = map.next_value::()?; + timestamp = Some(raw.to()); } Fields::ExtraData => extra_data = Some(map.next_value()?), Fields::BaseFeePerGas => base_fee_per_gas = Some(map.next_value()?), @@ -182,14 +177,12 @@ impl<'de> serde::Deserialize<'de> for OpExecutionPayload { Fields::Transactions => transactions = Some(map.next_value()?), Fields::Withdrawals => withdrawals = Some(map.next_value()?), Fields::BlobGasUsed => { - let raw = map.next_value::()?; - blob_gas_used = - Some(alloy_serde::quantity::deserialize(raw.into_deserializer())?); + let raw = map.next_value::()?; + blob_gas_used = Some(raw.to()); } Fields::ExcessBlobGas => { - let raw = map.next_value::()?; - excess_blob_gas = - Some(alloy_serde::quantity::deserialize(raw.into_deserializer())?); + let raw = map.next_value::()?; + excess_blob_gas = Some(raw.to()); } Fields::WithdrawalsRoot => withdrawals_root = Some(map.next_value()?), Fields::Unknown(field) => {