diff --git a/crates/primitives/src/transaction/variant.rs b/crates/primitives/src/transaction/variant.rs index 2ab266722..b89aa6aa1 100644 --- a/crates/primitives/src/transaction/variant.rs +++ b/crates/primitives/src/transaction/variant.rs @@ -1,8 +1,10 @@ //! Helper enum functions for `Transaction`, `TransactionSigned` and //! `TransactionSignedEcRecovered` use crate::{ - Transaction, TransactionSigned, TransactionSignedEcRecovered, TransactionSignedNoHash, + Address, Transaction, TransactionSigned, TransactionSignedEcRecovered, TransactionSignedNoHash, + B256, }; +use std::ops::Deref; /// Represents various different transaction formats used in reth. /// @@ -29,6 +31,26 @@ impl TransactionSignedVariant { } } + /// Returns the hash of the transaction + pub fn hash(&self) -> B256 { + match self { + TransactionSignedVariant::SignedNoHash(tx) => tx.hash(), + TransactionSignedVariant::Signed(tx) => tx.hash, + TransactionSignedVariant::SignedEcRecovered(tx) => tx.hash, + } + } + + /// Returns the signer of the transaction. + /// + /// If the transaction is of not of [TransactionSignedEcRecovered] it will be recovered. + pub fn signer(&self) -> Option
{ + match self { + TransactionSignedVariant::SignedNoHash(tx) => tx.recover_signer(), + TransactionSignedVariant::Signed(tx) => tx.recover_signer(), + TransactionSignedVariant::SignedEcRecovered(tx) => Some(tx.signer), + } + } + /// Returns [TransactionSigned] type /// else None pub fn as_signed(&self) -> Option<&TransactionSigned> { @@ -130,3 +152,11 @@ impl AsRef