subspace_service/
utils.rs1use futures::StreamExt;
2use sc_client_api::BlockchainEvents;
3use sp_blockchain::HeaderBackend;
4use sp_runtime::traits::{Block as BlockT, Header, NumberFor};
5use tracing::{debug, trace};
6
7pub async fn wait_for_block_import<Block, Client>(
8 client: &Client,
9 waiting_block_number: NumberFor<Block>,
10) where
11 Block: BlockT,
12 Client: HeaderBackend<Block> + BlockchainEvents<Block>,
13{
14 let mut blocks_stream = client.every_import_notification_stream();
15
16 let info = client.info();
17 debug!(
18 %waiting_block_number,
19 "Waiting client info: {:?}", info
20 );
21
22 if info.best_number >= waiting_block_number {
23 return;
24 }
25
26 while let Some(block) = blocks_stream.next().await {
27 let current_block_number = *block.header.number();
28 trace!(%current_block_number, %waiting_block_number, "Waiting for the target block");
29
30 if current_block_number >= waiting_block_number {
31 return;
32 }
33 }
34}