chore(sdk): improve usability TxType trait (#12548)

This commit is contained in:
Emilia Hane
2024-11-15 14:31:35 +01:00
committed by GitHub
parent 56826cbdbb
commit 5f66fa448e
6 changed files with 74 additions and 24 deletions

1
Cargo.lock generated
View File

@ -8381,6 +8381,7 @@ dependencies = [
"bytes",
"derive_more 1.0.0",
"op-alloy-consensus",
"reth-primitives-traits",
]
[[package]]

View File

@ -19,3 +19,4 @@ alloy-eips.workspace = true
alloy-rlp.workspace = true
derive_more.workspace = true
bytes.workspace = true
reth-primitives-traits.workspace = true

View File

@ -8,4 +8,4 @@
#![cfg_attr(docsrs, feature(doc_cfg, doc_auto_cfg))]
pub mod bedrock;
pub mod op_tx_type;
pub mod tx_type;

View File

@ -2,22 +2,51 @@
//! `OpTxType` implements `reth_primitives_traits::TxType`.
//! This type is required because a `Compact` impl is needed on the deposit tx type.
use core::fmt::Debug;
use std::convert::TryFrom;
use alloy_primitives::{U64, U8};
use alloy_rlp::{Decodable, Encodable, Error};
use bytes::BufMut;
use core::fmt::Debug;
use derive_more::{
derive::{From, Into},
Display,
};
use op_alloy_consensus::OpTxType as AlloyOpTxType;
use std::convert::TryFrom;
use reth_primitives_traits::TxType;
/// Wrapper type for `AlloyOpTxType` to implement `TxType` trait.
#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Display, Ord, Hash, From, Into)]
#[into(u8)]
pub struct OpTxType(AlloyOpTxType);
impl TxType for OpTxType {
#[inline]
fn is_legacy(&self) -> bool {
matches!(self.0, AlloyOpTxType::Legacy)
}
#[inline]
fn is_eip2930(&self) -> bool {
matches!(self.0, AlloyOpTxType::Eip2930)
}
#[inline]
fn is_eip1559(&self) -> bool {
matches!(self.0, AlloyOpTxType::Eip1559)
}
#[inline]
fn is_eip4844(&self) -> bool {
false
}
#[inline]
fn is_eip7702(&self) -> bool {
matches!(self.0, AlloyOpTxType::Eip7702)
}
}
impl From<OpTxType> for U8 {
fn from(tx_type: OpTxType) -> Self {
Self::from(u8::from(tx_type))

View File

@ -30,26 +30,18 @@ pub trait TxType:
+ alloy_rlp::Encodable
+ alloy_rlp::Decodable
{
}
/// Returns `true` if this is a legacy transaction.
fn is_legacy(&self) -> bool;
impl<T> TxType for T where
T: Send
+ Sync
+ Unpin
+ Clone
+ Copy
+ Default
+ fmt::Debug
+ fmt::Display
+ PartialEq
+ Eq
+ PartialEq<u8>
+ Into<u8>
+ Into<U8>
+ TryFrom<u8, Error: fmt::Debug>
+ TryFrom<u64, Error: fmt::Debug>
+ TryFrom<U64>
+ alloy_rlp::Encodable
+ alloy_rlp::Decodable
{
/// Returns `true` if this is an eip-2930 transaction.
fn is_eip2930(&self) -> bool;
/// Returns `true` if this is an eip-1559 transaction.
fn is_eip1559(&self) -> bool;
/// Returns `true` if this is an eip-4844 transaction.
fn is_eip4844(&self) -> bool;
/// Returns `true` if this is an eip-7702 transaction.
fn is_eip7702(&self) -> bool;
}

View File

@ -91,6 +91,33 @@ impl TxType {
}
}
impl reth_primitives_traits::TxType for TxType {
#[inline]
fn is_legacy(&self) -> bool {
matches!(self, Self::Legacy)
}
#[inline]
fn is_eip2930(&self) -> bool {
matches!(self, Self::Eip2930)
}
#[inline]
fn is_eip1559(&self) -> bool {
matches!(self, Self::Eip1559)
}
#[inline]
fn is_eip4844(&self) -> bool {
matches!(self, Self::Eip4844)
}
#[inline]
fn is_eip7702(&self) -> bool {
matches!(self, Self::Eip7702)
}
}
impl From<TxType> for u8 {
fn from(value: TxType) -> Self {
match value {