diff --git a/Cargo.lock b/Cargo.lock index 0411703a5..e1454b49d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8319,6 +8319,7 @@ dependencies = [ "alloy-network", "alloy-primitives", "alloy-rpc-types-engine", + "alloy-rpc-types-eth", "alloy-signer-local", "clap", "derive_more", diff --git a/crates/optimism/node/Cargo.toml b/crates/optimism/node/Cargo.toml index 7abd72dad..38c957b30 100644 --- a/crates/optimism/node/Cargo.toml +++ b/crates/optimism/node/Cargo.toml @@ -55,6 +55,7 @@ op-alloy-consensus.workspace = true op-alloy-rpc-types-engine.workspace = true op-alloy-flz.workspace = true alloy-rpc-types-engine.workspace = true +alloy-rpc-types-eth.workspace = true alloy-consensus.workspace = true # misc diff --git a/crates/optimism/node/src/txpool.rs b/crates/optimism/node/src/txpool.rs index 18d777592..35bc9635c 100644 --- a/crates/optimism/node/src/txpool.rs +++ b/crates/optimism/node/src/txpool.rs @@ -4,6 +4,7 @@ use alloy_consensus::{ }; use alloy_eips::{eip2718::Encodable2718, eip7702::SignedAuthorization}; use alloy_primitives::{Address, Bytes, TxHash, TxKind, B256, U256}; +use alloy_rpc_types_eth::erc4337::TransactionConditional; use parking_lot::RwLock; use reth_node_api::{Block, BlockBody}; use reth_optimism_evm::RethL1BlockInfo; @@ -50,6 +51,9 @@ pub struct OpPooledTransaction< estimated_tx_compressed_size: OnceLock, /// The pooled transaction type. _pd: core::marker::PhantomData, + + /// Optional conditional attached to this transaction. + conditional: Option>, } impl OpPooledTransaction { @@ -58,6 +62,7 @@ impl OpPooledTransaction { Self { inner: EthPooledTransaction::new(transaction, encoded_length), estimated_tx_compressed_size: Default::default(), + conditional: None, _pd: core::marker::PhantomData, } } @@ -70,6 +75,17 @@ impl OpPooledTransaction { op_alloy_flz::tx_estimated_size_fjord(&self.inner.transaction().encoded_2718()) }) } + + /// Conditional setter. + pub fn with_conditional(mut self, conditional: TransactionConditional) -> Self { + self.conditional = Some(Box::new(conditional)); + self + } + + /// Conditional getter. + pub fn conditional(&self) -> Option<&TransactionConditional> { + self.conditional.as_deref() + } } impl PoolTransaction for OpPooledTransaction