use crate::{InMemorySize, MaybeCompact, MaybeSerde};
use alloc::fmt;
use alloy_consensus::transaction::{Recovered, SignerRecoverable, TxHashRef};
use alloy_eips::eip2718::{Decodable2718, Encodable2718, IsTyped2718};
use alloy_primitives::{keccak256, Address, B256};
use alloy_rlp::{Decodable, Encodable};
use core::hash::Hash;
pub use alloy_consensus::crypto::RecoveryError;
pub trait FullSignedTx: SignedTransaction + MaybeCompact {}
impl<T> FullSignedTx for T where T: SignedTransaction + MaybeCompact {}
pub trait SignedTransaction:
Send
+ Sync
+ Unpin
+ Clone
+ fmt::Debug
+ PartialEq
+ Eq
+ Hash
+ Encodable
+ Decodable
+ Encodable2718
+ Decodable2718
+ alloy_consensus::Transaction
+ MaybeSerde
+ InMemorySize
+ SignerRecoverable
+ TxHashRef
+ IsTyped2718
{
fn is_broadcastable_in_full(&self) -> bool {
!self.is_eip4844()
}
fn try_recover(&self) -> Result<Address, RecoveryError> {
self.recover_signer()
}
fn try_recover_unchecked(&self) -> Result<Address, RecoveryError> {
self.recover_signer_unchecked()
}
fn recalculate_hash(&self) -> B256 {
keccak256(self.encoded_2718())
}
fn try_clone_into_recovered(&self) -> Result<Recovered<Self>, RecoveryError> {
self.recover_signer().map(|signer| Recovered::new_unchecked(self.clone(), signer))
}
fn try_clone_into_recovered_unchecked(&self) -> Result<Recovered<Self>, RecoveryError> {
self.recover_signer_unchecked().map(|signer| Recovered::new_unchecked(self.clone(), signer))
}
fn try_into_recovered(self) -> Result<Recovered<Self>, Self> {
match self.recover_signer() {
Ok(signer) => Ok(Recovered::new_unchecked(self, signer)),
Err(_) => Err(self),
}
}
#[deprecated(note = "Use try_into_recovered_unchecked instead")]
fn into_recovered_unchecked(self) -> Result<Recovered<Self>, RecoveryError> {
self.recover_signer_unchecked().map(|signer| Recovered::new_unchecked(self, signer))
}
fn with_signer(self, signer: Address) -> Recovered<Self> {
Recovered::new_unchecked(self, signer)
}
fn with_signer_ref(&self, signer: Address) -> Recovered<&Self> {
Recovered::new_unchecked(self, signer)
}
}
impl<T> SignedTransaction for T where
Self: Send
+ Sync
+ Unpin
+ Clone
+ fmt::Debug
+ PartialEq
+ Eq
+ Hash
+ Encodable
+ Decodable
+ Encodable2718
+ Decodable2718
+ alloy_consensus::Transaction
+ MaybeSerde
+ InMemorySize
+ SignerRecoverable
+ TxHashRef
+ IsTyped2718
{
}