diff --git a/crates/transaction-pool/src/lib.rs b/crates/transaction-pool/src/lib.rs index 448a67d4d6..241131d47e 100644 --- a/crates/transaction-pool/src/lib.rs +++ b/crates/transaction-pool/src/lib.rs @@ -523,6 +523,14 @@ where ) -> Result, BlobStoreError> { self.pool.blob_store().get_exact(tx_hashes) } + + /// Returns all pending transactions filtered by [`TransactionOrigin`] + fn get_pending_transactions_by_origin( + &self, + origin: TransactionOrigin, + ) -> Vec>> { + self.pool.get_pending_transactions_by_origin(origin) + } } impl TransactionPoolExt for Pool diff --git a/crates/transaction-pool/src/noop.rs b/crates/transaction-pool/src/noop.rs index 8c3a52f4c3..541e25aa28 100644 --- a/crates/transaction-pool/src/noop.rs +++ b/crates/transaction-pool/src/noop.rs @@ -242,6 +242,13 @@ impl TransactionPool for NoopTransactionPool { } Err(BlobStoreError::MissingSidecar(tx_hashes[0])) } + + fn get_pending_transactions_by_origin( + &self, + _origin: TransactionOrigin, + ) -> Vec>> { + vec![] + } } /// A [`TransactionValidator`] that does nothing. diff --git a/crates/transaction-pool/src/pool/mod.rs b/crates/transaction-pool/src/pool/mod.rs index 1fddfe6175..0f1e2b0def 100644 --- a/crates/transaction-pool/src/pool/mod.rs +++ b/crates/transaction-pool/src/pool/mod.rs @@ -734,6 +734,14 @@ where self.get_pool_data().all().transactions_iter().filter(|tx| tx.origin == origin).collect() } + /// Returns all pending transactions filted by [`TransactionOrigin`] + pub(crate) fn get_pending_transactions_by_origin( + &self, + origin: TransactionOrigin, + ) -> Vec>> { + self.get_pool_data().pending_transactions_iter().filter(|tx| tx.origin == origin).collect() + } + /// Returns all the transactions belonging to the hashes. /// /// If no transaction exists, it is skipped. diff --git a/crates/transaction-pool/src/pool/txpool.rs b/crates/transaction-pool/src/pool/txpool.rs index 1b7035c0bb..c426df37a1 100644 --- a/crates/transaction-pool/src/pool/txpool.rs +++ b/crates/transaction-pool/src/pool/txpool.rs @@ -321,6 +321,12 @@ impl TxPool { pub(crate) fn pending_transactions(&self) -> Vec>> { self.pending_pool.all().collect() } + /// Returns an iterator over all transactions from the pending sub-pool + pub(crate) fn pending_transactions_iter( + &self, + ) -> impl Iterator>> + '_ { + self.pending_pool.all() + } /// Returns all transactions from parked pools pub(crate) fn queued_transactions(&self) -> Vec>> { diff --git a/crates/transaction-pool/src/traits.rs b/crates/transaction-pool/src/traits.rs index debb0076b8..588722e7f0 100644 --- a/crates/transaction-pool/src/traits.rs +++ b/crates/transaction-pool/src/traits.rs @@ -344,6 +344,12 @@ pub trait TransactionPool: Send + Sync + Clone { origin: TransactionOrigin, ) -> Vec>>; + /// Returns all pending transactions filtered by [`TransactionOrigin`] + fn get_pending_transactions_by_origin( + &self, + origin: TransactionOrigin, + ) -> Vec>>; + /// Returns all transactions that where submitted as [TransactionOrigin::Local] fn get_local_transactions(&self) -> Vec>> { self.get_transactions_by_origin(TransactionOrigin::Local) @@ -359,6 +365,25 @@ pub trait TransactionPool: Send + Sync + Clone { self.get_transactions_by_origin(TransactionOrigin::External) } + /// Returns all pending transactions that where submitted as [TransactionOrigin::Local] + fn get_local_pending_transactions(&self) -> Vec>> { + self.get_transactions_by_origin(TransactionOrigin::Local) + } + + /// Returns all pending transactions that where submitted as [TransactionOrigin::Private] + fn get_private_pending_transactions( + &self, + ) -> Vec>> { + self.get_pending_transactions_by_origin(TransactionOrigin::Private) + } + + /// Returns all pending transactions that where submitted as [TransactionOrigin::External] + fn get_external_pending_transactions( + &self, + ) -> Vec>> { + self.get_pending_transactions_by_origin(TransactionOrigin::External) + } + /// Returns a set of all senders of transactions in the pool fn unique_senders(&self) -> HashSet
;