From 2635792dab22cd5d20e901f007556023ce2268c1 Mon Sep 17 00:00:00 2001 From: Uncle Stretch Date: Tue, 18 Feb 2025 17:10:04 +0300 Subject: [PATCH] minimization of rpc calls based on the responses Signed-off-by: Uncle Stretch --- Cargo.toml | 2 +- .../nominator/current_validator_details.rs | 17 ++++++----- src/network/mod.rs | 1 + src/network/predefined_calls.rs | 29 ++++++++++--------- 4 files changed, 28 insertions(+), 21 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 47069dc..e8c0b17 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,7 +2,7 @@ name = "ghost-eye" authors = ["str3tch "] description = "Application for interacting with Casper/Ghost nodes that are exposing RPC only to the localhost" -version = "0.3.37" +version = "0.3.38" edition = "2021" [dependencies] diff --git a/src/components/nominator/current_validator_details.rs b/src/components/nominator/current_validator_details.rs index 2d32667..9989358 100644 --- a/src/components/nominator/current_validator_details.rs +++ b/src/components/nominator/current_validator_details.rs @@ -94,17 +94,20 @@ impl CurrentValidatorDetails { } fn update_choosen_validator(&mut self, account_id: [u8; 32], individual: u32, total: u32) { - self.choosen = account_id; self.points_ratio = match total { 0 => 0.0, _ => (individual as f64 / total as f64) * 100.0, }; - if let Some(network_tx) = &self.network_tx { - let _ = network_tx.send(Action::GetErasStakersOverview(account_id, false)); - let _ = network_tx.send(Action::GetNominatorsByValidator(account_id, false)); - let _ = network_tx.send(Action::GetValidatorPrefs(account_id, false)); - let _ = network_tx.send(Action::GetValidatorLedger(account_id, false)); - let _ = network_tx.send(Action::GetValidatorLatestClaim(account_id, false)); + + if self.choosen != account_id { + self.choosen = account_id; + if let Some(network_tx) = &self.network_tx { + let _ = network_tx.send(Action::GetErasStakersOverview(account_id, false)); + let _ = network_tx.send(Action::GetNominatorsByValidator(account_id, false)); + let _ = network_tx.send(Action::GetValidatorPrefs(account_id, false)); + let _ = network_tx.send(Action::GetValidatorLedger(account_id, false)); + let _ = network_tx.send(Action::GetValidatorLatestClaim(account_id, false)); + } } } } diff --git a/src/network/mod.rs b/src/network/mod.rs index 3e1d4ad..0232fa8 100644 --- a/src/network/mod.rs +++ b/src/network/mod.rs @@ -127,6 +127,7 @@ impl Network { predefined_calls::get_nominators_by_validator(&self.action_tx, &self.online_client_api, &validator_details_to_watch).await?; predefined_calls::get_validator_prefs(&self.action_tx, &self.online_client_api, &validator_details_to_watch).await?; predefined_calls::get_staking_value_ratio(&self.action_tx, &self.online_client_api, &validator_details_to_watch).await?; + predefined_calls::get_validator_latest_claim(&self.action_tx, &self.online_client_api, &validator_details_to_watch).await?; } for account_id in self.accounts_to_watch.iter() { predefined_calls::get_balance(&self.action_tx, &self.online_client_api, &account_id).await?; diff --git a/src/network/predefined_calls.rs b/src/network/predefined_calls.rs index e01f177..c5245f9 100644 --- a/src/network/predefined_calls.rs +++ b/src/network/predefined_calls.rs @@ -284,7 +284,9 @@ pub async fn get_validator_staking_results( let current_era = super::raw_calls::staking::current_era(api, None).await?.unwrap_or(0); let era_depth = super::raw_calls::staking::history_depth(api).unwrap_or(0); for era_index in current_era.saturating_sub(era_depth)..current_era { - get_validator_staking_result(action_tx, api, account_id, era_index).await?; + if get_validator_staking_result(action_tx, api, account_id, era_index).await? { + break; + } } Ok(()) } @@ -294,11 +296,11 @@ pub async fn get_validator_staking_result( api: &OnlineClient, account_id: &[u8; 32], era_index: u32, -) -> Result<()> { - get_validator_reward_in_era(action_tx, api, account_id, era_index).await?; +) -> Result { + let no_more_rewards = get_validator_reward_in_era(action_tx, api, account_id, era_index).await?; get_validator_claims_in_era(action_tx, api, account_id, era_index).await?; get_validator_slashes_in_era(action_tx, api, account_id, era_index).await?; - Ok(()) + Ok(no_more_rewards) } pub async fn get_current_validator_reward_in_era( @@ -351,13 +353,9 @@ async fn get_validator_reward_in_era( api: &OnlineClient, account_id: &[u8; 32], era_index: u32, -) -> Result<()> { - let maybe_era_reward_points = super::raw_calls::staking::eras_reward_points(api, None, era_index) - .await?; - - let era_reward = super::raw_calls::staking::eras_validator_reward(api, None, era_index) - .await? - .unwrap_or_default(); +) -> Result { + let maybe_era_reward_points = super::raw_calls::staking::eras_reward_points(api, None, era_index).await?; + let era_reward = super::raw_calls::staking::eras_validator_reward(api, None, era_index).await?.unwrap_or_default(); let my_reward = match maybe_era_reward_points { Some(era_reward_points) => { @@ -373,9 +371,14 @@ async fn get_validator_reward_in_era( None => 0u128, }; - action_tx.send(Action::SetValidatorEraReward(era_index, my_reward))?; + let no_more_rewards = if my_reward > 0 { + action_tx.send(Action::SetValidatorEraReward(era_index, my_reward))?; + false + } else { + true + }; - Ok(()) + Ok(no_more_rewards) } async fn get_validator_claims_in_era(