mirror of
https://github.com/hl-archive-node/nanoreth.git
synced 2025-12-06 10:59:55 +00:00
feat: add alloy tx type conversions back (#14110)
This commit is contained in:
@ -2,7 +2,8 @@ use alloc::vec::Vec;
|
||||
pub use alloy_consensus::{transaction::PooledTransaction, TxType};
|
||||
use alloy_consensus::{
|
||||
transaction::RlpEcdsaTx, BlobTransactionSidecar, SignableTransaction, Signed, TxEip1559,
|
||||
TxEip2930, TxEip4844, TxEip4844WithSidecar, TxEip7702, TxLegacy, Typed2718, TypedTransaction,
|
||||
TxEip2930, TxEip4844, TxEip4844Variant, TxEip4844WithSidecar, TxEip7702, TxEnvelope, TxLegacy,
|
||||
Typed2718, TypedTransaction,
|
||||
};
|
||||
use alloy_eips::{
|
||||
eip2718::{Decodable2718, Eip2718Error, Eip2718Result, Encodable2718},
|
||||
@ -39,6 +40,19 @@ macro_rules! delegate {
|
||||
};
|
||||
}
|
||||
|
||||
macro_rules! impl_from_signed {
|
||||
($($tx:ident),*) => {
|
||||
$(
|
||||
impl From<Signed<$tx>> for TransactionSigned {
|
||||
fn from(value: Signed<$tx>) -> Self {
|
||||
let(tx,sig,hash) = value.into_parts();
|
||||
Self::new(tx.into(), sig, hash)
|
||||
}
|
||||
}
|
||||
)*
|
||||
};
|
||||
}
|
||||
|
||||
/// A raw transaction.
|
||||
///
|
||||
/// Transaction types were introduced in [EIP-2718](https://eips.ethereum.org/EIPS/eip-2718).
|
||||
@ -404,6 +418,12 @@ impl TransactionSigned {
|
||||
pub fn transaction_mut(&mut self) -> &mut Transaction {
|
||||
&mut self.transaction
|
||||
}
|
||||
|
||||
/// Splits the transaction into parts.
|
||||
pub fn into_parts(self) -> (Transaction, Signature, B256) {
|
||||
let hash = *self.hash.get_or_init(|| self.recalculate_hash());
|
||||
(self.transaction, self.signature, hash)
|
||||
}
|
||||
}
|
||||
|
||||
impl Typed2718 for TransactionSigned {
|
||||
@ -482,6 +502,59 @@ impl alloy_consensus::Transaction for TransactionSigned {
|
||||
}
|
||||
}
|
||||
|
||||
impl_from_signed!(TxLegacy, TxEip2930, TxEip1559, TxEip7702, TxEip4844, TypedTransaction);
|
||||
|
||||
impl From<Signed<Transaction>> for TransactionSigned {
|
||||
fn from(value: Signed<Transaction>) -> Self {
|
||||
let (tx, sig, hash) = value.into_parts();
|
||||
Self::new(tx, sig, hash)
|
||||
}
|
||||
}
|
||||
|
||||
impl From<Signed<TxEip4844WithSidecar>> for TransactionSigned {
|
||||
fn from(value: Signed<TxEip4844WithSidecar>) -> Self {
|
||||
let (tx, sig, hash) = value.into_parts();
|
||||
Self::new(tx.tx.into(), sig, hash)
|
||||
}
|
||||
}
|
||||
|
||||
impl From<TxEip4844Variant> for Transaction {
|
||||
fn from(variant: TxEip4844Variant) -> Self {
|
||||
match variant {
|
||||
TxEip4844Variant::TxEip4844(tx) => Self::Eip4844(tx),
|
||||
TxEip4844Variant::TxEip4844WithSidecar(tx_with_sidecar) => {
|
||||
Self::Eip4844(tx_with_sidecar.tx)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<Signed<TxEip4844Variant>> for TransactionSigned {
|
||||
fn from(value: Signed<TxEip4844Variant>) -> Self {
|
||||
let (tx, sig, hash) = value.into_parts();
|
||||
Self::new(tx.into(), sig, hash)
|
||||
}
|
||||
}
|
||||
|
||||
impl From<TxEnvelope> for TransactionSigned {
|
||||
fn from(value: TxEnvelope) -> Self {
|
||||
match value {
|
||||
TxEnvelope::Legacy(tx) => tx.into(),
|
||||
TxEnvelope::Eip2930(tx) => tx.into(),
|
||||
TxEnvelope::Eip1559(tx) => tx.into(),
|
||||
TxEnvelope::Eip4844(tx) => tx.into(),
|
||||
TxEnvelope::Eip7702(tx) => tx.into(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<TransactionSigned> for Signed<Transaction> {
|
||||
fn from(value: TransactionSigned) -> Self {
|
||||
let (tx, sig, hash) = value.into_parts();
|
||||
Self::new_unchecked(tx, sig, hash)
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(any(test, feature = "arbitrary"))]
|
||||
impl<'a> arbitrary::Arbitrary<'a> for TransactionSigned {
|
||||
fn arbitrary(u: &mut arbitrary::Unstructured<'a>) -> arbitrary::Result<Self> {
|
||||
@ -797,16 +870,6 @@ impl TryFrom<TransactionSigned> for PooledTransaction {
|
||||
}
|
||||
}
|
||||
|
||||
impl<T> From<Signed<T>> for TransactionSigned
|
||||
where
|
||||
T: Into<Transaction>,
|
||||
{
|
||||
fn from(value: Signed<T>) -> Self {
|
||||
let (tx, signature, hash) = value.into_parts();
|
||||
Self { transaction: tx.into(), signature, hash: hash.into() }
|
||||
}
|
||||
}
|
||||
|
||||
impl From<PooledTransaction> for TransactionSigned {
|
||||
fn from(value: PooledTransaction) -> Self {
|
||||
match value {
|
||||
|
||||
Reference in New Issue
Block a user