From 1fe9800a0a9cc96fe2f7a9e4b1cad422ded2b3f8 Mon Sep 17 00:00:00 2001 From: Arsenii Kulikov Date: Fri, 8 Nov 2024 03:57:30 +0400 Subject: [PATCH] feat: bump alloy --- Cargo.toml | 20 +++++++------- crates/rpc-types/src/transaction.rs | 42 +++++++++++++++++------------ 2 files changed, 35 insertions(+), 27 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index b57277215..797bb344b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -46,16 +46,16 @@ op-alloy-rpc-jsonrpsee = { version = "0.6.2", path = "crates/rpc-jsonrpsee", def op-alloy-rpc-types-engine = { version = "0.6.2", path = "crates/rpc-types-engine", default-features = false } # Alloy -alloy-eips = { version = "0.6.1", default-features = false } -alloy-serde = { version = "0.6.1", default-features = false } -alloy-signer = { version = "0.6.1", default-features = false } -alloy-network = { version = "0.6.1", default-features = false } -alloy-provider = { version = "0.6.1", default-features = false } -alloy-transport = { version = "0.6.1", default-features = false } -alloy-consensus = { version = "0.6.1", default-features = false } -alloy-rpc-types-eth = { version = "0.6.1", default-features = false } -alloy-rpc-types-engine = { version = "0.6.1", default-features = false } -alloy-network-primitives = { version = "0.6.1", default-features = false } +alloy-eips = { version = "0.6.2", default-features = false } +alloy-serde = { version = "0.6.2", default-features = false } +alloy-signer = { version = "0.6.2", default-features = false } +alloy-network = { version = "0.6.2", default-features = false } +alloy-provider = { version = "0.6.2", default-features = false } +alloy-transport = { version = "0.6.2", default-features = false } +alloy-consensus = { version = "0.6.2", default-features = false } +alloy-rpc-types-eth = { version = "0.6.2", default-features = false } +alloy-rpc-types-engine = { version = "0.6.2", default-features = false } +alloy-network-primitives = { version = "0.6.2", default-features = false } # Alloy RLP alloy-rlp = { version = "0.3", default-features = false } diff --git a/crates/rpc-types/src/transaction.rs b/crates/rpc-types/src/transaction.rs index 952a356a2..f69b85c5d 100644 --- a/crates/rpc-types/src/transaction.rs +++ b/crates/rpc-types/src/transaction.rs @@ -155,15 +155,24 @@ mod tx_serde { //! //! This is needed because we might need to deserialize the `from` field into both //! [`alloy_rpc_types_eth::Transaction::from`] and [`op_alloy_consensus::TxDeposit::from`]. + //! + //! Additionaly, we need similar logic for the `gasPrice` field use super::*; use serde::de::Error; /// Helper struct which will be flattened into the transaction and will only contain `from` /// field if inner [`OpTxEnvelope`] did not consume it. #[derive(Serialize, Deserialize)] - struct MaybeFrom { + struct OptionalFields { #[serde(default, skip_serializing_if = "Option::is_none")] from: Option
, + #[serde( + default, + rename = "gasPrice", + skip_serializing_if = "Option::is_none", + with = "alloy_serde::quantity::opt" + )] + effective_gas_price: Option, } #[derive(Serialize, Deserialize)] @@ -171,19 +180,11 @@ mod tx_serde { pub(crate) struct TransactionSerdeHelper { #[serde(flatten)] inner: OpTxEnvelope, - #[serde(default, skip_serializing_if = "Option::is_none")] + #[serde(default)] block_hash: Option, - #[serde( - default, - skip_serializing_if = "Option::is_none", - with = "alloy_serde::quantity::opt" - )] + #[serde(default, with = "alloy_serde::quantity::opt")] block_number: Option, - #[serde( - default, - skip_serializing_if = "Option::is_none", - with = "alloy_serde::quantity::opt" - )] + #[serde(default, with = "alloy_serde::quantity::opt")] transaction_index: Option, #[serde( default, @@ -193,7 +194,7 @@ mod tx_serde { deposit_receipt_version: Option, #[serde(flatten)] - from: MaybeFrom, + other: OptionalFields, } impl From for TransactionSerdeHelper { @@ -205,21 +206,25 @@ mod tx_serde { block_hash, block_number, transaction_index, + effective_gas_price, from, }, deposit_receipt_version, } = value; - // if inner transaction is deposit, then don't serialize `from` directly + // if inner transaction is a deposit, then don't serialize `from` directly let from = if matches!(inner, OpTxEnvelope::Deposit(_)) { None } else { Some(from) }; + // if inner transaction has its own `gasPrice` don't serialize it in this struct. + let effective_gas_price = effective_gas_price.filter(|_| inner.gas_price().is_none()); + Self { inner, block_hash, block_number, transaction_index, deposit_receipt_version, - from: MaybeFrom { from }, + other: OptionalFields { from, effective_gas_price }, } } } @@ -234,12 +239,12 @@ mod tx_serde { block_number, transaction_index, deposit_receipt_version, - from, + other, } = value; // Try to get `from` field from inner envelope or from `MaybeFrom`, otherwise return // error - let from = if let Some(from) = from.from { + let from = if let Some(from) = other.from { from } else if let OpTxEnvelope::Deposit(tx) = &inner { tx.from @@ -247,6 +252,8 @@ mod tx_serde { return Err(serde_json::Error::custom("missing `from` field")); }; + let effective_gas_price = other.effective_gas_price.or(inner.gas_price()); + Ok(Self { inner: alloy_rpc_types_eth::Transaction { inner, @@ -254,6 +261,7 @@ mod tx_serde { block_number, transaction_index, from, + effective_gas_price, }, deposit_receipt_version, })