Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
fix
  • Loading branch information
kostekIV committed Nov 2, 2022
commit fe68a957c953994b03253f38ac8db13190ec095a
61 changes: 30 additions & 31 deletions e2e-tests/src/test/ban.rs
Original file line number Diff line number Diff line change
@@ -1,10 +1,5 @@
use aleph_client::{
ban_from_committee, change_ban_config, change_validators, get_current_era,
get_current_era_non_reserved_validators, get_current_era_validators, get_current_session,
get_next_era_non_reserved_validators, get_next_era_reserved_validators,
get_underperformed_validator_session_count, set_elections_openness, wait_for_at_least_session,
wait_for_full_era_completion, SignedConnection, XtStatus,
};
use std::collections::HashSet;
use aleph_client::{ban_from_committee, change_ban_config, change_validators, get_current_era, get_current_era_non_reserved_validators, get_current_era_validators, get_current_session, get_next_era_non_reserved_validators, get_next_era_reserved_validators, get_underperformed_validator_session_count, set_elections_openness, wait_for_at_least_session, wait_for_full_era_completion, SignedConnection, XtStatus, wait_for_next_era};
use log::info;
use primitives::{
BanInfo, BanReason, CommitteeSeats, ElectionOpenness, SessionCount,
Expand Down Expand Up @@ -152,24 +147,11 @@ pub fn clearing_session_count(config: &Config) -> anyhow::Result<()> {
Ok(())
}

/// Setup reserved validators, non_reserved are set to empty vec. Set ban config ban_period to 2.
/// Set Openness to Permissionless.
/// Ban manually one validator. Check if the banned validator is out of the non_reserved and is back
/// after ban period.
pub fn permissionless_ban(config: &Config) -> anyhow::Result<()> {
let root_connection = config.create_root_connection();
info!(target: "aleph-client", "changing ban config");

set_elections_openness(
&root_connection,
ElectionOpenness::Permissionless,
XtStatus::InBlock,
);
change_ban_config(
&root_connection,
None,
None,
Some(1),
None,
XtStatus::InBlock,
);

let root_connection = config.create_root_connection();

let validator_keys = get_test_validators(config);
Expand All @@ -186,6 +168,19 @@ pub fn permissionless_ban(config: &Config) -> anyhow::Result<()> {
let mut non_reserved_without_banned = non_reserved_validators.to_vec();
non_reserved_without_banned.remove(VALIDATOR_TO_DISABLE_NON_RESERVED_INDEX as usize);

set_elections_openness(
&root_connection,
ElectionOpenness::Permissionless,
XtStatus::InBlock,
);
change_ban_config(
&root_connection,
None,
None,
None,
Some(2),
XtStatus::InBlock,
);
// non reserved set to empty vec
change_validators(
&root_connection,
Expand All @@ -201,15 +196,19 @@ pub fn permissionless_ban(config: &Config) -> anyhow::Result<()> {
XtStatus::InBlock,
);
wait_for_full_era_completion(&root_connection)?;
assert_eq!(
non_reserved_without_banned,
get_current_era_non_reserved_validators(&root_connection)
);
let without_banned =
HashSet::<_>::from_iter(non_reserved_without_banned);
let non_reserved =
HashSet::<_>::from_iter(get_current_era_non_reserved_validators(&root_connection));
assert_eq!(without_banned, non_reserved);

wait_for_full_era_completion(&root_connection)?;
let new_non_reserved = get_current_era_non_reserved_validators(&root_connection);
wait_for_next_era(&root_connection)?;
let expected_non_reserved =
HashSet::<_>::from_iter(non_reserved_validators);
let non_reserved =
HashSet::<_>::from_iter(get_current_era_non_reserved_validators(&root_connection));

assert_eq!(non_reserved_validators, new_non_reserved);
assert_eq!(expected_non_reserved, non_reserved);

Ok(())
}
8 changes: 5 additions & 3 deletions pallets/elections/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -399,8 +399,10 @@ pub mod pallet {

let committee_size_all = reserved + non_reserved;

let mode = Openness::<T>::get();

ensure!(
committee_size_all <= validators_size,
committee_size_all <= validators_size || mode == ElectionOpenness::Permissionless,
Error::<T>::NotEnoughValidators
);

Expand All @@ -410,8 +412,8 @@ pub mod pallet {
);

ensure!(
non_reserved <= non_reserved_len,
Error::<T>::NotEnoughReservedValidators,
non_reserved <= non_reserved_len || mode == ElectionOpenness::Permissionless,
Error::<T>::NotEnoughNonReservedValidators,
);

let member_set: BTreeSet<_> = reserved_validators
Expand Down