From c9ea4231ff36070f183ff1dcd2fb7129d6a0a49c Mon Sep 17 00:00:00 2001 From: Veer Chaurasia <142890355+VeerChaurasia@users.noreply.github.com> Date: Tue, 11 Feb 2025 15:49:54 +0530 Subject: [PATCH] Add helper trait (#14394) Co-authored-by: Matthias Seitz --- crates/optimism/txpool/src/conditional.rs | 18 ++++++++++++++++++ crates/optimism/txpool/src/lib.rs | 1 + crates/optimism/txpool/src/transaction.rs | 7 +++++++ 3 files changed, 26 insertions(+) create mode 100644 crates/optimism/txpool/src/conditional.rs diff --git a/crates/optimism/txpool/src/conditional.rs b/crates/optimism/txpool/src/conditional.rs new file mode 100644 index 0000000000..7103feb8ae --- /dev/null +++ b/crates/optimism/txpool/src/conditional.rs @@ -0,0 +1,18 @@ +//! Additional support for pooled transactions with [`TransactionConditional`] + +use alloy_rpc_types_eth::erc4337::TransactionConditional; + +/// Helper trait that allows attaching a [`TransactionConditional`]. +pub trait MaybeConditionalTransaction { + /// Attach a [`TransactionConditional`]. + fn set_conditional(&mut self, conditional: TransactionConditional); + + /// Helper that sets the conditional and returns the instance again + fn with_conditional(mut self, conditional: TransactionConditional) -> Self + where + Self: Sized, + { + self.set_conditional(conditional); + self + } +} diff --git a/crates/optimism/txpool/src/lib.rs b/crates/optimism/txpool/src/lib.rs index f9c1165f34..2055852549 100644 --- a/crates/optimism/txpool/src/lib.rs +++ b/crates/optimism/txpool/src/lib.rs @@ -13,6 +13,7 @@ mod validator; pub use validator::{OpL1BlockInfo, OpTransactionValidator}; +pub mod conditional; mod transaction; pub use transaction::OpPooledTransaction; diff --git a/crates/optimism/txpool/src/transaction.rs b/crates/optimism/txpool/src/transaction.rs index 3cc83ed707..55ebd02260 100644 --- a/crates/optimism/txpool/src/transaction.rs +++ b/crates/optimism/txpool/src/transaction.rs @@ -1,3 +1,4 @@ +use crate::conditional::MaybeConditionalTransaction; use alloy_consensus::{ transaction::Recovered, BlobTransactionSidecar, BlobTransactionValidationError, Typed2718, }; @@ -66,6 +67,12 @@ impl OpPooledTransaction { } } +impl MaybeConditionalTransaction for OpPooledTransaction { + fn set_conditional(&mut self, conditional: TransactionConditional) { + self.conditional = Some(Box::new(conditional)) + } +} + impl PoolTransaction for OpPooledTransaction where Cons: SignedTransaction + From,