subspace_service/
utils.rs

1use 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}