Filter votes from disabled validators in BackedCandidates in process_inherent_data (#2889)

Backport of https://github.com/paritytech/polkadot-sdk/pull/1863 to
master

Extend candidate sanitation in paras_inherent by removing backing votes
from disabled validators. Check
https://github.com/paritytech/polkadot-sdk/issues/1592 for more details.

This change is related to the disabling strategy implementation
(https://github.com/paritytech/polkadot-sdk/pull/2226).

---------

Co-authored-by: ordian <noreply@reusable.software>
Co-authored-by: ordian <write@reusable.software>
Co-authored-by: Maciej <maciej.zyszkiewicz@parity.io>
This commit is contained in:
Tsvetomir Dimitrov
2024-01-18 09:33:58 +02:00
committed by GitHub
parent f574868822
commit f8954093b4
21 changed files with 506 additions and 64 deletions
@@ -21,29 +21,16 @@ use primitives::{
vstaging::{ApprovalVotingParams, NodeFeatures},
ValidatorIndex,
};
use sp_std::{collections::btree_map::BTreeMap, prelude::Vec};
use sp_std::prelude::Vec;
/// Implementation for `DisabledValidators`
// CAVEAT: this should only be called on the node side
// as it might produce incorrect results on session boundaries
pub fn disabled_validators<T>() -> Vec<ValidatorIndex>
where
T: pallet_session::Config + shared::Config,
T: shared::Config,
{
let shuffled_indices = <shared::Pallet<T>>::active_validator_indices();
// mapping from raw validator index to `ValidatorIndex`
// this computation is the same within a session, but should be cheap
let reverse_index = shuffled_indices
.iter()
.enumerate()
.map(|(i, v)| (v.0, ValidatorIndex(i as u32)))
.collect::<BTreeMap<u32, ValidatorIndex>>();
// we might have disabled validators who are not parachain validators
<pallet_session::Pallet<T>>::disabled_validators()
.iter()
.filter_map(|v| reverse_index.get(v).cloned())
.collect()
<shared::Pallet<T>>::disabled_validators()
}
/// Returns the current state of the node features.