feat(wallet): parallel actualization owned

This commit is contained in:
Pravdyvy 2026-07-22 16:19:40 +03:00
parent b6b5b4397a
commit e78b0724c6

View File

@ -13,7 +13,7 @@ use anyhow::{Context as _, Result};
use lee_core::BlockId;
use sequencer_service_rpc::{RpcClient as _, SequencerClient, SequencerClientBuilder};
use serde::{Deserialize, Serialize};
use tokio::sync::RwLock;
use tokio::{sync::RwLock, task::JoinSet};
use url::Url;
use crate::config::{MultiSequencerClientConfig, SequencerConnectionData};
@ -450,7 +450,7 @@ pub async fn calibrate_client(
})
}
pub async fn actualize_client(client: &SequencerClient) -> StatisticsUpdate {
async fn actualize_client(client: &SequencerClient) -> StatisticsUpdate {
let (latency, block_id) = measure_request_duration(client).await;
#[expect(clippy::as_conversions, reason = "int to float conversion is safe")]
@ -464,6 +464,36 @@ pub async fn actualize_client(client: &SequencerClient) -> StatisticsUpdate {
})
}
async fn actualize_client_owned(client: SequencerClient) -> StatisticsUpdate {
let (latency, block_id) = measure_request_duration(&client).await;
#[expect(clippy::as_conversions, reason = "int to float conversion is safe")]
let latency = latency as f32;
block_id.map_or(StatisticsUpdate::Failure, |new_latest_block_id| {
StatisticsUpdate::Success {
latency,
new_latest_block_id,
}
})
}
pub async fn multi_actualize_clients(clients: &[SequencerClient]) -> Vec<StatisticsUpdate> {
let mut join_set = JoinSet::new();
for client in clients {
join_set.spawn(actualize_client_owned(client.clone()));
}
let mut statistic_updates = vec![];
while let Some(statistic_resp) = join_set.join_next().await {
statistic_updates.push(statistic_resp.unwrap_or(StatisticsUpdate::Failure));
}
statistic_updates
}
#[must_use]
pub fn choose_leaders(
client_list: &HashMap<Url, SequencerClient>,