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,