diff --git a/crates/primitives/src/transaction/mod.rs b/crates/primitives/src/transaction/mod.rs index 9b07ce009..775950eea 100644 --- a/crates/primitives/src/transaction/mod.rs +++ b/crates/primitives/src/transaction/mod.rs @@ -1822,6 +1822,25 @@ impl IntoRecoveredTransaction for TransactionSignedEcRecovered { } } +impl TryFrom for TransactionSignedEcRecovered { + type Error = ConversionError; + + fn try_from(tx: reth_rpc_types::Transaction) -> Result { + let signature = tx.signature.ok_or(ConversionError::MissingSignature)?; + + TransactionSigned::from_transaction_and_signature( + tx.try_into()?, + Signature { + r: signature.r, + s: signature.s, + odd_y_parity: signature.y_parity.ok_or(ConversionError::MissingYParity)?.0, + }, + ) + .try_into_ecrecovered() + .map_err(|_| ConversionError::InvalidSignature) + } +} + #[cfg(test)] mod tests { use crate::{