diff --git a/substrate/client/network/transactions/src/config.rs b/substrate/client/network/transactions/src/config.rs
index 239b76b51485f128f2a374575c0ffee352929e48..7c49cfa8d437f8b5edae0db534594c7d803278f5 100644
--- a/substrate/client/network/transactions/src/config.rs
+++ b/substrate/client/network/transactions/src/config.rs
@@ -23,6 +23,7 @@ use sc_network::MAX_RESPONSE_SIZE;
 use sc_network_common::ExHashT;
 use sp_runtime::traits::Block as BlockT;
 use std::{collections::HashMap, future::Future, pin::Pin, time};
+use std::sync::Arc;
 
 /// Interval at which we propagate transactions;
 pub(crate) const PROPAGATE_TIMEOUT: time::Duration = time::Duration::from_millis(2900);
@@ -59,11 +60,11 @@ pub trait TransactionPool<H: ExHashT, B: BlockT>: Send + Sync {
 	/// Get transactions from the pool that are ready to be propagated.
 	fn transactions(&self) -> Vec<(H, B::Extrinsic)>;
 	/// Get hash of transaction.
-	fn hash_of(&self, transaction: &B::Extrinsic) -> H;
+	fn hash_of(&self, transaction: &Arc<B::Extrinsic>) -> H;
 	/// Import a transaction into the pool.
 	///
 	/// This will return future.
-	fn import(&self, transaction: B::Extrinsic) -> TransactionImportFuture;
+	fn import(&self, transaction: Arc<B::Extrinsic>) -> TransactionImportFuture;
 	/// Notify the pool about transactions broadcast.
 	fn on_broadcasted(&self, propagations: HashMap<H, Vec<String>>);
 	/// Get transaction by hash.