sc_transaction_pool/common/
mod.rs

1// This file is part of Substrate.
2
3// Copyright (C) Parity Technologies (UK) Ltd.
4// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0
5
6// This program is free software: you can redistribute it and/or modify
7// it under the terms of the GNU General Public License as published by
8// the Free Software Foundation, either version 3 of the License, or
9// (at your option) any later version.
10
11// This program is distributed in the hope that it will be useful,
12// but WITHOUT ANY WARRANTY; without even the implied warranty of
13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14// GNU General Public License for more details.
15
16// You should have received a copy of the GNU General Public License
17// along with this program. If not, see <https://www.gnu.org/licenses/>.
18
19//! Common components re-used across different txpool implementations.
20
21pub(crate) mod api;
22pub(crate) mod enactment_state;
23pub(crate) mod error;
24pub(crate) mod log_xt;
25pub(crate) mod metrics;
26#[cfg(test)]
27pub(crate) mod tests;
28
29use futures::StreamExt;
30use std::sync::Arc;
31
32/// Inform the transaction pool about imported and finalized blocks.
33pub async fn notification_future<Client, Pool, Block>(client: Arc<Client>, txpool: Arc<Pool>)
34where
35	Block: sp_runtime::traits::Block,
36	Client: sc_client_api::BlockchainEvents<Block>,
37	Pool: sc_transaction_pool_api::MaintainedTransactionPool<Block = Block>,
38{
39	let import_stream = client
40		.import_notification_stream()
41		.filter_map(|n| futures::future::ready(n.try_into().ok()))
42		.fuse();
43	let finality_stream = client.finality_notification_stream().map(Into::into).fuse();
44
45	futures::stream::select(import_stream, finality_stream)
46		.for_each(|evt| txpool.maintain(evt))
47		.await
48}