34 lines
1.0 KiB
Rust
34 lines
1.0 KiB
Rust
use std::time::Duration;
|
|
|
|
use log::debug;
|
|
use solana_sdk::commitment_config::CommitmentConfig;
|
|
use tokio::time::{timeout, Instant};
|
|
|
|
use crate::{structures::block_info::BlockInfo, types::BlockInfoStream};
|
|
|
|
pub async fn wait_till_block_of_commitment_is_recieved(
|
|
mut blockinfo_stream: BlockInfoStream,
|
|
commitment_config: CommitmentConfig,
|
|
) -> BlockInfo {
|
|
let started = Instant::now();
|
|
loop {
|
|
match timeout(Duration::from_millis(1000), blockinfo_stream.recv()).await {
|
|
Ok(Ok(block_info)) => {
|
|
if block_info.commitment_config == commitment_config {
|
|
return block_info;
|
|
}
|
|
}
|
|
Err(_elapsed) => {
|
|
debug!(
|
|
"waiting for latest block info ({}) ... {:.02}ms",
|
|
commitment_config.commitment,
|
|
started.elapsed().as_secs_f32() * 1000.0
|
|
);
|
|
}
|
|
Ok(Err(error)) => {
|
|
panic!("Did not recv block info : {error:?}");
|
|
}
|
|
}
|
|
}
|
|
}
|