feat: add method in txpool for handling pending transactions (#10303)

This commit is contained in:
Miguel Tavares
2024-08-21 22:05:40 -03:00
committed by GitHub
parent 2dc7f13474
commit 5644347583
5 changed files with 54 additions and 0 deletions

View File

@@ -523,6 +523,14 @@ where
) -> Result<Vec<BlobTransactionSidecar>, 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<Arc<ValidPoolTransaction<Self::Transaction>>> {
self.pool.get_pending_transactions_by_origin(origin)
}
}
impl<V, T, S> TransactionPoolExt for Pool<V, T, S>

View File

@@ -242,6 +242,13 @@ impl TransactionPool for NoopTransactionPool {
}
Err(BlobStoreError::MissingSidecar(tx_hashes[0]))
}
fn get_pending_transactions_by_origin(
&self,
_origin: TransactionOrigin,
) -> Vec<Arc<ValidPoolTransaction<Self::Transaction>>> {
vec![]
}
}
/// A [`TransactionValidator`] that does nothing.

View File

@@ -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<Arc<ValidPoolTransaction<T::Transaction>>> {
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.

View File

@@ -321,6 +321,12 @@ impl<T: TransactionOrdering> TxPool<T> {
pub(crate) fn pending_transactions(&self) -> Vec<Arc<ValidPoolTransaction<T::Transaction>>> {
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<Item = Arc<ValidPoolTransaction<T::Transaction>>> + '_ {
self.pending_pool.all()
}
/// Returns all transactions from parked pools
pub(crate) fn queued_transactions(&self) -> Vec<Arc<ValidPoolTransaction<T::Transaction>>> {

View File

@@ -344,6 +344,12 @@ pub trait TransactionPool: Send + Sync + Clone {
origin: TransactionOrigin,
) -> Vec<Arc<ValidPoolTransaction<Self::Transaction>>>;
/// Returns all pending transactions filtered by [`TransactionOrigin`]
fn get_pending_transactions_by_origin(
&self,
origin: TransactionOrigin,
) -> Vec<Arc<ValidPoolTransaction<Self::Transaction>>>;
/// Returns all transactions that where submitted as [TransactionOrigin::Local]
fn get_local_transactions(&self) -> Vec<Arc<ValidPoolTransaction<Self::Transaction>>> {
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<Arc<ValidPoolTransaction<Self::Transaction>>> {
self.get_transactions_by_origin(TransactionOrigin::Local)
}
/// Returns all pending transactions that where submitted as [TransactionOrigin::Private]
fn get_private_pending_transactions(
&self,
) -> Vec<Arc<ValidPoolTransaction<Self::Transaction>>> {
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<Arc<ValidPoolTransaction<Self::Transaction>>> {
self.get_pending_transactions_by_origin(TransactionOrigin::External)
}
/// Returns a set of all senders of transactions in the pool
fn unique_senders(&self) -> HashSet<Address>;