From 4053bdac03d5a31732f07861c37eed30021a7783 Mon Sep 17 00:00:00 2001
From: yjh <yjh465402634@gmail.com>
Date: Mon, 4 Sep 2023 03:52:20 +0800
Subject: [PATCH] feat: add futures api to `TransactionPool` (#1348)

* feat: add futures api to `TransactionPool`

* fix clippy
---
 substrate/bin/node/bench/src/construct.rs                   | 4 ++++
 substrate/client/transaction-pool/api/src/lib.rs            | 3 +++
 substrate/client/transaction-pool/src/graph/base_pool.rs    | 3 +--
 .../client/transaction-pool/src/graph/validated_pool.rs     | 2 +-
 substrate/client/transaction-pool/src/lib.rs                | 6 ++++++
 5 files changed, 15 insertions(+), 3 deletions(-)

diff --git a/substrate/bin/node/bench/src/construct.rs b/substrate/bin/node/bench/src/construct.rs
index 4f3ca07f86b..f14f89fcd3a 100644
--- a/substrate/bin/node/bench/src/construct.rs
+++ b/substrate/bin/node/bench/src/construct.rs
@@ -282,6 +282,10 @@ impl sc_transaction_pool_api::TransactionPool for Transactions {
 		Default::default()
 	}
 
+	fn futures(&self) -> Vec<Self::InPoolTransaction> {
+		unimplemented!()
+	}
+
 	fn status(&self) -> PoolStatus {
 		unimplemented!()
 	}
diff --git a/substrate/client/transaction-pool/api/src/lib.rs b/substrate/client/transaction-pool/api/src/lib.rs
index 32fe30f4584..a132cbc46e9 100644
--- a/substrate/client/transaction-pool/api/src/lib.rs
+++ b/substrate/client/transaction-pool/api/src/lib.rs
@@ -247,6 +247,9 @@ pub trait TransactionPool: Send + Sync {
 	fn remove_invalid(&self, hashes: &[TxHash<Self>]) -> Vec<Arc<Self::InPoolTransaction>>;
 
 	// *** logging
+	/// Get futures transaction list.
+	fn futures(&self) -> Vec<Self::InPoolTransaction>;
+
 	/// Returns pool status.
 	fn status(&self) -> PoolStatus;
 
diff --git a/substrate/client/transaction-pool/src/graph/base_pool.rs b/substrate/client/transaction-pool/src/graph/base_pool.rs
index a9d2d6c825f..32885622da4 100644
--- a/substrate/client/transaction-pool/src/graph/base_pool.rs
+++ b/substrate/client/transaction-pool/src/graph/base_pool.rs
@@ -84,8 +84,7 @@ pub struct PruneStatus<Hash, Ex> {
 }
 
 /// Immutable transaction
-#[cfg_attr(test, derive(Clone))]
-#[derive(PartialEq, Eq)]
+#[derive(PartialEq, Eq, Clone)]
 pub struct Transaction<Hash, Extrinsic> {
 	/// Raw extrinsic representing that transaction.
 	pub data: Extrinsic,
diff --git a/substrate/client/transaction-pool/src/graph/validated_pool.rs b/substrate/client/transaction-pool/src/graph/validated_pool.rs
index ed76d439ae7..3d7cfeb46b0 100644
--- a/substrate/client/transaction-pool/src/graph/validated_pool.rs
+++ b/substrate/client/transaction-pool/src/graph/validated_pool.rs
@@ -106,7 +106,7 @@ pub struct ValidatedPool<B: ChainApi> {
 	is_validator: IsValidator,
 	options: Options,
 	listener: RwLock<Listener<ExtrinsicHash<B>, B>>,
-	pool: RwLock<base::BasePool<ExtrinsicHash<B>, ExtrinsicFor<B>>>,
+	pub(crate) pool: RwLock<base::BasePool<ExtrinsicHash<B>, ExtrinsicFor<B>>>,
 	import_notification_sinks: Mutex<Vec<Sender<ExtrinsicHash<B>>>>,
 	rotator: PoolRotator<ExtrinsicHash<B>>,
 }
diff --git a/substrate/client/transaction-pool/src/lib.rs b/substrate/client/transaction-pool/src/lib.rs
index 80e5925194c..ffaab89d982 100644
--- a/substrate/client/transaction-pool/src/lib.rs
+++ b/substrate/client/transaction-pool/src/lib.rs
@@ -358,6 +358,12 @@ where
 	fn ready(&self) -> ReadyIteratorFor<PoolApi> {
 		Box::new(self.pool.validated_pool().ready())
 	}
+
+	fn futures(&self) -> Vec<Self::InPoolTransaction> {
+		let pool = self.pool.validated_pool().pool.read();
+
+		pool.futures().cloned().collect::<Vec<_>>()
+	}
 }
 
 impl<Block, Client> FullPool<Block, Client>
-- 
GitLab