make sure that disabled validator will not be checked with is_good_actor

Signed-off-by: Uncle Stinky <uncle.stinky@ghostchain.io>
This commit is contained in:
Uncle Stinky 2025-07-31 14:21:55 +03:00
parent 9bdb7b5d5c
commit b969081cbf
Signed by: st1nky
GPG Key ID: 016064BD97603B40
2 changed files with 15 additions and 11 deletions

View File

@ -1,6 +1,6 @@
[package] [package]
name = "ghost-slow-clap" name = "ghost-slow-clap"
version = "0.3.37" version = "0.3.38"
description = "Applause protocol for the EVM bridge" description = "Applause protocol for the EVM bridge"
license.workspace = true license.workspace = true
authors.workspace = true authors.workspace = true

View File

@ -969,9 +969,9 @@ impl<T: Config> Pallet<T> {
authorities_len: usize, authorities_len: usize,
) -> u32 { ) -> u32 {
let mut claps_in_session = (0..authorities_len) let mut claps_in_session = (0..authorities_len)
.filter_map(|index| { .filter_map(|authority_index| {
let clap_info = actual_claps_in_session let clap_info = actual_claps_in_session
.get(&(index as u32)) .get(&(authority_index as AuthIndex))
.copied() .copied()
.unwrap_or_default(); .unwrap_or_default();
(!clap_info.disabled).then(|| clap_info.claps) (!clap_info.disabled).then(|| clap_info.claps)
@ -996,17 +996,21 @@ impl<T: Config> Pallet<T> {
fn is_good_actor( fn is_good_actor(
authority_index: usize, authority_index: usize,
session_index: SessionIndex,
median_claps: u32, median_claps: u32,
claps_in_session: &BTreeMap<AuthIndex, SessionAuthorityInfo>,
) -> bool { ) -> bool {
if median_claps == 0 { if median_claps == 0 {
return true; return true;
} }
let number_of_claps = ClapsInSession::<T>::get(session_index) let number_of_claps = claps_in_session
.entry(authority_index as AuthIndex) .get(&(authority_index as AuthIndex))
.or_default() .copied()
.claps; .map(|info| match info.disabled {
true => median_claps,
false => info.claps,
})
.unwrap_or_default();
let authority_deviation = if number_of_claps < median_claps { let authority_deviation = if number_of_claps < median_claps {
Perbill::from_rational(median_claps - number_of_claps, median_claps) Perbill::from_rational(median_claps - number_of_claps, median_claps)
@ -1089,14 +1093,14 @@ impl<T: Config> OneSessionHandler<T::AccountId> for Pallet<T> {
let session_index = T::ValidatorSet::session_index(); let session_index = T::ValidatorSet::session_index();
let validators = T::ValidatorSet::validators(); let validators = T::ValidatorSet::validators();
let authorities_len = Authorities::<T>::get(&session_index).len(); let authorities_len = Authorities::<T>::get(&session_index).len();
let actual_claps_in_session = ClapsInSession::<T>::get(&session_index); let claps_in_session = ClapsInSession::<T>::get(&session_index);
let median_claps = Self::calculate_median_claps(&actual_claps_in_session, authorities_len); let median_claps = Self::calculate_median_claps(&claps_in_session, authorities_len);
let offenders = validators let offenders = validators
.into_iter() .into_iter()
.enumerate() .enumerate()
.filter(|(index, _)| !Self::is_good_actor(*index, session_index, median_claps)) .filter(|(index, _)| !Self::is_good_actor(*index, median_claps, &claps_in_session))
.filter_map(|(_, id)| { .filter_map(|(_, id)| {
<T::ValidatorSet as ValidatorSetWithIdentification<T::AccountId>>::IdentificationOf::convert( <T::ValidatorSet as ValidatorSetWithIdentification<T::AccountId>>::IdentificationOf::convert(
id.clone(), id.clone(),