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", "bytes",
"derive_more 1.0.0", "derive_more 1.0.0",
"op-alloy-consensus", "op-alloy-consensus",
"reth-primitives-traits",
] ]
[[package]] [[package]]

View File

@ -19,3 +19,4 @@ alloy-eips.workspace = true
alloy-rlp.workspace = true alloy-rlp.workspace = true
derive_more.workspace = true derive_more.workspace = true
bytes.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))] #![cfg_attr(docsrs, feature(doc_cfg, doc_auto_cfg))]
pub mod bedrock; pub mod bedrock;
pub mod op_tx_type; pub mod tx_type;

View File

@ -2,22 +2,51 @@
//! `OpTxType` implements `reth_primitives_traits::TxType`. //! `OpTxType` implements `reth_primitives_traits::TxType`.
//! This type is required because a `Compact` impl is needed on the deposit tx type. //! 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_primitives::{U64, U8};
use alloy_rlp::{Decodable, Encodable, Error}; use alloy_rlp::{Decodable, Encodable, Error};
use bytes::BufMut; use bytes::BufMut;
use core::fmt::Debug;
use derive_more::{ use derive_more::{
derive::{From, Into}, derive::{From, Into},
Display, Display,
}; };
use op_alloy_consensus::OpTxType as AlloyOpTxType; use op_alloy_consensus::OpTxType as AlloyOpTxType;
use std::convert::TryFrom; use reth_primitives_traits::TxType;
/// Wrapper type for `AlloyOpTxType` to implement `TxType` trait. /// Wrapper type for `AlloyOpTxType` to implement `TxType` trait.
#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Display, Ord, Hash, From, Into)] #[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Display, Ord, Hash, From, Into)]
#[into(u8)] #[into(u8)]
pub struct OpTxType(AlloyOpTxType); 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 { impl From<OpTxType> for U8 {
fn from(tx_type: OpTxType) -> Self { fn from(tx_type: OpTxType) -> Self {
Self::from(u8::from(tx_type)) Self::from(u8::from(tx_type))

View File

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

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 { impl From<TxType> for u8 {
fn from(value: TxType) -> Self { fn from(value: TxType) -> Self {
match value { match value {